From 7c669562b19cb451639b2a7329f4c984170d73be Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sat, 15 Apr 2023 13:24:28 +0000 Subject: [PATCH] Add miri tests. --- .../dangling_pointer_deref_match_never.rs | 17 +++++++++++++++++ .../dangling_pointer_deref_match_never.stderr | 15 +++++++++++++++ .../dangling_pointer_deref_match_underscore.rs | 14 ++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/tools/miri/tests/fail/dangling_pointers/dangling_pointer_deref_match_never.rs create mode 100644 src/tools/miri/tests/fail/dangling_pointers/dangling_pointer_deref_match_never.stderr create mode 100644 src/tools/miri/tests/pass/dangling_pointer_deref_match_underscore.rs diff --git a/src/tools/miri/tests/fail/dangling_pointers/dangling_pointer_deref_match_never.rs b/src/tools/miri/tests/fail/dangling_pointers/dangling_pointer_deref_match_never.rs new file mode 100644 index 00000000000..723c3f1e158 --- /dev/null +++ b/src/tools/miri/tests/fail/dangling_pointers/dangling_pointer_deref_match_never.rs @@ -0,0 +1,17 @@ +// Make sure we find these even with many checks disabled. +//@compile-flags: -Zmiri-disable-alignment-check -Zmiri-disable-stacked-borrows -Zmiri-disable-validation + +#![allow(unreachable_code)] +#![feature(never_type)] + +fn main() { + let p = { + let b = Box::new(42); + &*b as *const i32 as *const ! + }; + unsafe { + match *p {} //~ ERROR: entering unreachable code + } + panic!("this should never print"); +} + diff --git a/src/tools/miri/tests/fail/dangling_pointers/dangling_pointer_deref_match_never.stderr b/src/tools/miri/tests/fail/dangling_pointers/dangling_pointer_deref_match_never.stderr new file mode 100644 index 00000000000..2ca6fd028b0 --- /dev/null +++ b/src/tools/miri/tests/fail/dangling_pointers/dangling_pointer_deref_match_never.stderr @@ -0,0 +1,15 @@ +error: Undefined Behavior: entering unreachable code + --> $DIR/dangling_pointer_deref_match_never.rs:LL:CC + | +LL | match *p {} + | ^^ entering unreachable code + | + = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior + = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information + = note: BACKTRACE: + = note: inside `main` at $DIR/dangling_pointer_deref_match_never.rs:LL:CC + +note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace + +error: aborting due to previous error + diff --git a/src/tools/miri/tests/pass/dangling_pointer_deref_match_underscore.rs b/src/tools/miri/tests/pass/dangling_pointer_deref_match_underscore.rs new file mode 100644 index 00000000000..c3cff1f4280 --- /dev/null +++ b/src/tools/miri/tests/pass/dangling_pointer_deref_match_underscore.rs @@ -0,0 +1,14 @@ +// A `_` binding in a match is a nop, so we do not detect that the pointer is dangling. +//@compile-flags: -Zmiri-disable-alignment-check -Zmiri-disable-stacked-borrows -Zmiri-disable-validation + +fn main() { + let p = { + let b = Box::new(42); + &*b as *const i32 + }; + unsafe { + match *p { + _ => {} + } + } +}