diff options
| author | Matthew Jasper <mjjasper1@gmail.com> | 2019-06-03 13:46:38 +0100 |
|---|---|---|
| committer | Matthew Jasper <mjjasper1@gmail.com> | 2019-06-03 13:46:38 +0100 |
| commit | 2751b867a7fa0b14dbe5ca5f315e8f373bf8a5f3 (patch) | |
| tree | 89d44a03007215fdce46aa1d34ec4484b8f08acf | |
| parent | c57ed9d9478dcd12c854a0ef4e83c7f384ade060 (diff) | |
| download | rust-2751b867a7fa0b14dbe5ca5f315e8f373bf8a5f3.tar.gz rust-2751b867a7fa0b14dbe5ca5f315e8f373bf8a5f3.zip | |
Don't try to lower ReEmpty in NLL
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/type_check/free_region_relations.rs | 7 | ||||
| -rw-r--r-- | src/test/ui/nll/empty-type-predicate.rs | 11 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/librustc_mir/borrow_check/nll/type_check/free_region_relations.rs b/src/librustc_mir/borrow_check/nll/type_check/free_region_relations.rs index 3b663ef6dad..361353f8df4 100644 --- a/src/librustc_mir/borrow_check/nll/type_check/free_region_relations.rs +++ b/src/librustc_mir/borrow_check/nll/type_check/free_region_relations.rs @@ -334,6 +334,13 @@ impl UniversalRegionRelationsBuilder<'cx, 'gcx, 'tcx> { match outlives_bound { OutlivesBound::RegionSubRegion(r1, r2) => { + // `where Type:` is lowered to `where Type: 'empty` so that + // we check `Type` is well formed, but there's no use for + // this bound here. + if let ty::ReEmpty = r1 { + return; + } + // The bound says that `r1 <= r2`; we store `r2: r1`. let r1 = self.universal_regions.to_region_vid(r1); let r2 = self.universal_regions.to_region_vid(r2); diff --git a/src/test/ui/nll/empty-type-predicate.rs b/src/test/ui/nll/empty-type-predicate.rs new file mode 100644 index 00000000000..75431d40ce5 --- /dev/null +++ b/src/test/ui/nll/empty-type-predicate.rs @@ -0,0 +1,11 @@ +// Regression test for #61315 +// +// `dyn T:` is lowered to `dyn T: ReEmpty` - check that we don't ICE in NLL for +// the unexpected region. + +// compile-pass + +trait T {} +fn f() where dyn T: {} + +fn main() {} |
