diff --git a/compiler/rustc_mir_build/src/thir/pattern/mod.rs b/compiler/rustc_mir_build/src/thir/pattern/mod.rs index 8dc3f998e0916..259f73dd3f283 100644 --- a/compiler/rustc_mir_build/src/thir/pattern/mod.rs +++ b/compiler/rustc_mir_build/src/thir/pattern/mod.rs @@ -519,7 +519,9 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> { } }; - if let Some(user_ty) = self.user_args_applied_to_ty_of_hir_id(hir_id) { + if !matches!(kind, PatKind::Error(_)) + && let Some(user_ty) = self.user_args_applied_to_ty_of_hir_id(hir_id) + { debug!("lower_variant_or_leaf: kind={:?} user_ty={:?} span={:?}", kind, user_ty, span); let annotation = CanonicalUserTypeAnnotation { user_ty: Box::new(user_ty), diff --git a/tests/ui/const-generics/using-a-constant-as-a-pattern-issue-138048.rs b/tests/ui/const-generics/using-a-constant-as-a-pattern-issue-138048.rs new file mode 100644 index 0000000000000..9d11e2e6c1f06 --- /dev/null +++ b/tests/ui/const-generics/using-a-constant-as-a-pattern-issue-138048.rs @@ -0,0 +1,11 @@ +struct Foo; + +impl<'b> Foo { + fn bar() { + + let V; //~ ERROR constant parameters cannot be referenced in patterns + } +} +fn main() { + +} diff --git a/tests/ui/const-generics/using-a-constant-as-a-pattern-issue-138048.stderr b/tests/ui/const-generics/using-a-constant-as-a-pattern-issue-138048.stderr new file mode 100644 index 0000000000000..4003d5f25f538 --- /dev/null +++ b/tests/ui/const-generics/using-a-constant-as-a-pattern-issue-138048.stderr @@ -0,0 +1,12 @@ +error[E0158]: constant parameters cannot be referenced in patterns + --> $DIR/using-a-constant-as-a-pattern-issue-138048.rs:6:13 + | +LL | fn bar() { + | ----------- constant defined here +LL | +LL | let V; + | ^ can't be used in patterns + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0158`.