about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGary Guo <gary@garyguo.net>2020-07-30 06:17:18 +0100
committerGary Guo <gary@garyguo.net>2020-07-30 06:17:18 +0100
commit8046fea62263d50fc196ce07ccdc4534af321441 (patch)
tree4a1aaa903af8c6aae09835be05a64ddebb31fff3
parent6e50a225fd67576e43bab1d4dfa3c97f310786a8 (diff)
downloadrust-8046fea62263d50fc196ce07ccdc4534af321441.tar.gz
rust-8046fea62263d50fc196ce07ccdc4534af321441.zip
Improve diagnostics when constant pattern is too generic
-rw-r--r--src/librustc_mir_build/hair/pattern/mod.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/librustc_mir_build/hair/pattern/mod.rs b/src/librustc_mir_build/hair/pattern/mod.rs
index a5c87bc963f..f813ba0c077 100644
--- a/src/librustc_mir_build/hair/pattern/mod.rs
+++ b/src/librustc_mir_build/hair/pattern/mod.rs
@@ -16,7 +16,7 @@ use rustc_hir::pat_util::EnumerateAndAdjustIterator;
 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 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> {
                     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)