Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision cb304ca4a4f0b5385962a0bc957fb46da37c2092)
+++ src/AST/Pass.impl.hpp	(revision 7e1cb7975a3692730c6ff342344e783504773766)
@@ -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 );
 	})
 
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision cb304ca4a4f0b5385962a0bc957fb46da37c2092)
+++ src/Common/PassVisitor.impl.h	(revision 7e1cb7975a3692730c6ff342344e783504773766)
@@ -636,4 +636,5 @@
 		maybeAccept_impl( node->parameters, *this );
 		maybeAccept_impl( node->members   , *this );
+		maybeAccept_impl( node->attributes, *this );
 	}
 
@@ -656,4 +657,5 @@
 		maybeAccept_impl( node->parameters, *this );
 		maybeAccept_impl( node->members   , *this );
+		maybeAccept_impl( node->attributes, *this );
 	}
 
@@ -676,4 +678,5 @@
 		maybeMutate_impl( node->parameters, *this );
 		maybeMutate_impl( node->members   , *this );
+		maybeMutate_impl( node->attributes, *this );
 	}
 
@@ -697,4 +700,5 @@
 		maybeAccept_impl( node->parameters, *this );
 		maybeAccept_impl( node->members   , *this );
+		maybeAccept_impl( node->attributes, *this );
 	}
 
@@ -714,4 +718,5 @@
 		maybeAccept_impl( node->parameters, *this );
 		maybeAccept_impl( node->members   , *this );
+		maybeAccept_impl( node->attributes, *this );
 	}
 
@@ -732,4 +737,5 @@
 		maybeMutate_impl( node->parameters, *this );
 		maybeMutate_impl( node->members   , *this );
+		maybeMutate_impl( node->attributes, *this );
 	}
 
@@ -750,4 +756,5 @@
 	maybeAccept_impl( node->parameters, *this );
 	maybeAccept_impl( node->members   , *this );
+	maybeAccept_impl( node->attributes, *this );
 
 	VISIT_END( node );
@@ -763,4 +770,5 @@
 	maybeAccept_impl( node->parameters, *this );
 	maybeAccept_impl( node->members   , *this );
+	maybeAccept_impl( node->attributes, *this );
 
 	VISIT_END( node );
@@ -776,4 +784,5 @@
 	maybeMutate_impl( node->parameters, *this );
 	maybeMutate_impl( node->members   , *this );
+	maybeMutate_impl( node->attributes, *this );
 
 	MUTATE_END( Declaration, node );
@@ -790,4 +799,5 @@
 		maybeAccept_impl( node->parameters, *this );
 		maybeAccept_impl( node->members   , *this );
+		maybeAccept_impl( node->attributes, *this );
 	}
 
@@ -805,4 +815,5 @@
 		maybeAccept_impl( node->parameters, *this );
 		maybeAccept_impl( node->members   , *this );
+		maybeAccept_impl( node->attributes, *this );
 	}
 
@@ -820,4 +831,5 @@
 		maybeMutate_impl( node->parameters, *this );
 		maybeMutate_impl( node->members   , *this );
+		maybeMutate_impl( node->attributes, *this );
 	}
 
@@ -3856,5 +3868,5 @@
 
 //--------------------------------------------------------------------------
-// Attribute
+// Constant
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( Constant * node ) {
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision cb304ca4a4f0b5385962a0bc957fb46da37c2092)
+++ src/SymTab/Validate.cc	(revision 7e1cb7975a3692730c6ff342344e783504773766)
@@ -1152,4 +1152,5 @@
 		GuardScope( typedeclNames );
 		mutateAll( aggr->parameters, * visitor );
+		mutateAll( aggr->attributes, * visitor );
 
 		// unroll mutateAll for aggr->members so that implicit typedefs for nested types are added to the aggregate body.
Index: tests/.expect/typedefRedef-ERR1.txt
===================================================================
--- tests/.expect/typedefRedef-ERR1.txt	(revision cb304ca4a4f0b5385962a0bc957fb46da37c2092)
+++ tests/.expect/typedefRedef-ERR1.txt	(revision 7e1cb7975a3692730c6ff342344e783504773766)
@@ -1,3 +1,3 @@
-typedefRedef.cfa:69:25: warning: Compiled
+typedefRedef.cfa:75:25: warning: Compiled
 typedefRedef.cfa:4:1 error: Cannot redefine typedef: Foo
-typedefRedef.cfa:59:1 error: Cannot redefine typedef: ARR
+typedefRedef.cfa:65:1 error: Cannot redefine typedef: ARR
Index: tests/.expect/typedefRedef.txt
===================================================================
--- tests/.expect/typedefRedef.txt	(revision cb304ca4a4f0b5385962a0bc957fb46da37c2092)
+++ tests/.expect/typedefRedef.txt	(revision 7e1cb7975a3692730c6ff342344e783504773766)
@@ -1,1 +1,1 @@
-typedefRedef.cfa:69:25: warning: Compiled
+typedefRedef.cfa:75:25: warning: Compiled
Index: tests/typedefRedef.cfa
===================================================================
--- tests/typedefRedef.cfa	(revision cb304ca4a4f0b5385962a0bc957fb46da37c2092)
+++ tests/typedefRedef.cfa	(revision 7e1cb7975a3692730c6ff342344e783504773766)
@@ -45,4 +45,10 @@
 typedef int X2;
 
+X2 value  __attribute__((aligned(4 * sizeof(X2))));
+
+__attribute__((aligned(4 * sizeof(X2)))) struct rseq_cs {
+	int foo;
+};
+
 // xxx - this doesn't work yet due to parsing problems with generic types
 // #ifdef __CFA__
