Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/CodeGen/GenType.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -39,4 +39,5 @@
 		virtual void visit( EnumInstType *enumInst );
 		virtual void visit( TypeInstType *typeInst );
+		virtual void visit( VarArgsType *varArgsType );
   
 	  private:
@@ -191,4 +192,9 @@
 	}
 
+	void GenType::visit( VarArgsType *varArgsType ) {
+		typeString = "__builtin_va_list " + typeString;
+		// don't handle qualifiers, var args pack shouldn't have any
+	}
+
 	void GenType::handleQualifiers( Type *type ) {
 		if ( type->get_isConst() ) {
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/Makefile.in	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -171,4 +171,5 @@
 	SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) \
+	SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-Constant.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-Expression.$(OBJEXT) \
@@ -369,5 +370,6 @@
 	SynTree/ArrayType.cc SynTree/FunctionType.cc \
 	SynTree/ReferenceToType.cc SynTree/TupleType.cc \
-	SynTree/TypeofType.cc SynTree/AttrType.cc SynTree/Constant.cc \
+	SynTree/TypeofType.cc SynTree/AttrType.cc \
+	SynTree/VarArgsType.cc SynTree/Constant.cc \
 	SynTree/Expression.cc SynTree/TupleExpr.cc \
 	SynTree/CommaExpr.cc SynTree/TypeExpr.cc \
@@ -703,4 +705,6 @@
 SynTree/driver_cfa_cpp-AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \
 	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
 SynTree/driver_cfa_cpp-Constant.$(OBJEXT): SynTree/$(am__dirstamp) \
 	SynTree/$(DEPDIR)/$(am__dirstamp)
@@ -867,4 +871,5 @@
 	-rm -f SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT)
 	-rm -f SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT)
+	-rm -f SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT)
 	-rm -f SynTree/driver_cfa_cpp-Visitor.$(OBJEXT)
 	-rm -f SynTree/driver_cfa_cpp-VoidType.$(OBJEXT)
@@ -974,4 +979,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-TypeSubstitution.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-TypeofType.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VoidType.Po@am__quote@
@@ -2048,4 +2054,18 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-AttrType.obj `if test -f 'SynTree/AttrType.cc'; then $(CYGPATH_W) 'SynTree/AttrType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/AttrType.cc'; fi`
+
+SynTree/driver_cfa_cpp-VarArgsType.o: SynTree/VarArgsType.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-VarArgsType.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo -c -o SynTree/driver_cfa_cpp-VarArgsType.o `test -f 'SynTree/VarArgsType.cc' || echo '$(srcdir)/'`SynTree/VarArgsType.cc
+@am__fastdepCXX_TRUE@	$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SynTree/VarArgsType.cc' object='SynTree/driver_cfa_cpp-VarArgsType.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.o `test -f 'SynTree/VarArgsType.cc' || echo '$(srcdir)/'`SynTree/VarArgsType.cc
+
+SynTree/driver_cfa_cpp-VarArgsType.obj: SynTree/VarArgsType.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-VarArgsType.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='SynTree/VarArgsType.cc' object='SynTree/driver_cfa_cpp-VarArgsType.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi`
 
 SynTree/driver_cfa_cpp-Constant.o: SynTree/Constant.cc
Index: src/ResolvExpr/AdjustExprType.cc
===================================================================
--- src/ResolvExpr/AdjustExprType.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/AdjustExprType.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -36,4 +36,5 @@
 		virtual Type* mutate( TypeInstType *aggregateUseType );
 		virtual Type* mutate( TupleType *tupleType );
+		virtual Type* mutate( VarArgsType *varArgsType );
 
 		const TypeEnvironment &env;
@@ -111,4 +112,8 @@
 		return tupleType;
 	}
+
+	Type *AdjustExprType::mutate( VarArgsType *varArgsType ) {
+		return varArgsType;
+	}
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/CommonType.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -38,4 +38,5 @@
 		virtual void visit( TypeInstType *aggregateUseType );
 		virtual void visit( TupleType *tupleType );
+		virtual void visit( VarArgsType *varArgsType );
 
 		template< typename RefType > void handleRefType( RefType *inst, Type *other );
@@ -213,4 +214,7 @@
 	void CommonType::visit( TupleType *tupleType ) {
 	}
+
+	void CommonType::visit( VarArgsType *varArgsType ) {
+	}
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/ConversionCost.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -247,4 +247,10 @@
 		} // if
 	}
