Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ src/Parser/ExpressionNode.cc	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 22 11:57:39 2018
-// Update Count     : 801
+// Last Modified On : Mon Jun  4 21:24:45 2018
+// Update Count     : 802
 //
 
@@ -314,4 +314,5 @@
 
 Expression * build_constantStr( string & str ) {
+	assert( str.length() > 0 );
 	string units;										// units
 	sepString( str, units, '"' );						// separate constant from units
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ src/Parser/ParseNode.h	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 30 09:19:17 2018
-// Update Count     : 831
+// Last Modified On : Mon Jun  4 22:21:04 2018
+// Update Count     : 832
 //
 
@@ -408,5 +408,6 @@
 Statement * build_case( ExpressionNode * ctl );
 Statement * build_default();
-Statement * build_while( ExpressionNode * ctl, StatementNode * stmt, bool kind = false );
+Statement * build_while( IfCtl * ctl, StatementNode * stmt );
+Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt );
 Statement * build_for( ForCtl * forctl, StatementNode * stmt );
 Statement * build_branch( BranchStmt::Type kind );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ src/Parser/StatementNode.cc	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 30 09:21:16 2018
-// Update Count     : 354
+// Last Modified On : Tue Jun  5 08:58:34 2018
+// Update Count     : 362
 //
 
@@ -69,14 +69,12 @@
 	caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
 	return this;
