| // EMIT_MIR_FOR_EACH_PANIC_STRATEGY |
| //@ compile-flags: -O --crate-type lib |
| |
| // To avoid MIR blow-up, don't inline large callees into simple shim callers, |
| // but *do* inline other trivial things. |
| |
| extern "Rust" { |
| fn other_thing(x: i32); |
| } |
| |
| #[inline] |
| unsafe fn call_twice(x: i32) { |
| unsafe { |
| other_thing(x); |
| other_thing(x); |
| } |
| } |
| |
| // EMIT_MIR inline_more_in_non_inline.monomorphic_not_inline.Inline.after.mir |
| #[no_mangle] |
| pub unsafe fn monomorphic_not_inline(x: i32) { |
| // CHECK-LABEL: monomorphic_not_inline |
| // CHECK: other_thing |
| // CHECK: other_thing |
| unsafe { call_twice(x) }; |
| } |
| |
| // EMIT_MIR inline_more_in_non_inline.marked_inline_direct.Inline.after.mir |
| #[inline] |
| pub unsafe fn marked_inline_direct(x: i32) { |
| // CHECK-LABEL: marked_inline_direct |
| // CHECK-NOT: other_thing |
| // CHECK: call_twice |
| // CHECK-NOT: other_thing |
| unsafe { call_twice(x) }; |
| } |
| |
| // EMIT_MIR inline_more_in_non_inline.marked_inline_indirect.Inline.after.mir |
| #[inline] |
| pub unsafe fn marked_inline_indirect(x: i32) { |
| // CHECK-LABEL: marked_inline_indirect |
| // CHECK-NOT: other_thing |
| // CHECK: call_twice |
| // CHECK-NOT: other_thing |
| unsafe { marked_inline_direct(x) }; |
| } |