diff --git a/src/test/ui/consts/miri_unleashed/box.rs b/src/test/ui/consts/miri_unleashed/box.rs index 1b18470eded4..a8efe67c339b 100644 --- a/src/test/ui/consts/miri_unleashed/box.rs +++ b/src/test/ui/consts/miri_unleashed/box.rs @@ -1,5 +1,5 @@ // compile-flags: -Zunleash-the-miri-inside-of-you -#![feature(const_mut_refs, box_syntax)] +#![feature(box_syntax)] #![allow(const_err)] use std::mem::ManuallyDrop; @@ -11,4 +11,7 @@ static TEST_BAD: &mut i32 = { //~^ WARN skipping const check //~| ERROR could not evaluate static initializer //~| NOTE heap allocations + //~| WARN skipping const checks + //~| WARN skipping const checks + //~| WARN skipping const checks }; diff --git a/src/test/ui/consts/miri_unleashed/box.stderr b/src/test/ui/consts/miri_unleashed/box.stderr index d1b404ea737c..940dc1153d43 100644 --- a/src/test/ui/consts/miri_unleashed/box.stderr +++ b/src/test/ui/consts/miri_unleashed/box.stderr @@ -4,12 +4,30 @@ warning: skipping const checks LL | &mut *(box 0) | ^^^^^^^ +warning: skipping const checks + --> $DIR/box.rs:10:16 + | +LL | &mut *(box 0) + | ^ + +warning: skipping const checks + --> $DIR/box.rs:10:5 + | +LL | &mut *(box 0) + | ^^^^^^^^^^^^^ + +warning: skipping const checks + --> $DIR/box.rs:10:5 + | +LL | &mut *(box 0) + | ^^^^^^^^^^^^^ + error[E0080]: could not evaluate static initializer --> $DIR/box.rs:10:11 | LL | &mut *(box 0) | ^^^^^^^ "heap allocations via `box` keyword" needs an rfc before being allowed inside constants -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error; 4 warnings emitted For more information about this error, try `rustc --explain E0080`. diff --git a/src/test/ui/consts/miri_unleashed/const_refers_to_static.rs b/src/test/ui/consts/miri_unleashed/const_refers_to_static.rs index 6b205a2f66d9..1e19140bb90f 100644 --- a/src/test/ui/consts/miri_unleashed/const_refers_to_static.rs +++ b/src/test/ui/consts/miri_unleashed/const_refers_to_static.rs @@ -2,8 +2,6 @@ // compile-flags: -Zunleash-the-miri-inside-of-you #![allow(const_err)] -#![feature(const_raw_ptr_deref)] - use std::sync::atomic::AtomicUsize; use std::sync::atomic::Ordering; @@ -21,6 +19,7 @@ const READ_INTERIOR_MUT: usize = { static FOO: AtomicUsize = AtomicUsize::new(0); unsafe { *(&FOO as *const _ as *const usize) } //~^ WARN skipping const checks + //~| WARN skipping const checks }; static mut MUTABLE: u32 = 0; diff --git a/src/test/ui/consts/miri_unleashed/const_refers_to_static.stderr b/src/test/ui/consts/miri_unleashed/const_refers_to_static.stderr index acc3b637f58b..0097bf90803e 100644 --- a/src/test/ui/consts/miri_unleashed/const_refers_to_static.stderr +++ b/src/test/ui/consts/miri_unleashed/const_refers_to_static.stderr @@ -1,51 +1,57 @@ warning: skipping const checks - --> $DIR/const_refers_to_static.rs:15:5 + --> $DIR/const_refers_to_static.rs:13:5 | LL | FOO.fetch_add(1, Ordering::Relaxed) | ^^^ warning: skipping const checks - --> $DIR/const_refers_to_static.rs:15:5 + --> $DIR/const_refers_to_static.rs:13:5 | LL | FOO.fetch_add(1, Ordering::Relaxed) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: skipping const checks - --> $DIR/const_refers_to_static.rs:22:17 + --> $DIR/const_refers_to_static.rs:20:17 | LL | unsafe { *(&FOO as *const _ as *const usize) } | ^^^ warning: skipping const checks - --> $DIR/const_refers_to_static.rs:27:32 + --> $DIR/const_refers_to_static.rs:20:14 + | +LL | unsafe { *(&FOO as *const _ as *const usize) } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +warning: skipping const checks + --> $DIR/const_refers_to_static.rs:26:32 | LL | const READ_MUT: u32 = unsafe { MUTABLE }; | ^^^^^^^ warning: skipping const checks - --> $DIR/const_refers_to_static.rs:27:32 + --> $DIR/const_refers_to_static.rs:26:32 | LL | const READ_MUT: u32 = unsafe { MUTABLE }; | ^^^^^^^ error[E0080]: erroneous constant used - --> $DIR/const_refers_to_static.rs:32:5 + --> $DIR/const_refers_to_static.rs:31:5 | LL | MUTATE_INTERIOR_MUT; | ^^^^^^^^^^^^^^^^^^^ referenced constant has errors error[E0080]: erroneous constant used - --> $DIR/const_refers_to_static.rs:34:5 + --> $DIR/const_refers_to_static.rs:33:5 | LL | READ_INTERIOR_MUT; | ^^^^^^^^^^^^^^^^^ referenced constant has errors error[E0080]: erroneous constant used - --> $DIR/const_refers_to_static.rs:36:5 + --> $DIR/const_refers_to_static.rs:35:5 | LL | READ_MUT; | ^^^^^^^^ referenced constant has errors -error: aborting due to 3 previous errors; 5 warnings emitted +error: aborting due to 3 previous errors; 6 warnings emitted For more information about this error, try `rustc --explain E0080`. diff --git a/src/test/ui/consts/miri_unleashed/const_refers_to_static2.rs b/src/test/ui/consts/miri_unleashed/const_refers_to_static2.rs index 553d90f1891c..1cc8166ee20b 100644 --- a/src/test/ui/consts/miri_unleashed/const_refers_to_static2.rs +++ b/src/test/ui/consts/miri_unleashed/const_refers_to_static2.rs @@ -1,8 +1,6 @@ // compile-flags: -Zunleash-the-miri-inside-of-you #![allow(const_err)] -#![feature(const_raw_ptr_deref)] - use std::sync::atomic::AtomicUsize; use std::sync::atomic::Ordering; @@ -15,6 +13,7 @@ const REF_INTERIOR_MUT: &usize = { //~ ERROR undefined behavior to use this valu static FOO: AtomicUsize = AtomicUsize::new(0); unsafe { &*(&FOO as *const _ as *const usize) } //~^ WARN skipping const checks + //~| WARN skipping const checks }; // ok some day perhaps diff --git a/src/test/ui/consts/miri_unleashed/const_refers_to_static2.stderr b/src/test/ui/consts/miri_unleashed/const_refers_to_static2.stderr index 33f4a42605cc..8b1f0d89dfc4 100644 --- a/src/test/ui/consts/miri_unleashed/const_refers_to_static2.stderr +++ b/src/test/ui/consts/miri_unleashed/const_refers_to_static2.stderr @@ -1,23 +1,29 @@ warning: skipping const checks - --> $DIR/const_refers_to_static2.rs:16:18 + --> $DIR/const_refers_to_static2.rs:14:18 | LL | unsafe { &*(&FOO as *const _ as *const usize) } | ^^^ warning: skipping const checks - --> $DIR/const_refers_to_static2.rs:25:6 + --> $DIR/const_refers_to_static2.rs:14:14 + | +LL | unsafe { &*(&FOO as *const _ as *const usize) } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +warning: skipping const checks + --> $DIR/const_refers_to_static2.rs:24:6 | LL | &FOO | ^^^ error[E0080]: it is undefined behavior to use this value - --> $DIR/const_refers_to_static2.rs:12:1 + --> $DIR/const_refers_to_static2.rs:10:1 | LL | / const REF_INTERIOR_MUT: &usize = { LL | | LL | | LL | | static FOO: AtomicUsize = AtomicUsize::new(0); -LL | | unsafe { &*(&FOO as *const _ as *const usize) } +... | LL | | LL | | }; | |__^ type validation failed: encountered a reference pointing to a static variable @@ -25,7 +31,7 @@ LL | | }; = note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior. error[E0080]: it is undefined behavior to use this value - --> $DIR/const_refers_to_static2.rs:21:1 + --> $DIR/const_refers_to_static2.rs:20:1 | LL | / const READ_IMMUT: &usize = { LL | | @@ -38,6 +44,6 @@ LL | | }; | = note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior. -error: aborting due to 2 previous errors; 2 warnings emitted +error: aborting due to 2 previous errors; 3 warnings emitted For more information about this error, try `rustc --explain E0080`. diff --git a/src/test/ui/consts/miri_unleashed/const_refers_to_static_cross_crate.rs b/src/test/ui/consts/miri_unleashed/const_refers_to_static_cross_crate.rs index 8bdb48e6f122..c8192972d3bc 100644 --- a/src/test/ui/consts/miri_unleashed/const_refers_to_static_cross_crate.rs +++ b/src/test/ui/consts/miri_unleashed/const_refers_to_static_cross_crate.rs @@ -2,7 +2,7 @@ // aux-build:static_cross_crate.rs #![allow(const_err)] -#![feature(exclusive_range_pattern, half_open_range_patterns, const_if_match, const_panic)] +#![feature(exclusive_range_pattern, half_open_range_patterns, const_if_match)] extern crate static_cross_crate; @@ -34,6 +34,7 @@ const U8_MUT2: &u8 = { //~ NOTE const U8_MUT3: &u8 = { //~ NOTE unsafe { match static_cross_crate::OPT_ZERO { Some(ref u) => u, None => panic!() } } //~^ WARN skipping const checks + //~| WARN skipping const checks //~| WARN [const_err] //~| NOTE constant accesses static }; diff --git a/src/test/ui/consts/miri_unleashed/const_refers_to_static_cross_crate.stderr b/src/test/ui/consts/miri_unleashed/const_refers_to_static_cross_crate.stderr index bc6375f3d5e0..afdde84a386f 100644 --- a/src/test/ui/consts/miri_unleashed/const_refers_to_static_cross_crate.stderr +++ b/src/test/ui/consts/miri_unleashed/const_refers_to_static_cross_crate.stderr @@ -18,7 +18,7 @@ LL | | }; = note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior. error: could not evaluate constant pattern - --> $DIR/const_refers_to_static_cross_crate.rs:43:9 + --> $DIR/const_refers_to_static_cross_crate.rs:44:9 | LL | SLICE_MUT => true, | ^^^^^^^^^ @@ -43,7 +43,7 @@ LL | | }; = note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior. error: could not evaluate constant pattern - --> $DIR/const_refers_to_static_cross_crate.rs:51:9 + --> $DIR/const_refers_to_static_cross_crate.rs:52:9 | LL | U8_MUT => true, | ^^^^^^ @@ -73,7 +73,7 @@ LL | #[warn(const_err)] | ^^^^^^^^^ error: could not evaluate constant pattern - --> $DIR/const_refers_to_static_cross_crate.rs:61:9 + --> $DIR/const_refers_to_static_cross_crate.rs:62:9 | LL | U8_MUT2 => true, | ^^^^^^^ @@ -84,6 +84,14 @@ warning: skipping const checks LL | unsafe { match static_cross_crate::OPT_ZERO { Some(ref u) => u, None => panic!() } } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +warning: skipping const checks + --> $DIR/const_refers_to_static_cross_crate.rs:35:77 + | +LL | unsafe { match static_cross_crate::OPT_ZERO { Some(ref u) => u, None => panic!() } } + | ^^^^^^^^ + | + = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) + warning: any use of this value will cause an error --> $DIR/const_refers_to_static_cross_crate.rs:35:51 | @@ -93,6 +101,7 @@ LL | | unsafe { match static_cross_crate::OPT_ZERO { Some(ref u) => u, None LL | | LL | | LL | | +LL | | LL | | }; | |__- | @@ -103,11 +112,11 @@ LL | #[warn(const_err)] | ^^^^^^^^^ error: could not evaluate constant pattern - --> $DIR/const_refers_to_static_cross_crate.rs:68:9 + --> $DIR/const_refers_to_static_cross_crate.rs:69:9 | LL | U8_MUT3 => true, | ^^^^^^^ -error: aborting due to 6 previous errors; 6 warnings emitted +error: aborting due to 6 previous errors; 7 warnings emitted For more information about this error, try `rustc --explain E0080`. diff --git a/src/test/ui/consts/miri_unleashed/mutable_const.rs b/src/test/ui/consts/miri_unleashed/mutable_const.rs index 5cc8808be5dc..5b7c1d3c1377 100644 --- a/src/test/ui/consts/miri_unleashed/mutable_const.rs +++ b/src/test/ui/consts/miri_unleashed/mutable_const.rs @@ -1,8 +1,6 @@ // compile-flags: -Zunleash-the-miri-inside-of-you // normalize-stderr-test "alloc[0-9]+" -> "allocN" -#![feature(const_raw_ptr_deref)] -#![feature(const_mut_refs)] #![deny(const_err)] // The `allow` variant is tested by `mutable_const2`. //~^ NOTE lint level // Here we check that even though `MUTABLE_BEHIND_RAW` is created from a mutable @@ -20,6 +18,8 @@ const MUTATING_BEHIND_RAW: () = { //~ NOTE unsafe { *MUTABLE_BEHIND_RAW = 99 //~ ERROR any use of this value will cause an error //~^ NOTE: which is read-only + //~| WARN skipping const checks + //~| WARN skipping const checks // FIXME would be good to match more of the error message here, but looks like we // normalize *after* checking the annoations here. } diff --git a/src/test/ui/consts/miri_unleashed/mutable_const.stderr b/src/test/ui/consts/miri_unleashed/mutable_const.stderr index 34993247fca8..7d6264ff7096 100644 --- a/src/test/ui/consts/miri_unleashed/mutable_const.stderr +++ b/src/test/ui/consts/miri_unleashed/mutable_const.stderr @@ -1,11 +1,23 @@ warning: skipping const checks - --> $DIR/mutable_const.rs:15:38 + --> $DIR/mutable_const.rs:13:38 | LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _; | ^^^^^^^^^^^^^^^^^^^^ +warning: skipping const checks + --> $DIR/mutable_const.rs:19:9 + | +LL | *MUTABLE_BEHIND_RAW = 99 + | ^^^^^^^^^^^^^^^^^^^^^^^^ + +warning: skipping const checks + --> $DIR/mutable_const.rs:19:9 + | +LL | *MUTABLE_BEHIND_RAW = 99 + | ^^^^^^^^^^^^^^^^^^^^^^^^ + error: any use of this value will cause an error - --> $DIR/mutable_const.rs:21:9 + --> $DIR/mutable_const.rs:19:9 | LL | / const MUTATING_BEHIND_RAW: () = { LL | | // Test that `MUTABLE_BEHIND_RAW` is actually immutable, by doing this at const time. @@ -18,10 +30,10 @@ LL | | }; | |__- | note: the lint level is defined here - --> $DIR/mutable_const.rs:6:9 + --> $DIR/mutable_const.rs:4:9 | LL | #![deny(const_err)] // The `allow` variant is tested by `mutable_const2`. | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error; 3 warnings emitted diff --git a/src/test/ui/consts/miri_unleashed/mutable_const2.rs b/src/test/ui/consts/miri_unleashed/mutable_const2.rs index c2c7fb18e2a6..d5a5d06412fe 100644 --- a/src/test/ui/consts/miri_unleashed/mutable_const2.rs +++ b/src/test/ui/consts/miri_unleashed/mutable_const2.rs @@ -5,8 +5,6 @@ // normalize-stderr-test "note: compiler flags: .*" -> "note: compiler flags: FLAGS" // normalize-stderr-test "interpret/intern.rs:[0-9]+:[0-9]+" -> "interpret/intern.rs:LL:CC" -#![feature(const_raw_ptr_deref)] -#![feature(const_mut_refs)] #![allow(const_err)] use std::cell::UnsafeCell; diff --git a/src/test/ui/consts/miri_unleashed/mutable_const2.stderr b/src/test/ui/consts/miri_unleashed/mutable_const2.stderr index 39027dd2b410..a8f7d3e8b5b1 100644 --- a/src/test/ui/consts/miri_unleashed/mutable_const2.stderr +++ b/src/test/ui/consts/miri_unleashed/mutable_const2.stderr @@ -1,5 +1,5 @@ warning: skipping const checks - --> $DIR/mutable_const2.rs:15:38 + --> $DIR/mutable_const2.rs:13:38 | LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _; | ^^^^^^^^^^^^^^^^^^^^ @@ -7,7 +7,7 @@ LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *m warning: 1 warning emitted error: internal compiler error: mutable allocation in constant - --> $DIR/mutable_const2.rs:15:1 + --> $DIR/mutable_const2.rs:13:1 | LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/consts/miri_unleashed/mutable_references.rs b/src/test/ui/consts/miri_unleashed/mutable_references.rs index fe3c4ee70f2a..718b14f73d47 100644 --- a/src/test/ui/consts/miri_unleashed/mutable_references.rs +++ b/src/test/ui/consts/miri_unleashed/mutable_references.rs @@ -1,5 +1,4 @@ // compile-flags: -Zunleash-the-miri-inside-of-you -#![feature(const_mut_refs)] #![allow(const_err)] use std::cell::UnsafeCell; @@ -8,15 +7,18 @@ use std::cell::UnsafeCell; // this is fine because is not possible to mutate through an immutable reference. static FOO: &&mut u32 = &&mut 42; +//~^ WARN skipping const checks // this is fine because accessing an immutable static `BAR` is equivalent to accessing `*&BAR` // which puts the mutable reference behind an immutable one. static BAR: &mut () = &mut (); +//~^ WARN skipping const checks struct Foo(T); // this is fine for the same reason as `BAR`. static BOO: &mut Foo<()> = &mut Foo(()); +//~^ WARN skipping const checks struct Meh { x: &'static UnsafeCell, @@ -31,6 +33,7 @@ static MEH: Meh = Meh { // this is fine for the same reason as `BAR`. static OH_YES: &mut i32 = &mut 42; +//~^ WARN skipping const checks fn main() { unsafe { diff --git a/src/test/ui/consts/miri_unleashed/mutable_references.stderr b/src/test/ui/consts/miri_unleashed/mutable_references.stderr index 69d02bd543d4..6b23bbc51295 100644 --- a/src/test/ui/consts/miri_unleashed/mutable_references.stderr +++ b/src/test/ui/consts/miri_unleashed/mutable_references.stderr @@ -1,15 +1,39 @@ warning: skipping const checks - --> $DIR/mutable_references.rs:28:8 + --> $DIR/mutable_references.rs:9:26 + | +LL | static FOO: &&mut u32 = &&mut 42; + | ^^^^^^^ + +warning: skipping const checks + --> $DIR/mutable_references.rs:14:23 + | +LL | static BAR: &mut () = &mut (); + | ^^^^^^^ + +warning: skipping const checks + --> $DIR/mutable_references.rs:20:28 + | +LL | static BOO: &mut Foo<()> = &mut Foo(()); + | ^^^^^^^^^^^^ + +warning: skipping const checks + --> $DIR/mutable_references.rs:30:8 | LL | x: &UnsafeCell::new(42), | ^^^^^^^^^^^^^^^^^^^^ +warning: skipping const checks + --> $DIR/mutable_references.rs:35:27 + | +LL | static OH_YES: &mut i32 = &mut 42; + | ^^^^^^^ + error[E0594]: cannot assign to `*OH_YES`, as `OH_YES` is an immutable static item - --> $DIR/mutable_references.rs:39:5 + --> $DIR/mutable_references.rs:42:5 | LL | *OH_YES = 99; | ^^^^^^^^^^^^ cannot assign -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error; 5 warnings emitted For more information about this error, try `rustc --explain E0594`. diff --git a/src/test/ui/consts/miri_unleashed/read_from_static.rs b/src/test/ui/consts/miri_unleashed/read_from_static.rs index 821c501c9fcc..4bb0edae5d7b 100644 --- a/src/test/ui/consts/miri_unleashed/read_from_static.rs +++ b/src/test/ui/consts/miri_unleashed/read_from_static.rs @@ -1,9 +1,9 @@ // run-pass // compile-flags: -Zunleash-the-miri-inside-of-you -#![feature(const_mut_refs)] #![allow(const_err)] static OH_YES: &mut i32 = &mut 42; +//~^ WARN skipping const checks fn main() { // Make sure `OH_YES` can be read. diff --git a/src/test/ui/consts/miri_unleashed/read_from_static.stderr b/src/test/ui/consts/miri_unleashed/read_from_static.stderr new file mode 100644 index 000000000000..79c48c98f09c --- /dev/null +++ b/src/test/ui/consts/miri_unleashed/read_from_static.stderr @@ -0,0 +1,8 @@ +warning: skipping const checks + --> $DIR/read_from_static.rs:5:27 + | +LL | static OH_YES: &mut i32 = &mut 42; + | ^^^^^^^ + +warning: 1 warning emitted +