Index: src/CodeGen/CodeGenerator.cpp
===================================================================
--- src/CodeGen/CodeGenerator.cpp	(revision d923fca679790b81e32b6a12debf586d34a17e72)
+++ src/CodeGen/CodeGenerator.cpp	(revision 9506c704946ca74a10747460a7b64c9a3a6a05c4)
@@ -1105,15 +1105,16 @@
 		assertf( !options.genC, "fallthrough should not reach code generation." );
 		output << "fallthrough";
+		if ( ast::BranchStmt::FallThroughDefault == stmt->kind ) {
+			assertf( stmt->target.empty(), "fallthough default should not have a target." );
+			output << " default";
+		}
 		break;
 	default:
 		assertf( false, "Bad BranchStmt value." );
 	}
-	// Print branch target for labelled break/continue/fallthrough in debug mode.
-	if ( !options.genC && stmt->kind != ast::BranchStmt::Goto ) {
-		if ( !stmt->target.empty() ) {
-			output << " " << stmt->target;
-		} else if ( stmt->kind == ast::BranchStmt::FallThrough ) {
-			output << " default";
-		}
+	// Print branch target for labelled break/continue/fallthrough.
+	if ( ast::BranchStmt::Goto != stmt->kind && !stmt->target.empty() ) {
+		assertf( !options.genC, "labelled branch should not reach code generation. %s", stmt->target.name.c_str() );
+		output << " " << stmt->target;
 	}
 	output << ";";
Index: src/ControlStruct/MultiLevelExit.cpp
===================================================================
--- src/ControlStruct/MultiLevelExit.cpp	(revision d923fca679790b81e32b6a12debf586d34a17e72)
+++ src/ControlStruct/MultiLevelExit.cpp	(revision 9506c704946ca74a10747460a7b64c9a3a6a05c4)
@@ -499,9 +499,8 @@
 		}
 
+		// The end of the last case is always immediately before the first
+		// statement after the switch, so we can jump here as a break.
 		auto mutCase = mutStmt->cases.back().get_and_mutate();
-
-		Label label( mutCase->location, "breakLabel" );
-		auto branch = new BranchStmt( mutCase->location, BranchStmt::Break, label );
-		branch->labels.push_back( entry.useBreakExit() );
+		auto branch = labelledNullStmt( mutCase->location, entry.useBreakExit() );
 		mutCase->stmts.push_back( branch );
 
