File tree Expand file tree Collapse file tree 3 files changed +50
-2
lines changed
compiler/rustc_borrowck/src/region_infer
tests/ui/type-alias-impl-trait Expand file tree Collapse file tree 3 files changed +50
-2
lines changed Original file line number Diff line number Diff line change @@ -80,8 +80,16 @@ impl<'tcx> RegionInferenceContext<'tcx> {
8080 NllRegionVariableOrigin :: FreeRegion => self
8181 . universal_regions
8282 . universal_regions ( )
83- . filter ( |& ur| self . universal_region_relations . equal ( vid, ur) )
84- . find_map ( |ur| self . definitions [ ur] . external_name ) ,
83+ . filter ( |& ur| {
84+ use crate :: universal_regions:: RegionClassification as Class ;
85+ matches ! (
86+ self . universal_regions. region_classification( ur) ,
87+ Some ( Class :: Global | Class :: Local )
88+ )
89+ } )
90+ . filter ( |& ur| ur != self . universal_regions . fr_fn_body )
91+ . find ( |& ur| self . universal_region_relations . equal ( vid, ur) )
92+ . map ( |ur| self . definitions [ ur] . external_name . unwrap ( ) ) ,
8593 NllRegionVariableOrigin :: Placeholder ( placeholder) => {
8694 Some ( ty:: Region :: new_placeholder ( infcx. tcx , placeholder) )
8795 }
Original file line number Diff line number Diff line change 1+ #![ feature( type_alias_impl_trait) ]
2+
3+ mod case1 {
4+ type Opaque < ' x > = impl Sized + ' x ;
5+ fn foo < ' s > ( ) -> Opaque < ' s > {
6+ let _ = || { let _: Opaque < ' s > = ( ) ; } ;
7+ //~^ ERROR expected generic lifetime parameter, found `'_`
8+ }
9+ }
10+
11+ mod case2 {
12+ type Opaque < ' x > = impl Sized + ' x ;
13+ fn foo < ' s > ( ) -> Opaque < ' s > {
14+ let _ = || -> Opaque < ' s > { } ;
15+ //~^ ERROR expected generic lifetime parameter, found `'_`
16+ }
17+ }
18+
19+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ error[E0792]: expected generic lifetime parameter, found `'_`
2+ --> $DIR/defined-in-closure-external-lifetime.rs:6:29
3+ |
4+ LL | type Opaque<'x> = impl Sized + 'x;
5+ | -- this generic parameter must be used with a generic lifetime parameter
6+ LL | fn foo<'s>() -> Opaque<'s> {
7+ LL | let _ = || { let _: Opaque<'s> = (); };
8+ | ^^^^^^^^^^
9+
10+ error[E0792]: expected generic lifetime parameter, found `'_`
11+ --> $DIR/defined-in-closure-external-lifetime.rs:14:34
12+ |
13+ LL | type Opaque<'x> = impl Sized + 'x;
14+ | -- this generic parameter must be used with a generic lifetime parameter
15+ LL | fn foo<'s>() -> Opaque<'s> {
16+ LL | let _ = || -> Opaque<'s> {};
17+ | ^^
18+
19+ error: aborting due to 2 previous errors
20+
21+ For more information about this error, try `rustc --explain E0792`.
You can’t perform that action at this time.
0 commit comments