diff options
| author | Ralf Jung <post@ralfj.de> | 2023-10-05 10:02:07 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2023-10-08 17:43:46 +0200 |
| commit | 5e1b0cbe5d0c86601b70bd8cc883227421c40cac (patch) | |
| tree | 00db7988ea773f0e778df168047b45313bd231f3 | |
| parent | 5236c8e1fa25c45f11f02ae72fc27f64d86ba606 (diff) | |
| download | rust-5e1b0cbe5d0c86601b70bd8cc883227421c40cac.tar.gz rust-5e1b0cbe5d0c86601b70bd8cc883227421c40cac.zip | |
add test for const-eval error in dead code during monomorphization
| -rw-r--r-- | tests/ui/consts/const-eval/unused-broken-const-late.rs | 20 | ||||
| -rw-r--r-- | tests/ui/consts/const-eval/unused-broken-const-late.stderr | 11 |
2 files changed, 31 insertions, 0 deletions
diff --git a/tests/ui/consts/const-eval/unused-broken-const-late.rs b/tests/ui/consts/const-eval/unused-broken-const-late.rs new file mode 100644 index 00000000000..a6528ec5fd6 --- /dev/null +++ b/tests/ui/consts/const-eval/unused-broken-const-late.rs @@ -0,0 +1,20 @@ +// build-fail +// compile-flags: -O +//! Make sure we detect erroneous constants post-monomorphization even when they are unused. This is +//! crucial, people rely on it for soundness. (https://github.com/rust-lang/rust/issues/112090) + +struct PrintName<T>(T); +impl<T> PrintName<T> { + const VOID: () = panic!(); //~ERROR evaluation of `PrintName::<i32>::VOID` failed +} + +fn no_codegen<T>() { + // Any function that is called is guaranteed to have all consts that syntactically + // appear in its body evaluated, even if they only appear in dead code. + if false { + let _ = PrintName::<T>::VOID; + } +} +pub fn main() { + no_codegen::<i32>(); +} diff --git a/tests/ui/consts/const-eval/unused-broken-const-late.stderr b/tests/ui/consts/const-eval/unused-broken-const-late.stderr new file mode 100644 index 00000000000..cdb70a69dfd --- /dev/null +++ b/tests/ui/consts/const-eval/unused-broken-const-late.stderr @@ -0,0 +1,11 @@ +error[E0080]: evaluation of `PrintName::<i32>::VOID` failed + --> $DIR/unused-broken-const-late.rs:8:22 + | +LL | const VOID: () = panic!(); + | ^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/unused-broken-const-late.rs:8:22 + | + = note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info) + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0080`. |
