Index: tests/exceptions/.expect/finally-error.txt
===================================================================
--- tests/exceptions/.expect/finally-error.txt	(revision 2fa0237f52bd8db42015c83dee0d38191a902db4)
+++ 	(revision )
@@ -1,15 +1,0 @@
-exceptions/finally-error.cfa:7:1 error: 'break' outside a loop, 'switch', or labelled block
-exceptions/finally-error.cfa:15:1 error: 'break' outside a loop, 'switch', or labelled block
-exceptions/finally-error.cfa:23:1 error: 'break' outside a loop, 'switch', or labelled block
-exceptions/finally-error.cfa:31:1 error: 'continue' target must be an enclosing loop: 
-exceptions/finally-error.cfa:48:1 error: 'break' target must be an enclosing control structure: mainLoop
-exceptions/finally-error.cfa:56:1 error: 'continue' target must be an enclosing loop: mainLoop
-exceptions/finally-error.cfa:65:1 error: 'break' outside a loop, 'switch', or labelled block
-exceptions/finally-error.cfa:76:1 error: 'break' outside a loop, 'switch', or labelled block
-exceptions/finally-error.cfa:87:1 error: 'fallthrough' must be enclosed in a 'switch' or 'choose'
-exceptions/finally-error.cfa:98:1 error: 'break' target must be an enclosing control structure: mainBlock
-exceptions/finally-error.cfa:111:1 error: 'fallthrough' must be enclosed in a 'switch' or 'choose'
-exceptions/finally-error.cfa:124:1 error: 'fallthrough' must be enclosed in a 'switch' or 'choose'
-exceptions/finally-error.cfa:133:1 error: 'return' may not appear in a finally clause
-exceptions/finally-error.cfa:139:1 error: 'return' may not appear in a finally clause
-exceptions/finally-error.cfa:148:1 error: 'break' outside a loop, 'switch', or labelled block
Index: tests/exceptions/.expect/try-ctrl-flow.txt
===================================================================
--- tests/exceptions/.expect/try-ctrl-flow.txt	(revision ba068c0596ffdd3cbcff6d50f6cbacd233a4c9fc)
+++ tests/exceptions/.expect/try-ctrl-flow.txt	(revision ba068c0596ffdd3cbcff6d50f6cbacd233a4c9fc)
@@ -0,0 +1,18 @@
+exceptions/try-ctrl-flow.cfa:7:1 error: 'break' outside a loop, 'switch', or labelled block
+exceptions/try-ctrl-flow.cfa:15:1 error: 'break' outside a loop, 'switch', or labelled block
+exceptions/try-ctrl-flow.cfa:23:1 error: 'break' outside a loop, 'switch', or labelled block
+exceptions/try-ctrl-flow.cfa:31:1 error: 'continue' target must be an enclosing loop: 
+exceptions/try-ctrl-flow.cfa:48:1 error: 'break' target must be an enclosing control structure: mainLoop
+exceptions/try-ctrl-flow.cfa:56:1 error: 'continue' target must be an enclosing loop: mainLoop
+exceptions/try-ctrl-flow.cfa:65:1 error: 'break' outside a loop, 'switch', or labelled block
+exceptions/try-ctrl-flow.cfa:76:1 error: 'break' outside a loop, 'switch', or labelled block
+exceptions/try-ctrl-flow.cfa:87:1 error: 'fallthrough' must be enclosed in a 'switch' or 'choose'
+exceptions/try-ctrl-flow.cfa:98:1 error: 'break' target must be an enclosing control structure: mainBlock
+exceptions/try-ctrl-flow.cfa:111:1 error: 'fallthrough' must be enclosed in a 'switch' or 'choose'
+exceptions/try-ctrl-flow.cfa:124:1 error: 'fallthrough' must be enclosed in a 'switch' or 'choose'
+exceptions/try-ctrl-flow.cfa:133:1 error: 'return' may not appear in a finally clause
+exceptions/try-ctrl-flow.cfa:139:1 error: 'return' may not appear in a finally clause
+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
Index: tests/exceptions/finally-error.cfa
===================================================================
--- tests/exceptions/finally-error.cfa	(revision 2fa0237f52bd8db42015c83dee0d38191a902db4)
+++ 	(revision )
@@ -1,156 +1,0 @@
-// All of these should be caught as long as the check remains in the same
-// pass. (Although not even all of the checks are in place yet.)
-
-void break_in_finally() {
-	while (true) {
-		try {} finally {
-			break;
-		}
-	}
-}
-
-void for_break_in_finally() {
-	for (10) {
-		try {} finally {
-			break;
-		}
-	}
-}
-
-void do_while_break_in_finally() {
-	do {
-		try {} finally {
-			break;
-		}
-	} while (false);
-}
-
-void continue_in_finally() {
-	while (true) {
-		try {} finally {
-			continue;
-		}
-	}
-}
-
-void goto_in_finally() {
-	while (true) {
-		try {} finally {
-			goto end_of_function;
-		}
-	}
-	end_of_function: {}
-}
-
-void labelled_break_in_finally() {
-	mainLoop: while (true) {
-		try {} finally {
-			break mainLoop;
-		}
-	}
-}
-
-void labelled_continue_in_finally() {
-	mainLoop: while (true) {
-		try {} finally {
-			continue mainLoop;
-		}
-	}
-}
-
-void switch_break_in_finally() {
-	switch (1) {
-	case 1:
-		try {} finally {
-			break;
-		}
-	default:
-		break;
-	}
-}
-
-void choose_break_in_finally() {
-	choose (1) {
-	case 1:
-		try {} finally {
-			break;
-		}
-	default:
-		break;
-	}
-}
-
-void choose_fallthru_in_finally() {
-	choose (1) {
-	case 1:
-		try {} finally {
-			fallthru;
-		}
-	default:
-		break;
-	}
-}
-
-void labelled_choose_break_in_finally() {
-	mainBlock: choose (1) {
-	case 1:
-		try {} finally {
-			break mainBlock;
-		}
-	case 2:
-		break;
-	default:
-		break;
-	}
-}
-
-void labelled_choose_fallthru_in_finally() {
-	mainBlock: choose (1) {
-	case 1:
-		try {} finally {
-			fallthru mainBlock;
-		}
-	case 2:
-		break;
-	default:
-		break;
-	}
-}
-
-void choose_fallthru_default_in_finally() {
-	choose (1) {
-	case 1:
-		try {} finally {
-			fallthru default;
-		}
-	default:
-		break;
-	}
-}
-
-void void_return_in_finally() {
-	try {} finally {
-		return;
-	}
-}
-
-int value_return_in_finally() {
-	try {} finally {
-		return -7;
-	}
-
-}
-
-// Checked in the same place, make sure it does't break.
-void break_in_function() {
-	while (true) {
-		void inner() {
-			break;
-		}
-	}
-}
-
-void main() {
-	// Should not compile.
-	return 1;
-}
Index: tests/exceptions/try-ctrl-flow.cfa
===================================================================
--- tests/exceptions/try-ctrl-flow.cfa	(revision ba068c0596ffdd3cbcff6d50f6cbacd233a4c9fc)
+++ tests/exceptions/try-ctrl-flow.cfa	(revision ba068c0596ffdd3cbcff6d50f6cbacd233a4c9fc)
@@ -0,0 +1,202 @@
+// Check all the local control flow structures that are "sealed" by some the
+// try statement clauses; where structured programming is stricter.
+
+void break_in_finally() {
+	while (true) {
+		try {} finally {
+			break;
+		}
+	}
+}
+
+void for_break_in_finally() {
+	for (10) {
+		try {} finally {
+			break;
+		}
+	}
+}
+
+void do_while_break_in_finally() {
+	do {
+		try {} finally {
+			break;
+		}
+	} while (false);
+}
+
+void continue_in_finally() {
+	while (true) {
+		try {} finally {
+			continue;
+		}
+	}
+}
+
+void goto_in_finally() {
+	while (true) {
+		try {} finally {
+			goto end_of_function;
+		}
+	}
+	end_of_function: {}
+}
+
+void labelled_break_in_finally() {
+	mainLoop: while (true) {
+		try {} finally {
+			break mainLoop;
+		}
+	}
+}
+
+void labelled_continue_in_finally() {
+	mainLoop: while (true) {
+		try {} finally {
+			continue mainLoop;
+		}
+	}
+}
+
+void switch_break_in_finally() {
+	switch (1) {
+	case 1:
+		try {} finally {
+			break;
+		}
+	default:
+		break;
+	}
+}
+
+void choose_break_in_finally() {
+	choose (1) {
+	case 1:
+		try {} finally {
+			break;
+		}
+	default:
+		break;
+	}
+}
+
+void choose_fallthru_in_finally() {
+	choose (1) {
+	case 1:
+		try {} finally {
+			fallthru;
+		}
+	default:
+		break;
+	}
+}
+
+void labelled_choose_break_in_finally() {
+	mainBlock: choose (1) {
+	case 1:
+		try {} finally {
+			break mainBlock;
+		}
+	case 2:
+		break;
+	default:
+		break;
+	}
+}
+
+void labelled_choose_fallthru_in_finally() {
+	mainBlock: choose (1) {
+	case 1:
+		try {} finally {
+			fallthru mainBlock;
+		}
+	case 2:
+		break;
+	default:
+		break;
+	}
+}
+
+void choose_fallthru_default_in_finally() {
+	choose (1) {
+	case 1:
+		try {} finally {
+			fallthru default;
+		}
+	default:
+		break;
+	}
+}
+
+void void_return_in_finally() {
+	try {} finally {
+		return;
+	}
+}
+
+int value_return_in_finally() {
+	try {} finally {
+		return -7;
+	}
+
+}
+
+// Checked in the same place, make sure it does't break.
+void break_in_function() {
+	while (true) {
+		void inner() {
+			break;
+		}
+	}
+}
+
+// Now just use return to test the other try control flow interactions.
+
+exception nil_exception {};
+
+void return_in_try_with_catch() {
+	try {
+		return;
+	} catch (nil_exception *) {
+		;
+	}
+}
+
+// Allowed.
+void return_in_try_with_catchReturn() {
+	try {
+		return;
+	} catchResume (nil_exception *) {
+		;
+	}
+}
+
+// Allowed.
+void return_in_try_with_finally() {
+	try {
+		return;
+	} finally {
+		;
+	}
+}
+
+void return_in_catch() {
+	try {
+		;
+	} catch (nil_exception *) {
+		return;
+	}
+}
+
+void return_in_catchResume() {
+	try {
+		;
+	} catchResume (nil_exception *) {
+		return;
+	}
+}
+
+void main() {
+	// Should not compile.
+	return 1;
+}