+
+	void ConversionCost::visit(VarArgsType *varArgsType) {
+		if ( VarArgsType *destAsVarArgs = dynamic_cast< VarArgsType* >( dest ) ) {
+			cost = Cost::zero;
+		}
+	}
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/ConversionCost.h
===================================================================
--- src/ResolvExpr/ConversionCost.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/ConversionCost.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -40,4 +40,5 @@
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
+		virtual void visit(VarArgsType *varArgsType);
 	  protected:
 		Type *dest;
Index: src/ResolvExpr/PtrsAssignable.cc
===================================================================
--- src/ResolvExpr/PtrsAssignable.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/PtrsAssignable.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -38,4 +38,5 @@
 		virtual void visit( TypeInstType *inst );
 		virtual void visit( TupleType *tupleType );
+		virtual void visit( VarArgsType *varArgsType );
 	  private:
 		Type *dest;
@@ -137,4 +138,7 @@
 ///   }
 	}
+
+	void PtrsAssignable::visit( VarArgsType *varArgsType ) {
+	}
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/PtrsCastable.cc
===================================================================
--- src/ResolvExpr/PtrsCastable.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/PtrsCastable.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -39,4 +39,5 @@
 		virtual void visit(TypeInstType *inst);
 		virtual void visit(TupleType *tupleType);
+		virtual void visit(VarArgsType *varArgsType);
 	  private:
 		Type *dest;
@@ -139,4 +140,8 @@
 		result = objectCast( dest, env, indexer );
 	}
+
+	void PtrsCastable::visit(VarArgsType *varArgsType) {
+		result = objectCast( dest, env, indexer );
+	}
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/RenameVars.cc
===================================================================
--- src/ResolvExpr/RenameVars.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/RenameVars.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -113,4 +113,9 @@
 	}
 
+	void RenameVars::visit( VarArgsType *varArgsType ) {
+		typeBefore( varArgsType );
+		typeAfter( varArgsType );
+	}
+
 	void RenameVars::typeBefore( Type *type ) {
 		if ( ! type->get_forall().empty() ) {
Index: src/ResolvExpr/RenameVars.h
===================================================================
--- src/ResolvExpr/RenameVars.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/RenameVars.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -43,4 +43,5 @@
 		virtual void visit( TypeInstType *aggregateUseType );
 		virtual void visit( TupleType *tupleType );
+		virtual void visit( VarArgsType *varArgsType );
 
 		void typeBefore( Type *type );
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/ResolvExpr/Unify.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -59,4 +59,5 @@
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
+		virtual void visit(VarArgsType *varArgsType);
 
 		template< typename RefType > void handleRefType( RefType *inst, Type *other );
@@ -582,4 +583,8 @@
 	}
 
+	void Unify::visit(VarArgsType *varArgsType) {
+		result = dynamic_cast< VarArgsType* >( type2 );
+	}
+
 } // namespace ResolvExpr
 
Index: src/SymTab/FixFunction.cc
===================================================================
--- src/SymTab/FixFunction.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SymTab/FixFunction.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -72,4 +72,8 @@
 		return tupleType;
 	}
+
+	Type * FixFunction::mutate(VarArgsType *varArgsType) {
+		return varArgsType;
+	}
 } // namespace SymTab
 
Index: src/SymTab/FixFunction.h
===================================================================
--- src/SymTab/FixFunction.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SymTab/FixFunction.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -41,4 +41,5 @@
 		virtual Type* mutate(TypeInstType *aggregateUseType);
 		virtual Type* mutate(TupleType *tupleType);
+		virtual Type* mutate(VarArgsType *varArgsType);
   
 		bool isVoid;
Index: src/SymTab/ImplementationType.cc
===================================================================
--- src/SymTab/ImplementationType.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SymTab/ImplementationType.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -40,4 +40,5 @@
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
+		virtual void visit(VarArgsType *varArgsType);
 
 		Type *result;			// synthesized
@@ -116,4 +117,7 @@
 		result = newType;
 	}
+
+	void ImplementationType::visit(VarArgsType *varArgsType) {
+	}
 } // namespace SymTab
 
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SymTab/Mangler.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -224,4 +224,8 @@
 		acceptAll( tupleType->get_types(), *this );
 		mangleName << "_";
+	}
+
+	void Mangler::visit( VarArgsType *varArgsType ) {
+		mangleName << "VARGS";
 	}
 
Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SymTab/Mangler.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -45,4 +45,5 @@
 		virtual void visit( TypeInstType *aggregateUseType );
 		virtual void visit( TupleType *tupleType );
+		virtual void visit( VarArgsType *varArgsType );
   
 		std::string get_mangleName() { return mangleName.str(); }
