Rollup merge of #117556 - obeis:static-mut-ref-lint, r=davidtwco

Disallow reference to `static mut` and adding `static_mut_ref` lint

Closes #114447

r? `@scottmcm`
This commit is contained in:
Guillaume Gomez 2024-01-09 13:23:15 +01:00 committed by GitHub
commit 4a24b5bc05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
71 changed files with 1447 additions and 237 deletions

View file

@ -515,6 +515,7 @@ E0792: include_str!("./error_codes/E0792.md"),
E0793: include_str!("./error_codes/E0793.md"),
E0794: include_str!("./error_codes/E0794.md"),
E0795: include_str!("./error_codes/E0795.md"),
E0796: include_str!("./error_codes/E0796.md"),
}
// Undocumented removed error codes. Note that many removed error codes are kept in the list above

View file

@ -0,0 +1,22 @@
Reference of mutable static.
Erroneous code example:
```compile_fail,edition2024,E0796
static mut X: i32 = 23;
static mut Y: i32 = 24;
unsafe {
let y = &X;
let ref x = X;
let (x, y) = (&X, &Y);
foo(&X);
}
fn foo<'a>(_x: &'a i32) {}
```
Mutable statics can be written to by multiple threads: aliasing violations or
data races will cause undefined behavior.
Reference of mutable static is a hard error from 2024 edition.