Index: src/Common/GC.cc
===================================================================
--- src/Common/GC.cc	(revision dbc2c2c1c5d8dcdec833f7bad119f889765fb5e8)
+++ src/Common/GC.cc	(revision bfc78119c41ed230f80fe0326923335e58b5a745)
@@ -117,14 +117,6 @@
 }
 
-bool stack_check( int* i, GC_Object* o ) {
-	int j;
-	return ( i < &j ) == ( (void*)o < (void*)&j );
-}
-
 GC_Object::GC_Object() {
 	GC::get().register_object( this );
-
-	int i;
-	assert(!stack_check(&i, this));
 }
 
Index: src/Common/GC.h
===================================================================
--- src/Common/GC.h	(revision dbc2c2c1c5d8dcdec833f7bad119f889765fb5e8)
+++ src/Common/GC.h	(revision bfc78119c41ed230f80fe0326923335e58b5a745)
@@ -71,7 +71,7 @@
 inline void new_generation() { GC::get().new_generation(); }
 
-/// no-op default trace
-template<typename T>
-inline const GC& operator<< (const GC& gc, const T& x) { return gc; }
+// /// no-op default trace
+// template<typename T>
+// inline const GC& operator<< (const GC& gc, const T& x) { return gc; }
 
 inline void traceAll(const GC&) {}
Index: src/ControlStruct/ExceptTranslate.cc
===================================================================
--- src/ControlStruct/ExceptTranslate.cc	(revision dbc2c2c1c5d8dcdec833f7bad119f889765fb5e8)
+++ src/ControlStruct/ExceptTranslate.cc	(revision bfc78119c41ed230f80fe0326923335e58b5a745)
@@ -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);
 	}
 
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision dbc2c2c1c5d8dcdec833f7bad119f889765fb5e8)
+++ src/GenPoly/Box.cc	(revision bfc78119c41ed230f80fe0326923335e58b5a745)
@@ -279,11 +279,12 @@
 	/// Adds parameters for otype layout to a function type
 	void addOtypeParams( FunctionType *layoutFnType, std::list< TypeDecl* > &otypeParams ) {
-		BasicType sizeAlignType( Type::Qualifiers(), BasicType::LongUnsignedInt );
-
-		for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
+		auto sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
+
+		for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); 
+				param != otypeParams.end(); ++param ) {
 			TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param );
 			std::string paramName = mangleType( &paramType );
-			layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), Type::StorageClasses(), LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
-			layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), Type::StorageClasses(), LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
+			layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), Type::StorageClasses(), LinkageSpec::Cforall, 0, sizeAlignType->clone(), 0 ) );
+			layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), Type::StorageClasses(), LinkageSpec::Cforall, 0, sizeAlignType->clone(), 0 ) );
 		}
 	}
@@ -740,5 +741,6 @@
 				Type * newType = param->clone();
 				if ( env ) env->apply( newType );
-				ObjectDecl *newObj = ObjectDecl::newObject( tempNamer.newName(), newType, nullptr );
+				ObjectDecl *newObj = ObjectDecl::newObject( 
+					tempNamer.newName(), newType, nullptr );
 				newObj->get_type()->get_qualifiers() = Type::Qualifiers(); // TODO: is this right???
 				stmtsToAddBefore.push_back( new DeclStmt( newObj ) );
@@ -1325,9 +1327,14 @@
 			std::list< DeclarationWithType *> inferredParams;
 			// size/align/offset parameters may not be used in body, pass along with unused attribute.
-			ObjectDecl newObj( "", Type::StorageClasses(), LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0,
-			                   { new Attribute( "unused" ) } );
-			ObjectDecl newPtr( "", Type::StorageClasses(), LinkageSpec::C, 0,
-			                   new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 );
-			for ( Type::ForallList::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) {
+			auto newObj = new ObjectDecl(
+				"", Type::StorageClasses(), LinkageSpec::C, 0, 
+				new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0,
+			    { new Attribute( "unused" ) } );
+			auto newPtr = new ObjectDecl(
+				"", Type::StorageClasses(), LinkageSpec::C, 0,
+			    new PointerType( Type::Qualifiers(), 
+					new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 );
+			for ( Type::ForallList::const_iterator tyParm = funcType->get_forall().begin(); 
+					tyParm != funcType->get_forall().end(); ++tyParm ) {
 				ObjectDecl *sizeParm, *alignParm;
 				// add all size and alignment parameters to parameter list
@@ -1336,10 +1343,10 @@
 					std::string parmName = mangleType( &parmType );
 
-					sizeParm = newObj.clone();
+					sizeParm = newObj->clone();
 					sizeParm->set_name( sizeofName( parmName ) );
 					last = funcType->get_parameters().insert( last, sizeParm );
 					++last;
 
-					alignParm = newObj.clone();
+					alignParm = newObj->clone();
 					alignParm->set_name( alignofName( parmName ) );
 					last = funcType->get_parameters().insert( last, alignParm );
@@ -1364,10 +1371,10 @@
 
 					ObjectDecl *sizeParm, *alignParm, *offsetParm;
-					sizeParm = newObj.clone();
+					sizeParm = newObj->clone();
 					sizeParm->set_name( sizeofName( typeName ) );
 					last = funcType->get_parameters().insert( last, sizeParm );
 					++last;
 
-					alignParm = newObj.clone();
+					alignParm = newObj->clone();
 					alignParm->set_name( alignofName( typeName ) );
 					last = funcType->get_parameters().insert( last, alignParm );
@@ -1377,5 +1384,5 @@
 						// NOTE zero-length arrays are illegal in C, so empty structs have no offset array
 						if ( ! polyBaseStruct->get_baseStruct()->get_members().empty() ) {
-							offsetParm = newPtr.clone();
+							offsetParm = newPtr->clone();
 							offsetParm->set_name( offsetofName( typeName ) );
 							last = funcType->get_parameters().insert( last, offsetParm );
@@ -1614,5 +1621,6 @@
 
 		ObjectDecl *PolyGenericCalculator::makeVar( const std::string &name, Type *type, Initializer *init ) {
-			ObjectDecl *newObj = new ObjectDecl( name, Type::StorageClasses(), LinkageSpec::C, nullptr, type, init );
+			ObjectDecl *newObj = new ObjectDecl( 
+				name, Type::StorageClasses(), LinkageSpec::C, nullptr, type, init );
 			stmtsToAddBefore.push_back( new DeclStmt( newObj ) );
 			return newObj;
Index: src/SynTree/GcTracer.h
===================================================================
--- src/SynTree/GcTracer.h	(revision dbc2c2c1c5d8dcdec833f7bad119f889765fb5e8)
+++ src/SynTree/GcTracer.h	(revision bfc78119c41ed230f80fe0326923335e58b5a745)
@@ -36,8 +36,8 @@
 	void previsit( BaseSyntaxNode * node ) {
 		// skip tree if already seen
-		if ( node->mark == gc.mark ) {
-			visit_children = false;
-			return;
-		}
+		// if ( node->mark == gc.mark ) {
+		// 	visit_children = false;
+		// 	return;
+		// }
 
 		// mark node
