mirror of
https://github.com/rust-lang/rust.git
synced 2025-12-02 15:08:24 +00:00
Perform unused assignment and unused variables lints on MIR. Rebase of https://github.com/rust-lang/rust/pull/101500 Fixes https://github.com/rust-lang/rust/issues/51003. The first commit moves detection of uninhabited types from the current liveness pass to MIR building. In order to keep the same level of diagnostics, I had to instrument MIR a little more: - keep for which original local a guard local is created; - store in the `VarBindingForm` the list of introducer places and whether this was a shorthand pattern. I am not very proud of the handling of self-assignments. The proposed scheme is in two parts: first detect probable self-assignments, by pattern matching on MIR, and second treat them specially during dataflow analysis. I welcome ideas. Please review carefully the changes in tests. There are many small changes to behaviour, and I'm not sure all of them are desirable.
For more information about how rustc works, see the rustc dev guide.