File tree Expand file tree Collapse file tree 3 files changed +64
-0
lines changed
compiler/rustc_borrowck/src/region_infer
tests/ui/type-alias-impl-trait Expand file tree Collapse file tree 3 files changed +64
-0
lines changed Original file line number Diff line number Diff line change @@ -192,6 +192,11 @@ impl<'tcx> RegionInferenceContext<'tcx> {
192192 . find ( |ur_vid| self . eval_equal ( vid, * * ur_vid) )
193193 . and_then ( |ur_vid| self . definitions [ * ur_vid] . external_name )
194194 . unwrap_or ( infcx. tcx . lifetimes . re_erased ) ,
195+ ty:: RePlaceholder ( _) => ty:: Region :: new_error_with_message (
196+ infcx. tcx ,
197+ concrete_type. span ,
198+ "hidden type contains placeholders, we don't support higher kinded opaques yet" ,
199+ ) ,
195200 _ => region,
196201 } ) ;
197202 debug ! ( ?universal_concrete_type) ;
Original file line number Diff line number Diff line change 1+ //! This test used to ICE because, while an error was emitted,
2+ //! we still tried to remap generic params used in the hidden type
3+ //! to the ones of the opaque type definition.
4+
5+ //@ edition: 2021
6+
7+ #![ feature( type_alias_impl_trait) ]
8+ use std:: future:: Future ;
9+
10+ type FutNothing < ' a > = impl ' a + Future < Output = ( ) > ;
11+ //~^ ERROR: unconstrained opaque type
12+
13+ async fn operation ( _: & mut ( ) ) -> ( ) {
14+ //~^ ERROR: concrete type differs from previous
15+ call ( operation) . await
16+ }
17+
18+ async fn call < F > ( _f : F )
19+ where
20+ for < ' any > F : FnMut ( & ' any mut ( ) ) -> FutNothing < ' any > ,
21+ {
22+ //~^ ERROR: expected generic lifetime parameter, found `'any`
23+ }
24+
25+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ error: unconstrained opaque type
2+ --> $DIR/hkl_forbidden4.rs:10:23
3+ |
4+ LL | type FutNothing<'a> = impl 'a + Future<Output = ()>;
5+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6+ |
7+ = note: `FutNothing` must be used in combination with a concrete type within the same module
8+
9+ error: concrete type differs from previous defining opaque type use
10+ --> $DIR/hkl_forbidden4.rs:13:1
11+ |
12+ LL | async fn operation(_: &mut ()) -> () {
13+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `FutNothing<'_>`, got `{async fn body@$DIR/hkl_forbidden4.rs:13:38: 16:2}`
14+ |
15+ note: previous use here
16+ --> $DIR/hkl_forbidden4.rs:15:5
17+ |
18+ LL | call(operation).await
19+ | ^^^^^^^^^^^^^^^
20+
21+ error[E0792]: expected generic lifetime parameter, found `'any`
22+ --> $DIR/hkl_forbidden4.rs:21:1
23+ |
24+ LL | type FutNothing<'a> = impl 'a + Future<Output = ()>;
25+ | -- this generic parameter must be used with a generic lifetime parameter
26+ ...
27+ LL | / {
28+ LL | |
29+ LL | | }
30+ | |_^
31+
32+ error: aborting due to 3 previous errors
33+
34+ For more information about this error, try `rustc --explain E0792`.
You can’t perform that action at this time.
0 commit comments