Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 2a4b0884c14643e09650daaeb3a6667b5bff6b48)
+++ 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 \
