diff --git a/src/test/ui/const-eval/match-test-ptr-null.rs b/src/test/ui/const-eval/match-test-ptr-null.rs new file mode 100644 index 000000000000..3e8a5930a1d2 --- /dev/null +++ b/src/test/ui/const-eval/match-test-ptr-null.rs @@ -0,0 +1,12 @@ +fn main() { + // Make sure match uses the usual pointer comparison code path -- i.e., it should complain + // that pointer comparison is disallowed, not that parts of a pointer are accessed as raw + // bytes. + let _: [u8; 0] = [4; { //~ ERROR could not evaluate repeat length + match &1 as *const i32 as usize { //~ ERROR raw pointers cannot be cast to integers + 0 => 42, //~ ERROR constant contains unimplemented expression type + //~^ NOTE "pointer arithmetic or comparison" needs an rfc before being allowed + n => n, + } + }]; +} diff --git a/src/test/ui/const-eval/match-test-ptr-null.stderr b/src/test/ui/const-eval/match-test-ptr-null.stderr new file mode 100644 index 000000000000..ffc911a2ae2e --- /dev/null +++ b/src/test/ui/const-eval/match-test-ptr-null.stderr @@ -0,0 +1,30 @@ +error[E0018]: raw pointers cannot be cast to integers in constants + --> $DIR/match-test-ptr-null.rs:6:15 + | +LL | match &1 as *const i32 as usize { //~ ERROR raw pointers cannot be cast to integers + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0019]: constant contains unimplemented expression type + --> $DIR/match-test-ptr-null.rs:7:13 + | +LL | 0 => 42, //~ ERROR constant contains unimplemented expression type + | ^ + +error[E0080]: could not evaluate repeat length + --> $DIR/match-test-ptr-null.rs:5:26 + | +LL | let _: [u8; 0] = [4; { //~ ERROR could not evaluate repeat length + | __________________________^ +LL | | match &1 as *const i32 as usize { //~ ERROR raw pointers cannot be cast to integers +LL | | 0 => 42, //~ ERROR constant contains unimplemented expression type + | | - "pointer arithmetic or comparison" needs an rfc before being allowed inside constants +LL | | //~^ NOTE "pointer arithmetic or comparison" needs an rfc before being allowed +LL | | n => n, +LL | | } +LL | | }]; + | |_____^ + +error: aborting due to 3 previous errors + +Some errors occurred: E0018, E0019, E0080. +For more information about an error, try `rustc --explain E0018`.