about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/ui/const-eval/match-test-ptr-null.rs12
-rw-r--r--src/test/ui/const-eval/match-test-ptr-null.stderr30
2 files changed, 42 insertions, 0 deletions
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 00000000000..3e8a5930a1d
--- /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 00000000000..ffc911a2ae2
--- /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`.