Add and adapt tests

This commit is contained in:
Gary Guo 2024-08-28 18:00:21 +01:00
parent 1598aa4f83
commit 8f63b6a745
6 changed files with 80 additions and 3 deletions

View File

@ -7,7 +7,7 @@ fn main() -> () {
bb0: {
StorageLive(_1);
_1 = const ();
asm!("", options(MAY_UNWIND)) -> [return: bb1, unwind terminate(abi)];
asm!("", options(MAY_UNWIND)) -> [return: bb1, unwind: bb2];
}
bb1: {
@ -15,4 +15,8 @@ fn main() -> () {
_0 = const ();
return;
}
bb2 (cleanup): {
terminate(abi);
}
}

View File

@ -10,7 +10,9 @@
fn main() {
// CHECK-LABEL: fn main(
// CHECK: asm!(
// CHECK-SAME: unwind terminate(abi)
// CHECK-SAME: unwind: [[unwind:bb.*]]]
// CHECK: [[unwind]] (cleanup)
// CHECK-NEXT: terminate(abi)
unsafe {
std::arch::asm!("", options(may_unwind));
}

View File

@ -0,0 +1,25 @@
//@ needs-unwind
struct Noise;
impl Drop for Noise {
fn drop(&mut self) {
eprintln!("Noisy Drop");
}
}
fn panic() {
panic!();
}
// EMIT_MIR c_unwind_terminate.test.AbortUnwindingCalls.after.mir
extern "C" fn test() {
// CHECK-LABEL: fn test(
// CHECK: drop
// CHECK-SAME: unwind: [[unwind:bb.*]]]
// CHECK: [[unwind]] (cleanup)
// CHECK-NEXT: terminate(abi)
let _val = Noise;
panic();
}
fn main() {}

View File

@ -0,0 +1,36 @@
// MIR for `test` after AbortUnwindingCalls
fn test() -> () {
let mut _0: ();
let _1: Noise;
let _2: ();
scope 1 {
debug _val => _1;
}
bb0: {
StorageLive(_1);
_1 = Noise;
StorageLive(_2);
_2 = panic() -> [return: bb1, unwind: bb3];
}
bb1: {
StorageDead(_2);
_0 = const ();
drop(_1) -> [return: bb2, unwind: bb4];
}
bb2: {
StorageDead(_1);
return;
}
bb3 (cleanup): {
drop(_1) -> [return: bb4, unwind terminate(cleanup)];
}
bb4 (cleanup): {
terminate(abi);
}
}

View File

@ -2,13 +2,22 @@
//@ exec-env:RUST_BACKTRACE=0
//@ check-run-results
//@ error-pattern: panic in a function that cannot unwind
//@ error-pattern: Noisy Drop
//@ normalize-stderr-test: "\n +[0-9]+:[^\n]+" -> ""
//@ normalize-stderr-test: "\n +at [^\n]+" -> ""
//@ normalize-stderr-test: "(core/src/panicking\.rs):[0-9]+:[0-9]+" -> "$1:$$LINE:$$COL"
//@ needs-unwind
//@ ignore-emscripten "RuntimeError" junk in output
struct Noise;
impl Drop for Noise {
fn drop(&mut self) {
eprintln!("Noisy Drop");
}
}
extern "C" fn panic_in_ffi() {
let _val = Noise;
panic!("Test");
}

View File

@ -1,6 +1,7 @@
thread 'main' panicked at $DIR/panic-in-ffi.rs:12:5:
thread 'main' panicked at $DIR/panic-in-ffi.rs:21:5:
Test
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Noisy Drop
thread 'main' panicked at core/src/panicking.rs:$LINE:$COL:
panic in a function that cannot unwind
stack backtrace: