From 64da730a41ac7df5fa8e03a82beb50abcdf5123e Mon Sep 17 00:00:00 2001 From: Erik Desjardins Date: Thu, 30 Dec 2021 01:03:17 -0500 Subject: add test for noop drop in landing pad --- src/test/codegen/unwind-landingpad-inline.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/test/codegen') 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, +// unwind landing pads. + +// 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 - -// Everything should be optimized out. // 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(); +} -- cgit 1.4.1-3-g733a5