@@ -4,7 +4,6 @@ use crate::errors::OpaqueHiddenTypeDiag;
44use crate :: infer:: { InferCtxt , InferOk } ;
55use crate :: traits:: { self , PredicateObligation } ;
66use hir:: def_id:: { DefId , LocalDefId } ;
7- use hir:: OpaqueTyOrigin ;
87use rustc_data_structures:: fx:: FxIndexMap ;
98use rustc_data_structures:: sync:: Lrc ;
109use rustc_hir as hir;
@@ -54,16 +53,13 @@ impl<'tcx> InferCtxt<'tcx> {
5453 }
5554
5655 let mut obligations = vec ! [ ] ;
57- let replace_opaque_type = |def_id : DefId | {
58- def_id. as_local ( ) . is_some_and ( |def_id| self . opaque_type_origin ( def_id) . is_some ( ) )
59- } ;
6056 let value = value. fold_with ( & mut BottomUpFolder {
6157 tcx : self . tcx ,
6258 lt_op : |lt| lt,
6359 ct_op : |ct| ct,
6460 ty_op : |ty| match * ty. kind ( ) {
6561 ty:: Alias ( ty:: Opaque , ty:: AliasTy { def_id, .. } )
66- if replace_opaque_type ( def_id) && !ty. has_escaping_bound_vars ( ) =>
62+ if self . can_define_opaque_ty ( def_id) && !ty. has_escaping_bound_vars ( ) =>
6763 {
6864 let def_span = self . tcx . def_span ( def_id) ;
6965 let span = if span. contains ( def_span) { def_span } else { span } ;
@@ -143,7 +139,7 @@ impl<'tcx> InferCtxt<'tcx> {
143139 // let x = || foo(); // returns the Opaque assoc with `foo`
144140 // }
145141 // ```
146- if self . opaque_type_origin ( def_id) . is_none ( ) {
142+ if ! self . can_define_opaque_ty ( def_id) {
147143 return None ;
148144 }
149145
@@ -153,8 +149,8 @@ impl<'tcx> InferCtxt<'tcx> {
153149 // no one encounters it in practice.
154150 // It does occur however in `fn fut() -> impl Future<Output = i32> { async { 42 } }`,
155151 // where it is of no concern, so we only check for TAITs.
156- if let Some ( OpaqueTyOrigin :: TyAlias { .. } ) =
157- b_def_id . as_local ( ) . and_then ( |b_def_id| self . opaque_type_origin ( b_def_id) )
152+ if self . can_define_opaque_ty ( b_def_id )
153+ && self . tcx . is_type_alias_impl_trait ( b_def_id)
158154 {
159155 self . tcx . dcx ( ) . emit_err ( OpaqueHiddenTypeDiag {
160156 span : cause. span ,
@@ -366,15 +362,6 @@ impl<'tcx> InferCtxt<'tcx> {
366362 op : |r| self . member_constraint ( opaque_type_key, span, concrete_ty, r, & choice_regions) ,
367363 } ) ;
368364 }
369-
370- /// Returns the origin of the opaque type `def_id` if we're currently
371- /// in its defining scope.
372- #[ instrument( skip( self ) , level = "trace" , ret) ]
373- pub fn opaque_type_origin ( & self , def_id : LocalDefId ) -> Option < OpaqueTyOrigin > {
374- let origin = self . tcx . opaque_type_origin ( def_id) ;
375-
376- self . defining_opaque_types . contains ( & def_id) . then_some ( origin)
377- }
378365}
379366
380367/// Visitor that requires that (almost) all regions in the type visited outlive
0 commit comments