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