-}
+} // StatementNode::append_last_case
 
 Statement * build_expr( ExpressionNode * ctl ) {
 	Expression * e = maybeMoveBuild< Expression >( ctl );
 
-	if ( e )
-		return new ExprStmt( e );
-	else
-		return new NullStmt();
-}
+	if ( e ) return new ExprStmt( e );
+	else return new NullStmt();
+} // build_expr
 
 Expression * build_if_control( IfCtl * ctl, std::list< Statement * > & init ) {
@@ -100,8 +98,8 @@
 	delete ctl;
 	return cond;
-}
+} // build_if_control
 
 Statement * build_if( IfCtl * ctl, StatementNode * then_stmt, StatementNode * else_stmt ) {
-	Statement * thenb, * elseb = 0;
+	Statement * thenb, * elseb = nullptr;
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( then_stmt, branches );
@@ -119,5 +117,5 @@
 	Expression * cond = build_if_control( ctl, init );
 	return new IfStmt( cond, thenb, elseb, init );
-}
+} // build_if
 
 Statement * build_switch( bool isSwitch, ExpressionNode * ctl, StatementNode * stmt ) {
@@ -135,15 +133,17 @@
 	// branches.size() == 0 for switch (...) {}, i.e., no declaration or statements
 	return new SwitchStmt( maybeMoveBuild< Expression >(ctl), branches );
-}
+} // build_switch
+
 Statement * build_case( ExpressionNode * ctl ) {
 	std::list< Statement * > branches;
 	return new CaseStmt( maybeMoveBuild< Expression >(ctl), branches );
-}
+} // build_case
+
 Statement * build_default() {
 	std::list< Statement * > branches;
 	return new CaseStmt( nullptr, branches, true );
-}
-
-Statement * build_while( ExpressionNode * ctl, StatementNode * stmt, bool kind ) {
+} // build_default
+
+Statement * build_while( IfCtl * ctl, StatementNode * stmt ) {
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( stmt, branches );
@@ -151,6 +151,16 @@
 
 	std::list< Statement * > init;
-	return new WhileStmt( notZeroExpr( maybeMoveBuild< Expression >(ctl) ), branches.front(), init, kind );
-}
+	Expression * cond = build_if_control( ctl, init );
+	return new WhileStmt( cond, branches.front(), init, false );
+} // build_while
+
+Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt ) {
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+
+	std::list< Statement * > init;
+	return new WhileStmt( notZeroExpr( maybeMoveBuild< Expression >(ctl) ), branches.front(), init, true );
+} // build_do_while
 
 Statement * build_for( ForCtl * forctl, StatementNode * stmt ) {
@@ -174,18 +184,20 @@
 	delete forctl;
 	return new ForStmt( init, cond, incr, branches.front() );
-}
+} // build_for
 
 Statement * build_branch( BranchStmt::Type kind ) {
 	Statement * ret = new BranchStmt( "", kind );
 	return ret;
-}
+} // build_branch
+
 Statement * build_branch( std::string * identifier, BranchStmt::Type kind ) {
 	Statement * ret = new BranchStmt( * identifier, kind );
 	delete identifier; 									// allocated by lexer
 	return ret;
-}
+} // build_branch
+
 Statement * build_computedgoto( ExpressionNode * ctl ) {
 	return new BranchStmt( maybeMoveBuild< Expression >(ctl), BranchStmt::Goto );
-}
+} // build_computedgoto
 
 Statement * build_return( ExpressionNode * ctl ) {
@@ -193,5 +205,5 @@
 	buildMoveList( ctl, exps );
 	return new ReturnStmt( exps.size() > 0 ? exps.back() : nullptr );
-}
+} // build_return
 
 Statement * build_throw( ExpressionNode * ctl ) {
@@ -200,5 +212,5 @@
 	assertf( exps.size() < 2, "This means we are leaking memory");
 	return new ThrowStmt( ThrowStmt::Terminate, !exps.empty() ? exps.back() : nullptr );
-}
+} // build_throw
 
 Statement * build_resume( ExpressionNode * ctl ) {
@@ -207,5 +219,5 @@
 	assertf( exps.size() < 2, "This means we are leaking memory");
 	return new ThrowStmt( ThrowStmt::Resume, !exps.empty() ? exps.back() : nullptr );
-}
+} // build_resume
 
 Statement * build_resume_at( ExpressionNode * ctl, ExpressionNode * target ) {
@@ -213,5 +225,5 @@
 	(void)target;
 	assertf( false, "resume at (non-local throw) is not yet supported," );
-}
+} // build_resume_at
 
 Statement * build_try( StatementNode * try_stmt, StatementNode * catch_stmt, StatementNode * finally_stmt ) {
@@ -221,5 +233,6 @@
 	FinallyStmt * finallyBlock = dynamic_cast< FinallyStmt * >(maybeMoveBuild< Statement >(finally_stmt) );
 	return new TryStmt( tryBlock, branches, finallyBlock );
-}
+} // build_try
+
 Statement * build_catch( CatchStmt::Kind kind, DeclarationNode * decl, ExpressionNode * cond, StatementNode * body ) {
 	std::list< Statement * > branches;
@@ -227,5 +240,6 @@
 	assert( branches.size() == 1 );
 	return new CatchStmt( kind, maybeMoveBuild< Declaration >(decl), maybeMoveBuild< Expression >(cond), branches.front() );
-}
+} // build_catch
+
 Statement * build_finally( StatementNode * stmt ) {
 	std::list< Statement * > branches;
@@ -233,5 +247,5 @@
 	assert( branches.size() == 1 );
 	return new FinallyStmt( dynamic_cast< CompoundStmt * >( branches.front() ) );
-}
+} // build_finally
 
 WaitForStmt * build_waitfor( ExpressionNode * targetExpr, StatementNode * stmt, ExpressionNode * when ) {
@@ -254,5 +268,5 @@
 
 	return node;
-}
+} // build_waitfor
 
 WaitForStmt * build_waitfor( ExpressionNode * targetExpr, StatementNode * stmt, ExpressionNode * when, WaitForStmt * node ) {
@@ -273,5 +287,5 @@
 
 	return node;
-}
+} // build_waitfor
 
 WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when ) {
@@ -282,12 +296,11 @@
 		node->timeout.statement = maybeMoveBuild<Statement >( stmt    );
 		node->timeout.condition = notZeroExpr( maybeMoveBuild<Expression>( when ) );
-	}
-	else {
+	} else {
 		node->orelse.statement  = maybeMoveBuild<Statement >( stmt );
 		node->orelse.condition  = notZeroExpr( maybeMoveBuild<Expression>( when ) );
-	}
+	} // if
 
 	return node;
