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
 
