Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 65a7050c7b6c234df3b0c1a23e0d49d07e827c23)
+++ src/Parser/parser.yy	(revision 6d01d8968e5ddcca442bac031525f960a2f4f81f)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov  8 18:08:23 2018
-// Update Count     : 4052
+// Last Modified On : Thu Feb 14 18:02:44 2019
+// Update Count     : 4216
 //
 
@@ -99,10 +99,8 @@
 	// distribute declaration_specifier across all declared variables, e.g., static, const, __attribute__.
 	DeclarationNode * cur = declList, * cl = (new DeclarationNode)->addType( specifier );
-	//cur->addType( specifier );
-	for ( cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) {
+	for ( cur = dynamic_cast<DeclarationNode *>( cur->get_next() ); cur != nullptr; cur = dynamic_cast<DeclarationNode *>( cur->get_next() ) ) {
 		cl->cloneBaseType( cur );
 	} // for
 	declList->addType( cl );
-//	delete cl;
 	return declList;
 } // distAttr
@@ -201,4 +199,10 @@
 	if ( NameExpr * identifier = dynamic_cast<NameExpr *>(index->get_expr()) ) {
 		return forCtrl( type, new string( identifier->name ), start, compop, comp, inc );
+	} else if ( CommaExpr * commaExpr = dynamic_cast<CommaExpr *>(index->get_expr()) ) {
+		if ( NameExpr * identifier = dynamic_cast<NameExpr *>(commaExpr->arg1 ) ) {
+			return forCtrl( type, new string( identifier->name ), start, compop, comp, inc );
+		} else {
+			SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); return nullptr;
+		} // if
 	} else {
 		SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); return nullptr;
@@ -324,5 +328,5 @@
 %type<en> argument_expression_list		argument_expression			default_initialize_opt
 %type<ifctl> if_control_expression
-%type<fctl> for_control_expression
+%type<fctl> for_control_expression		for_control_expression_list
 %type<compop> inclexcl
 %type<en> subrange
@@ -984,7 +988,5 @@
 		// labels cannot be identifiers 0 or 1 or ATTR_IDENTIFIER
 	identifier_or_type_name ':' attribute_list_opt statement
-		{
-			$$ = $4->add_label( $1, $3 );
-		}
+		{ $$ = $4->add_label( $1, $3 ); }
 	;
 
@@ -1002,5 +1004,5 @@
 	statement_decl
 	| statement_decl_list statement_decl
-		{ if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
+		{ assert( $1 ); $1->set_last( $2 ); $$ = $1; }
 	;
 
@@ -1009,15 +1011,9 @@
 		{ $$ = new StatementNode( $1 ); }
 	| EXTENSION declaration								// GCC
-		{
-			distExt( $2 );
-			$$ = new StatementNode( $2 );
-		}
+		{ distExt( $2 ); $$ = new StatementNode( $2 ); }
 	| function_definition
 		{ $$ = new StatementNode( $1 ); }
 	| EXTENSION function_definition						// GCC
-		{
-			distExt( $2 );
-			$$ = new StatementNode( $2 );
-		}
+		{ distExt( $2 ); $$ = new StatementNode( $2 ); }
 	| statement
 	;
@@ -1026,5 +1022,5 @@
 	statement
 	| statement_list_nodecl statement
-		{ if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
+		{ assert( $1 ); $1->set_last( $2 ); $$ = $1; }
 	;
 
@@ -1138,5 +1134,5 @@
 	| DO statement WHILE '(' ')' ';'					// CFA => do while( 1 )
 		{ $$ = new StatementNode( build_do_while( new ExpressionNode( build_constantInteger( *new string( "1" ) ) ), $2 ) ); }
-	| FOR '(' push for_control_expression ')' statement pop
+	| FOR '(' push for_control_expression_list ')' statement pop
 		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
 	| FOR '(' ')' statement								// CFA => for ( ;; )
@@ -1144,25 +1140,31 @@
 	;
 
+for_control_expression_list:
+	for_control_expression
+	| for_control_expression_list ':' for_control_expression
+		{ $$ = $3; }
+	;
+
 for_control_expression:
-	comma_expression									// CFA
+	';' comma_expression_opt ';' comma_expression_opt
+		{ $$ = new ForCtrl( (ExpressionNode * )nullptr, $2, $4 ); }
+	| comma_expression ';' comma_expression_opt ';' comma_expression_opt
+		{ $$ = new ForCtrl( $1, $3, $5 ); }
+	| declaration comma_expression_opt ';' comma_expression_opt // C99, declaration has ';'
+		{ $$ = new ForCtrl( $1, $2, $4 ); }
+	| comma_expression									// CFA
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
 						OperKinds::LThan, $1->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
-	| constant_expression inclexcl constant_expression	// CFA
+	| comma_expression inclexcl comma_expression		// CFA
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
-	| constant_expression inclexcl constant_expression '~' constant_expression // CFA
+	| comma_expression inclexcl comma_expression '~' comma_expression // CFA
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, $5 ); }
 	| comma_expression ';' comma_expression				// CFA
 		{ $$ = forCtrl( $3, $1, new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
 						OperKinds::LThan, $3->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
-	| comma_expression ';' constant_expression inclexcl constant_expression // CFA
+	| comma_expression ';' comma_expression inclexcl comma_expression // CFA
 		{ $$ = forCtrl( $3, $1, $3->clone(), $4, $5, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
-	| comma_expression ';' constant_expression inclexcl constant_expression '~' constant_expression // CFA
+	| comma_expression ';' comma_expression inclexcl comma_expression '~' comma_expression // CFA
 		{ $$ = forCtrl( $3, $1, $3->clone(), $4, $5, $7 ); }
-	| comma_expression ';' comma_expression_opt ';' comma_expression_opt
-		{ $$ = new ForCtrl( $1, $3, $5 ); }
-	| ';' comma_expression_opt ';' comma_expression_opt
-		{ $$ = new ForCtrl( (ExpressionNode * )nullptr, $2, $4 ); }
-	| declaration comma_expression_opt ';' comma_expression_opt // C99, declaration has ';'
-		{ $$ = new ForCtrl( $1, $2, $4 ); }
  	;
 
