Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision ba2356b7d4eb09a1a6fdad29b0b0dc5d4038829d)
+++ src/Parser/parser.yy	(revision fdca7c6f6e2133e49dd472b83d9f1632cb90e0b4)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 30 15:42:32 2017
-// Update Count     : 2318
+// Last Modified On : Thu May 18 18:06:17 2017
+// Update Count     : 2338
 //
 
@@ -85,4 +85,6 @@
 	} // for
 } // distExt
+
+bool forall = false;									// aggregate have one or more forall qualifiers ?
 %}
 
@@ -1556,6 +1558,8 @@
 sue_type_specifier:										// struct, union, enum + type specifier
 	elaborated_type
-	| type_qualifier_list elaborated_type
-		{ $$ = $2->addQualifiers( $1 ); }
+	| type_qualifier_list
+		{ if ( $1->type != nullptr && $1->type->forall ) forall = true; } // remember generic type
+	  elaborated_type
+		{ $$ = $3->addQualifiers( $1 ); }
 	| sue_type_specifier type_qualifier
 		{ $$ = $1->addQualifiers( $2 ); }
@@ -1613,5 +1617,9 @@
 		{ $$ = DeclarationNode::newAggregate( $1, new string( DeclarationNode::anonymous.newName() ), nullptr, $4, true )->addQualifiers( $2 ); }
 	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
-		{ typedefTable.makeTypedef( *$3 ); }
+		{
+			typedefTable.makeTypedef( *$3 );			// create typedef
+			if ( forall ) typedefTable.changeKind( *$3, TypedefTable::TG ); // possibly update
+			forall = false;								// reset
+		}
 	  '{' field_declaration_list '}'
 		{ $$ = DeclarationNode::newAggregate( $1, $3, nullptr, $6, true )->addQualifiers( $2 ); }