-}
+} // build_waitfor_timeout
 
 WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when,  StatementNode * else_stmt, ExpressionNode * else_when ) {
@@ -302,5 +315,5 @@
 
 	return node;
-}
+} // build_waitfor_timeout
 
 WithStmt * build_with( ExpressionNode * exprs, StatementNode * stmt ) {
@@ -309,5 +322,5 @@
 	Statement * s = maybeMoveBuild<Statement>( stmt );
 	return new WithStmt( e, s );
-}
+} // build_with
 
 Statement * build_compound( StatementNode * first ) {
@@ -315,5 +328,5 @@
 	buildMoveList( first, cs->get_kids() );
 	return cs;
-}
+} // build_compound
 
 Statement * build_asm( bool voltile, Expression * instruction, ExpressionNode * output, ExpressionNode * input, ExpressionNode * clobber, LabelNode * gotolabels ) {
@@ -325,9 +338,9 @@
 	buildMoveList( clobber, clob );
 	return new AsmStmt( voltile, instruction, out, in, clob, gotolabels ? gotolabels->labels : noLabels );
-}
+} // build_asm
 
 Statement * build_directive( string * directive ) {
 	return new DirectiveStmt( *directive );
-}
+} // build_directive
 
 // Local Variables: //
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ src/Parser/parser.yy	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun  1 17:59:57 2018
-// Update Count     : 3476
+// Last Modified On : Mon Jun  4 22:22:04 2018
+// Update Count     : 3492
 //
 
@@ -1050,8 +1050,8 @@
 
 iteration_statement:
-	WHILE '(' comma_expression ')' statement
-		{ $$ = new StatementNode( build_while( $3, $5 ) ); }
+	WHILE '(' push if_control_expression ')' statement pop
+		{ $$ = new StatementNode( build_while( $4, $6 ) ); }
 	| DO statement WHILE '(' comma_expression ')' ';'
-		{ $$ = new StatementNode( build_while( $5, $2, true ) ); }
+		{ $$ = new StatementNode( build_do_while( $5, $2 ) ); }
 	| FOR '(' push for_control_expression ')' statement pop
 		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
@@ -1331,5 +1331,5 @@
 	c_declaration ';'
 	| cfa_declaration ';'								// CFA
-	| static_assert
+	| static_assert										// C11
 	;
 
@@ -1337,4 +1337,6 @@
 	STATICASSERT '(' constant_expression ',' string_literal ')' ';' // C11
 		{ $$ = DeclarationNode::newStaticAssert( $3, $5 ); }
+	| STATICASSERT '(' constant_expression ')' ';'		// CFA
+		{ $$ = DeclarationNode::newStaticAssert( $3, build_constantStr( *new string( "\"\"" ) ) ); }
 
 // C declaration syntax is notoriously confusing and error prone. Cforall provides its own type, variable and function
@@ -1881,19 +1883,16 @@
 
 field_declaration:
-	cfa_field_declaring_list ';'						// CFA, new style field declaration
+	type_specifier field_declaring_list ';'
+		{ $$ = distAttr( $1, $2 ); }
+	| EXTENSION type_specifier field_declaring_list ';'	// GCC
+		{ distExt( $3 ); $$ = distAttr( $2, $3 ); }		// mark all fields in list
+	| typedef_declaration ';'							// CFA
+		{ SemanticError( yylloc, "Typedef in aggregate is currently unimplemented." ); $$ = nullptr; }
+	| cfa_field_declaring_list ';'						// CFA, new style field declaration
 	| EXTENSION cfa_field_declaring_list ';'			// GCC
-		{
-			distExt( $2 );								// mark all fields in list
-			$$ = $2;
-		}
-	| type_specifier field_declaring_list ';'
-		{
-			$$ = distAttr( $1, $2 ); }
-	| EXTENSION type_specifier field_declaring_list ';'	// GCC
-		{
-			distExt( $3 );								// mark all fields in list
-			$$ = distAttr( $2, $3 );
-		}
-	| static_assert
+		{ distExt( $2 ); $$ = $2; }						// mark all fields in list
+	| cfa_typedef_declaration ';'						// CFA
+		{ SemanticError( yylloc, "Typedef in aggregate is currently unimplemented." ); $$ = nullptr; }
+	| static_assert										// C11
 	;
 
