Index: src/ControlStruct/ExceptTranslate.cc
===================================================================
--- src/ControlStruct/ExceptTranslate.cc	(revision 68f9c43ecf1873cbb5f06aee682704b56612ed16)
+++ src/ControlStruct/ExceptTranslate.cc	(revision 9f2012f92e024a65ddf3856c93f9664f8b327a1c)
@@ -104,13 +104,13 @@
 		// Types used in translation, make sure to use clone.
 		// void (*function)();
-		FunctionType try_func_t;
+		FunctionType * try_func_t;
 		// void (*function)(int, exception);
-		FunctionType catch_func_t;
+		FunctionType * catch_func_t;
 		// int (*function)(exception);
-		FunctionType match_func_t;
+		FunctionType * match_func_t;
 		// bool (*function)(exception);
-		FunctionType handle_func_t;
+		FunctionType * handle_func_t;
 		// void (*function)(__attribute__((unused)) void *);
-		FunctionType finally_func_t;
+		FunctionType * finally_func_t;
 
 		StructInstType * create_except_type() {
@@ -125,9 +125,9 @@
 			handler_except_decl( nullptr ),
 			except_decl( nullptr ), node_decl( nullptr ), hook_decl( nullptr ),
-			try_func_t( noQualifiers, false ),
-			catch_func_t( noQualifiers, false ),
-			match_func_t( noQualifiers, false ),
-			handle_func_t( noQualifiers, false ),
-			finally_func_t( noQualifiers, false )
+			try_func_t( new FunctionType(noQualifiers, false) ),
+			catch_func_t( new FunctionType(noQualifiers, false) ),
+			match_func_t( new FunctionType(noQualifiers, false) ),
+			handle_func_t( new FunctionType(noQualifiers, false) ),
+			finally_func_t( new FunctionType(noQualifiers, false) )
 		{}
 
@@ -141,5 +141,5 @@
 		assert( except_decl );
 
-		ObjectDecl index_obj(
+		auto index_obj = new ObjectDecl(
 			"__handler_index",
 			Type::StorageClasses(),
@@ -149,5 +149,5 @@
 			/*init*/ NULL
 			);
-		ObjectDecl exception_obj(
+		auto exception_obj = new ObjectDecl(
 			"__exception_inst",
 			Type::StorageClasses(),
@@ -160,5 +160,5 @@
 			/*init*/ NULL
 			);
-		ObjectDecl bool_obj(
+		auto bool_obj = new ObjectDecl(
 			"__ret_bool",
 			Type::StorageClasses(),
@@ -169,5 +169,5 @@
 			std::list<Attribute *>{ new Attribute( "unused" ) }
 			);
-		ObjectDecl voidptr_obj(
+		auto voidptr_obj = new ObjectDecl(
 			"__hook",
 			Type::StorageClasses(),
@@ -184,14 +184,14 @@
 			);
 
-		ObjectDecl * unused_index_obj = index_obj.clone();
+		ObjectDecl * unused_index_obj = index_obj->clone();
 		unused_index_obj->attributes.push_back( new Attribute( "unused" ) );
 
-		catch_func_t.get_parameters().push_back( index_obj.clone() );
-		catch_func_t.get_parameters().push_back( exception_obj.clone() );
-		match_func_t.get_returnVals().push_back( unused_index_obj );
-		match_func_t.get_parameters().push_back( exception_obj.clone() );
-		handle_func_t.get_returnVals().push_back( bool_obj.clone() );
-		handle_func_t.get_parameters().push_back( exception_obj.clone() );
-		finally_func_t.get_parameters().push_back( voidptr_obj.clone() );
+		catch_func_t->get_parameters().push_back( index_obj );
+		catch_func_t->get_parameters().push_back( exception_obj->clone() );
+		match_func_t->get_returnVals().push_back( unused_index_obj );
+		match_func_t->get_parameters().push_back( exception_obj->clone() );
+		handle_func_t->get_returnVals().push_back( bool_obj );
+		handle_func_t->get_parameters().push_back( exception_obj );
+		finally_func_t->get_parameters().push_back( voidptr_obj );
 	}
 
@@ -264,5 +264,5 @@
 
 		return new FunctionDecl( "try", Type::StorageClasses(),
-			LinkageSpec::Cforall, try_func_t.clone(), body );
+			LinkageSpec::Cforall, try_func_t->clone(), body );
 	}
 
@@ -271,5 +271,5 @@
 		std::list<CaseStmt *> handler_wrappers;
 
-		FunctionType *func_type = catch_func_t.clone();
+		FunctionType *func_type = catch_func_t->clone();
 		DeclarationWithType * index_obj = func_type->get_parameters().front();
 		DeclarationWithType * except_obj = func_type->get_parameters().back();
@@ -392,5 +392,5 @@
 		CompoundStmt * body = new CompoundStmt();
 
-		FunctionType * func_type = match_func_t.clone();
+		FunctionType * func_type = match_func_t->clone();
 		DeclarationWithType * except_obj = func_type->get_parameters().back();
 
@@ -446,5 +446,5 @@
 		CompoundStmt * body = new CompoundStmt();
 
-		FunctionType * func_type = handle_func_t.clone();
+		FunctionType * func_type = handle_func_t->clone();
 		DeclarationWithType * except_obj = func_type->get_parameters().back();
 
@@ -529,5 +529,5 @@
 
 		return new FunctionDecl("finally", Type::StorageClasses(),
-			LinkageSpec::Cforall, finally_func_t.clone(), body);
+			LinkageSpec::Cforall, finally_func_t->clone(), body);
 	}
 
