[gcc r14-7351] gccrs: enr: Fetch module items during early name resolution
Arthur Cohen
cohenarthur@gcc.gnu.org
Tue Jan 16 17:24:40 GMT 2024
https://gcc.gnu.org/g:eba557860627a8ce1bb37d1427469db99cb0c059
commit r14-7351-geba557860627a8ce1bb37d1427469db99cb0c059
Author: Arthur Cohen <arthur.cohen@embecosm.com>
Date: Thu Mar 2 16:56:33 2023 +0100
gccrs: enr: Fetch module items during early name resolution
This is important as public macros can be present in other modules,
which would otherwise not be loaded until the expansion phase
happening right after the early name resolution.
gcc/rust/ChangeLog:
* resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit): Move
unloaded module item loading to...
* expand/rust-attribute-visitor.cc (AttrVisitor::visit): ...here.
Diff:
---
gcc/rust/expand/rust-attribute-visitor.cc | 9 ---------
gcc/rust/resolve/rust-early-name-resolver.cc | 6 ++++++
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/gcc/rust/expand/rust-attribute-visitor.cc b/gcc/rust/expand/rust-attribute-visitor.cc
index 3b3bb3a17eb..1365cb8c74a 100644
--- a/gcc/rust/expand/rust-attribute-visitor.cc
+++ b/gcc/rust/expand/rust-attribute-visitor.cc
@@ -2148,15 +2148,6 @@ AttrVisitor::visit (AST::Module &module)
}
}
- // Parse the module's items if they haven't been expanded and the file
- // should be parsed (i.e isn't hidden behind an untrue or impossible cfg
- // directive)
- if (!module.is_marked_for_strip ()
- && module.get_kind () == AST::Module::ModuleKind::UNLOADED)
- {
- module.load_items ();
- }
-
// strip items if required
expand_pointer_allow_strip (module.get_items ());
}
diff --git a/gcc/rust/resolve/rust-early-name-resolver.cc b/gcc/rust/resolve/rust-early-name-resolver.cc
index c6cbdb0a21b..1dfbff56c2f 100644
--- a/gcc/rust/resolve/rust-early-name-resolver.cc
+++ b/gcc/rust/resolve/rust-early-name-resolver.cc
@@ -581,6 +581,12 @@ EarlyNameResolver::visit (AST::Method &method)
void
EarlyNameResolver::visit (AST::Module &module)
{
+ // Parse the module's items if they haven't been expanded and the file
+ // should be parsed (i.e isn't hidden behind an untrue or impossible cfg
+ // directive)
+ if (module.get_kind () == AST::Module::UNLOADED)
+ module.load_items ();
+
scoped (module.get_node_id (), [&module, this] () {
for (auto &item : module.get_items ())
item->accept_vis (*this);
More information about the Gcc-cvs
mailing list