Skip to content

Commit 4417968

Browse files
author
Keegan McAllister
committed
Add tests for no-stack-check attr and codegen option
1 parent d7fff9f commit 4417968

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-include ../tools.mk
2+
3+
all:
4+
$(RUSTC) -O --emit asm attr.rs
5+
! grep -q morestack $(TMPDIR)/attr.s
6+
$(RUSTC) -O --emit asm flag.rs
7+
grep -q morestack $(TMPDIR)/flag.s
8+
$(RUSTC) -O --emit asm -C no-stack-check flag.rs
9+
! grep -q morestack $(TMPDIR)/flag.s
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright 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+
#![crate_type="lib"]
12+
13+
extern {
14+
// Prevents optimizing away the stack buffer.
15+
// This symbol is undefined, but the code doesn't need to pass
16+
// the linker.
17+
fn black_box(ptr: *const u8);
18+
}
19+
20+
#[no_stack_check]
21+
pub unsafe fn foo() {
22+
// Make sure we use the stack
23+
let x: [u8, ..50] = [0, ..50];
24+
black_box(x.as_ptr());
25+
}
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright 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+
#![crate_type="lib"]
12+
13+
extern {
14+
// Prevents optimizing away the stack buffer.
15+
// This symbol is undefined, but the code doesn't need to pass
16+
// the linker.
17+
fn black_box(ptr: *const u8);
18+
}
19+
20+
pub unsafe fn foo() {
21+
// Make sure we use the stack
22+
let x: [u8, ..50] = [0, ..50];
23+
black_box(x.as_ptr());
24+
}

0 commit comments

Comments
 (0)