diff --git a/src/test/codegen/unwind-landingpad-inline.rs b/src/test/codegen/unwind-landingpad-inline.rs index 4f13b60b1f9..ce78d075dd0 100644 --- a/src/test/codegen/unwind-landingpad-inline.rs +++ b/src/test/codegen/unwind-landingpad-inline.rs @@ -3,11 +3,12 @@ #![crate_type = "lib"] // This test checks that we can inline drop_in_place in -// unwind landing pads. Without this, the box pointers escape, -// and LLVM will not optimize out the pointer comparison. -// See https://github.com/rust-lang/rust/issues/46515 +// unwind landing pads. -// Everything should be optimized out. +// Without inlining, the box pointers escape via the call to drop_in_place, +// and LLVM will not optimize out the pointer comparison. +// With inlining, everything should be optimized out. +// See https://github.com/rust-lang/rust/issues/46515 // CHECK-LABEL: @check_no_escape_in_landingpad // CHECK: start: // CHECK-NEXT: ret void @@ -20,3 +21,17 @@ pub fn check_no_escape_in_landingpad(f: fn()) { f(); } } + +// Without inlining, the compiler can't tell that +// dropping an empty string (in a landing pad) does nothing. +// With inlining, the landing pad should be optimized out. +// See https://github.com/rust-lang/rust/issues/87055 +// CHECK-LABEL: @check_eliminate_noop_drop +// CHECK: start: +// CHECK-NEXT: call void %g() +// CHECK-NEXT: ret void +#[no_mangle] +pub fn check_eliminate_noop_drop(g: fn()) { + let _var = String::new(); + g(); +}