Skip to content

Commit 87293cd

Browse files
authored
Rollup merge of #68291 - tmiasko:sanitizer-tests, r=nikomatsakis
Update sanitizer tests * Move tests from src/test/run-make-fulldeps to src/test/ui. * Fix memory sanitizer test to detect the intended issue rather than an unrelated one caused by the use of an uninstrumented std.
2 parents 2a1ab29 + ea64a33 commit 87293cd

File tree

13 files changed

+84
-75
lines changed

13 files changed

+84
-75
lines changed

src/test/run-make-fulldeps/sanitizer-address/Makefile

-30
This file was deleted.

src/test/run-make-fulldeps/sanitizer-address/overflow.rs

-4
This file was deleted.

src/test/run-make-fulldeps/sanitizer-invalid-target/Makefile

-5
This file was deleted.

src/test/run-make-fulldeps/sanitizer-invalid-target/hello.rs

-3
This file was deleted.

src/test/run-make-fulldeps/sanitizer-leak/Makefile

-7
This file was deleted.

src/test/run-make-fulldeps/sanitizer-memory/Makefile

-11
This file was deleted.

src/test/run-make-fulldeps/sanitizer-memory/maybeuninit.rs

-8
This file was deleted.

src/test/run-make-fulldeps/sanitizer-memory/uninit.rs

-7
This file was deleted.

src/test/ui/sanitizer-address.rs

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// needs-sanitizer-support
2+
// only-x86_64
3+
//
4+
// compile-flags: -Z sanitizer=address -O
5+
//
6+
// run-fail
7+
// error-pattern: AddressSanitizer: stack-buffer-overflow
8+
// error-pattern: 'xs' <== Memory access at offset
9+
10+
#![feature(test)]
11+
12+
use std::hint::black_box;
13+
use std::mem;
14+
15+
fn main() {
16+
let xs = [0, 1, 2, 3];
17+
// Avoid optimizing everything out.
18+
let xs = black_box(xs.as_ptr());
19+
let code = unsafe { *xs.offset(4) };
20+
std::process::exit(code);
21+
}

src/test/run-make-fulldeps/sanitizer-leak/leak.rs renamed to src/test/ui/sanitizer-leak.rs

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
// needs-sanitizer-support
2+
// only-x86_64
3+
//
4+
// compile-flags: -Z sanitizer=leak -O
5+
//
6+
// run-fail
7+
// error-pattern: LeakSanitizer: detected memory leaks
8+
19
#![feature(test)]
210

311
use std::hint::black_box;

src/test/ui/sanitizer-memory.rs

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// needs-sanitizer-support
2+
// only-linux
3+
// only-x86_64
4+
//
5+
// compile-flags: -Z sanitizer=memory -Zsanitizer-memory-track-origins -O
6+
//
7+
// run-fail
8+
// error-pattern: MemorySanitizer: use-of-uninitialized-value
9+
// error-pattern: Uninitialized value was created by an allocation
10+
// error-pattern: in the stack frame of function 'random'
11+
//
12+
// This test case intentionally limits the usage of the std,
13+
// since it will be linked with an uninstrumented version of it.
14+
15+
#![feature(core_intrinsics)]
16+
#![feature(start)]
17+
#![feature(test)]
18+
19+
use std::hint::black_box;
20+
use std::mem::MaybeUninit;
21+
22+
#[inline(never)]
23+
#[no_mangle]
24+
fn random() -> [isize; 32] {
25+
let r = unsafe { MaybeUninit::uninit().assume_init() };
26+
// Avoid optimizing everything out.
27+
black_box(r)
28+
}
29+
30+
#[inline(never)]
31+
#[no_mangle]
32+
fn xor(a: &[isize]) -> isize {
33+
let mut s = 0;
34+
for i in 0..a.len() {
35+
s = s ^ a[i];
36+
}
37+
s
38+
}
39+
40+
#[start]
41+
fn main(_: isize, _: *const *const u8) -> isize {
42+
let r = random();
43+
xor(&r)
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// ignore-tidy-linelength
2+
// compile-flags: -Z sanitizer=leak --target i686-unknown-linux-gnu
3+
// error-pattern: error: LeakSanitizer only works with the `x86_64-unknown-linux-gnu` or `x86_64-apple-darwin` target
4+
5+
#![feature(no_core)]
6+
#![no_core]
7+
#![no_main]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
error: LeakSanitizer only works with the `x86_64-unknown-linux-gnu` or `x86_64-apple-darwin` target
2+
3+
error: aborting due to previous error
4+

0 commit comments

Comments
 (0)