]> git.lizzy.rs Git - rust.git/commitdiff
Improve diagnostics when constant pattern is too generic
authorGary Guo <gary@garyguo.net>
Thu, 30 Jul 2020 05:17:18 +0000 (06:17 +0100)
committerGary Guo <gary@garyguo.net>
Thu, 30 Jul 2020 05:17:18 +0000 (06:17 +0100)
src/librustc_mir_build/hair/pattern/mod.rs

index a5c87bc963f49bd84232eccadbd88c8789c6be01..f813ba0c077cadb662d6aeed5e8bfdb2f0b0e562 100644 (file)
@@ -16,7 +16,7 @@
 use rustc_hir::RangeEnd;
 use rustc_index::vec::Idx;
 use rustc_middle::mir::interpret::{get_slice_bytes, sign_extend, ConstValue};
-use rustc_middle::mir::interpret::{LitToConstError, LitToConstInput};
+use rustc_middle::mir::interpret::{ErrorHandled, LitToConstError, LitToConstInput};
 use rustc_middle::mir::UserTypeProjection;
 use rustc_middle::mir::{BorrowKind, Field, Mutability};
 use rustc_middle::ty::subst::{GenericArg, SubstsRef};
@@ -834,6 +834,12 @@ fn lower_path(&mut self, qpath: &hir::QPath<'_>, id: hir::HirId, span: Span) ->
                     pattern
                 }
             }
+            Err(ErrorHandled::TooGeneric) => {
+                // While `Reported | Linted` cases will have diagnostics emitted already
+                // it is not true for TooGeneric case, so we need to give user more information.
+                self.tcx.sess.span_err(span, "constant pattern depends on a generic parameter");
+                pat_from_kind(PatKind::Wild)
+            }
             Err(_) => {
                 self.tcx.sess.span_err(span, "could not evaluate constant pattern");
                 pat_from_kind(PatKind::Wild)