// Test for inlining with an indirect destination place. // // unit-test: Inline // edition: 2021 // needs-unwind #![crate_type = "lib"] #![feature(custom_mir, core_intrinsics)] use core::intrinsics::mir::*; #[custom_mir(dialect = "runtime", phase = "initial")] // CHECK-LABEL: fn f( // CHECK: bb1: { // CHECK-NEXT: StorageLive([[A:.*]]); // CHECK-NEXT: [[A]] = &mut (*_1); // CHECK-NEXT: StorageLive([[B:.*]]); // CHECK-NEXT: [[B]] = const 42_u8; // CHECK-NEXT: (*[[A]]) = move [[B]]; // CHECK-NEXT: StorageDead([[B]]); // CHECK-NEXT: StorageDead([[A]]); // CHECK-NEXT: goto -> bb1; // CHECK-NEXT: } pub fn f(a: *mut u8) { mir! { { Goto(bb1) } bb1 = { Call(*a = g(), ReturnTo(bb1), UnwindUnreachable()) } } } #[custom_mir(dialect = "runtime", phase = "initial")] #[inline(always)] fn g() -> u8 { mir! { { RET = 42; Return() } } }