diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2023-10-10 18:44:45 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-10 18:44:45 +0200 |
| commit | bbaf6bd13632d553255f077a33035f847ead386a (patch) | |
| tree | f676a92bc611bc79bdd4730cbca0e0884c150911 | |
| parent | 0e5e04b89aed7c692971f7e15bbff095f1eec5c7 (diff) | |
| parent | 5e1b0cbe5d0c86601b70bd8cc883227421c40cac (diff) | |
| download | rust-bbaf6bd13632d553255f077a33035f847ead386a.tar.gz rust-bbaf6bd13632d553255f077a33035f847ead386a.zip | |
Rollup merge of #116444 - RalfJung:broken-unused-const, r=oli-obk
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`. |
