diff options
| author | Ben Gamari <bgamari.foss@gmail.com> | 2014-07-09 15:47:55 -0400 |
|---|---|---|
| committer | Ben Gamari <bgamari.foss@gmail.com> | 2014-07-15 19:34:41 -0400 |
| commit | c6c1a22c563e0840f0efcccfe01a496114ac6ef0 (patch) | |
| tree | ce92464ce76a3bc6273f57ff936417b758fb11b1 | |
| parent | 741bb1a57e42c3a5e23ef9b01d4fc806b3fc56af (diff) | |
| download | rust-c6c1a22c563e0840f0efcccfe01a496114ac6ef0.tar.gz rust-c6c1a22c563e0840f0efcccfe01a496114ac6ef0.zip | |
middle::subst: Better handling of parameter lookup failure
| -rw-r--r-- | src/librustc/middle/subst.rs | 16 |
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 |
