@@ -150,9 +150,6 @@ impl<'tcx> InferCtxt<'tcx> {
150150                        } 
151151                    } 
152152                    DefiningAnchor :: Bubble  => { } 
153-                     DefiningAnchor :: Error  => { 
154-                         return  None ; 
155-                     } 
156153                } 
157154                if  let  ty:: Alias ( ty:: Opaque ,  ty:: AliasTy  {  def_id :  b_def_id,  .. } )  = * b. kind ( )  { 
158155                    // We could accept this, but there are various ways to handle this situation, and we don't 
@@ -378,28 +375,14 @@ impl<'tcx> InferCtxt<'tcx> {
378375/// in its defining scope. 
379376#[ instrument( skip( self ) ,  level = "trace" ,  ret) ]  
380377    pub  fn  opaque_type_origin ( & self ,  def_id :  LocalDefId )  -> Option < OpaqueTyOrigin >  { 
381-         let  opaque_hir_id = self . tcx . local_def_id_to_hir_id ( def_id) ; 
382-         let  parent_def_id = match  self . defining_use_anchor  { 
383-             DefiningAnchor :: Bubble  | DefiningAnchor :: Error  => return  None , 
378+         let  defined_opaque_types = match  self . defining_use_anchor  { 
379+             DefiningAnchor :: Bubble  => return  None , 
384380            DefiningAnchor :: Bind ( bind)  => bind, 
385381        } ; 
386382
387383        let  origin = self . tcx . opaque_type_origin ( def_id) ; 
388-         let  in_definition_scope = match  origin { 
389-             // Async `impl Trait` 
390-             hir:: OpaqueTyOrigin :: AsyncFn ( parent)  => parent == parent_def_id, 
391-             // Anonymous `impl Trait` 
392-             hir:: OpaqueTyOrigin :: FnReturn ( parent)  => parent == parent_def_id, 
393-             // Named `type Foo = impl Bar;` 
394-             hir:: OpaqueTyOrigin :: TyAlias  {  in_assoc_ty,  .. }  => { 
395-                 if  in_assoc_ty { 
396-                     self . tcx . opaque_types_defined_by ( parent_def_id) . contains ( & def_id) 
397-                 }  else  { 
398-                     may_define_opaque_type ( self . tcx ,  parent_def_id,  opaque_hir_id) 
399-                 } 
400-             } 
401-         } ; 
402-         in_definition_scope. then_some ( origin) 
384+ 
385+         defined_opaque_types. contains ( & def_id) . then_some ( origin) 
403386    } 
404387} 
405388
@@ -656,43 +639,3 @@ impl<'tcx> InferCtxt<'tcx> {
656639        } 
657640    } 
658641} 
659- 
660- /// Returns `true` if `opaque_hir_id` is a sibling or a child of a sibling of `def_id`. 
661- /// 
662- /// Example: 
663- /// ```ignore UNSOLVED (is this a bug?) 
664- /// # #![feature(type_alias_impl_trait)] 
665- /// pub mod foo { 
666- ///     pub mod bar { 
667- ///         pub trait Bar { /* ... */ } 
668- ///         pub type Baz = impl Bar; 
669- /// 
670- ///         # impl Bar for () {} 
671- ///         fn f1() -> Baz { /* ... */ } 
672- ///     } 
673- ///     fn f2() -> bar::Baz { /* ... */ } 
674- /// } 
675- /// ``` 
676- /// 
677- /// Here, `def_id` is the `LocalDefId` of the defining use of the opaque type (e.g., `f1` or `f2`), 
678- /// and `opaque_hir_id` is the `HirId` of the definition of the opaque type `Baz`. 
679- /// For the above example, this function returns `true` for `f1` and `false` for `f2`. 
680- fn  may_define_opaque_type ( tcx :  TyCtxt < ' _ > ,  def_id :  LocalDefId ,  opaque_hir_id :  hir:: HirId )  -> bool  { 
681-     let  mut  hir_id = tcx. local_def_id_to_hir_id ( def_id) ; 
682- 
683-     // Named opaque types can be defined by any siblings or children of siblings. 
684-     let  scope = tcx. hir ( ) . get_defining_scope ( opaque_hir_id) ; 
685-     // We walk up the node tree until we hit the root or the scope of the opaque type. 
686-     while  hir_id != scope && hir_id != hir:: CRATE_HIR_ID  { 
687-         hir_id = tcx. hir ( ) . get_parent_item ( hir_id) . into ( ) ; 
688-     } 
689-     // Syntactically, we are allowed to define the concrete type if: 
690-     let  res = hir_id == scope; 
691-     trace ! ( 
692-         "may_define_opaque_type(def={:?}, opaque_node={:?}) = {}" , 
693-         tcx. hir_node( hir_id) , 
694-         tcx. hir_node( opaque_hir_id) , 
695-         res
696-     ) ; 
697-     res
698- } 
0 commit comments