Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 905841490d678a3d943dc7f6adfb4b619fd97434)
+++ src/InitTweak/FixInit.cc	(revision 7641b6c36b40524a09d0d16b7c7db8adccd57ced)
@@ -382,4 +382,8 @@
 			} // if
 			delete stmt;
+			if ( TupleAssignExpr * assign = dynamic_cast< TupleAssignExpr * >( resolved ) ) {
+				// fix newly generated StmtExpr
+				postvisit( assign->stmtExpr );
+			}
 			return resolved;
 		}
@@ -479,15 +483,15 @@
 				env->apply( result );
 				ObjectDecl * ret = ObjectDecl::newObject( retNamer.newName(), result, nullptr );
-				ret->get_type()->set_const( false );
-				stmtExpr->get_returnDecls().push_front( ret );
+				ret->type->set_const( false );
+				stmtExpr->returnDecls.push_front( ret );
 
 				// must have a non-empty body, otherwise it wouldn't have a result
-				CompoundStmt * body = stmtExpr->get_statements();
+				CompoundStmt * body = stmtExpr->statements;
 				assert( ! body->get_kids().empty() );
 				// must be an ExprStmt, otherwise it wouldn't have a result
 				ExprStmt * last = strict_dynamic_cast< ExprStmt * >( body->get_kids().back() );
-				last->set_expr( makeCtorDtor( "?{}", ret, last->get_expr() ) );
-
-				stmtExpr->get_dtors().push_front( makeCtorDtor( "^?{}", ret ) );
+				last->expr = makeCtorDtor( "?{}", ret, last->get_expr() );
+
+				stmtExpr->dtors.push_front( makeCtorDtor( "^?{}", ret ) );
 			} // if
 		}
@@ -606,5 +610,5 @@
 				// must have a non-empty body, otherwise it wouldn't have a result
 				assert( ! stmts.empty() );
-				assert( ! stmtExpr->get_returnDecls().empty() );
+				assertf( ! stmtExpr->get_returnDecls().empty(), "StmtExpr returns non-void, but no return decls: %s", toString( stmtExpr ).c_str() );
 				stmts.push_back( new ExprStmt( new VariableExpr( stmtExpr->get_returnDecls().front() ) ) );
 				stmtExpr->get_returnDecls().clear();
