Index: src/Parser/ExpressionNode.cpp
===================================================================
--- src/Parser/ExpressionNode.cpp	(revision 2737b37a999fcdc438fd90a4afef0ccdc9059bfb)
+++ src/Parser/ExpressionNode.cpp	(revision 366f5cd47f06469e6c39617fdc1be75acd3f4943)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri May  1 11:07:48 2026
-// Update Count     : 1128
+// Last Modified On : Mon Jun 22 16:30:56 2026
+// Update Count     : 1129
 //
 
@@ -591,5 +591,5 @@
 static const char * OperName[] = {						// must harmonize with OperKinds
 	// diadic
-	"SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?\\?", "?*?", "?/?", "?%?", "||", "&&",
+	"SizeOf", "AlignOf", "__alignof", "OffsetOf", "?+?", "?-?", "?\\?", "?*?", "?/?", "?%?", "||", "&&",
 	"?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
 	"?=?", "?@=?", "?\\=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
Index: src/Parser/ParseNode.hpp
===================================================================
--- src/Parser/ParseNode.hpp	(revision 2737b37a999fcdc438fd90a4afef0ccdc9059bfb)
+++ src/Parser/ParseNode.hpp	(revision 366f5cd47f06469e6c39617fdc1be75acd3f4943)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Dec  9 17:39:34 2023
-// Update Count     : 945
+// Last Modified On : Tue Jun 23 07:43:13 2026
+// Update Count     : 947
 //
 
@@ -94,5 +94,5 @@
 enum class OperKinds {
 	// diadic
-	SizeOf, AlignOf, OffsetOf, Plus, Minus, Exp, Mul, Div, Mod, Or, And,
+	SizeOf, AlignOf, __AlignOf, OffsetOf, Plus, Minus, Exp, Mul, Div, Mod, Or, And,
 	BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
 	Assign, AtAssn, ExpAssn, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 2737b37a999fcdc438fd90a4afef0ccdc9059bfb)
+++ src/Parser/lex.ll	(revision 366f5cd47f06469e6c39617fdc1be75acd3f4943)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu Jun  5 22:38:35 2025
- * Update Count     : 885
+ * Last Modified On : Tue Jun 23 07:44:07 2026
+ * Update Count     : 888
  */
 
@@ -56,6 +56,6 @@
 string * build_postfix_name( string * name );
 
-char *yyfilename;
-string *strtext;										// accumulate parts of character and string constant value
+char * yyfilename;
+string * strtext;										// accumulate parts of character and string constant value
 
 #define RETURN_LOCN(x)		yylval.tok.loc.file = yyfilename; yylval.tok.loc.line = yylineno; return( x )
@@ -225,8 +225,8 @@
 alignas			{ KEYWORD_RETURN(ALIGNAS); }			// CFA
 _Alignas		{ KEYWORD_RETURN(ALIGNAS); }			// C11
-alignof			{ KEYWORD_RETURN(ALIGNOF); }			// CFA
+alignof			{ KEYWORD_RETURN(ALIGNOF); }			// C23
 _Alignof		{ KEYWORD_RETURN(ALIGNOF); }			// C11
-__alignof		{ KEYWORD_RETURN(ALIGNOF); }			// GCC
-__alignof__		{ KEYWORD_RETURN(ALIGNOF); }			// GCC
+__alignof		{ KEYWORD_RETURN(__ALIGNOF); }			// GCC
+__alignof__		{ KEYWORD_RETURN(__ALIGNOF); }			// GCC
 and				{ QKEYWORD_RETURN(WAND); }				// CFA
 asm				{ KEYWORD_RETURN(ASM); }
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; }
 	;
 
