aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2025-04-04 14:18:33 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2025-04-14 18:23:53 +0200
commit6dcbbcd27c534df3a4b8d0d0d0319677b8edee08 (patch)
treeeddb083352bab3e9d24a3e913268bd202533dda9
parenteb5eee065b3e5fe189ea1f51dc88eae7dc4c25d6 (diff)
downloadgcc-6dcbbcd27c534df3a4b8d0d0d0319677b8edee08.zip
gcc-6dcbbcd27c534df3a4b8d0d0d0319677b8edee08.tar.gz
gcc-6dcbbcd27c534df3a4b8d0d0d0319677b8edee08.tar.bz2
gccrs: nr2.0: Do not resolve modules this run if they are unloaded
Instead, mark the visitor as dirty and wait for the next round of the fixed point to take care of them. This avoids issues with module items being loaded while not being stripped yet. gcc/rust/ChangeLog: * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Return if module is unloaded.
-rw-r--r--gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
index 8863be7..ba37dee 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
@@ -113,7 +113,17 @@ TopLevel::visit (AST::Module &module)
// This was copied from the old early resolver method
// 'accumulate_escaped_macros'
if (module.get_kind () == AST::Module::UNLOADED)
- module.load_items ();
+ {
+ module.load_items ();
+
+ // If the module was previously unloaded, then we don't want to visit it
+ // this time around as the CfgStrip hasn't run on its inner items yet.
+ // Skip it for now, mark the visitor as dirty and try again
+
+ dirty = true;
+
+ return;
+ }
DefaultResolver::visit (module);