mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-03 22:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
//@ run-pass
 | 
						|
//@ needs-unwind
 | 
						|
//@ ignore-emscripten no processes
 | 
						|
//@ ignore-sgx no processes
 | 
						|
 | 
						|
use std::env;
 | 
						|
use std::process::Command;
 | 
						|
 | 
						|
struct Bomb;
 | 
						|
 | 
						|
impl Drop for Bomb {
 | 
						|
    fn drop(&mut self) {
 | 
						|
        std::panic::panic_any(Bomb);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
fn main() {
 | 
						|
    let args = env::args().collect::<Vec<_>>();
 | 
						|
    let output = match &args[..] {
 | 
						|
        [me] => Command::new(&me).arg("plant the").output(),
 | 
						|
        [..] => std::panic::panic_any(Bomb),
 | 
						|
    }.expect("running the command should have succeeded");
 | 
						|
    println!("{:#?}", output);
 | 
						|
    let stderr = std::str::from_utf8(&output.stderr);
 | 
						|
    assert!(stderr
 | 
						|
        .map(|v| {
 | 
						|
            // When running inside QEMU user-mode emulation, there will be an extra message printed
 | 
						|
            // by QEMU in the stderr whenever a core dump happens. Remove it before the check.
 | 
						|
            v.strip_suffix("qemu: uncaught target signal 6 (Aborted) - core dumped\n").unwrap_or(v)
 | 
						|
        })
 | 
						|
        .map(|v| { v.ends_with("fatal runtime error: drop of the panic payload panicked\n") })
 | 
						|
        .unwrap_or(false));
 | 
						|
}
 |