Skip to content

Commit

Permalink
fix crashes
Browse files Browse the repository at this point in the history
  • Loading branch information
lcnr committed Dec 18, 2024
1 parent 085d931 commit 4d5aaa0
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 7 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_borrowck/src/region_infer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2230,7 +2230,7 @@ impl<'tcx> RegionDefinition<'tcx> {
fn new(universe: ty::UniverseIndex, rv_origin: RegionVariableOrigin) -> Self {
// Create a new region definition. Note that, for free
// regions, the `external_name` field gets updated later in
// `init_universal_regions`.
// `init_free_and_bound_regions`.

let origin = match rv_origin {
RegionVariableOrigin::Nll(origin) => origin,
Expand Down
6 changes: 0 additions & 6 deletions tests/crashes/124021.rs

This file was deleted.

15 changes: 15 additions & 0 deletions tests/ui/borrowck/overwrite-anon-late-param-regions.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// A regression test for #124021. When liberating the late bound regions here
// we encounter multiple `LateBoundRegion::Anon`. These ended up resulting in
// distinct nll vars, but mapped to the same `RegionKind::LateParam`. This
// then caused an ICE when trying to fetch lazily computed information for the
// nll var of an overwritten liberated bound region.
#![feature(type_alias_impl_trait)]
type Opaque2<'a> = impl Sized + 'a;

fn test2() -> impl for<'a, 'b> Fn((&'a str, &'b str)) -> (Opaque2<'a>, Opaque2<'a>) {
|x| x
//~^ ERROR lifetime may not live long enough
//~| ERROR expected generic lifetime parameter, found `'a`
}

fn main() {}
21 changes: 21 additions & 0 deletions tests/ui/borrowck/overwrite-anon-late-param-regions.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
error: lifetime may not live long enough
--> $DIR/overwrite-anon-late-param-regions.rs:10:9
|
LL | |x| x
| - ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
| |
| has type `(&str, &'1 str)`
| has type `(&'2 str, &str)`

error[E0792]: expected generic lifetime parameter, found `'a`
--> $DIR/overwrite-anon-late-param-regions.rs:10:5
|
LL | type Opaque2<'a> = impl Sized + 'a;
| -- this generic parameter must be used with a generic lifetime parameter
...
LL | |x| x
| ^^^^^

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0792`.

0 comments on commit 4d5aaa0

Please sign in to comment.