| //@ 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; |
| } |