Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision bd87b1388ee4ad765a6177f6d6557689d24fb54e)
+++ src/SymTab/Validate.cc	(revision 0f409120e04790e326414ae4e2a72f100dd09092)
@@ -89,4 +89,5 @@
 		void previsit( StructDecl * aggregateDecl );
 		void previsit( UnionDecl * aggregateDecl );
+		void previsit( StaticAssertDecl * assertDecl );
 
 	  private:
@@ -296,6 +297,6 @@
 	}
 
-	bool isStructOrUnion( Declaration *decl ) {
-		return dynamic_cast< StructDecl * >( decl ) || dynamic_cast< UnionDecl * >( decl );
+	bool shouldHoist( Declaration *decl ) {
+		return dynamic_cast< StructDecl * >( decl ) || dynamic_cast< UnionDecl * >( decl ) || dynamic_cast< StaticAssertDecl * >( decl );
 	}
 
@@ -310,5 +311,5 @@
 		} // if
 		// Always remove the hoisted aggregate from the inner structure.
-		GuardAction( [aggregateDecl]() { filter( aggregateDecl->members, isStructOrUnion, false ); } );
+		GuardAction( [aggregateDecl]() { filter( aggregateDecl->members, shouldHoist, false ); } );
 	}
 
@@ -328,4 +329,10 @@
 		if ( inst->baseUnion ) {
 			declsToAddBefore.push_front( inst->baseUnion );
+		}
+	}
+
+	void HoistStruct::previsit( StaticAssertDecl * assertDecl ) {
+		if ( parentAggr ) {
+			declsToAddBefore.push_back( assertDecl );
 		}
 	}
