From 5be74148c23d41e306446d23acb93ed93e095252 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 15 Jul 2018 13:55:17 +0200 Subject: [PATCH] add test case --- src/test/ui/const-eval/match-test-ptr-null.rs | 12 ++++++++ .../ui/const-eval/match-test-ptr-null.stderr | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/test/ui/const-eval/match-test-ptr-null.rs create mode 100644 src/test/ui/const-eval/match-test-ptr-null.stderr 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`.