Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 51c63533f5e27f31fa1953e7742617d789a57ed5)
+++ src/Parser/StatementNode.cc	(revision a01f7c948d2b19b02ecf6d5dce78749a646f341a)
@@ -99,7 +99,19 @@
 	} // if
 
-	Expression * cond = ctl->condition ? maybeMoveBuild< Expression >(ctl->condition) : new VariableExpr( dynamic_cast<DeclarationWithType *>( dynamic_cast<DeclStmt *>( init.back() )->decl ) );
+	Expression * cond = nullptr;
+	if ( ctl->condition ) {
+		// compare the provided condition against 0
+		cond =  notZeroExpr( maybeMoveBuild< Expression >(ctl->condition) );
+	} else {
+		for ( Statement * stmt : init ) {
+			// build the && of all of the declared variables compared against 0
+			DeclStmt * declStmt = safe_dynamic_cast< DeclStmt * >( stmt );
+			DeclarationWithType * dwt = safe_dynamic_cast< DeclarationWithType * >( declStmt->decl );
+			Expression * nze = notZeroExpr( new VariableExpr( dwt ) );
+			cond = cond ? new LogicalExpr( cond, nze, true ) : nze;
+		}
+	}
 	delete ctl;
-	return new IfStmt( noLabels, notZeroExpr( cond ), thenb, elseb, init );
+	return new IfStmt( noLabels, cond, thenb, elseb, init );
 }
 
