Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision 8f60f0b80dde503acf9a6e096722d033fe5571f7)
+++ src/SynTree/Declaration.cc	(revision 8bf784a480c5767f00136e0ea0f9174c442f327f)
@@ -57,5 +57,9 @@
 
 std::ostream & operator<<( std::ostream & out, const Declaration * decl ) {
-	decl->print( out );
+	if ( decl ){
+		decl->print( out );
+	} else {
+		out << "nullptr";
+	}
 	return out;
 }
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 8f60f0b80dde503acf9a6e096722d033fe5571f7)
+++ src/SynTree/Expression.cc	(revision 8bf784a480c5767f00136e0ea0f9174c442f327f)
@@ -672,5 +672,9 @@
 
 std::ostream & operator<<( std::ostream & out, const Expression * expr ) {
-	expr->print( out );
+	if ( expr ) {
+		expr->print( out );
+	} else {
+		out << "nullptr";
+	}
 	return out;
 }
Index: src/SynTree/FunctionType.cc
===================================================================
--- src/SynTree/FunctionType.cc	(revision 8f60f0b80dde503acf9a6e096722d033fe5571f7)
+++ src/SynTree/FunctionType.cc	(revision 8bf784a480c5767f00136e0ea0f9174c442f327f)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// FunctionType.cc -- 
+// FunctionType.cc --
 //
 // Author           : Richard C. Bilson
@@ -19,4 +19,5 @@
 #include "Declaration.h"
 #include "Common/utility.h"
+#include "Tuples/Tuples.h"
 
 FunctionType::FunctionType( const Type::Qualifiers &tq, bool isVarArgs ) : Type( tq ), isVarArgs( isVarArgs ) {
@@ -31,4 +32,17 @@
 	deleteAll( returnVals );
 	deleteAll( parameters );
+}
+
+namespace {
+	bool containsTtype( const std::list<DeclarationWithType * > & l ) {
+		if ( ! l.empty() ) {
+			return Tuples::isTtype( l.back()->get_type() );
+		}
+		return false;
+	}
+}
+
+bool FunctionType::isTtype() const {
+	return containsTtype( returnVals ) || containsTtype( parameters );
 }
 
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 8f60f0b80dde503acf9a6e096722d033fe5571f7)
+++ src/SynTree/Statement.cc	(revision 8bf784a480c5767f00136e0ea0f9174c442f327f)
@@ -388,5 +388,9 @@
 
 std::ostream & operator<<( std::ostream & out, const Statement * statement ) {
-	statement->print( out );
+	if ( statement ) {
+		statement->print( out );
+	} else {
+		out << "nullptr";
+	}
 	return out;
 }
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision 8f60f0b80dde503acf9a6e096722d033fe5571f7)
+++ src/SynTree/Type.cc	(revision 8bf784a480c5767f00136e0ea0f9174c442f327f)
@@ -85,5 +85,9 @@
 
 std::ostream & operator<<( std::ostream & out, const Type * type ) {
-	type->print( out );
+	if ( type ) {
+		type->print( out );
+	} else {
+		out << "nullptr";
+	}
 	return out;
 }
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 8f60f0b80dde503acf9a6e096722d033fe5571f7)
+++ src/SynTree/Type.h	(revision 8bf784a480c5767f00136e0ea0f9174c442f327f)
@@ -204,6 +204,8 @@
 	std::list<DeclarationWithType*> & get_returnVals() { return returnVals; }
 	std::list<DeclarationWithType*> & get_parameters() { return parameters; }
-	bool get_isVarArgs() { return isVarArgs; }
+	bool get_isVarArgs() const { return isVarArgs; }
 	void set_isVarArgs( bool newValue ) { isVarArgs = newValue; }
+
+	bool isTtype() const;
 
 	virtual FunctionType *clone() const { return new FunctionType( *this ); }
Index: src/SynTree/TypeDecl.cc
===================================================================
--- src/SynTree/TypeDecl.cc	(revision 8f60f0b80dde503acf9a6e096722d033fe5571f7)
+++ src/SynTree/TypeDecl.cc	(revision 8bf784a480c5767f00136e0ea0f9174c442f327f)
@@ -18,5 +18,5 @@
 #include "Common/utility.h"
 
-TypeDecl::TypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type, Kind kind ) : Parent( name, sc, type ), kind( kind ), sized( kind == Any ) {
+TypeDecl::TypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type, Kind kind ) : Parent( name, sc, type ), kind( kind ), sized( kind == Any || kind == Ttype ) {
 }
 
@@ -25,5 +25,5 @@
 
 std::string TypeDecl::typeString() const {
-	static const char *kindNames[] = { "type", "incomplete type", "function type" };
+	static const char *kindNames[] = { "type", "incomplete type", "function type", "tuple type" };
 	return kindNames[ kind ];
 }
