| // Test `static_mut_refs` lint. | 
 |  | 
 | //@ revisions: e2021 e2024 | 
 |  | 
 | //@ [e2021] edition:2021 | 
 | //@ [e2021] run-pass | 
 |  | 
 | //@ [e2024] edition:2024 | 
 |  | 
 | static mut FOO: (u32, u32) = (1, 2); | 
 |  | 
 | macro_rules! bar { | 
 |     ($x:expr) => { | 
 |         &mut ($x.0) | 
 |         //[e2021]~^ WARN creating a mutable reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR creating a mutable reference to mutable static [static_mut_refs] | 
 |     }; | 
 | } | 
 |  | 
 | static mut STATIC: i64 = 1; | 
 |  | 
 | fn main() { | 
 |     static mut X: i32 = 1; | 
 |  | 
 |     static mut Y: i32 = 1; | 
 |  | 
 |     struct TheStruct { | 
 |         pub value: i32, | 
 |     } | 
 |     struct MyStruct { | 
 |         pub value: i32, | 
 |         pub s: TheStruct, | 
 |     } | 
 |  | 
 |     static mut A: MyStruct = MyStruct { value: 1, s: TheStruct { value: 2 } }; | 
 |  | 
 |     unsafe { | 
 |         let _y = &X; | 
 |         //[e2021]~^ WARN shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         let _y = &mut X; | 
 |         //[e2021]~^ WARN mutable reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR mutable reference to mutable static [static_mut_refs] | 
 |  | 
 |         let _z = &raw mut X; | 
 |  | 
 |         let _p = &raw const X; | 
 |  | 
 |         let ref _a = X; | 
 |         //[e2021]~^ WARN shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         let (_b, _c) = (&X, &Y); | 
 |         //[e2021]~^ WARN shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR shared reference to mutable static [static_mut_refs] | 
 |         //[e2021]~^^^ WARN shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^^^ ERROR shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         foo(&X); | 
 |         //[e2021]~^ WARN shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         static mut Z: &[i32; 3] = &[0, 1, 2]; | 
 |  | 
 |         let _ = Z.len(); | 
 |         //[e2021]~^ WARN creating a shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR creating a shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         let _ = Z[0]; | 
 |  | 
 |         let _ = format!("{:?}", Z); | 
 |         //[e2021]~^ WARN creating a shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR creating a shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         let _v = &A.value; | 
 |         //[e2021]~^ WARN creating a shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR creating a shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         let _s = &A.s.value; | 
 |         //[e2021]~^ WARN creating a shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR creating a shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         let ref _v = A.value; | 
 |         //[e2021]~^ WARN creating a shared reference to mutable static [static_mut_refs] | 
 |         //[e2024]~^^ ERROR creating a shared reference to mutable static [static_mut_refs] | 
 |  | 
 |         let _x = bar!(FOO); | 
 |  | 
 |         STATIC += 1; | 
 |     } | 
 | } | 
 |  | 
 | fn foo<'a>(_x: &'a i32) {} |