Add and adapt tests
This commit is contained in:
parent
1598aa4f83
commit
8f63b6a745
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
25
tests/mir-opt/c_unwind_terminate.rs
Normal file
25
tests/mir-opt/c_unwind_terminate.rs
Normal 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() {}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user