Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision c0b9f5ded36473dc7b92bbbc6bd3f6d4b87c6a1b)
+++ src/SynTree/Expression.cc	(revision 5e2c348d7200f13e88bb910c1e095982dd72bc7b)
@@ -597,6 +597,20 @@
 
 StmtExpr::StmtExpr( CompoundStmt *statements ) : statements( statements ) {
+	computeResult();
+}
+StmtExpr::StmtExpr( const StmtExpr &other ) : Expression( other ), statements( other.statements->clone() ) {
+	cloneAll( other.returnDecls, returnDecls );
+	cloneAll( other.dtors, dtors );
+}
+StmtExpr::~StmtExpr() {
+	delete statements;
+	deleteAll( dtors );
+	deleteAll( returnDecls );
+}
+void StmtExpr::computeResult() {
 	assert( statements );
-	std::list< Statement * > & body = statements->get_kids();
+	std::list< Statement * > & body = statements->kids;
+	delete result;
+	result = nullptr;
 	if ( ! body.empty() ) {
 		if ( ExprStmt * exprStmt = dynamic_cast< ExprStmt * >( body.back() ) ) {
@@ -608,13 +622,4 @@
 		result = new VoidType( Type::Qualifiers() );
 	}
-}
-StmtExpr::StmtExpr( const StmtExpr &other ) : Expression( other ), statements( other.statements->clone() ) {
-	cloneAll( other.returnDecls, returnDecls );
-	cloneAll( other.dtors, dtors );
-}
-StmtExpr::~StmtExpr() {
-	delete statements;
-	deleteAll( dtors );
-	deleteAll( returnDecls );
 }
 void StmtExpr::print( std::ostream &os, Indenter indent ) const {
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision c0b9f5ded36473dc7b92bbbc6bd3f6d4b87c6a1b)
+++ src/SynTree/Expression.h	(revision 5e2c348d7200f13e88bb910c1e095982dd72bc7b)
@@ -728,4 +728,7 @@
 	StmtExpr * set_statements( CompoundStmt * newValue ) { statements = newValue; return this; }
 
+	// call to set the result type of this StmtExpr based on its body
+	void computeResult();
+
 	std::list< ObjectDecl * > & get_returnDecls() { return returnDecls; }
 	std::list< Expression * > & get_dtors() { return dtors; }
