1
Fork 0

Add CONST_ITEM_MUTATION lint

Fixes #74053
Fixes #55721

This PR adds a new lint `CONST_ITEM_MUTATION`.
Given an item `const FOO: SomeType = ..`, this lint fires on:

* Attempting to write directly to a field (`FOO.field = some_val`) or
  array entry (`FOO.array_field[0] = val`)
* Taking a mutable reference to the `const` item (`&mut FOO`), including
  through an autoderef `FOO.some_mut_self_method()`

The lint message explains that since each use of a constant creates a
new temporary, the original `const` item will not be modified.
This commit is contained in:
Aaron Hill 2020-08-10 07:16:30 -04:00
parent d2454643e1
commit f422ef141a
No known key found for this signature in database
GPG key ID: B4087E510E98B164
17 changed files with 403 additions and 68 deletions

View file

@ -232,6 +232,12 @@ declare_lint! {
"detects unaligned references to fields of packed structs",
}
declare_lint! {
pub CONST_ITEM_MUTATION,
Warn,
"detects attempts to mutate a `const` item",
}
declare_lint! {
pub SAFE_PACKED_BORROWS,
Warn,
@ -572,6 +578,7 @@ declare_lint_pass! {
CONST_ERR,
RENAMED_AND_REMOVED_LINTS,
UNALIGNED_REFERENCES,
CONST_ITEM_MUTATION,
SAFE_PACKED_BORROWS,
PATTERNS_IN_FNS_WITHOUT_BODY,
LATE_BOUND_LIFETIME_ARGUMENTS,