about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_ty_utils/src/opaque_types.rs20
1 files changed, 10 insertions, 10 deletions
diff --git a/compiler/rustc_ty_utils/src/opaque_types.rs b/compiler/rustc_ty_utils/src/opaque_types.rs
index 146f7cd371c..919cbcfc951 100644
--- a/compiler/rustc_ty_utils/src/opaque_types.rs
+++ b/compiler/rustc_ty_utils/src/opaque_types.rs
@@ -291,9 +291,7 @@ fn opaque_types_defined_by<'tcx>(tcx: TyCtxt<'tcx>, item: LocalDefId) -> &'tcx [
                     // An item is allowed to constrain opaques declared within its own body (but not nested within
                     // nested functions).
                     for id in find_taits_declared_in_body(tcx, item) {
-                        if let DefKind::TyAlias = tcx.def_kind(id) {
-                            collector.opaques.extend(tcx.opaque_types_defined_by(id))
-                        }
+                        collector.opaques.extend(tcx.opaque_types_defined_by(id))
                     }
                 }
                 DefKind::TyAlias | DefKind::AssocTy => {
@@ -335,22 +333,24 @@ fn opaque_types_defined_by<'tcx>(tcx: TyCtxt<'tcx>, item: LocalDefId) -> &'tcx [
     }
 }
 
+#[instrument(level = "trace", skip(tcx), ret)]
 fn find_taits_declared_in_body(tcx: TyCtxt<'_>, item: LocalDefId) -> Vec<LocalDefId> {
     let body = tcx.hir().body(tcx.hir().body_owned_by(item)).value;
-    #[derive(Default, Debug)]
-    struct TaitInBodyFinder {
+    struct TaitInBodyFinder<'tcx> {
         /// Ids of type aliases found in the body
         type_aliases: Vec<LocalDefId>,
+        tcx: TyCtxt<'tcx>,
     }
-    impl<'v> intravisit::Visitor<'v> for TaitInBodyFinder {
-        #[instrument(level = "trace")]
+    impl<'v> intravisit::Visitor<'v> for TaitInBodyFinder<'_> {
+        #[instrument(level = "trace", skip(self))]
         fn visit_nested_item(&mut self, id: rustc_hir::ItemId) {
             let id = id.owner_id.def_id;
-            self.type_aliases.push(id);
+            if let DefKind::TyAlias = self.tcx.def_kind(id) {
+                self.type_aliases.push(id);
+            }
         }
     }
-    let mut visitor = TaitInBodyFinder::default();
-    trace!(?body);
+    let mut visitor = TaitInBodyFinder { type_aliases: Default::default(), tcx };
     visitor.visit_expr(body);
     visitor.type_aliases
 }