Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 56e49b0f2a7f4c543915bdf9e4bd2fa65be2d947)
+++ src/ResolvExpr/Resolver.cc	(revision 38d70abc27abbeee2329235b6c1d6987d8ca1df1)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 12:17:01 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 23 17:23:14 2017
-// Update Count     : 211
+// Last Modified By : Andrew Beach
+// Last Modified On : Tus Aug  8 16:06:00 2017
+// Update Count     : 212
 //
 
@@ -71,4 +71,5 @@
 		virtual void visit( ReturnStmt *returnStmt ) override;
 		virtual void visit( ThrowStmt *throwStmt ) override;
+		virtual void visit( CatchStmt *catchStmt ) override;
 
 		virtual void visit( SingleInit *singleInit ) override;
@@ -368,8 +369,31 @@
 
 	void Resolver::visit( ThrowStmt *throwStmt ) {
+		// TODO: Replace *exception type with &exception type.
 		if ( throwStmt->get_expr() ) {
-			Expression * wrapped = new CastExpr( throwStmt->get_expr(), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
+			StructDecl * exception_decl =
+				lookupStruct( "__cfaehm__base_exception_t" );
+			assert( exception_decl );
+			Expression * wrapped = new CastExpr(
+				throwStmt->get_expr(),
+				new PointerType(
+					noQualifiers,
+					new StructInstType(
+						noQualifiers,
+						exception_decl
+						)
+					)
+				);
 			Expression * newExpr = findSingleExpression( wrapped, *this );
 			throwStmt->set_expr( newExpr );
+		}
+	}
+
+	void Resolver::visit( CatchStmt *catchStmt ) {
+		if ( catchStmt->get_cond() ) {
+			Expression * wrapped = new CastExpr(
+				catchStmt->get_cond(),
+				new BasicType( noQualifiers, BasicType::Bool )
+				);
+			catchStmt->set_cond( findSingleExpression( wrapped, *this ) );
 		}
 	}
