//! > Test lowering diagnostics propagation from item macro
//! > test_runner_name
test_function_lowering
//! > cairo_code
macro generate_unreachable {
() => {
fn unreachable_code() {
return ();
let _x = 5;
}
};
}
generate_unreachable!();
#[target_function]
fn foo() {}
//! > semantic_diagnostics
//! > lowering_diagnostics
warning[E3000]: Unreachable code
--> lib.cairo:9:1
generate_unreachable!();
^^^^^^^^^^^^^^^^^^^^^^^^
//! > lowering_flat
Parameters:
blk0 (root):
Statements:
End:
Return()
//! > lowering
fn unreachable_code() {
return ();
let x = 5;
}
//! > ==========================================================================
//! > Test loop inside an inline macro argument.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > cairo_code
#[target_function]
fn foo() -> Array<felt252> {
array![{
let mut i: felt252 = 0;
while i != 2 {
i = i + 1;
}
i
}]
}
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: core::RangeCheck, v1: core::gas::GasBuiltin
blk0 (root):
Statements:
(v2: core::RangeCheck, v3: core::gas::GasBuiltin, v4: core::panics::PanicResult::<(core::felt252, ())>) <- test::foo::{array_inline_macro@52}::{loop#0}{0, }(v0, v1)
End:
Match(match_enum(v4) {
PanicResult::Ok(v5) => blk1,
PanicResult::Err(v6) => blk2,
})
blk1:
Statements:
(v7: core::gas::GasBuiltin) <- core::gas::redeposit_gas(v3)
(v8: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
(v9: core::felt252, v10: ()) <- struct_destructure(v5)
(v11: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v8, v9)
(v12: (core::array::Array::<core::felt252>,)) <- struct_construct(v11)
(v13: core::panics::PanicResult::<(core::array::Array::<core::felt252>,)>) <- PanicResult::Ok(v12)
End:
Return(v2, v7, v13)
blk2:
Statements:
(v14: core::panics::PanicResult::<(core::array::Array::<core::felt252>,)>) <- PanicResult::Err(v6)
End:
Return(v2, v3, v14)