Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 60a80627d0a7fda17787b753d33a741d3719f79a)
+++ src/ResolvExpr/Resolver.cc	(revision e326ebca716fb893d93f082f2997c69fd1dade20)
@@ -84,4 +84,5 @@
 		void previsit( ThrowStmt * throwStmt );
 		void previsit( CatchStmt * catchStmt );
+		void postvisit( CatchStmt * catchStmt );
 		void previsit( WaitForStmt * stmt );
 
@@ -567,6 +568,28 @@
 
 	void Resolver_old::previsit( CatchStmt * catchStmt ) {
+		// 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 ( IfStmt * ifStmt = dynamic_cast<IfStmt *>( catchStmt->body ) ) {
+			assert( ifStmt->thenPart );
+		}
+		// Encode the catchStmt so the condition can see the declaration.
 		if ( catchStmt->cond ) {
-			findSingleExpression( catchStmt->cond, new BasicType( noQualifiers, BasicType::Bool ), indexer );
+			IfStmt * ifStmt = new IfStmt( catchStmt->cond, nullptr, catchStmt->body );
+			catchStmt->cond = nullptr;
+			catchStmt->body = ifStmt;
+		}
+	}
+
+	void Resolver_old::postvisit( CatchStmt * catchStmt ) {
+		// Decode the catchStmt so everything is stored properly.
+		IfStmt * ifStmt = dynamic_cast<IfStmt *>( catchStmt->body );
+		if ( nullptr != ifStmt && nullptr == ifStmt->thenPart ) {
+			assert( ifStmt->condition );
+			assert( ifStmt->elsePart );
+			catchStmt->cond = ifStmt->condition;
+			catchStmt->body = ifStmt->elsePart;
+			ifStmt->condition = nullptr;
+			ifStmt->elsePart = nullptr;
+			delete ifStmt;
 		}
 	}
@@ -1466,4 +1489,5 @@
 
 	const ast::CatchStmt * Resolver_new::previsit( const ast::CatchStmt * catchStmt ) {
+		// TODO: This will need a fix for the decl/cond scoping problem.
 		if ( catchStmt->cond ) {
 			ast::ptr< ast::Type > boolType = new ast::BasicType{ ast::BasicType::Bool };
