From c6c1a22c563e0840f0efcccfe01a496114ac6ef0 Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Wed, 9 Jul 2014 15:47:55 -0400 Subject: [PATCH] middle::subst: Better handling of parameter lookup failure --- src/librustc/middle/subst.rs | 16 ++++++++++++++-- 1 file 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