diff options
| author | Ralf Jung <post@ralfj.de> | 2019-10-12 21:02:38 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2019-10-12 21:02:38 +0200 |
| commit | df9335120b2bc2ad4c5f619b3173f20958dcd406 (patch) | |
| tree | 2eb8812db863a3ba0734414e478daf35eda689f4 | |
| parent | a0106527c65310adb642ac4e407622a8eff3f364 (diff) | |
| download | rust-df9335120b2bc2ad4c5f619b3173f20958dcd406.tar.gz rust-df9335120b2bc2ad4c5f619b3173f20958dcd406.zip | |
test unwind(abort) with Rust ABI
| -rw-r--r-- | src/test/ui/panics/abort-on-panic.rs (renamed from src/test/ui/abi/abort-on-c-abi.rs) | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/test/ui/abi/abort-on-c-abi.rs b/src/test/ui/panics/abort-on-panic.rs index 2f08730ec61..c6e8dbf012c 100644 --- a/src/test/ui/abi/abort-on-c-abi.rs +++ b/src/test/ui/panics/abort-on-panic.rs @@ -14,11 +14,16 @@ use std::io::prelude::*; use std::io; use std::process::{Command, Stdio}; -#[unwind(aborts)] // FIXME(#58794) +#[unwind(aborts)] // FIXME(#58794) should work even without the attribute extern "C" fn panic_in_ffi() { panic!("Test"); } +#[unwind(aborts)] +extern "Rust" fn panic_in_rust_abi() { + panic!("TestRust"); +} + fn test() { let _ = panic::catch_unwind(|| { panic_in_ffi(); }); // The process should have aborted by now. @@ -26,15 +31,34 @@ fn test() { let _ = io::stdout().flush(); } +fn testrust() { + let _ = panic::catch_unwind(|| { panic_in_rust_abi(); }); + // The process should have aborted by now. + io::stdout().write(b"This should never be printed.\n"); + let _ = io::stdout().flush(); +} + fn main() { let args: Vec<String> = env::args().collect(); - if args.len() > 1 && args[1] == "test" { - return test(); + if args.len() > 1 { + // This is inside the self-executed command. + match &*args[1] { + "test" => return test(), + "testrust" => return testrust(), + _ => panic!("bad test"), + } } + // These end up calling the self-execution branches above. let mut p = Command::new(&args[0]) .stdout(Stdio::piped()) .stdin(Stdio::piped()) .arg("test").spawn().unwrap(); assert!(!p.wait().unwrap().success()); + + let mut p = Command::new(&args[0]) + .stdout(Stdio::piped()) + .stdin(Stdio::piped()) + .arg("testrust").spawn().unwrap(); + assert!(!p.wait().unwrap().success()); } |
