| //@ 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() {} |