mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-29 19:47:38 +00:00

When writing a constant name incorrectly in a pattern, the pattern will be identified as a new binding. We look for consts in the current crate, consts that where imported in the current crate and for local `let` bindings in case someone got them confused with `const`s. ``` error: unreachable pattern --> $DIR/const-with-typo-in-pattern-binding.rs:30:9 | LL | GOOOD => {} | ----- matches any value LL | LL | _ => {} | ^ no value can reach this | help: you might have meant to pattern match against the value of similarly named constant `GOOD` instead of introducing a new catch-all binding | LL | GOOD => {} | ~~~~ ``` Fix #132582.
46 lines
1.5 KiB
Rust
46 lines
1.5 KiB
Rust
#![deny(unreachable_patterns)] //~ NOTE the lint level is defined here
|
|
#![allow(non_snake_case, non_upper_case_globals)]
|
|
mod x {
|
|
pub use std::env::consts::ARCH;
|
|
const X: i32 = 0; //~ NOTE there is a constant of the same name
|
|
}
|
|
fn main() {
|
|
let input: i32 = 42;
|
|
|
|
const god: i32 = 1;
|
|
const GOOD: i32 = 1;
|
|
const BAD: i32 = 2;
|
|
|
|
let name: i32 = 42; //~ NOTE there is a binding of the same name
|
|
|
|
match input {
|
|
X => {} //~ NOTE matches any value
|
|
_ => {} //~ ERROR unreachable pattern
|
|
//~^ NOTE no value can reach this
|
|
}
|
|
match input {
|
|
GOD => {} //~ HELP you might have meant to pattern match against the value of similarly named constant `god`
|
|
//~^ NOTE matches any value
|
|
_ => {} //~ ERROR unreachable pattern
|
|
//~^ NOTE no value can reach this
|
|
}
|
|
match input {
|
|
GOOOD => {} //~ HELP you might have meant to pattern match against the value of similarly named constant `GOOD`
|
|
//~^ NOTE matches any value
|
|
_ => {} //~ ERROR unreachable pattern
|
|
//~^ NOTE no value can reach this
|
|
}
|
|
match input {
|
|
name => {}
|
|
//~^ NOTE matches any value
|
|
_ => {} //~ ERROR unreachable pattern
|
|
//~^ NOTE no value can reach this
|
|
}
|
|
match "" {
|
|
ARCH => {} //~ HELP you might have meant to pattern match against the value of constant `ARCH`
|
|
//~^ NOTE matches any value
|
|
_ => {} //~ ERROR unreachable pattern
|
|
//~^ NOTE no value can reach this
|
|
}
|
|
}
|