about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2014-07-09 15:47:55 -0400
committerBen Gamari <bgamari.foss@gmail.com>2014-07-15 19:34:41 -0400
commitc6c1a22c563e0840f0efcccfe01a496114ac6ef0 (patch)
treece92464ce76a3bc6273f57ff936417b758fb11b1
parent741bb1a57e42c3a5e23ef9b01d4fc806b3fc56af (diff)
downloadrust-c6c1a22c563e0840f0efcccfe01a496114ac6ef0.tar.gz
rust-c6c1a22c563e0840f0efcccfe01a496114ac6ef0.zip
middle::subst: Better handling of parameter lookup failure
-rw-r--r--src/librustc/middle/subst.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/librustc/middle/subst.rs b/src/librustc/middle/subst.rs
index 8f7c157308e..5c2a70a46fd 100644
--- a/src/librustc/middle/subst.rs
+++ b/src/librustc/middle/subst.rs
@@ -570,10 +570,22 @@ impl<'a> TypeFolder for SubstFolder<'a> {
         // the specialized routine
         // `middle::typeck::check::regionmanip::replace_late_regions_in_fn_sig()`.
         match r {
-            ty::ReEarlyBound(_, space, i, _) => {
+            ty::ReEarlyBound(_, space, i, region_name) => {
                 match self.substs.regions {
                     ErasedRegions => ty::ReStatic,
-                    NonerasedRegions(ref regions) => *regions.get(space, i),
+                    NonerasedRegions(ref regions) =>
+                        match regions.opt_get(space, i) {
+                            Some(t) => *t,
+                            None => {
+                                let span = self.span.unwrap_or(DUMMY_SP);
+                                self.tcx().sess.span_bug(
+                                    span,
+                                    format!("Type parameter out of range \
+                                     when substituting in region {} (root type={})",
+                                    region_name.as_str(),
+                                    self.root_ty.repr(self.tcx())).as_slice());
+                            }
+                        }
                 }
             }
             _ => r