]> git.proxmox.com Git - rustc.git/blame - src/test/run-pass/out-of-stack-new-thread-no-split.rs
Imported Upstream version 1.0.0~beta
[rustc.git] / src / test / run-pass / out-of-stack-new-thread-no-split.rs
CommitLineData
1a4d82fc
JJ
1// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
2// file at the top-level directory of this distribution and at
3// http://rust-lang.org/COPYRIGHT.
4//
5// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8// option. This file may not be copied, modified, or distributed
9// except according to those terms.
10
11//ignore-android
12//ignore-freebsd
13//ignore-ios
14//ignore-dragonfly
c34b1796 15//ignore-bitrig
1a4d82fc 16
c34b1796 17#![feature(asm, old_io, std_misc)]
1a4d82fc 18
85aaf69f
SL
19use std::old_io::process::Command;
20use std::env;
c34b1796 21use std::thread;
1a4d82fc
JJ
22
23// lifted from the test module
24// Inlining to avoid llvm turning the recursive functions into tail calls,
25// which doesn't consume stack.
26#[inline(always)]
27#[no_stack_check]
28pub fn black_box<T>(dummy: T) { unsafe { asm!("" : : "r"(&dummy)) } }
29
30#[no_stack_check]
31fn recurse() {
85aaf69f 32 let buf = [0; 10];
1a4d82fc
JJ
33 black_box(buf);
34 recurse();
35}
36
37fn main() {
85aaf69f
SL
38 let args: Vec<String> = env::args().collect();
39 if args.len() > 1 && args[1] == "recurse" {
c34b1796 40 let _t = thread::scoped(recurse);
1a4d82fc 41 } else {
85aaf69f 42 let recurse = Command::new(&args[0]).arg("recurse").output().unwrap();
1a4d82fc 43 assert!(!recurse.status.success());
85aaf69f 44 let error = String::from_utf8_lossy(&recurse.error);
1a4d82fc
JJ
45 println!("wut");
46 println!("`{}`", error);
85aaf69f 47 assert!(error.contains("has overflowed its stack"));
1a4d82fc
JJ
48 }
49}