Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/Parser/ExpressionNode.cc	(revision 2c37f342ac0268eb11e69f3b8923c90052dcc23e)
@@ -348,5 +348,5 @@
 
 Expression *build_valexpr( StatementNode *s ) {
-	return new UntypedValofExpr( maybeMoveBuild< Statement >(s), nullptr );
+	return new StmtExpr( dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >(s) ) );
 }
 Expression *build_typevalue( DeclarationNode *decl ) {
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/Parser/ParseNode.h	(revision 2c37f342ac0268eb11e69f3b8923c90052dcc23e)
@@ -415,4 +415,6 @@
 				result->location = cur->location;
 				* out++ = result;
+			} else {
+				assertf(false, "buildList unknown type");
 			} // if
 		} catch( SemanticError &e ) {
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
+++ src/Parser/StatementNode.cc	(revision 2c37f342ac0268eb11e69f3b8923c90052dcc23e)
@@ -175,6 +175,6 @@
 
 Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt ) {
-	std::list< Statement * > branches;
-	buildMoveList< Statement, StatementNode >( catch_stmt, branches );
+	std::list< CatchStmt * > branches;
+	buildMoveList< CatchStmt, StatementNode >( catch_stmt, branches );
 	CompoundStmt *tryBlock = safe_dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >(try_stmt));
 	FinallyStmt *finallyBlock = dynamic_cast< FinallyStmt * >(maybeMoveBuild< Statement >(finally_stmt) );
