]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/abi/segfault-no-out-of-stack.rs
3 #![allow(unused_imports)]
4 // ignore-emscripten can't run commands
5 // ignore-sgx no processes
6 // ignore-fuchsia must translate zircon signal to SIGSEGV/SIGBUS, FIXME (#58590)
7 #![feature(rustc_private)]
12 use std
::process
::{Command, ExitStatus}
;
14 #[link(name = "rust_test_helpers", kind = "static")]
16 fn rust_get_null_ptr() -> *mut ::libc
::c_char
;
20 fn check_status(status
: std
::process
::ExitStatus
) {
22 use std
::os
::unix
::process
::ExitStatusExt
;
24 assert
!(status
.signal() == Some(libc
::SIGSEGV
) || status
.signal() == Some(libc
::SIGBUS
));
28 fn check_status(status
: std
::process
::ExitStatus
) {
29 assert
!(!status
.success());
33 let args
: Vec
<String
> = env
::args().collect();
34 if args
.len() > 1 && args
[1] == "segfault" {
36 *rust_get_null_ptr() = 1;
37 }; // trigger a segfault
39 let segfault
= Command
::new(&args
[0]).arg("segfault").output().unwrap();
40 let stderr
= String
::from_utf8_lossy(&segfault
.stderr
);
41 let stdout
= String
::from_utf8_lossy(&segfault
.stdout
);
42 println
!("stdout: {}", stdout
);
43 println
!("stderr: {}", stderr
);
44 println
!("status: {}", segfault
.status
);
45 check_status(segfault
.status
);
46 assert
!(!stderr
.contains("has overflowed its stack"));