summaryrefslogtreecommitdiffstats
path: root/src/test/ui/consts/invalid-union.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/consts/invalid-union.rs')
-rw-r--r--src/test/ui/consts/invalid-union.rs44
1 files changed, 0 insertions, 44 deletions
diff --git a/src/test/ui/consts/invalid-union.rs b/src/test/ui/consts/invalid-union.rs
deleted file mode 100644
index 28706b4a9..000000000
--- a/src/test/ui/consts/invalid-union.rs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Check that constants with interior mutability inside unions are rejected
-// during validation.
-//
-// Note that this test case relies on undefined behaviour to construct a
-// constant with interior mutability that is "invisible" to the static checks.
-// If for some reason this approach no longer works, it is should be fine to
-// remove the test case.
-//
-// build-fail
-// stderr-per-bitwidth
-#![feature(const_mut_refs)]
-
-use std::cell::Cell;
-use std::mem::ManuallyDrop;
-
-#[repr(C)]
-struct S {
- x: u32,
- y: E,
-}
-
-#[repr(u32)]
-enum E {
- A,
- B(U)
-}
-
-union U {
- cell: ManuallyDrop<Cell<u32>>,
-}
-
-const C: S = {
- let s = S { x: 0, y: E::A };
- // Go through an &u32 reference which is definitely not allowed to mutate anything.
- let p = &s.x as *const u32 as *mut u32;
- // Change enum tag to E::B.
- unsafe { *p.add(1) = 1 };
- s
-};
-
-fn main() { //~ ERROR it is undefined behavior to use this value
- // FIXME the span here is wrong, sould be pointing at the line below, not above.
- let _: &'static _ = &C;
-}