diff options
Diffstat (limited to 'src/test/codegen')
| -rw-r--r-- | src/test/codegen/unwind-landingpad-cold.rs | 14 | ||||
| -rw-r--r-- | src/test/codegen/unwind-landingpad-inline.rs | 22 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/test/codegen/unwind-landingpad-cold.rs b/src/test/codegen/unwind-landingpad-cold.rs new file mode 100644 index 00000000000..0bf2941374a --- /dev/null +++ b/src/test/codegen/unwind-landingpad-cold.rs @@ -0,0 +1,14 @@ +// compile-flags: -Cno-prepopulate-passes +#![crate_type = "lib"] + +// This test checks that drop calls in unwind landing pads +// get the `cold` attribute. + +// CHECK-LABEL: @check_cold +// CHECK: call void {{.+}}drop_in_place{{.+}} [[ATTRIBUTES:#[0-9]+]] +// CHECK: attributes [[ATTRIBUTES]] = { cold } +#[no_mangle] +pub fn check_cold(f: fn(), x: Box<u32>) { + // this may unwind + f(); +} diff --git a/src/test/codegen/unwind-landingpad-inline.rs b/src/test/codegen/unwind-landingpad-inline.rs new file mode 100644 index 00000000000..d641c908ea9 --- /dev/null +++ b/src/test/codegen/unwind-landingpad-inline.rs @@ -0,0 +1,22 @@ +// no-system-llvm: needs patch for Rust alloc/dealloc functions +// compile-flags: -Copt-level=3 +#![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 + +// Everything should be optimized out. +// CHECK-LABEL: @check_no_escape_in_landingpad +// CHECK: start: +// CHECK-NEXT: ret void +#[no_mangle] +pub fn check_no_escape_in_landingpad(f: fn()) { + let x = &*Box::new(0); + let y = &*Box::new(0); + + if x as *const _ == y as *const _ { + f(); + } +} |
