about summary refs log tree commit diff
diff options
context:
space:
mode:
authormemoryruins <memoryruinsmusic@gmail.com>2018-10-29 00:09:32 -0400
committermemoryruins <memoryruinsmusic@gmail.com>2018-10-29 00:09:32 -0400
commitfc2aa3fe0ec13c8d6150a877d7193473aabc58c9 (patch)
tree69f2103edd3dc3517037869fcf3a1a8c2f10b9cc
parentbcb05a0ab23291851d0a233547f2ad3cbb9cc222 (diff)
downloadrust-fc2aa3fe0ec13c8d6150a877d7193473aabc58c9.tar.gz
rust-fc2aa3fe0ec13c8d6150a877d7193473aabc58c9.zip
Add UI test for #49296
-rw-r--r--src/test/ui/consts/const-eval/issue-49296.rs23
-rw-r--r--src/test/ui/consts/const-eval/issue-49296.stderr12
2 files changed, 35 insertions, 0 deletions
diff --git a/src/test/ui/consts/const-eval/issue-49296.rs b/src/test/ui/consts/const-eval/issue-49296.rs
new file mode 100644
index 00000000000..a7c3c5318d4
--- /dev/null
+++ b/src/test/ui/consts/const-eval/issue-49296.rs
@@ -0,0 +1,23 @@
+// issue-49296: Unsafe shenigans in constants can result in missing errors
+
+#![feature(const_fn)]
+#![feature(const_fn_union)]
+
+const unsafe fn transmute<T: Copy, U: Copy>(t: T) -> U {
+    union Transmute<T: Copy, U: Copy> {
+        from: T,
+        to: U,
+    }
+
+    Transmute { from: t }.to
+}
+
+const fn wat(x: u64) -> &'static u64 {
+    unsafe { transmute(&x) }
+}
+const X: u64 = *wat(42);
+//~^ ERROR any use of this value will cause an error
+
+fn main() {
+    println!("{}", X);
+}
diff --git a/src/test/ui/consts/const-eval/issue-49296.stderr b/src/test/ui/consts/const-eval/issue-49296.stderr
new file mode 100644
index 00000000000..37462db4c96
--- /dev/null
+++ b/src/test/ui/consts/const-eval/issue-49296.stderr
@@ -0,0 +1,12 @@
+error: any use of this value will cause an error
+  --> $DIR/issue-49296.rs:18:1
+   |
+LL | const X: u64 = *wat(42);
+   | ^^^^^^^^^^^^^^^--------^
+   |                |
+   |                dangling pointer was dereferenced
+   |
+   = note: #[deny(const_err)] on by default
+
+error: aborting due to previous error
+