Index: src/Parser/ExpressionNode.cpp
===================================================================
--- src/Parser/ExpressionNode.cpp	(revision cc0aa8c572ef3a7665decdf700fcfc1722893531)
+++ src/Parser/ExpressionNode.cpp	(revision 45ee1728c7f098a172d35db8ad17ebe5bdb9cfbf)
@@ -9,7 +9,7 @@
 // Author           : Peter A. Buhr
 // Created On       : Sat May 16 13:17:07 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Dec 14 18:57:07 2023
-// Update Count     : 1087
+// Last Modified By : Andrew Beach
+// Last Modified On : Fri Aug 23 10:22:00 2024
+// Update Count     : 1088
 //
 
@@ -780,4 +780,14 @@
 } // build_compoundLiteral
 
+ast::Expr * build_va_arg( const CodeLocation & location,
+		ExpressionNode * function, DeclarationNode * declaration ) {
+	return build_func( location,
+		new ExpressionNode(
+			build_varref( location, new std::string( "__builtin_va_arg" ) ) ),
+		function->set_last( new ExpressionNode( new ast::TypeExpr( location,
+			maybeMoveBuildType( declaration ) ) ) )
+	);
+}
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/Parser/ExpressionNode.hpp
===================================================================
--- src/Parser/ExpressionNode.hpp	(revision cc0aa8c572ef3a7665decdf700fcfc1722893531)
+++ src/Parser/ExpressionNode.hpp	(revision 45ee1728c7f098a172d35db8ad17ebe5bdb9cfbf)
@@ -83,4 +83,5 @@
 ast::Expr * build_func( const CodeLocation &, ExpressionNode * function, ExpressionNode * expr_node );
 ast::Expr * build_compoundLiteral( const CodeLocation &, DeclarationNode * decl_node, InitializerNode * kids );
+ast::Expr * build_va_arg( const CodeLocation &, ExpressionNode * function, DeclarationNode * type );
 
 ast::Expr * build_enum_pos_expr( const CodeLocation &, ast::Expr * expr_node );
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision cc0aa8c572ef3a7665decdf700fcfc1722893531)
+++ src/Parser/parser.yy	(revision 45ee1728c7f098a172d35db8ad17ebe5bdb9cfbf)
@@ -792,7 +792,5 @@
 		{ $$ = new ExpressionNode( build_func( yylloc, $1, $3 ) ); }
 	| VA_ARG '(' primary_expression ',' declaration_specifier_nobody abstract_parameter_declarator_opt ')'
-		// { SemanticError( yylloc, "va_arg is currently unimplemented." ); $$ = nullptr; }
-		{ $$ = new ExpressionNode( build_func( yylloc, new ExpressionNode( build_varref( yylloc, new string( "__builtin_va_arg" ) ) ),
-											   $3->set_last( (ExpressionNode *)($6 ? $6->addType( $5 ) : $5) ) ) ); }
+		{ $$ = new ExpressionNode( build_va_arg( yylloc, $3, ( $6 ? $6->addType( $5 ) : $5 ) ) ); }
 	| postfix_expression '`' identifier					// CFA, postfix call
 		{ $$ = new ExpressionNode( build_func( yylloc, new ExpressionNode( build_varref( yylloc, build_postfix_name( $3 ) ) ), $1 ) ); }
