Index: src/Common/Stats/Time.h
===================================================================
--- src/Common/Stats/Time.h	(revision cca568e32a0a35aff9eb80fa5e403e3d338d349e)
+++ src/Common/Stats/Time.h	(revision 9e63a2bb37cb0617a3e904cdba13fd4dd8830abd)
@@ -9,5 +9,5 @@
 // Author           : Thierry Delisle
 // Created On       : Fri Mar 01 15:14:11 2019
-// Last Modified By :
+// Last Modified By : Andrew Beach
 // Last Modified On :
 // Update Count     :
@@ -41,4 +41,10 @@
 				f();
 			}
+
+			template<typename ret_t = void, typename func_t, typename... arg_t>
+			inline ret_t TimeCall(
+					const char *, func_t func, arg_t&&... arg) {
+				return func(std::forward<arg_t>(arg)...);
+			}
 #		else
 			void StartGlobal();
@@ -59,4 +65,11 @@
 				func();
 			}
+
+			template<typename ret_t = void, typename func_t, typename... arg_t>
+			inline ret_t TimeCall(
+					const char * name, func_t func, arg_t&&... arg) {
+				BlockGuard guard(name);
+				return func(std::forward<arg_t>(arg)...);
+			}
 #		endif
 	}
Index: src/ControlStruct/MLEMutator.cc
===================================================================
--- src/ControlStruct/MLEMutator.cc	(revision cca568e32a0a35aff9eb80fa5e403e3d338d349e)
+++ src/ControlStruct/MLEMutator.cc	(revision 9e63a2bb37cb0617a3e904cdba13fd4dd8830abd)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Oct 22 17:22:44 2019
-// Update Count     : 220
+// Last Modified By : Andrew Beach
+// Last Modified On : Thr Jan 16 15:33:00 2020
+// Update Count     : 221
 //
 
@@ -331,4 +331,11 @@
 	}
 
+	void MLEMutator::premutate( FinallyStmt * ) {
+		GuardAction([this, old = std::move(enclosingControlStructures)]() {
+			enclosingControlStructures = std::move(old);
+		});
+		enclosingControlStructures = std::list<Entry>();
+	}
+
 	void MLEMutator::premutate( CaseStmt *caseStmt ) {
 		visit_children = false;
Index: src/ControlStruct/MLEMutator.h
===================================================================
--- src/ControlStruct/MLEMutator.h	(revision cca568e32a0a35aff9eb80fa5e403e3d338d349e)
+++ src/ControlStruct/MLEMutator.h	(revision 9e63a2bb37cb0617a3e904cdba13fd4dd8830abd)
@@ -9,8 +9,10 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Oct 22 17:22:47 2019
-// Update Count     : 45
+// Last Modified By : Andrew Beach
+// Last Modified On : Thr Jan 16 12:46:00 2020
+// Update Count     : 46
 //
+
+// Can anyone figure out what MLE stands for?
 
 #pragma once
@@ -49,4 +51,5 @@
 		void premutate( TryStmt *tryStmt );
 		Statement * postmutate( TryStmt *tryStmt );
+		void premutate( FinallyStmt *finallyStmt );
 
 		Statement *mutateLoop( Statement *bodyLoop, Entry &e );
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision cca568e32a0a35aff9eb80fa5e403e3d338d349e)
+++ src/SymTab/Validate.cc	(revision 9e63a2bb37cb0617a3e904cdba13fd4dd8830abd)
@@ -375,19 +375,14 @@
 			Stats::Heap::newPass("validate-F");
 			Stats::Time::BlockGuard guard("validate-F");
-			Stats::Time::TimeBlock("Fix Object Type", [&]() {
-				FixObjectType::fix( translationUnit );
-			});
-			Stats::Time::TimeBlock("Array Length", [&]() {
-				ArrayLength::computeLength( translationUnit );
-			});
-			Stats::Time::TimeBlock("Find Special Declarations", [&]() {
-				Validate::findSpecialDecls( translationUnit );
-			});
-			Stats::Time::TimeBlock("Fix Label Address", [&]() {
-				mutateAll( translationUnit, labelAddrFixer );
-			});
-			Stats::Time::TimeBlock("Handle Attributes", [&]() {
-				Validate::handleAttributes( translationUnit );
-			});
+			Stats::Time::TimeCall("Fix Object Type",
+				FixObjectType::fix, translationUnit);
+			Stats::Time::TimeCall("Array Length",
+				ArrayLength::computeLength, translationUnit);
+			Stats::Time::TimeCall("Find Special Declarations",
+				Validate::findSpecialDecls, translationUnit);
+			Stats::Time::TimeCall("Fix Label Address",
+				mutateAll<LabelAddressFixer>, translationUnit, labelAddrFixer);
+			Stats::Time::TimeCall("Handle Attributes",
+				Validate::handleAttributes, translationUnit);
 		}
 	}
Index: tests/.expect/except-finally-error.txt
===================================================================
--- tests/.expect/except-finally-error.txt	(revision 9e63a2bb37cb0617a3e904cdba13fd4dd8830abd)
+++ tests/.expect/except-finally-error.txt	(revision 9e63a2bb37cb0617a3e904cdba13fd4dd8830abd)
@@ -0,0 +1,4 @@
+except-finally-error.cfa:7:1 error: 'break' outside a loop, 'switch', or labelled block
+except-finally-error.cfa:15:1 error: 'continue' target must be an enclosing loop: 
+except-finally-error.cfa:32:1 error: 'break' target must be an enclosing control structure: mainLoop
+except-finally-error.cfa:40:1 error: 'continue' target must be an enclosing loop: mainLoop
Index: tests/except-finally-error.cfa
===================================================================
--- tests/except-finally-error.cfa	(revision 9e63a2bb37cb0617a3e904cdba13fd4dd8830abd)
+++ tests/except-finally-error.cfa	(revision 9e63a2bb37cb0617a3e904cdba13fd4dd8830abd)
@@ -0,0 +1,61 @@
+// 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 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 void_return_in_finally() {
+	try {} finally {
+		return;
+	}
+}
+
+int value_return_in_finally() {
+	try {} finally {
+		return -7;
+	}
+
+}
+
+void main() {
+	// Should not compile.
+	return 1;
+}