Index: src/benchmark/Makefile.am
===================================================================
--- src/benchmark/Makefile.am	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ src/benchmark/Makefile.am	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -92,5 +92,18 @@
 
 ## =========================================================================================================
+loop$(EXEEXT):
+	@@BACKEND_CC@ loop.c      -DBENCH_N=5000000000 -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+function$(EXEEXT):
+	@@BACKEND_CC@ function.c  -DBENCH_N=5000000000 -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+fetch_add$(EXEEXT):
+	@@BACKEND_CC@ fetch_add.c -DBENCH_N=500000000  -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
 ctxswitch$(EXEEXT): \
+	loop.run				\
+	function.run			\
+	fetch_add.run			\
 	ctxswitch-pthread.run		\
 	ctxswitch-cfa_coroutine.run	\
@@ -139,6 +152,7 @@
 ## =========================================================================================================
 mutex$(EXEEXT) :\
-	mutex-function.run	\
-	mutex-fetch_add.run	\
+	loop.run			\
+	function.run		\
+	fetch_add.run		\
 	mutex-pthread_lock.run	\
 	mutex-upp.run		\
@@ -147,10 +161,4 @@
 	mutex-cfa4.run		\
 	mutex-java_thread.run
-
-mutex-function$(EXEEXT):
-	@@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-fetch_add$(EXEEXT):
-	@@BACKEND_CC@ mutex/fetch_add.c   -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 mutex-pthread_lock$(EXEEXT):
Index: src/benchmark/Makefile.in
===================================================================
--- src/benchmark/Makefile.in	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ src/benchmark/Makefile.in	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -505,5 +505,17 @@
 	@echo "}"
 
+loop$(EXEEXT):
+	@@BACKEND_CC@ loop.c      -DBENCH_N=5000000000 -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+function$(EXEEXT):
+	@@BACKEND_CC@ function.c  -DBENCH_N=5000000000 -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+fetch_add$(EXEEXT):
+	@@BACKEND_CC@ fetch_add.c -DBENCH_N=500000000  -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
 ctxswitch$(EXEEXT): \
+	loop.run				\
+	function.run			\
+	fetch_add.run			\
 	ctxswitch-pthread.run		\
 	ctxswitch-cfa_coroutine.run	\
@@ -551,6 +563,7 @@
 
 mutex$(EXEEXT) :\
-	mutex-function.run	\
-	mutex-fetch_add.run	\
+	loop.run			\
+	function.run		\
+	fetch_add.run		\
 	mutex-pthread_lock.run	\
 	mutex-upp.run		\
@@ -559,10 +572,4 @@
 	mutex-cfa4.run		\
 	mutex-java_thread.run
