diff options
| author | bors <bors@rust-lang.org> | 2023-10-21 11:04:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-10-21 11:04:19 +0000 |
| commit | 786c94a4ebf8df6207a3ce146a687e66f3ced369 (patch) | |
| tree | 71a2dc6b6fc1717e0a0221158f83066e34dd6cd8 /compiler/rustc_codegen_llvm/src/context.rs | |
| parent | 6f97d838c644174b38413d920ed8d43b70cdc7db (diff) | |
| parent | ca869e33341ced8335c1288232c847a377a8653b (diff) | |
| download | rust-786c94a4ebf8df6207a3ce146a687e66f3ced369.tar.gz rust-786c94a4ebf8df6207a3ce146a687e66f3ced369.zip | |
Auto merge of #116734 - Nadrieril:lint-per-column, r=cjgillot
Lint `non_exhaustive_omitted_patterns` by columns
This is a rework of the `non_exhaustive_omitted_patterns` lint to make it more consistent. The intent of the lint is to help consumers of `non_exhaustive` enums ensure they stay up-to-date with all upstream variants. This rewrite fixes two cases we didn't handle well before:
First, because of details of exhaustiveness checking, the following wouldn't lint `Enum::C` as missing:
```rust
match Some(x) {
Some(Enum::A) => {}
Some(Enum::B) => {}
_ => {}
}
```
Second, because of the fundamental workings of exhaustiveness checking, the following would treat the `true` and `false` cases separately and thus lint about missing variants:
```rust
match (true, x) {
(true, Enum::A) => {}
(true, Enum::B) => {}
(false, Enum::C) => {}
_ => {}
}
```
Moreover, it would correctly not lint in the case where the pair is flipped, because of asymmetry in how exhaustiveness checking proceeds.
A drawback is that it no longer makes sense to set the lint level per-arm. This will silently break the lint for current users of it (but it's behind a feature gate so that's ok).
The new approach is now independent of the exhaustiveness algorithm; it's a separate pass that looks at patterns column by column. This is another of the motivations for this: I'm glad to move it out of the algorithm, it was akward there.
This PR is almost identical to https://github.com/rust-lang/rust/pull/111651. cc `@eholk` who reviewed it at the time. Compared to then, I'm more confident this is the right approach.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/context.rs')
0 files changed, 0 insertions, 0 deletions
