diff options
Diffstat (limited to 'tests/ui/consts/const-eval/double_check2.rs')
-rw-r--r-- | tests/ui/consts/const-eval/double_check2.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/ui/consts/const-eval/double_check2.rs b/tests/ui/consts/const-eval/double_check2.rs new file mode 100644 index 000000000..81f5dde45 --- /dev/null +++ b/tests/ui/consts/const-eval/double_check2.rs @@ -0,0 +1,32 @@ +// check-pass + +// This test exhibits undefined behavior, but it is very expensive and complex to check for such +// UB in constants. +// Thus, we do not detect it if you create references to statics in ways that are UB. + +enum Foo { + A = 5, + B = 42, +} +enum Bar { + C = 42, + D = 99, +} +#[repr(C)] +union Union { + foo: &'static Foo, + bar: &'static Bar, + u8: &'static u8, +} +static BAR: u8 = 5; +static FOO: (&Foo, &Bar) = unsafe { + ( + // undefined behavior + Union { u8: &BAR }.foo, + Union { u8: &BAR }.bar, + ) +}; +static FOO2: (&Foo, &Bar) = unsafe { (std::mem::transmute(&BAR), std::mem::transmute(&BAR)) }; +//^ undefined behavior + +fn main() {} |