| //@ add-minicore |
| //@ revisions: all strong none safestack safestack_strong safestack_all |
| //@ assembly-output: emit-asm |
| //@ only-x86_64-unknown-linux-gnu |
| //@ [all] compile-flags: -Z stack-protector=all |
| //@ [strong] compile-flags: -Z stack-protector=strong |
| //@ [none] compile-flags: -Z stack-protector=none |
| //@ [safestack] compile-flags: -Z stack-protector=none -Z sanitizer=safestack |
| //@ [safestack_strong] compile-flags: -Z stack-protector=strong -Z sanitizer=safestack |
| //@ [safestack_all] compile-flags: -Z stack-protector=all -Z sanitizer=safestack |
| //@ compile-flags: -C opt-level=2 -Z merge-functions=disabled --target x86_64-unknown-linux-gnu |
| //@ needs-llvm-components: x86 |
| |
| #![feature(unsized_fn_params)] |
| #![crate_type = "lib"] |
| #![feature(no_core)] |
| #![no_core] |
| #![no_std] |
| |
| extern crate minicore; |
| use minicore::*; |
| |
| extern "C" { |
| fn test4spss(p: *mut u8); |
| } |
| |
| // CHECK-LABEL: test1{{:|\[}} |
| #[no_mangle] |
| pub unsafe fn test1(x: *mut u8) -> u8 { |
| let mut buf: [u8; 64] = [0; 64]; |
| |
| let p = &mut buf as *mut [u8; 64] as *mut u8; |
| |
| *p = 42; |
| |
| test4spss(p); |
| |
| *x = *p; |
| |
| *p |
| |
| // none-NOT: __stack_chk_fail |
| // strong: __stack_chk_fail |
| // all: __stack_chk_fail |
| |
| // safestack: __safestack_unsafe_stack_ptr |
| // safestack-NOT: __stack_chk_fail |
| |
| // safestack_strong: __safestack_unsafe_stack_ptr |
| // safestack_strong: __stack_chk_fail |
| |
| // safestack_all: __safestack_unsafe_stack_ptr |
| // safestack_all: __stack_chk_fail |
| } |