Index: tests/ctrl-flow/.expect/superfluous.txt
===================================================================
--- tests/ctrl-flow/.expect/superfluous.txt	(revision bada4522ea3690a8c1e1e7fcc062da84bb3a7114)
+++ tests/ctrl-flow/.expect/superfluous.txt	(revision bada4522ea3690a8c1e1e7fcc062da84bb3a7114)
@@ -0,0 +1,1 @@
+ctrl-flow/superfluous.cfa:8:1 error: else clause never executed for empty loop conditional.
Index: tests/ctrl-flow/labelledExit.cfa
===================================================================
--- tests/ctrl-flow/labelledExit.cfa	(revision d96f7c4f1e2b7dfb521e83969e9704b7e12505da)
+++ tests/ctrl-flow/labelledExit.cfa	(revision bada4522ea3690a8c1e1e7fcc062da84bb3a7114)
@@ -1,10 +1,10 @@
-// 
+//
 // 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 -- 
-// 
+//
+// labelledExit.cfa --
+//
 // Author           : Peter A. Buhr
 // Created On       : Wed Aug 10 07:29:39 2016
@@ -12,129 +12,134 @@
 // Last Modified On : Fri Jan 17 14:18:15 2025
 // Update Count     : 14
-// 
+//
 
 int foo() {
-  	int i;
-  	int x, y;
+	int i = 0;
+	int x = 0, y = 0;
 
-  	x = 0; y = 0;
-
-  	// block, labelled exits
+	// block, labelled exits
 
   Block: {
-  		if ( x == y ) {
-  			for ( ; i < y; ) {
-  				y += 1;
-  				if ( y < 10 ) break Block;
-  			}
-  		}
-  	}
+		if ( x == y ) {
+			for ( ; i < y; ) {
+				y += 1;
+				if ( y < 10 ) break Block;
+			}
+		}
+	}
 
-  	// loops, labelled exits
+	// loops, labelled exits
 
-  w1: while ( y == 10 );
+  w1: while ( y == 10 ) break w1;
 
   w2: while ( x < 10 ) {
-  		while (y < 5 ) {
-  			if ( y == 3 ) break w2;
-  		}
-  		x += 1;
-  	}
+		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;
-  			}
-  		}
-  	}
+	  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;
-  	}
+		break D;
+		continue D;
+	}
 
   Z : i += 1;
-  	goto Z;
+	goto Z;
   X: Y: for () {
-  		i += 1;
-  		if ( i > 5 ) continue X;
-  		if ( i < 5 ) break X;
-  		if ( i < 5 ) break Y;
-  		break;
-  	}
+		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;
-  			}
-  		}
-  	}
+	  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 ) ;
+	for () ;
+	for ( int i = 0 ;; ) ++i;
+	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;
-  	}
+	for () {
+		break L0;
+		break L1;  break L2;  break L3;  break L4;  break L5;  break L6;
+		break L7;  break L8;  break L9;	 break L10; break L11; break L12;
+		break L13; break L14; break L15; break L16; break L17; break L18;
+		break L19; break L20; break L21; break L22; break L23; break L24;
+		break L25; break L26; break L27; break L28; break L29; break L31;
+		break L32; break L33; break L34;
+	}
 
-  	// switch/choose, labelled exits
+	// 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;
-  		}
-  	}
+	  default:
+		i += 1;
+		fallthrough;
+	  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;
-  		}
-  		fallthrough;
-  	  case 2:
-  		i += 1;
-  	}
+	  default:
+		i += 1;
+	  case 0:
+		i += 1;
+		break Choose;
+	  case 1:
+		choose ( i ) {
+		  case 0:
+			break;
+		  default:
+			break Choose;
+		}
+		fallthrough;
+	  case 2:
+		i += 1;
+	}
 
-  	// all nested control options, labelled exits
+	// all nested control options, labelled exits
 
   Comp: {
@@ -148,9 +153,9 @@
 								break Try;
 								break Comp;
-	  							break For;		continue For;
-	  							break While;	continue While;
-	  							break Do;		continue Do;
-	  							break If;
-	  							break Switch2;
+								break For;		continue For;
+								break While;	continue While;
+								break Do;		continue Do;
+								break If;
+								break Switch2;
 							} // switch
 						} // if
@@ -178,5 +183,5 @@
 }
 
-int main( int argc, char const *argv[] ) {
+int main() {
 	printf("done\n");
 }
Index: tests/ctrl-flow/loop_else.cfa
===================================================================
--- tests/ctrl-flow/loop_else.cfa	(revision d96f7c4f1e2b7dfb521e83969e9704b7e12505da)
+++ tests/ctrl-flow/loop_else.cfa	(revision bada4522ea3690a8c1e1e7fcc062da84bb3a7114)
@@ -23,7 +23,7 @@
 
 	sout | nlOff;										// turn off auto newline
-	while () { sout | "empty"; break; } else { sout | "else"; }						sout | nl;
-	do { sout | "empty"; break; } while () else { sout | "else"; }					sout | nl;
-	for () { sout | "empty"; break; } else { sout | "else"; }						sout | nl | nl;
+	while ( true ) { sout | "empty"; break; } else { sout | "else"; }				sout | nl;
+	do { sout | "empty"; break; } while ( true ) else { sout | "else"; }			sout | nl;
+	for ( ; true ; ) { sout | "empty"; break; } else { sout | "else"; }				sout | nl | nl;
 
 	do { sout | "false"; } while (false) else { sout | "else"; }					sout | nl | nl;
Index: tests/ctrl-flow/superfluous.cfa
===================================================================
--- tests/ctrl-flow/superfluous.cfa	(revision bada4522ea3690a8c1e1e7fcc062da84bb3a7114)
+++ tests/ctrl-flow/superfluous.cfa	(revision bada4522ea3690a8c1e1e7fcc062da84bb3a7114)
@@ -0,0 +1,9 @@
+// Check the superfluous-else warning.
+
+void main() {
+	while () {
+		return;
+	} else {
+		abort();
+	}
+}
