[gccrs COMMIT 07/10] Add a function for default outer attribute checks

gerris.rs@gmail.com gerris.rs@gmail.com
Tue Mar 31 09:40:33 GMT 2026


From: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>

Add an helper function to keep most of the attribute checking short.

gcc/rust/ChangeLog:

	* checks/errors/rust-builtin-attribute-checker.cc (BuiltinAttributeChecker::visit):
	Deduplicate lines using the new templated function within the visitor
	functions.
	* checks/errors/rust-builtin-attribute-checker.h (class BuiltinAttributeChecker):
	Create a new templated function that achieves the default attribute
	checking operations.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.


Commit on github: https://github.com/Rust-GCC/gccrs/commit/0ec73cdf0a7450db60b8a1886cb6bea8993d3099

The commit has been mentioned in the following pull-request(s):
 - https://github.com/Rust-GCC/gccrs/pull/4505

 .../errors/rust-builtin-attribute-checker.cc  | 67 ++++---------------
 .../errors/rust-builtin-attribute-checker.h   |  7 ++
 2 files changed, 21 insertions(+), 53 deletions(-)

diff --git a/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc b/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
index 8cb251f76..a2bf83f93 100644
--- a/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
+++ b/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
@@ -367,28 +367,19 @@ BuiltinAttributeChecker::visit (AST::Attribute &attribute)
 void
 BuiltinAttributeChecker::visit (AST::Module &module)
 {
-  for (auto &attr : module.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, module);
-
-  AST::DefaultASTVisitor::visit (module);
+  default_outer_attribute_check (module);
 }
 
 void
-BuiltinAttributeChecker::visit (AST::ExternCrate &crate)
+BuiltinAttributeChecker::visit (AST::ExternCrate &extern_crate)
 {
-  for (auto &attr : crate.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, crate);
-
-  AST::DefaultASTVisitor::visit (crate);
+  default_outer_attribute_check (extern_crate);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::UseDeclaration &declaration)
 {
-  for (auto &attr : declaration.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, declaration);
-
-  AST::DefaultASTVisitor::visit (declaration);
+  default_outer_attribute_check (declaration);
 }
 
 void
@@ -492,55 +483,37 @@ BuiltinAttributeChecker::visit (AST::Function &function)
 void
 BuiltinAttributeChecker::visit (AST::TypeAlias &alias)
 {
-  for (auto &attr : alias.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, alias);
-
-  AST::DefaultASTVisitor::visit (alias);
+  default_outer_attribute_check (alias);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::StructStruct &struct_item)
 {
-  for (auto &attr : struct_item.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, struct_item);
-
-  AST::DefaultASTVisitor::visit (struct_item);
+  default_outer_attribute_check (struct_item);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::TupleStruct &tuple_struct)
 {
-  for (auto &attr : tuple_struct.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, tuple_struct);
-
-  AST::DefaultASTVisitor::visit (tuple_struct);
+  default_outer_attribute_check (tuple_struct);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::Enum &enumeration)
 {
-  for (auto &attr : enumeration.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, enumeration);
-
-  AST::DefaultASTVisitor::visit (enumeration);
+  default_outer_attribute_check (enumeration);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::Union &u)
 {
-  for (auto &attr : u.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, u);
-
-  AST::DefaultASTVisitor::visit (u);
+  default_outer_attribute_check (u);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::ConstantItem &item)
 {
-  for (auto &attr : item.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, item);
-
-  AST::DefaultASTVisitor::visit (item);
+  default_outer_attribute_check (item);
 }
 
 void
@@ -565,37 +538,25 @@ BuiltinAttributeChecker::visit (AST::StaticItem &item)
 void
 BuiltinAttributeChecker::visit (AST::Trait &trait)
 {
-  for (auto &attr : trait.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, trait);
-
-  AST::DefaultASTVisitor::visit (trait);
+  default_outer_attribute_check (trait);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::InherentImpl &impl)
 {
-  for (auto &attr : impl.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, impl);
-
-  AST::DefaultASTVisitor::visit (impl);
+  default_outer_attribute_check (impl);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::TraitImpl &impl)
 {
-  for (auto &attr : impl.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, impl);
-
-  AST::DefaultASTVisitor::visit (impl);
+  default_outer_attribute_check (impl);
 }
 
 void
 BuiltinAttributeChecker::visit (AST::ExternBlock &block)
 {
-  for (auto &attr : block.get_outer_attrs ())
-    check_valid_attribute_for_item (attr, block);
-
-  AST::DefaultASTVisitor::visit (block);
+  default_outer_attribute_check (block);
 }
 
 } // namespace Analysis
diff --git a/gcc/rust/checks/errors/rust-builtin-attribute-checker.h b/gcc/rust/checks/errors/rust-builtin-attribute-checker.h
index 6717de8ab..957243a1a 100644
--- a/gcc/rust/checks/errors/rust-builtin-attribute-checker.h
+++ b/gcc/rust/checks/errors/rust-builtin-attribute-checker.h
@@ -28,6 +28,13 @@ class BuiltinAttributeChecker : public AST::DefaultASTVisitor
 {
   using AST::DefaultASTVisitor::visit;
 
+  template <class I> void default_outer_attribute_check (I item)
+  {
+    for (auto &attr : item.get_outer_attrs ())
+      check_valid_attribute_for_item (attr, item);
+    AST::DefaultASTVisitor::visit (item);
+  }
+
 public:
   BuiltinAttributeChecker ();
   void go (AST::Crate &crate);
-- 
2.53.0



More information about the Gcc-rust mailing list