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