Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision bc179fd360744a02c6edeb16e33c54e7dc099d34)
+++ src/AST/Pass.impl.hpp	(revision 572a02f5b5344913a38b98db07112eace8a6ec2c)
@@ -479,5 +479,5 @@
 			guard_symtab guard { *this };
 			// implicit add __func__ identifier as specified in the C manual 6.4.2.2
-			static ast::ptr< ast::ObjectDecl > func{ new ast::ObjectDecl{ 
+			static ast::ptr< ast::ObjectDecl > func{ new ast::ObjectDecl{
 				CodeLocation{}, "__func__",
 				new ast::ArrayType{
@@ -522,6 +522,7 @@
 	VISIT({
 		guard_symtab guard { * this };
-		maybe_accept( node, &StructDecl::params  );
-		maybe_accept( node, &StructDecl::members );
+		maybe_accept( node, &StructDecl::params     );
+		maybe_accept( node, &StructDecl::members    );
+		maybe_accept( node, &StructDecl::attributes );
 	})
 
@@ -543,6 +544,7 @@
 	VISIT({
 		guard_symtab guard { * this };
-		maybe_accept( node, &UnionDecl::params  );
-		maybe_accept( node, &UnionDecl::members );
+		maybe_accept( node, &UnionDecl::params     );
+		maybe_accept( node, &UnionDecl::members    );
+		maybe_accept( node, &UnionDecl::attributes );
 	})
 
@@ -562,6 +564,7 @@
 	VISIT(
 		// unlike structs, traits, and unions, enums inject their members into the global scope
-		maybe_accept( node, &EnumDecl::params  );
-		maybe_accept( node, &EnumDecl::members );
+		maybe_accept( node, &EnumDecl::params     );
+		maybe_accept( node, &EnumDecl::members    );
+		maybe_accept( node, &EnumDecl::attributes );
 	)
 
@@ -577,6 +580,7 @@
 	VISIT({
 		guard_symtab guard { *this };
-		maybe_accept( node, &TraitDecl::params  );
-		maybe_accept( node, &TraitDecl::members );
+		maybe_accept( node, &TraitDecl::params     );
+		maybe_accept( node, &TraitDecl::members    );
+		maybe_accept( node, &TraitDecl::attributes );
 	})
 
