| //@ run-pass | |
| //@ needs-subprocess | |
| use std::alloc::{Layout, handle_alloc_error}; | |
| use std::process::Command; | |
| use std::{env, str}; | |
| fn main() { | |
| if env::args().len() > 1 { | |
| handle_alloc_error(Layout::new::<[u8; 42]>()) | |
| } | |
| let me = env::current_exe().unwrap(); | |
| let output = Command::new(&me).env("RUST_BACKTRACE", "0").arg("next").output().unwrap(); | |
| assert!(!output.status.success(), "{:?} is a success", output.status); | |
| let mut stderr = str::from_utf8(&output.stderr).unwrap(); | |
| // 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. | |
| stderr = stderr | |
| .strip_suffix("qemu: uncaught target signal 6 (Aborted) - core dumped\n") | |
| .unwrap_or(stderr); | |
| assert_eq!( | |
| stderr, | |
| "memory allocation of 42 bytes failed\n\ | |
| note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n" | |
| ); | |
| } |