Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 2737b37a999fcdc438fd90a4afef0ccdc9059bfb)
+++ src/Parser/parser.yy	(revision 366f5cd47f06469e6c39617fdc1be75acd3f4943)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri May  1 11:01:45 2026
-// Update Count     : 7320
+// Last Modified On : Tue Jun 23 12:37:08 2026
+// Update Count     : 7350
 //
 
@@ -393,5 +393,5 @@
 %token DISABLE ENABLE TRY THROW THROWRESUME AT			// CFA
 %token ASM												// C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
-%token ALIGNAS ALIGNOF GENERIC STATICASSERT				// C11
+%token ALIGNAS ALIGNOF __ALIGNOF GENERIC STATICASSERT	// C11/C23
 
 // names and constants: lexer differentiates between identifier and typedef names
@@ -432,5 +432,5 @@
 %type<expr> constant
 %type<expr> tuple						tuple_expression_list
-%type<oper> ptrref_operator				unary_operator				assignment_operator			simple_assignment_operator	compound_assignment_operator
+%type<oper> ptrref_operator				alignof_operator			unary_operator				assignment_operator			simple_assignment_operator	compound_assignment_operator
 %type<expr> primary_expression			postfix_expression			unary_expression
 %type<expr> cast_expression_list		cast_expression				exponential_expression		multiplicative_expression	additive_expression
@@ -933,8 +933,10 @@
 	| SIZEOF '(' attribute_list type_no_function ')'
 		{ $$ = new ExpressionNode( new ast::SizeofExpr( yylloc, maybeMoveBuildType( $4->addQualifiers( $3 ) ) ) ); }
-	| ALIGNOF unary_expression							// GCC, variable alignment
-		{ $$ = new ExpressionNode( new ast::AlignofExpr( yylloc, new ast::TypeofType( maybeMoveBuild( $2 ) ) ) ); }
-	| ALIGNOF '(' type_no_function ')'					// GCC, type alignment
-		{ $$ = new ExpressionNode( new ast::AlignofExpr( yylloc, maybeMoveBuildType( $3 ) ) ); }
+	| alignof_operator unary_expression						// GCC, variable alignment
+		{ $$ = new ExpressionNode( new ast::AlignofExpr( yylloc, new ast::TypeofType( maybeMoveBuild( $2 ) ),
+					$1 == OperKinds::AlignOf ? ast::AlignofExpr::Alignof : ast::AlignofExpr::__Alignof ) ); }
+	| alignof_operator '(' type_no_function ')'					// GCC, type alignment
+		{ $$ = new ExpressionNode( new ast::AlignofExpr( yylloc, maybeMoveBuildType( $3 ),
+					$1 == OperKinds::AlignOf ? ast::AlignofExpr::Alignof : ast::AlignofExpr::__Alignof ) ); }
 
 		// Cannot use rule "type", which includes cfa_abstract_function, for sizeof/alignof, because of S/R problems on
@@ -942,7 +944,7 @@
 	| SIZEOF '(' cfa_abstract_function ')'
 		{ $$ = new ExpressionNode( new ast::SizeofExpr( yylloc, maybeMoveBuildType( $3 ) ) ); }
-	| ALIGNOF '(' cfa_abstract_function ')'				// GCC, type alignment
-		{ $$ = new ExpressionNode( new ast::AlignofExpr( yylloc, maybeMoveBuildType( $3 ) ) ); }
-
+	| alignof_operator '(' cfa_abstract_function ')'			// GCC, type alignment
+		{ $$ = new ExpressionNode( new ast::AlignofExpr( yylloc, maybeMoveBuildType( $3 ),
+					$1 == OperKinds::AlignOf ? ast::AlignofExpr::Alignof : ast::AlignofExpr::__Alignof ) ); }
 	| OFFSETOF '(' type_no_function ',' identifier ')'
 		{ $$ = new ExpressionNode( build_offsetOf( yylloc, $3, build_varref( yylloc, $5 ) ) ); }
@@ -956,4 +958,9 @@
 	| COUNTOF '(' type_no_function ')'
 		{ $$ = new ExpressionNode( new ast::CountofExpr( yylloc, maybeMoveBuildType( $3 ) ) ); }
+	;
+
+alignof_operator:
+	ALIGNOF										{ $$ = OperKinds::AlignOf; }
+	| __ALIGNOF									{ $$ = OperKinds::__AlignOf; }
 	;
 
