Index: tests/exceptions/.expect/try-ctrl-flow.txt
===================================================================
--- tests/exceptions/.expect/try-ctrl-flow.txt	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
+++ tests/exceptions/.expect/try-ctrl-flow.txt	(revision 0a6d20453ce0f1bf1bb35cbe740e036d4d380116)
@@ -15,4 +15,3 @@
 exceptions/try-ctrl-flow.cfa:148:1 error: "break" outside a loop, "switch", or labelled block
 exceptions/try-ctrl-flow.cfa:159:1 error: "return" may not appear in a try statement with a catch clause
-exceptions/try-ctrl-flow.cfa:187:1 error: "return" may not appear in a catch clause
-exceptions/try-ctrl-flow.cfa:195:1 error: "return" may not appear in a catchResume clause
+exceptions/try-ctrl-flow.cfa:187:1 error: "return" may not appear in a catchResume clause
Index: tests/exceptions/.expect/try-leave-catch.txt
===================================================================
--- tests/exceptions/.expect/try-leave-catch.txt	(revision 0a6d20453ce0f1bf1bb35cbe740e036d4d380116)
+++ tests/exceptions/.expect/try-leave-catch.txt	(revision 0a6d20453ce0f1bf1bb35cbe740e036d4d380116)
@@ -0,0 +1,7 @@
+Continue
+After Loop
+Break
+After Loop
+Break
+After Switch
+Result of test_return: 1
Index: tests/exceptions/try-ctrl-flow.cfa
===================================================================
--- tests/exceptions/try-ctrl-flow.cfa	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
+++ tests/exceptions/try-ctrl-flow.cfa	(revision 0a6d20453ce0f1bf1bb35cbe740e036d4d380116)
@@ -181,12 +181,4 @@
 }
 
-void return_in_catch() {
-	try {
-		;
-	} catch (nil_exception *) {
-		return;
-	}
-}
-
 void return_in_catchResume() {
 	try {
Index: tests/exceptions/try-leave-catch.cfa
===================================================================
--- tests/exceptions/try-leave-catch.cfa	(revision 0a6d20453ce0f1bf1bb35cbe740e036d4d380116)
+++ tests/exceptions/try-leave-catch.cfa	(revision 0a6d20453ce0f1bf1bb35cbe740e036d4d380116)
@@ -0,0 +1,59 @@
+// Control Flow out of Termination Handler Clauses
+
+exception zen {};
+
+vtable(zen) zen_vt;
+
+void test_loop() {
+	do {
+		try {
+			throw (zen){&zen_vt};
+		} catch (zen *) {
+			printf("Continue\n");
+			continue;
+		}
+		printf("Reached end of loop.\n.");
+	} while (false);
+	printf("After Loop\n");
+
+	while (true) {
+		try {
+			throw (zen){&zen_vt};
+		} catch (zen *) {
+			printf("Break\n");
+			break;
+		}
+		printf("Reached end of loop.\n.");
+	}
+	printf("After Loop\n");
+}
+
+void test_switch() {
+	switch (0) {
+	case 0:
+		try {
+			throw (zen){&zen_vt};
+		} catch (zen *) {
+			printf("Break\n");
+			break;
+		}
+	default:
+		printf("Reached default.\n");
+	}
+	printf("After Switch\n");
+}
+
+int test_return() {
+	try {
+		throw (zen){&zen_vt};
+	} catch (zen *) {
+		return 1;
+	}
+	return 0;
+}
+
+int main(int argc, char * argv[]) {
+	test_loop();
+	test_switch();
+	printf("Result of test_return: %d\n", test_return());
+}
