Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision cd28605bcdaf022d1b2b5730527c9488d92363fb)
+++ src/Parser/parser.yy	(revision 3e5e32cfbbd281d3366f00338f63eb2bfb890578)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  6 11:40:06 2025
-// Update Count     : 7236
+// Last Modified On : Mon Feb 10 21:56:46 2025
+// Update Count     : 7252
 //
 
@@ -2123,18 +2123,18 @@
 
 cfa_typedef_declaration:								// CFA
-	TYPEDEF cfa_variable_specifier
-		{
-			typedefTable.addToEnclosingScope( *$2->name, TYPEDEFname, "cfa_typedef_declaration 1" );
-			$$ = $2->addTypedef();
-		}
-	| TYPEDEF cfa_function_specifier
-		{
-			typedefTable.addToEnclosingScope( *$2->name, TYPEDEFname, "cfa_typedef_declaration 2" );
-			$$ = $2->addTypedef();
-		}
-	| cfa_typedef_declaration ',' identifier
-		{
-			typedefTable.addToEnclosingScope( *$3, TYPEDEFname, "cfa_typedef_declaration 3" );
-			$$ = $1->set_last( $1->cloneType( $3 ) );
+	TYPEDEF attribute_list_opt cfa_variable_specifier
+		{
+			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "cfa_typedef_declaration 1" );
+			$$ = $3->addTypedef()->addQualifiers( $2 );
+		}
+	| TYPEDEF attribute_list_opt cfa_function_specifier
+		{
+			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "cfa_typedef_declaration 2" );
+			$$ = $3->addTypedef()->addQualifiers( $2 );
+		}
+	| cfa_typedef_declaration ',' attribute_list_opt identifier
+		{
+			typedefTable.addToEnclosingScope( *$4, TYPEDEFname, "cfa_typedef_declaration 3" );
+			$$ = $1->set_last( $1->cloneType( $4 )->addQualifiers( $3 ) );
 		}
 	;
@@ -2144,12 +2144,5 @@
 
 typedef_declaration:
-	TYPEDEF type_specifier declarator
-		{
-			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "typedef_declaration 1" );
-			if ( $2->type->forall || ($2->type->kind == TypeData::Aggregate && $2->type->aggregate.params) ) {
-				SemanticError( yylloc, "forall qualifier in typedef is currently unimplemented." ); $$ = nullptr;
-			} else $$ = $3->addType( $2 )->addTypedef(); // watchout frees $2 and $3
-		}
-	| TYPEDEF attribute_list type_specifier declarator
+	TYPEDEF attribute_list_opt type_specifier declarator
 		{
 			typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname, "typedef_declaration 1" );
@@ -2158,8 +2151,8 @@
 			} else $$ = $4->addType( $3 )->addTypedef()->addQualifiers( $2 ); // watchout frees $3 and $4
 		}
-	| typedef_declaration ',' declarator
-		{
-			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "typedef_declaration 2" );
-			$$ = $1->set_last( $1->cloneBaseType( $3 )->addTypedef() );
+	| typedef_declaration ',' attribute_list_opt declarator
+		{
+			typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname, "typedef_declaration 2" );
+			$$ = $1->set_last( $1->cloneBaseType( $4 )->addTypedef()->addQualifiers( $3 ) );
 		}
 	| type_qualifier_list TYPEDEF type_specifier declarator // remaining OBSOLESCENT (see 2 )
@@ -2174,11 +2167,7 @@
 		// deprecated GCC, naming expression type: typedef name = exp; gives a name to the type of an expression
 	TYPEDEF identifier '=' assignment_expression
-		{
-			SemanticError( yylloc, "TYPEDEF expression is deprecated, use typeof(...) instead." ); $$ = nullptr;
-		}
+		{ SemanticError( yylloc, "TYPEDEF expression is deprecated, use typeof(...) instead." ); $$ = nullptr; }
 	| typedef_expression ',' identifier '=' assignment_expression
-		{
-			SemanticError( yylloc, "TYPEDEF expression is deprecated, use typeof(...) instead." ); $$ = nullptr;
-		}
+		{ SemanticError( yylloc, "TYPEDEF expression is deprecated, use typeof(...) instead." ); $$ = nullptr; }
 	;
 