Index: src/SymTab/TypeEquality.cc
===================================================================
--- src/SymTab/TypeEquality.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SymTab/TypeEquality.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -41,4 +41,5 @@
 		virtual void visit( EnumInstType *enumInst );
 		virtual void visit( TypeInstType *typeInst );
+		virtual void visit( VarArgsType *varArgsType );
 
 		void handleQualifiers( Type * t );
@@ -191,3 +192,10 @@
 		}
 	}
+
+	void TypeEquality::visit( VarArgsType *varArgsType ) {
+		// don't handle qualifiers; var args pack shouldn't have any
+		if ( ! dynamic_cast< VarArgsType * >( other ) ) {
+			result = false;
+		}
+	}
 } // namespace SymTab
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/Mutator.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -421,4 +421,9 @@
 }
 
+Type *Mutator::mutate( VarArgsType *varArgsType ) {
+	mutateAll( varArgsType->get_forall(), *this );
+	return varArgsType;
+}
+
 Initializer *Mutator::mutate( SingleInit *singleInit ) {
 	singleInit->set_value( singleInit->get_value()->acceptMutator( *this ) );
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/Mutator.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -90,4 +90,5 @@
 	virtual Type* mutate( TypeofType *typeofType );
 	virtual Type* mutate( AttrType *attrType );
+	virtual Type* mutate( VarArgsType *varArgsType );
 
 	virtual Initializer* mutate( SingleInit *singleInit );
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/SynTree.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -97,4 +97,5 @@
 class TypeofType;
 class AttrType;
+class VarArgsType;
 
 class Initializer;
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/Type.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -400,4 +400,14 @@
 };
 
+/// Represents the GCC built-in varargs type
+class VarArgsType : public Type {
+	VarArgsType();
+
+	virtual VarArgsType *clone() const { return new VarArgsType( *this ); }
+	virtual void accept( Visitor &v ) { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+};
+
 inline Type::Qualifiers &Type::Qualifiers::operator+=( const Type::Qualifiers &other ) {
 	isConst |= other.isConst;
Index: src/SynTree/TypeSubstitution.cc
===================================================================
--- src/SynTree/TypeSubstitution.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/TypeSubstitution.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -198,4 +198,8 @@
 }
 
+Type * TypeSubstitution::mutate( VarArgsType *varArgsType ) {
+	return handleType( varArgsType );
+}
+
 void TypeSubstitution::print( std::ostream &os, int indent ) const {
 	os << std::string( indent, ' ' ) << "Types:" << std::endl;
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/TypeSubstitution.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -74,4 +74,5 @@
 	virtual Type* mutate(ContextInstType *aggregateUseType);
 	virtual Type* mutate(TupleType *tupleType);
+	virtual Type* mutate(VarArgsType *varArgsType);
 	
 	// TODO: worry about traversing into a forall-qualified function type or type decl with assertions
Index: src/SynTree/VarArgsType.cc
===================================================================
--- src/SynTree/VarArgsType.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
+++ src/SynTree/VarArgsType.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -0,0 +1,29 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// VarArgsType.cc --
+//
+// Author           : Aaron B. Moss
+// Created On       : Thu Feb 25 16:34:00 2016
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Thu Feb 25 16:34:00 2016
+// Update Count     : 1
+//
+
+#include "Type.h"
+
+VarArgsType::VarArgsType() : Type( Type::Qualifiers() ) {}
+
+void VarArgsType::print( std::ostream &os, int indent ) const {
+	Type::print( os, indent );
+	os << "builtin var args pack";
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/Visitor.cc	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -355,4 +355,8 @@
 }
 
+void Visitor::visit( VarArgsType *varArgsType ) {
+	acceptAll( varArgsType->get_forall(), *this );
+}
+
 void Visitor::visit( SingleInit *singleInit ) {
 	singleInit->get_value()->accept( *this );
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/Visitor.h	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -90,4 +90,5 @@
 	virtual void visit( TypeofType *typeofType );
 	virtual void visit( AttrType *attrType );
+	virtual void visit( VarArgsType *varArgsType );
 
 	virtual void visit( SingleInit *singleInit );
Index: src/SynTree/module.mk
===================================================================
--- src/SynTree/module.mk	(revision 91b8a177877f60b6a4199f4198832bd8072b7374)
+++ src/SynTree/module.mk	(revision 44b70880e982c036e8482060172be8e37b709925)
@@ -25,4 +25,5 @@
        SynTree/TypeofType.cc \
        SynTree/AttrType.cc \
+       SynTree/VarArgsType.cc \
        SynTree/Constant.cc \
        SynTree/Expression.cc \
