From e4ebd02d4528ac3fbfc70ee1abcd95fcbd44d66e Mon Sep 17 00:00:00 2001 From: Owen Avery Date: Tue, 18 Feb 2025 21:20:45 -0500 Subject: [PATCH] nr2.0: Implement macro_use for modules gcc/rust/ChangeLog: * resolve/rust-early-name-resolver-2.0.cc: Include rust-attribute-values.h. (Early::visit): If a module has a macro_use attribute, avoid pushing a new textual macro scope. gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. Signed-off-by: Owen Avery --- .../resolve/rust-early-name-resolver-2.0.cc | 18 ++++++++++++++++-- gcc/testsuite/rust/compile/nr2/exclude | 3 --- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc index cdd8d164347..319bc1d28ac 100644 --- a/gcc/rust/resolve/rust-early-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-early-name-resolver-2.0.cc @@ -22,6 +22,7 @@ #include "rust-toplevel-name-resolver-2.0.h" #include "rust-attributes.h" #include "rust-finalize-imports-2.0.h" +#include "rust-attribute-values.h" namespace Rust { namespace Resolver2_0 { @@ -227,11 +228,24 @@ Early::visit (AST::BlockExpr &block) void Early::visit (AST::Module &module) { - textual_scope.push (); + bool is_macro_use = false; + + for (const auto &attr : module.get_outer_attrs ()) + { + if (attr.get_path ().as_string () == Values::Attributes::MACRO_USE) + { + is_macro_use = true; + break; + } + } + + if (!is_macro_use) + textual_scope.push (); DefaultResolver::visit (module); - textual_scope.pop (); + if (!is_macro_use) + textual_scope.pop (); } void diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude index 6e17eca1c20..f74c2ac6c66 100644 --- a/gcc/testsuite/rust/compile/nr2/exclude +++ b/gcc/testsuite/rust/compile/nr2/exclude @@ -24,12 +24,9 @@ lookup_err1.rs macros/mbe/macro43.rs macros/mbe/macro44.rs macros/mbe/macro6.rs -macros/mbe/macro_use1.rs multiple_bindings1.rs multiple_bindings2.rs -nested_macro_use1.rs nested_macro_use2.rs -nested_macro_use3.rs not_find_value_in_scope.rs privacy5.rs privacy8.rs