Rollup merge of #49730 - sinkuu:fix_ice_49556, r=cramertj

Fix ICE with impl Trait

Fixes https://github.com/rust-lang/rust/issues/49556#issuecomment-379154713. May or may not fix 49556 itself. Closures like `|x: &'a _| x` has `ClosureSubsts` of `fn(&'a _) -> &'(ReScope) _`, so `tcx.note_and_explain_free_region` (called [here](a143462783/src/librustc/infer/anon_types/mod.rs (L572))) panics.
This commit is contained in:
kennytm 2018-04-12 03:38:16 +08:00
commit 484e6f0ada
No known key found for this signature in database
GPG key ID: FEF6C8051D0E013C
3 changed files with 29 additions and 3 deletions

View file

@ -533,10 +533,14 @@ impl<'cx, 'gcx, 'tcx> TypeFolder<'gcx, 'tcx> for ReverseMapper<'cx, 'gcx, 'tcx>
match r {
// ignore bound regions that appear in the type (e.g., this
// would ignore `'r` in a type like `for<'r> fn(&'r u32)`.
ty::ReLateBound(..) => return r,
ty::ReLateBound(..) |
// ignore `'static`, as that can appear anywhere
ty::ReStatic => return r,
ty::ReStatic |
// ignore `ReScope`, as that can appear anywhere
// See `src/test/run-pass/issue-49556.rs` for example.
ty::ReScope(..) => return r,
_ => { }
}

View file

@ -181,7 +181,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
self.msg_span_from_early_bound_and_free_regions(region)
},
ty::ReStatic => ("the static lifetime".to_owned(), None),
_ => bug!(),
_ => bug!("{:?}", region),
}
}