Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 5a73f0fabe03c9d4de68047488927c05a86ac603)
+++ src/ResolvExpr/Resolver.cc	(revision 5e2c348d7200f13e88bb910c1e095982dd72bc7b)
@@ -716,4 +716,5 @@
 		PassVisitor<Resolver> resolver( indexer );
 		stmtExpr->accept( resolver );
+		stmtExpr->computeResult();
 	}
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 5a73f0fabe03c9d4de68047488927c05a86ac603)
+++ 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 5a73f0fabe03c9d4de68047488927c05a86ac603)
+++ 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; }