-
-mutex-function$(EXEEXT):
-	@@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-fetch_add$(EXEEXT):
-	@@BACKEND_CC@ mutex/fetch_add.c   -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 mutex-pthread_lock$(EXEEXT):
Index: src/benchmark/fetch_add.c
===================================================================
--- src/benchmark/fetch_add.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
+++ src/benchmark/fetch_add.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+#include "bench.h"
+
+volatile int value;
+
+void __attribute__((noinline)) do_call() {
+	__atomic_add_fetch( &value, 1, __ATOMIC_SEQ_CST );
+	asm volatile ("");
+	__atomic_sub_fetch( &value, 1, __ATOMIC_SEQ_CST );
+}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			do_call();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/function.c
===================================================================
--- src/benchmark/function.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
+++ src/benchmark/function.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+#include "bench.h"
+
+void __attribute__((noinline)) do_call() {
+	asm volatile("" ::: "memory");
+}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			do_call();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/loop.c
===================================================================
--- src/benchmark/loop.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
+++ src/benchmark/loop.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+#include "bench.h"
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			asm volatile("" ::: "memory");
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/mutex/fetch_add.c
===================================================================
--- src/benchmark/mutex/fetch_add.c	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ 	(revision )
@@ -1,22 +1,0 @@
-#include <stdio.h>
-
-#include "bench.h"
-
-volatile int value;
-
-void __attribute__((noinline)) do_call() {
-	__atomic_add_fetch( &value, 1, __ATOMIC_SEQ_CST );
-	asm volatile ("");
-	__atomic_sub_fetch( &value, 1, __ATOMIC_SEQ_CST );
-}
-
-int main(int argc, char* argv[]) {
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			do_call();
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: src/benchmark/mutex/function.c
===================================================================
--- src/benchmark/mutex/function.c	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#include <stdio.h>
-
-#include "bench.h"
-
-void __attribute__((noinline)) do_call() {
-	asm volatile ("");
-}
-
-int main(int argc, char* argv[]) {
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			do_call();
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ src/libcfa/concurrency/kernel.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -663,6 +663,7 @@
 	__cfaabi_dbg_print_safe("Kernel : Processor %p ready to sleep\n", this);
 
-	verify( ({int sval = 0; sem_getvalue(&this->idleLock, &sval); sval; }) < 65536);
-	sem_wait(&idleLock);
+	verify( ({int sval = 0; sem_getvalue(&this->idleLock, &sval); sval; }) < 200);
+	int __attribute__((unused)) ret = sem_wait(&idleLock);
+	verify(ret > 0 || errno == EINTR);
 
 	__cfaabi_dbg_print_safe("Kernel : Processor %p woke up and ready to run\n", this);
@@ -678,6 +679,7 @@
 void wake(processor * this) {
 	__cfaabi_dbg_print_safe("Kernel : Waking up processor %p\n", this);
-	sem_post(&this->idleLock);
-	verify( ({int sval = 0; sem_getvalue(&this->idleLock, &sval); sval; }) < 65536);
+	int __attribute__((unused)) ret = sem_post(&this->idleLock);
+	verify(ret > 0 || errno == EINTR);
+	verify( ({int sval = 0; sem_getvalue(&this->idleLock, &sval); sval; }) < 200);
 }
 
Index: src/tests/.expect/ifcond.txt
===================================================================
--- src/tests/.expect/ifcond.txt	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ 	(revision )
@@ -1,4 +1,0 @@
-x != 0 correct
-x != 0 && y != 0 correct
-x == y correct
-s.i < 4 correct
Index: src/tests/.expect/ifwhileCtl.txt
===================================================================
--- src/tests/.expect/ifwhileCtl.txt	(revision 174845ed867246025234e5bf64bc7af2c721b608)
+++ src/tests/.expect/ifwhileCtl.txt	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -0,0 +1,7 @@
+x != 0 correct
+x != 0 && y != 0 correct
+x == y correct
+s.i < 4 correct
+x != 0 correct
+x == y correct
+s.i < 4 correct
Index: src/tests/ifcond.c
===================================================================
--- src/tests/ifcond.c	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ 	(revision )
@@ -1,53 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// ifcond.c --
-//
-// Author           : Peter A. Buhr
-// Created On       : Sat Aug 26 10:13:11 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  2 09:55:02 2018
-// Update Count     : 15
-//
-
-#include <fstream>
-
-int f( int r ) { return r; }
-
-int main( void ) {
-	int x = 4, y = 3;
-
-	if ( int x = 1 ) {
-		sout | "x != 0 correct" | endl;
-	} else {
-		sout | "x == 0 incorrect" | endl;
-	} // if
-
-	if ( int x = 4, y = 0 ) {
-		sout | "x != 0 && y != 0 incorrect" | endl;
-	} else if ( int x = 4, y = 1 ) {
-		sout | "x != 0 && y != 0 correct" | endl;
-	} else {
-		sout | "x == 0 || y == 0 incorrect" | endl;
-	} // if
-
-	if ( int x = 5, y = f( x ); x == y ) {
-		sout | "x == y correct" | endl;
-	} else {
-		sout | "x != y incorrect" | endl;
-	} // if
-
-	if ( struct S { int i; } s = { 3 }; s.i < 4 ) {
-		sout | "s.i < 4 correct" | endl;
-	} else {
-		sout | "s.i >= 4 incorrect" | endl;
-	} // if
-} // main
-
-// Local Variables: //
-// tab-width: 4 //
-// compile-command: "cfa ifcond.c" //
-// End: //
Index: src/tests/ifwhileCtl.c
===================================================================
--- src/tests/ifwhileCtl.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
+++ src/tests/ifwhileCtl.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -0,0 +1,75 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// ifcond.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Sat Aug 26 10:13:11 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jun  4 22:46:48 2018
+// Update Count     : 19
+//
+
+#include <fstream>
+
+int f( int r ) { return r; }
+
+int main( void ) {
+	int x = 4, y = 3;
+
+	if ( int x = 1 ) {
+		sout | "x != 0 correct" | endl;
+	} else {
+		sout | "x == 0 incorrect" | endl;
+	} // if
+
+	if ( int x = 4, y = 0 ) {
+		sout | "x != 0 && y != 0 incorrect" | endl;
+	} else if ( int x = 4, y = 1 ) {
+		sout | "x != 0 && y != 0 correct" | endl;
+	} else {
+		sout | "x == 0 || y == 0 incorrect" | endl;
+	} // if
+
+	if ( int x = 5, y = f( x ); x == y ) {
+		sout | "x == y correct" | endl;
+	} else {
+		sout | "x != y incorrect" | endl;
+	} // if
+
+	if ( struct S { int i; } s = { 3 }; s.i < 4 ) {
+		S s1;
+		sout | "s.i < 4 correct" | endl;
+	} else {
+		S s1;
+		sout | "s.i >= 4 incorrect" | endl;
+	} // if
+
+	while ( int x = 1 ) {
+		sout | "x != 0 correct" | endl;
+		break;
+	} // while
+
+	while ( int x = 4, y = 0 ) {
+		sout | "x != 0 && y != 0 incorrect" | endl;
+	} // while
+
+	while ( int x = 5, y = f( x ); x == y ) {
+		sout | "x == y correct" | endl;
+		break;
+	} // while
+
+	while ( struct S { int i; } s = { 3 }; s.i < 4 ) {
+		S s1;
+		sout | "s.i < 4 correct" | endl;
+		break;
+	} // while
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa ifcond.c" //
+// End: //
Index: src/tests/sum.c
===================================================================
--- src/tests/sum.c	(revision 41770ed102327cb6d1d192134987c43c9c07fd30)
+++ src/tests/sum.c	(revision 174845ed867246025234e5bf64bc7af2c721b608)
@@ -11,6 +11,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Feb 17 11:49:17 2018
-// Update Count     : 273
+// Last Modified On : Sun Jun  3 19:23:41 2018
+// Update Count     : 278
 //
 
@@ -18,8 +18,8 @@
 #include <stdlib>
 
-void ?{}( int & c, zero_t ) { c = 0; }
+void ?{}( int & c, zero_t ) { c = 0; }					// not in prelude
 
 trait sumable( otype T ) {
-	void ?{}( T &, zero_t );							// constructor from 0 literal
+	void ?{}( T &, zero_t );							// 0 literal constructor
 	T ?+?( T, T );										// assortment of additions
 	T ?+=?( T &, T );
@@ -29,7 +29,7 @@
 
 forall( otype T | sumable( T ) )						// use trait
-T sum( unsigned int size, T a[] ) {
-	T total = 0;										// instantiate T from 0 by calling constructor
-	for ( unsigned int i = 0; i < size; i += 1 )
+T sum( size_t size, T a[] ) {
+	T total = 0;										// initialize by 0 constructor
+	for ( size_t i = 0; i < size; i += 1 )
 		total += a[i];									// select appropriate +
 	return total;
@@ -111,8 +111,8 @@
 	for ( int i = 0; i < size; i += 1, v += 1 ) {
 		s += (int)v;
-		gs.x[i] = (int)v;								// set filed array in generic type
+		gs.x[i] = (int)v;								// set field array in generic type
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		 | sum( size, gs.x ) | ", check" | (int)s | endl; // add filed array in generic type
+		 | sum( size, gs.x ) | ", check" | (int)s | endl; // add field array in generic type
 } // main
 
