Make sure we report a future incompat error in all cases
This commit is contained in:
parent
6a33de0170
commit
017423179a
5 changed files with 42 additions and 16 deletions
|
@ -408,7 +408,25 @@ impl<'a, 'tcx> ConstToPat<'a, 'tcx> {
|
||||||
// this pattern to a `PartialEq::eq` comparison and `PartialEq::eq` takes a
|
// this pattern to a `PartialEq::eq` comparison and `PartialEq::eq` takes a
|
||||||
// reference. This makes the rest of the matching logic simpler as it doesn't have
|
// reference. This makes the rest of the matching logic simpler as it doesn't have
|
||||||
// to figure out how to get a reference again.
|
// to figure out how to get a reference again.
|
||||||
ty::Adt(..) if !self.type_marked_structural(pointee_ty) => {
|
ty::Adt(adt_def, _) if !self.type_marked_structural(pointee_ty) => {
|
||||||
|
if self.include_lint_checks
|
||||||
|
&& !self.saw_const_match_error.get()
|
||||||
|
&& !self.saw_const_match_lint.get()
|
||||||
|
{
|
||||||
|
self.saw_const_match_lint.set(true);
|
||||||
|
let path = self.tcx().def_path_str(adt_def.did);
|
||||||
|
let msg = format!(
|
||||||
|
"to use a constant of type `{}` in a pattern, \
|
||||||
|
`{}` must be annotated with `#[derive(PartialEq, Eq)]`",
|
||||||
|
path, path,
|
||||||
|
);
|
||||||
|
self.tcx().struct_span_lint_hir(
|
||||||
|
lint::builtin::INDIRECT_STRUCTURAL_MATCH,
|
||||||
|
self.id,
|
||||||
|
self.span,
|
||||||
|
|lint| lint.build(&msg).emit(),
|
||||||
|
);
|
||||||
|
}
|
||||||
PatKind::Constant { value: cv }
|
PatKind::Constant { value: cv }
|
||||||
}
|
}
|
||||||
// All other references are converted into deref patterns and then recursively
|
// All other references are converted into deref patterns and then recursively
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
warning: to use a constant of type `&S` in a pattern, the constant's initializer must be trivial or all types in the constant must be annotated with `#[derive(PartialEq, Eq)]`
|
warning: to use a constant of type `S` in a pattern, `S` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||||
--> $DIR/match_ice.rs:11:9
|
--> $DIR/match_ice.rs:11:9
|
||||||
|
|
|
|
||||||
LL | C => {}
|
LL | C => {}
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
= note: `#[warn(nontrivial_structural_match)]` on by default
|
= note: `#[warn(indirect_structural_match)]` on by default
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #73448 <https://github.com/rust-lang/rust/issues/73448>
|
= note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/62411>
|
||||||
|
|
||||||
error: to use a constant of type `S` in a pattern, `S` must be annotated with `#[derive(PartialEq, Eq)]`
|
error: to use a constant of type `S` in a pattern, `S` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||||
--> $DIR/match_ice.rs:11:9
|
--> $DIR/match_ice.rs:11:9
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
warning: to use a constant of type `&&WrapInline` in a pattern, the constant's initializer must be trivial or all types in the constant must be annotated with `#[derive(PartialEq, Eq)]`
|
warning: to use a constant of type `NoDerive` in a pattern, `NoDerive` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||||
--> $DIR/cant-hide-behind-doubly-indirect-embedded.rs:24:9
|
--> $DIR/cant-hide-behind-doubly-indirect-embedded.rs:24:9
|
||||||
|
|
|
|
||||||
LL | WRAP_DOUBLY_INDIRECT_INLINE => { panic!("WRAP_DOUBLY_INDIRECT_INLINE matched itself"); }
|
LL | WRAP_DOUBLY_INDIRECT_INLINE => { panic!("WRAP_DOUBLY_INDIRECT_INLINE matched itself"); }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `#[warn(nontrivial_structural_match)]` on by default
|
note: the lint level is defined here
|
||||||
|
--> $DIR/cant-hide-behind-doubly-indirect-embedded.rs:7:9
|
||||||
|
|
|
||||||
|
LL | #![warn(indirect_structural_match)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #73448 <https://github.com/rust-lang/rust/issues/73448>
|
= note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/62411>
|
||||||
|
|
||||||
warning: 1 warning emitted
|
warning: 1 warning emitted
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
warning: to use a constant of type `&&WrapParam<NoDerive>` in a pattern, the constant's initializer must be trivial or all types in the constant must be annotated with `#[derive(PartialEq, Eq)]`
|
warning: to use a constant of type `NoDerive` in a pattern, `NoDerive` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||||
--> $DIR/cant-hide-behind-doubly-indirect-param.rs:24:9
|
--> $DIR/cant-hide-behind-doubly-indirect-param.rs:24:9
|
||||||
|
|
|
|
||||||
LL | WRAP_DOUBLY_INDIRECT_PARAM => { panic!("WRAP_DOUBLY_INDIRECT_PARAM matched itself"); }
|
LL | WRAP_DOUBLY_INDIRECT_PARAM => { panic!("WRAP_DOUBLY_INDIRECT_PARAM matched itself"); }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `#[warn(nontrivial_structural_match)]` on by default
|
note: the lint level is defined here
|
||||||
|
--> $DIR/cant-hide-behind-doubly-indirect-param.rs:7:9
|
||||||
|
|
|
||||||
|
LL | #![warn(indirect_structural_match)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #73448 <https://github.com/rust-lang/rust/issues/73448>
|
= note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/62411>
|
||||||
|
|
||||||
warning: 1 warning emitted
|
warning: 1 warning emitted
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
warning: to use a constant of type `&&B` in a pattern, the constant's initializer must be trivial or all types in the constant must be annotated with `#[derive(PartialEq, Eq)]`
|
warning: to use a constant of type `B` in a pattern, `B` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||||
--> $DIR/issue-62307-match-ref-ref-forbidden-without-eq.rs:31:9
|
--> $DIR/issue-62307-match-ref-ref-forbidden-without-eq.rs:31:9
|
||||||
|
|
|
|
||||||
LL | RR_B1 => { println!("CLAIM RR0: {:?} matches {:?}", RR_B1, RR_B0); }
|
LL | RR_B1 => { println!("CLAIM RR0: {:?} matches {:?}", RR_B1, RR_B0); }
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
|
||||||
note: the lint level is defined here
|
note: the lint level is defined here
|
||||||
--> $DIR/issue-62307-match-ref-ref-forbidden-without-eq.rs:13:36
|
--> $DIR/issue-62307-match-ref-ref-forbidden-without-eq.rs:13:9
|
||||||
|
|
|
|
||||||
LL | #![warn(indirect_structural_match, nontrivial_structural_match)]
|
LL | #![warn(indirect_structural_match, nontrivial_structural_match)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #73448 <https://github.com/rust-lang/rust/issues/73448>
|
= note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/62411>
|
||||||
|
|
||||||
warning: to use a constant of type `&&B` in a pattern, the constant's initializer must be trivial or all types in the constant must be annotated with `#[derive(PartialEq, Eq)]`
|
warning: to use a constant of type `B` in a pattern, `B` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||||
--> $DIR/issue-62307-match-ref-ref-forbidden-without-eq.rs:38:9
|
--> $DIR/issue-62307-match-ref-ref-forbidden-without-eq.rs:38:9
|
||||||
|
|
|
|
||||||
LL | RR_B1 => { println!("CLAIM RR1: {:?} matches {:?}", RR_B1, RR_B1); }
|
LL | RR_B1 => { println!("CLAIM RR1: {:?} matches {:?}", RR_B1, RR_B1); }
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #73448 <https://github.com/rust-lang/rust/issues/73448>
|
= note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/62411>
|
||||||
|
|
||||||
warning: 2 warnings emitted
|
warning: 2 warnings emitted
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue