From e61773669a1db6755c4355d9bb705531e622008f Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Tue, 7 Apr 2026 12:51:16 +0200 Subject: [PATCH] Inline macro calls in assoc item position logic --- .../rustc_resolve/src/build_reduced_graph.rs | 47 ++++++++++--------- compiler/rustc_resolve/src/def_collector.rs | 2 +- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/compiler/rustc_resolve/src/build_reduced_graph.rs b/compiler/rustc_resolve/src/build_reduced_graph.rs index 0cf719f03691..86a47c72cbf7 100644 --- a/compiler/rustc_resolve/src/build_reduced_graph.rs +++ b/compiler/rustc_resolve/src/build_reduced_graph.rs @@ -1418,28 +1418,8 @@ pub(crate) fn brg_visit_assoc_item(&mut self, item: &'a AssocItem, ctxt: AssocCt AssocItemKind::Type(box TyAlias { ident, .. }) => (ident, TypeNS), - AssocItemKind::MacCall(_) => { - match ctxt { - AssocCtxt::Trait => { - self.visit_invoc_in_module(item.id); - } - AssocCtxt::Impl { .. } => { - let invoc_id = item.id.placeholder_to_expn_id(); - if !self.r.glob_delegation_invoc_ids.contains(&invoc_id) { - self.r - .impl_unexpanded_invocations - .entry(self.r.invocation_parent(invoc_id)) - .or_default() - .insert(invoc_id); - } - self.visit_invoc(item.id); - } - } - return; - } - - AssocItemKind::DelegationMac(..) => { - span_bug!(item.span, "delegation mac should already have been removed") + AssocItemKind::MacCall(_) | AssocItemKind::DelegationMac(..) => { + span_bug!(item.span, "{item:#?} should already have been removed") } }; let vis = self.resolve_visibility(&item.vis); @@ -1472,6 +1452,29 @@ pub(crate) fn brg_visit_assoc_item(&mut self, item: &'a AssocItem, ctxt: AssocCt visit::walk_assoc_item(self, item, ctxt); } + pub(crate) fn visit_assoc_item_mac_call( + &mut self, + item: &'a Item, + ctxt: AssocCtxt, + ) { + match ctxt { + AssocCtxt::Trait => { + self.visit_invoc_in_module(item.id); + } + AssocCtxt::Impl { .. } => { + let invoc_id = item.id.placeholder_to_expn_id(); + if !self.r.glob_delegation_invoc_ids.contains(&invoc_id) { + self.r + .impl_unexpanded_invocations + .entry(self.r.invocation_parent(invoc_id)) + .or_default() + .insert(invoc_id); + } + self.visit_invoc(item.id); + } + } + } + pub(crate) fn brg_visit_attribute(&mut self, attr: &'a ast::Attribute) { if !attr.is_doc_comment() && attr::is_builtin_attr(attr) { self.r diff --git a/compiler/rustc_resolve/src/def_collector.rs b/compiler/rustc_resolve/src/def_collector.rs index 35ecbfc10d61..dffb528a4434 100644 --- a/compiler/rustc_resolve/src/def_collector.rs +++ b/compiler/rustc_resolve/src/def_collector.rs @@ -378,7 +378,7 @@ fn visit_assoc_item(&mut self, i: &'a AssocItem, ctxt: visit::AssocCtxt) { AssocItemKind::Type(box TyAlias { ident, .. }) => (*ident, DefKind::AssocTy), AssocItemKind::MacCall(..) => { self.visit_macro_invoc(i.id); - self.brg_visit_assoc_item(i, ctxt); + self.visit_assoc_item_mac_call(i, ctxt); return; } AssocItemKind::DelegationMac(..) => {