| //@ run-pass | |
| use std::sync::atomic::AtomicU32; | |
| static S: i32 = 0; | |
| static mut S_MUT: i32 = 0; | |
| const C1: &i32 = &S; | |
| #[allow(unused)] | |
| const C1_READ: () = { | |
| assert!(*C1 == 0); | |
| }; | |
| const C2: *const i32 = std::ptr::addr_of!(S_MUT); | |
| static FOO: AtomicU32 = AtomicU32::new(0); | |
| const NOT_VALID_AS_PATTERN: &'static AtomicU32 = &FOO; | |
| fn main() { | |
| assert_eq!(*C1, 0); | |
| assert_eq!(unsafe { *C2 }, 0); | |
| // Computing this pattern will read from an immutable static. That's fine. | |
| assert!(matches!(&0, C1)); | |
| let _val = NOT_VALID_AS_PATTERN; | |
| } |