//@revisions: noopt opt //@ build-fail //@[noopt] compile-flags: -Copt-level=0 //@[opt] compile-flags: -O //! Make sure we error on erroneous consts even if they get promoted. struct Fail(T); impl Fail { const C: () = panic!(); //~ERROR evaluation of `Fail::::C` failed //[opt]~^ ERROR evaluation of `Fail::::C` failed // (Not sure why optimizations lead to this being emitted twice, but as long as compilation // fails either way it's fine.) } #[inline(never)] fn f() { if false { // If promotion moved `C` from our required_consts to its own, without adding itself to // our required_consts, then we'd miss the const-eval failure here. let _val = &Fail::::C; } } fn main() { f::(); }