| //@ test-mir-pass: Inline |
| //@ revisions: PRESERVE FULL NONE LIMITED |
| //@ [PRESERVE]compile-flags: -O -C debuginfo=0 -Zinline-mir-preserve-debug |
| //@ [FULL]compile-flags: -O -C debuginfo=2 |
| //@ [NONE]compile-flags: -O -C debuginfo=0 |
| //@ [LIMITED]compile-flags: -O -C debuginfo=1 |
| |
| #[inline(always)] |
| fn inline_fn1(arg1: i32) -> i32 { |
| let local1 = arg1 + 1; |
| let _local2 = 10; |
| arg1 + local1 |
| } |
| |
| #[inline(always)] |
| fn inline_fn2(binding: i32) -> i32 { |
| { |
| let binding = inline_fn1(binding); |
| binding |
| } |
| } |
| |
| #[inline(never)] |
| fn test() -> i32 { |
| // CHECK-LABEL: fn test |
| inline_fn2(1) |
| // CHECK-LABEL: (inlined inline_fn2) |
| |
| // PRESERVE: debug binding => |
| // FULL: debug binding => |
| // NONE-NOT: debug binding => |
| // LIMITED-NOT: debug binding => |
| |
| // CHECK-LABEL: (inlined inline_fn1) |
| |
| // PRESERVE: debug arg1 => |
| // FULL: debug arg1 => |
| // NONE-NOT: debug arg1 => |
| // LIMITED-NOT: debug arg1 => |
| |
| // PRESERVE: debug local1 => |
| // FULL: debug local1 => |
| // NONE-NOT: debug local1 => |
| // LIMITED-NOT: debug local1 => |
| |
| // PRESERVE: debug _local2 => |
| // FULL: debug _local2 => |
| // NONE-NOT: debug _local2 => |
| // LIMITED-NOT: debug _local2 => |
| } |