Skip to content

False positive in match_same_arms + non_exhaustive_omitted_patterns #10327

Closed
@dtolnay

Description

@dtolnay

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't haveI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when applied

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions