Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 5f08961d04c47678910366c75e15d9ab91808630)
+++ src/CodeGen/CodeGenerator.cc	(revision 22bdc341837512b56d8c44d09bcff72ccbcaa321)
@@ -596,5 +596,13 @@
 			output << ")";
 		} // if
-		castExpr->get_arg()->accept( *visitor );
+		castExpr->arg->accept( *visitor );
+		output << ")";
+	}
+
+	void CodeGenerator::postvisit( KeywordCastExpr * castExpr ) {
+		assertf( ! genC, "KeywordCast should not reach code generation." );
+		extension( castExpr );
+		output << "((" << castExpr->targetString() << " &)";
+		castExpr->arg->accept( *visitor );
 		output << ")";
 	}
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 5f08961d04c47678910366c75e15d9ab91808630)
+++ src/CodeGen/CodeGenerator.h	(revision 22bdc341837512b56d8c44d09bcff72ccbcaa321)
@@ -69,4 +69,5 @@
 		void postvisit( LabelAddressExpr *addressExpr );
 		void postvisit( CastExpr *castExpr );
+		void postvisit( KeywordCastExpr * castExpr );
 		void postvisit( VirtualCastExpr *castExpr );
 		void postvisit( UntypedMemberExpr *memberExpr );
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 5f08961d04c47678910366c75e15d9ab91808630)
+++ src/CodeGen/GenType.cc	(revision 22bdc341837512b56d8c44d09bcff72ccbcaa321)
@@ -48,4 +48,6 @@
 		void postvisit( ZeroType * zeroType );
 		void postvisit( OneType * oneType );
+		void postvisit( TraitInstType * inst );
+		void postvisit( TypeofType * typeof );
 
 	  private:
@@ -289,4 +291,20 @@
 	}
 
+	void GenType::postvisit( TraitInstType * inst ) {
+		assertf( ! genC, "Trait types should not reach code generation." );
+		typeString = inst->name + " " + typeString;
+		handleQualifiers( inst );
+	}
+
+	void GenType::postvisit( TypeofType * typeof ) {
+		std::ostringstream os;
+		PassVisitor<CodeGenerator> cg( os, pretty, genC, lineMarks );
+		os << "typeof(";
+		typeof->expr->accept( cg );
+		os << ") " << typeString;
+		typeString = os.str();
+		handleQualifiers( typeof );
+	}
+
 	void GenType::handleQualifiers( Type * type ) {
 		if ( type->get_const() ) {
