Index: src/ControlStruct/ExceptTranslate.cc
===================================================================
--- src/ControlStruct/ExceptTranslate.cc	(revision 79aae152d2aebdd70ad7576e14757560c7d66174)
+++ src/ControlStruct/ExceptTranslate.cc	(revision 359d12d8de8e5a1d618c5d15fe31a879bb8bb624)
@@ -10,6 +10,6 @@
 // Created On       : Wed Jun 14 16:49:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Tue May 26 10:56:00 2020
-// Update Count     : 16
+// Last Modified On : Wed Jun 24 11:18:00 2020
+// Update Count     : 17
 //
 
@@ -72,5 +72,4 @@
 			ThrowStmt * throwStmt, const char * throwFunc );
 		Statement * create_terminate_rethrow( ThrowStmt * throwStmt );
-		Statement * create_resume_rethrow( ThrowStmt * throwStmt );
 
 	public:
@@ -113,15 +112,4 @@
 			new UntypedExpr( new NameExpr( "__cfaehm_rethrow_terminate" ) )
 			) );
-		delete throwStmt;
-		return result;
-	}
-
-	Statement * ThrowMutatorCore::create_resume_rethrow(
-			ThrowStmt *throwStmt ) {
-		// return false;
-		Statement * result = new ReturnStmt(
-			new ConstantExpr( Constant::from_bool( false ) )
-			);
-		result->labels = throwStmt->labels;
 		delete throwStmt;
 		return result;
@@ -167,5 +155,6 @@
 				return create_either_throw( throwStmt, "$throwResume" );
 			} else if ( ResHandler == cur_context ) {
-				return create_resume_rethrow( throwStmt );
+				// This has to be handled later.
+				return throwStmt;
 			} else {
 				abort("Invalid throwResume in %s at %i\n",
@@ -196,4 +185,5 @@
 		FunctionDecl * create_finally_wrapper( TryStmt * tryStmt );
 		ObjectDecl * create_finally_hook( FunctionDecl * finally_wrapper );
+		Statement * create_resume_rethrow( ThrowStmt * throwStmt );
 
 		// Types used in translation, make sure to use clone.
@@ -227,4 +217,5 @@
 		void premutate( StructDecl *structDecl );
 		Statement * postmutate( TryStmt *tryStmt );
+		Statement * postmutate( ThrowStmt *throwStmt );
 	};
 
@@ -594,4 +585,14 @@
 			attributes
 			);
+	}
+
+	Statement * TryMutatorCore::create_resume_rethrow( ThrowStmt *throwStmt ) {
+		// return false;
+		Statement * result = new ReturnStmt(
+			new ConstantExpr( Constant::from_bool( false ) )
+			);
+		result->labels = throwStmt->labels;
+		delete throwStmt;
+		return result;
 	}
 
@@ -668,4 +669,10 @@
 	}
 
+	Statement * TryMutatorCore::postmutate( ThrowStmt *throwStmt ) {
+		// Only valid `throwResume;` statements should remain. (2/3 checks)
+		assert( ThrowStmt::Resume == throwStmt->kind && ! throwStmt->expr );
+		return create_resume_rethrow( throwStmt );
+	}
+
 	void translateThrows( std::list< Declaration *> & translationUnit ) {
 		PassVisitor<ThrowMutatorCore> translator;
