about summary refs log tree commit diff
diff options
context:
space:
mode:
-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