about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2021-07-31 11:52:59 +0200
committerRalf Jung <post@ralfj.de>2021-07-31 11:52:59 +0200
commit2a9b44d97d55779b3758a1f0558b22de3a6572ea (patch)
tree5a20a876e01bd36dc101a15112d5ad9cb6df9b20 /src/test
parentb7b509137830fda21e2354027d846cd6aca32bcb (diff)
downloadrust-2a9b44d97d55779b3758a1f0558b22de3a6572ea.tar.gz
rust-2a9b44d97d55779b3758a1f0558b22de3a6572ea.zip
add a test
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/consts/const-eval/partial_ptr_overwrite.rs15
-rw-r--r--src/test/ui/consts/const-eval/partial_ptr_overwrite.stderr20
2 files changed, 35 insertions, 0 deletions
diff --git a/src/test/ui/consts/const-eval/partial_ptr_overwrite.rs b/src/test/ui/consts/const-eval/partial_ptr_overwrite.rs
new file mode 100644
index 00000000000..5371f9f1749
--- /dev/null
+++ b/src/test/ui/consts/const-eval/partial_ptr_overwrite.rs
@@ -0,0 +1,15 @@
+// Test for the behavior described in <https://github.com/rust-lang/rust/issues/87184>.
+#![feature(const_mut_refs, const_raw_ptr_deref)]
+
+const PARTIAL_OVERWRITE: () = {
+    let mut p = &42;
+    unsafe {
+        let ptr: *mut _ = &mut p;
+        *(ptr as *mut u8) = 123; //~ ERROR any use of this value
+        //~| unable to overwrite parts of a pointer
+        //~| WARN previously accepted
+    }
+    let x = *p;
+};
+
+fn main() {}
diff --git a/src/test/ui/consts/const-eval/partial_ptr_overwrite.stderr b/src/test/ui/consts/const-eval/partial_ptr_overwrite.stderr
new file mode 100644
index 00000000000..a18c7e78d95
--- /dev/null
+++ b/src/test/ui/consts/const-eval/partial_ptr_overwrite.stderr
@@ -0,0 +1,20 @@
+error: any use of this value will cause an error
+  --> $DIR/partial_ptr_overwrite.rs:8:9
+   |
+LL | / const PARTIAL_OVERWRITE: () = {
+LL | |     let mut p = &42;
+LL | |     unsafe {
+LL | |         let ptr: *mut _ = &mut p;
+LL | |         *(ptr as *mut u8) = 123;
+   | |         ^^^^^^^^^^^^^^^^^^^^^^^ unable to overwrite parts of a pointer in memory at alloc4
+...  |
+LL | |     let x = *p;
+LL | | };
+   | |__-
+   |
+   = note: `#[deny(const_err)]` on by default
+   = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+   = note: for more information, see issue #71800 <https://github.com/rust-lang/rust/issues/71800>
+
+error: aborting due to previous error
+