Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision e6b42e7a226ea0d0e4d4f46d30734a2ee84d96cb)
+++ src/ResolvExpr/Resolver.cc	(revision b9fa85b6bb101567c376a002614067feab620b7b)
@@ -1259,4 +1259,5 @@
 		const ast::ThrowStmt *       previsit( const ast::ThrowStmt * );
 		const ast::CatchStmt *       previsit( const ast::CatchStmt * );
+		const ast::CatchStmt *       postvisit( const ast::CatchStmt * );
 		const ast::WaitForStmt *     previsit( const ast::WaitForStmt * );
 
@@ -1491,10 +1492,30 @@
 
 	const ast::CatchStmt * Resolver_new::previsit( const ast::CatchStmt * catchStmt ) {
-		// TODO: This will need a fix for the decl/cond scoping problem.
+		// Until we are very sure this invarent (ifs that move between passes have thenPart)
+		// holds, check it. This allows a check for when to decode the mangling.
+		if ( auto ifStmt = catchStmt->body.as<ast::IfStmt>() ) {
+			assert( ifStmt->thenPart );
+		}
+		// Encode the catchStmt so the condition can see the declaration.
 		if ( catchStmt->cond ) {
-			ast::ptr< ast::Type > boolType = new ast::BasicType{ ast::BasicType::Bool };
-			catchStmt = ast::mutate_field(
-				catchStmt, &ast::CatchStmt::cond,
-				findSingleExpression( catchStmt->cond, boolType, symtab ) );
+			ast::CatchStmt * stmt = mutate( catchStmt );
+			stmt->body = new ast::IfStmt( stmt->location, stmt->cond, nullptr, stmt->body );
+			stmt->cond = nullptr;
+			return stmt;
+		}
+		return catchStmt;
+	}
+
+	const ast::CatchStmt * Resolver_new::postvisit( const ast::CatchStmt * catchStmt ) {
+		// Decode the catchStmt so everything is stored properly.
+		const ast::IfStmt * ifStmt = catchStmt->body.as<ast::IfStmt>();
+		if ( nullptr != ifStmt && nullptr == ifStmt->thenPart ) {
+			assert( ifStmt->cond );
+			assert( ifStmt->elsePart );
+			ast::CatchStmt * stmt = ast::mutate( catchStmt );
+			stmt->cond = ifStmt->cond;
+			stmt->body = ifStmt->elsePart;
+			// ifStmt should be implicately deleted here.
+			return stmt;
 		}
 		return catchStmt;
