Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision fcc88a4758ef6ae240a457212a6e494379cf4268)
+++ src/Parser/ParseNode.h	(revision 936e9f47be7f2533aa23362d452e6b7a2a5c72fa)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:28:16 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Thu Aug 10 16:54:00 2017
-// Update Count     : 789
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 16 16:46:48 2017
+// Update Count     : 794
 //
 
@@ -376,4 +376,12 @@
 Statement * build_expr( ExpressionNode * ctl );
 
+struct IfCtl {
+	IfCtl( DeclarationNode * decl, ExpressionNode * condition ) :
+		init( decl ? new StatementNode( decl ) : nullptr ), condition( condition ) {}
+
+	StatementNode * init;
+	ExpressionNode * condition;
+};
+
 struct ForCtl {
 	ForCtl( ExpressionNode * expr, ExpressionNode * condition, ExpressionNode * change ) :
@@ -387,5 +395,5 @@
 };
 
-Statement * build_if( ExpressionNode * ctl, StatementNode * then_stmt, StatementNode * else_stmt );
+Statement * build_if( IfCtl * ctl, StatementNode * then_stmt, StatementNode * else_stmt );
 Statement * build_switch( ExpressionNode * ctl, StatementNode * stmt );
 Statement * build_case( ExpressionNode * ctl );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision fcc88a4758ef6ae240a457212a6e494379cf4268)
+++ src/Parser/StatementNode.cc	(revision 936e9f47be7f2533aa23362d452e6b7a2a5c72fa)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 11 21:23:15 2017
-// Update Count     : 331
+// Last Modified On : Wed Aug 16 16:39:43 2017
+// Update Count     : 340
 //
 
@@ -79,5 +79,5 @@
 }
 
-Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
+Statement *build_if( IfCtl * ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
 	Statement *thenb, *elseb = 0;
 	std::list< Statement * > branches;
@@ -92,5 +92,19 @@
 		elseb = branches.front();
 	} // if
-	return new IfStmt( noLabels, notZeroExpr( maybeMoveBuild< Expression >(ctl) ), thenb, elseb );
+	
+	std::list< Statement * > init;
+	if ( ctl->init != 0 ) {
+		buildMoveList( ctl->init, init );
+	} // if
+
+	return new IfStmt( noLabels, notZeroExpr(
+							   /*ctl->condition
+								 ?*/ maybeMoveBuild< Expression >(ctl->condition)
+								 /*: new VariableExpr( init.end() )*/ )
+						   , thenb, elseb );
+	// ret->initialization = init;
+	// delete ctl;
+	// assert( ret );
+	// return ret;
 }
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision fcc88a4758ef6ae240a457212a6e494379cf4268)
+++ src/Parser/parser.yy	(revision 936e9f47be7f2533aa23362d452e6b7a2a5c72fa)
@@ -9,7 +9,7 @@
 // Author           : Peter A. Buhr
 // Created On       : Sat Sep  1 20:22:55 2001
-// Last Modified By : Andrew Beach
-// Last Modified On : Wed Aug  4 13:33:00 2017
-// Update Count     : 2475
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 16 18:09:14 2017
+// Update Count     : 2485
 //
 
@@ -98,4 +98,5 @@
 	StatementNode * sn;
 	ConstantExpr * constant;
+	IfCtl * ifctl;
 	ForCtl * fctl;
 	LabelNode * label;
@@ -175,4 +176,5 @@
 %type<en> comma_expression				comma_expression_opt
 %type<en> argument_expression_list		argument_expression			default_initialize_opt
+%type<ifctl> if_control_expression
 %type<fctl> for_control_expression
 %type<en> subrange
@@ -794,8 +796,8 @@
 
 selection_statement:
-	IF '(' comma_expression ')' statement				%prec THEN
+	IF '(' if_control_expression ')' statement				%prec THEN
 		// explicitly deal with the shift/reduce conflict on if/else
 		{ $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
-	| IF '(' comma_expression ')' statement ELSE statement
+	| IF '(' if_control_expression ')' statement ELSE statement
 		{ $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
 	| SWITCH '(' comma_expression ')' case_clause		// CFA
@@ -819,4 +821,15 @@
 		}
 	;
+
+if_control_expression:
+	comma_expression
+		{ $$ = new IfCtl( nullptr, $1 ); }
+	| c_declaration										// no semi-coln
+		{ $$ = new IfCtl( $1, nullptr ); }
+	| cfa_declaration									// no semi-colon
+		{ $$ = new IfCtl( $1, nullptr ); }
+	| declaration comma_expression
+		{ $$ = new IfCtl( $1, $2 ); }
+ 	;
 
 // CASE and DEFAULT clauses are only allowed in the SWITCH statement, precluding Duff's device. In addition, a case
@@ -1097,6 +1110,6 @@
 
 KR_declaration_list:
-	c_declaration
-	| KR_declaration_list push c_declaration
+	c_declaration ';'
+	| KR_declaration_list push c_declaration ';'
 		{ $$ = $1->appendList( $3 ); }
 	;
@@ -1117,7 +1130,7 @@
 	;
 
-declaration:											// CFA, new & old style declarations
-	cfa_declaration
-	| c_declaration
+declaration:											// old & new style declarations
+	c_declaration ';'
+	| cfa_declaration ';'								// CFA
 	;
 
@@ -1134,9 +1147,9 @@
 
 cfa_declaration:										// CFA
-	cfa_variable_declaration pop ';'
-	| cfa_typedef_declaration pop ';'
-	| cfa_function_declaration pop ';'
-	| type_declaring_list pop ';'
-	| trait_specifier pop ';'
+	cfa_variable_declaration pop
+	| cfa_typedef_declaration pop
+	| cfa_function_declaration pop
+	| type_declaring_list pop
+	| trait_specifier pop
 	;
 
@@ -1338,11 +1351,11 @@
 
 c_declaration:
-	declaration_specifier declaring_list pop ';'
+	declaration_specifier declaring_list pop
 		{
 			$$ = distAttr( $1, $2 );
 		}
-	| typedef_declaration pop ';'
-	| typedef_expression pop ';'						// GCC, naming expression type
-	| sue_declaration_specifier pop ';'
+	| typedef_declaration pop
+	| typedef_expression pop							// GCC, naming expression type
+	| sue_declaration_specifier pop
 	;
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision fcc88a4758ef6ae240a457212a6e494379cf4268)
+++ src/SynTree/Statement.h	(revision 936e9f47be7f2533aa23362d452e6b7a2a5c72fa)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Thr Aug  3 14:08:00 2017
-// Update Count     : 69
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug 16 16:28:55 2017
+// Update Count     : 70
 //
 
@@ -127,4 +127,5 @@
 class IfStmt : public Statement {
   public:
+	std::list<Statement *> initialization;
 	Expression *condition;
 	Statement *thenPart;
@@ -135,4 +136,6 @@
 	virtual ~IfStmt();
 
+	std::list<Statement *> &get_initialization() { return initialization; }
+	void set_initialization( std::list<Statement *> newValue ) { initialization = newValue; }
 	Expression *get_condition() { return condition; }
 	void set_condition( Expression *newValue ) { condition = newValue; }
