diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2021-09-30 18:05:25 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-30 18:05:25 -0700 |
| commit | fbc67b59a12adc84642989e6f736cdfd2737a47c (patch) | |
| tree | 714f2ebc20b55283eaefbf5ca1213fa64306fe94 /src/test | |
| parent | fccfc981d612816e256868eb7485210da43f5e03 (diff) | |
| parent | 6e973f08508fddc095c1cef20e07110c918e72e8 (diff) | |
| download | rust-fbc67b59a12adc84642989e6f736cdfd2737a47c.tar.gz rust-fbc67b59a12adc84642989e6f736cdfd2737a47c.zip | |
Rollup merge of #89314 - notriddle:notriddle/lint-fix-enum-variant-match, r=davidtwco
fix(lint): don't suggest refutable patterns to "fix" irrefutable bind In function arguments and let bindings, do not suggest changing `C` to `Foo::C` unless `C` is the only variant of `Foo`, because it won't work. The general warning is still kept, because code like this is confusing. Fixes #88730 p.s. `src/test/ui/lint/lint-uppercase-variables.rs` already tests the one-variant case.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/suggestions/issue-88730.rs | 16 | ||||
| -rw-r--r-- | src/test/ui/suggestions/issue-88730.stderr | 21 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/issue-88730.rs b/src/test/ui/suggestions/issue-88730.rs new file mode 100644 index 00000000000..e63210a3e98 --- /dev/null +++ b/src/test/ui/suggestions/issue-88730.rs @@ -0,0 +1,16 @@ +#![allow(unused, nonstandard_style)] +#![deny(bindings_with_variant_name)] + +// If an enum has two different variants, +// then it cannot be matched upon in a function argument. +// It still gets a warning, but no suggestions. +enum Foo { + C, + D, +} + +fn foo(C: Foo) {} //~ERROR + +fn main() { + let C = Foo::D; //~ERROR +} diff --git a/src/test/ui/suggestions/issue-88730.stderr b/src/test/ui/suggestions/issue-88730.stderr new file mode 100644 index 00000000000..eb22b0ea5c8 --- /dev/null +++ b/src/test/ui/suggestions/issue-88730.stderr @@ -0,0 +1,21 @@ +error[E0170]: pattern binding `C` is named the same as one of the variants of the type `Foo` + --> $DIR/issue-88730.rs:12:8 + | +LL | fn foo(C: Foo) {} + | ^ + | +note: the lint level is defined here + --> $DIR/issue-88730.rs:2:9 + | +LL | #![deny(bindings_with_variant_name)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0170]: pattern binding `C` is named the same as one of the variants of the type `Foo` + --> $DIR/issue-88730.rs:15:9 + | +LL | let C = Foo::D; + | ^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0170`. |
