cairo-lang-semantic 2.18.0

Cairo semantic model.
Documentation
//! > Inlining attribute diagnostics

//! > test_runner_name
test_expr_diagnostics

//! > expr_code
{}

//! > module_code
#[inline(always)]
#[inline(never)]
#[inline(always, never)]
#[inline(1 + 1)]
#[inline]
fn foo() {}

//! > function_body

//! > expected_diagnostics
error[E2141]: Redundant `inline` attribute.
 --> lib.cairo:2:3
#[inline(never)]
  ^^^^^^

error[E2140]: Unsupported `inline` arguments.
 --> lib.cairo:3:9
#[inline(always, never)]
        ^^^^^^^^^^^^^^^

error[E2141]: Redundant `inline` attribute.
 --> lib.cairo:3:3
#[inline(always, never)]
  ^^^^^^

error[E2140]: Unsupported `inline` arguments.
 --> lib.cairo:4:9
#[inline(1 + 1)]
        ^^^^^^^

error[E2141]: Redundant `inline` attribute.
 --> lib.cairo:4:3
#[inline(1 + 1)]
  ^^^^^^

error[E2141]: Redundant `inline` attribute.
 --> lib.cairo:5:3
#[inline]
  ^^^^^^

//! > ==========================================================================

//! > Test that #[inline(always)] is not allowed for a free function with impl generic parameters.

//! > test_runner_name
test_expr_diagnostics

//! > expr_code
{}

//! > module_code
#[inline(always)]
fn foo<impl x: MyTrait>() {}

trait MyTrait;

//! > function_body

//! > expected_diagnostics
error[E2143]: `#[inline(always)]` is not allowed for functions with impl generic parameters.
 --> lib.cairo:1:1
#[inline(always)]
^^^^^^^^^^^^^^^^^

//! > ==========================================================================

//! > Test that #[inline(always)] is not allowed for an impl function with impl generic parameters.

//! > test_runner_name
test_expr_diagnostics

//! > expr_code
{}

//! > module_code
trait MyTrait {
    fn foo<impl y: MyTrait2>();
}
impl MyImpl of MyTrait {
    #[inline(always)]
    fn foo<impl y: MyTrait2>() {}
}
trait MyTrait2;

//! > function_body

//! > expected_diagnostics
error[E2143]: `#[inline(always)]` is not allowed for functions with impl generic parameters.
 --> lib.cairo:5:5
    #[inline(always)]
    ^^^^^^^^^^^^^^^^^

//! > ==========================================================================

//! > Test that 'inline' attribute is not allowed for extern functions.

//! > test_runner_name
test_expr_diagnostics

//! > expr_code
{}

//! > module_code
#[inline(always)]
extern fn foo() nopanic;

#[inline(never)]
extern fn bar() nopanic;

//! > function_body

//! > expected_diagnostics
error[E2142]: `inline` attribute is not allowed for extern functions.
 --> lib.cairo:1:1
#[inline(always)]
^^^^^^^^^^^^^^^^^

error[E2142]: `inline` attribute is not allowed for extern functions.
 --> lib.cairo:4:1
#[inline(never)]
^^^^^^^^^^^^^^^^