Closed
Description
Summary
Clippy's suggestion makes the code not compile when non_exhaustive_omitted_patterns
is in use.
Lint Name
match_same_arms
Reproducer
#![feature(non_exhaustive_omitted_patterns_lint)]
#![deny(clippy::match_same_arms)]
use std::sync::atomic::Ordering; // #[non_exhaustive] enum
pub fn f(x: Ordering) {
match x {
Ordering::Relaxed => println!("relaxed"),
Ordering::Release => println!("release"),
Ordering::Acquire => println!("acquire"),
Ordering::AcqRel | Ordering::SeqCst => unsupported(x),
#[deny(non_exhaustive_omitted_patterns)]
_ => unsupported(x),
}
}
fn unsupported(x: Ordering) {
dbg!(x);
}
$ cargo clippy
error: this match arm has an identical body to the `_` wildcard arm
--> src/lib.rs:11:9
|
11 | Ordering::AcqRel | Ordering::SeqCst => unsupported(x),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the arm
|
= help: or try changing either arm body
note: `_` wildcard arm here
--> src/lib.rs:13:9
|
13 | _ => unsupported(x),
| ^^^^^^^^^^^^^^^^^^^
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_same_arms
The original code compiles. Clippy's suggested code (remove line 11) does not compile.
error: some variants are not matched explicitly
--> src/lib.rs:13:9
|
13 | _ => unsupported(x),
| ^ patterns `std::sync::atomic::Ordering::AcqRel` and `std::sync::atomic::Ordering::SeqCst` not covered
|
= help: ensure that all variants are matched explicitly by adding the suggested match arms
= note: the matched value is of type `std::sync::atomic::Ordering` and the `non_exhaustive_omitted_patterns` attribute was found
Version
rustc 1.69.0-nightly (585f3eef2 2023-02-11)
binary: rustc
commit-hash: 585f3eef26f04440bca726c29193af7b4fa90e54
commit-date: 2023-02-11
host: x86_64-unknown-linux-gnu
release: 1.69.0-nightly
LLVM version: 15.0.7
Additional Labels
@rustbot label +I-suggestion-causes-error