]> git.proxmox.com Git - rustc.git/blame - src/test/ui/abi/segfault-no-out-of-stack.rs
New upstream version 1.50.0+dfsg1
[rustc.git] / src / test / ui / abi / segfault-no-out-of-stack.rs
CommitLineData
416331ca
XL
1// run-pass
2
0bf4aa26 3#![allow(unused_imports)]
5bcae85e 4// ignore-emscripten can't run commands
48663c56 5// ignore-sgx no processes
5bcae85e 6
0731742a 7#![feature(rustc_private)]
c34b1796 8
e9174d1e
SL
9extern crate libc;
10
11use std::process::{Command, ExitStatus};
85aaf69f 12use std::env;
1a4d82fc 13
476ff2be 14#[link(name = "rust_test_helpers", kind = "static")]
7453a54e
SL
15extern {
16 fn rust_get_null_ptr() -> *mut ::libc::c_char;
17}
18
19#[cfg(unix)]
20fn check_status(status: std::process::ExitStatus)
21{
22 use libc;
23 use std::os::unix::process::ExitStatusExt;
24
25 assert!(status.signal() == Some(libc::SIGSEGV)
26 || status.signal() == Some(libc::SIGBUS));
27}
28
29#[cfg(not(unix))]
30fn check_status(status: std::process::ExitStatus)
31{
32 assert!(!status.success());
33}
34
1a4d82fc 35fn main() {
85aaf69f
SL
36 let args: Vec<String> = env::args().collect();
37 if args.len() > 1 && args[1] == "segfault" {
7453a54e 38 unsafe { *rust_get_null_ptr() = 1; }; // trigger a segfault
1a4d82fc 39 } else {
85aaf69f 40 let segfault = Command::new(&args[0]).arg("segfault").output().unwrap();
e9174d1e
SL
41 let stderr = String::from_utf8_lossy(&segfault.stderr);
42 let stdout = String::from_utf8_lossy(&segfault.stdout);
43 println!("stdout: {}", stdout);
44 println!("stderr: {}", stderr);
45 println!("status: {}", segfault.status);
7453a54e 46 check_status(segfault.status);
e9174d1e 47 assert!(!stderr.contains("has overflowed its stack"));
1a4d82fc
JJ
48 }
49}