Index: tests/ctrl-flow/.expect/fallthrough.txt
===================================================================
--- tests/ctrl-flow/.expect/fallthrough.txt	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
+++ tests/ctrl-flow/.expect/fallthrough.txt	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
@@ -0,0 +1,20 @@
+case 1
+case 2
+case 3
+default
+
+case 1
+case 1
+0
+1
+2
+common
+default
+
+case 5
+common2
+
+case 5
+check
+common
+default
Index: tests/ctrl-flow/.expect/goto.txt
===================================================================
--- tests/ctrl-flow/.expect/goto.txt	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
+++ tests/ctrl-flow/.expect/goto.txt	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
@@ -0,0 +1,1 @@
+goto-loop loop loop end
Index: tests/ctrl-flow/.expect/labelledExit.txt
===================================================================
--- tests/ctrl-flow/.expect/labelledExit.txt	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
+++ tests/ctrl-flow/.expect/labelledExit.txt	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
@@ -0,0 +1,1 @@
+ctrl-flow/labelledExit.cfa:181:25: warning: Compiled
Index: tests/ctrl-flow/fallthrough.cfa
===================================================================
--- tests/ctrl-flow/fallthrough.cfa	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
+++ tests/ctrl-flow/fallthrough.cfa	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
@@ -0,0 +1,126 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// fallthrough.cfa --
+//
+// Author           : Rob Schluntz
+// Created On       : Wed Mar 14 10:06:25 2018
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Dec 24 11:24:35 2018
+// Update Count     : 22
+//
+
+#include <fstream.hfa>
+
+void test(int choice) {
+	choose ( choice ) {
+	  case 1:
+		sout | "case 1";
+		fallthru;
+	  case 2:
+		sout | "case 2";
+		fallthru;
+		sout | "did not fallthru";
+		if ( 7 ) fallthru common2;
+		fallthru common1;
+	  case 3:
+		sout | "case 3";
+		fallthru default;
+		fallthru common1;
+	  common1:
+		sout | "common1";
+		// break
+	  case 4:
+		sout | "case 4";
+		fallthru common2;
+	  case 5:
+		sout | "case 5";
+		fallthru common2;
+		fallthru default;
+	  case 6:
+		sout | "case 6";
+		fallthru common2;
+	  common2:
+		sout | "common2";
+		// break
+	  default:
+		sout | "default";
+		fallthru;
+	} // choose
+
+	sout | nl;
+
+	switch ( choice ) {
+	  case 1:
+		sout | "case 1";
+		switch ( choice ) {
+		  case 1:
+			sout | "case 1";
+			for ( int i = 0; i < 4; i += 1 ) {
+				sout | i;
+				if ( i == 2 ) fallthru common;
+			} // for
+		} // switch
+		break;
+	  case 5:
+		sout | "case 5";
+		if ( choice == 5 ) {
+			if ( choice != 5 ) {
+				sout | "error";
+			} else {
+				sout | "check";
+				fallthru common;
+			} // if
+		} // if
+	  common:
+		sout | "common";
+		fallthru;
+		break;
+	  default:
+		sout | "default";
+		fallthru;
+	} // switch
+
+#if ERR1
+	// ERROR: fallthrough must be enclosed in switch or choose
+	fallthru;
+	// ERROR: fallthrough must be enclosed in switch or choose
+	fallthru common4;
+	// ERROR: fallthrough must be enclosed in switch or choose
+	fallthru default;
+	choose ( 3 ) {
+	  case 2:
+		for () {
+			choose ( 2 ) {
+			  case 1:
+				// ERROR: default is later, but in a different switch
+				fallthru default;
+				// ERROR: common3 is later, but not at the same level as a case clause
+				fallthru common3;
+			}
+		  common3: ;
+		} // for
+	  default:
+	  case 1:
+	  common4:
+		// ERROR: attempt to jump up with fallthrough
+		if ( 7 ) fallthru common4;
+		// ERROR: attempt to jump up with fallthrough
+		fallthru default;
+	} // choose
+#endif
+}
+
+int main() {
+	test( 1 );
+	sout | nl;
+	test( 5 );
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa fallthrough.cfa" //
+// End: //
Index: tests/ctrl-flow/goto.cfa
===================================================================
--- tests/ctrl-flow/goto.cfa	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
+++ tests/ctrl-flow/goto.cfa	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
@@ -0,0 +1,22 @@
+// Some runtime tests for goto.
+
+#include <fstream.hfa>
+
+// Make sure loop hoisting
+void gotoLabelledLoop() {
+	sout | "goto-loop";
+	goto label;
+	sout | "!";
+
+	// Verbose loop will lead to lifting.
+	label: for (int i = 0 ; i < 2 ; ++i) {
+		sout | "loop";
+	}
+	sout | "end" | nl;
+}
+
+int main(int argc, char * argv[]) {
+	sout | nlOff;
+
+	gotoLabelledLoop();
+}
Index: tests/ctrl-flow/labelledExit.cfa
===================================================================
--- tests/ctrl-flow/labelledExit.cfa	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
+++ tests/ctrl-flow/labelledExit.cfa	(revision b6923b1740ef731ae48dce4cce23151387f51e96)
@@ -0,0 +1,187 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// labelledExit.cfa -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 10 07:29:39 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sat Jun  5 10:07:34 2021
+// Update Count     : 13
+// 
+
+int foo() {
+  	int i;
+  	int x, y;
+
+  	x = 0; y = 0;
+
+  	// block, labelled exits
+
+  Block: {
+  		if ( x == y ) {
+  			for ( ; i < y; ) {
+  				y += 1;
+  				if ( y < 10 ) break Block;
+  			}
+  		}
+  	}
+
+  	// loops, labelled exits
+
+  w1: while ( y == 10 );
+
+  w2: while ( x < 10 ) {
+  		while (y < 5 ) {
+  			if ( y == 3 ) break w2;
+  		}
+  		x += 1;
+  	}
+
+  A: for ( i = 0; i < 10; i += 1 ) {
+  	  B: for ( i = 0; i < 10; i += 1 ) {
+  		  C: for ( i = 0; i < 10; i += 1 ) {
+  				goto A;
+  				goto B;
+  				goto C;
+  				continue A;
+  				continue B;
+  				continue C;
+  				continue;
+  				break A;
+  				break B;
+  				break C;
+  				break;
+  			}
+  		}
+  	}
+
+  D: for () {
+  		break D;
+  		continue D;
+  	}
+
+  Z : i += 1;
+  	goto Z;
+  X: Y: for () {
+  		i += 1;
+  		if ( i > 5 ) continue X;
+  		if ( i < 5 ) break X;
+  		if ( i < 5 ) break Y;
+  		break;
+  	}
+  XX: for () {
+  	  YY: for () {
+  		  ZZ: for () {
+  				i += 1;
+  				if ( i > 5 ) continue XX;
+  				if ( i < 5 ) continue YY;
+  				if ( i < 5 ) continue ZZ;
+  				if ( i > 5 ) break XX;
+  				if ( i < 5 ) break YY;
+  				if ( i < 5 ) break ZZ;
+  				break;
+  			}
+  		}
+  	}
+
+  	for () ;
+  	for ( int i = 0 ;; ) ;
+  	for (  ; i < 0; ) ;
+  	for (  ; ; i += 1 ) ;
+  L0:  L1:  L2:  L3:  L4:  L5:  L6:  L7:  L8:  L9:
+  L10: L11: L12: L13: L14: L15: L16: L17: L18: L19:
+  L20: L21: L22: L23: L24: L25: L26: L27: L28: L29:
+  L31: L32: L33: L34:
+  	for () {
+  		break L0;
+  	}
+
+  	// switch/choose, labelled exits
+
+  Switch: switch ( i ) {
+  	  default:
+  		i += 1;
+  	  case 0:
+  		i += 1;
+  		break Switch;
+  	  case 1:
+  		switch ( i ) {
+  		  case 0:
+  			break Switch;
+  		  default:
+  			; break;
+  		}
+  	}
+
+  Choose: choose ( i ) {
+  	  default:
+  		i += 1;
+  	  case 0:
+  		i += 1;
+  		break Choose;
+  	  case 1:
+  		choose ( i ) {
+  		  case 0:
+  			break;
+  		  default:
+  			break Choose;
+  		}
+  		fallthru;
+  	  case 2:
+  		i += 1;
+  	}
+
+  	// all nested control options, labelled exits
+
+  Comp: {
+	  Try: try {
+		  For: for ( ;; ) {
+			  While: while ( true ) {
+				  Do: do {
+					  If: if ( true ) {
+						  Switch2: switch ( 3 ) {
+							  case 3:
+								break Try;
+								break Comp;
+	  							break For;		continue For;
+	  							break While;	continue While;
+	  							break Do;		continue Do;
+	  							break If;
+	  							break Switch2;
+							} // switch
+						} // if
+					} while ( true );
+				} // while
+			} // for
+		} finally {} // always executed
+	} // compound
+
+	// computed goto
+	{
+		void *array[] = { &&foo, &&bar, &&hack };
+	  foo: bar: hack:
+		&&foo;
+		&&bar;
+		goto *array[i];
+	}
+
+  Q: if ( i > 5 ) {
+		i += 1;
+		break Q;
+	}
+	else
+		i += 1;
+}
+
+int main( int argc, char const *argv[] ) {
+    #pragma GCC warning "Compiled"                      // force non-empty .expect file, NO TABS!!!
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa labelledExit.cfa" //
+// End: //
