Index: src/Common/GC.cc
===================================================================
--- src/Common/GC.cc	(revision fb97252f0e9f4779bc5cc9874715a695350b3660)
+++ src/Common/GC.cc	(revision 5af7306aa8aedc45c7e1b675f42139b19edd2a7c)
@@ -57,4 +57,5 @@
 //     set variable GC_TRAP_OBJ = <target>
 //     disable <first breakpoint>
+//     continue
 #ifdef GC_TRAP
 #include <csignal>
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision fb97252f0e9f4779bc5cc9874715a695350b3660)
+++ src/InitTweak/GenInit.cc	(revision 5af7306aa8aedc45c7e1b675f42139b19edd2a7c)
@@ -258,6 +258,6 @@
 					// generic parameters should not play a role in determining whether a generic type is constructed - construct all generic types, so that
 					// polymorphic constructors make generic types managed types
-					StructInstType inst( Type::Qualifiers(), aggregateDecl );
-					managedTypes.insert( SymTab::Mangler::mangleConcrete( &inst ) );
+					auto inst = new StructInstType( Type::Qualifiers(), aggregateDecl );
+					managedTypes.insert( SymTab::Mangler::mangleConcrete( inst ) );
 					break;
 				}
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision fb97252f0e9f4779bc5cc9874715a695350b3660)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 5af7306aa8aedc45c7e1b675f42139b19edd2a7c)
@@ -1082,5 +1082,5 @@
 		AlternativeFinder funcOpFinder( indexer, env );
 		// it's ok if there aren't any defined function ops
-		funcOpFinder.maybeFind( opExpr);
+		funcOpFinder.maybeFind( opExpr );
 		PRINT(
 			std::cerr << "known function ops:" << std::endl;
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision fb97252f0e9f4779bc5cc9874715a695350b3660)
+++ src/ResolvExpr/ConversionCost.cc	(revision 5af7306aa8aedc45c7e1b675f42139b19edd2a7c)
@@ -20,4 +20,5 @@
 #include <string>                        // for operator==, string
 
+#include "Common/GC.h"                   // for new_static_root
 #include "ResolvExpr/Cost.h"             // for Cost
 #include "ResolvExpr/TypeEnvironment.h"  // for EqvClass, TypeEnvironment
@@ -353,6 +354,6 @@
 	void ConversionCost::postvisit( EnumInstType * ) {
 		static Type::Qualifiers q;
-		static BasicType integer( q, BasicType::SignedInt );
-		cost = costFunc( &integer, dest, indexer, env );  // safe if dest >= int
+		static BasicType* integer = new_static_root<BasicType>( q, BasicType::SignedInt );
+		cost = costFunc( integer, dest, indexer, env );  // safe if dest >= int
 		if ( cost < Cost::unsafe ) {
 			cost.incSafe();
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision fb97252f0e9f4779bc5cc9874715a695350b3660)
+++ src/SymTab/Validate.cc	(revision 5af7306aa8aedc45c7e1b675f42139b19edd2a7c)
@@ -48,4 +48,5 @@
 #include "CodeGen/CodeGenerator.h"     // for genName
 #include "CodeGen/OperatorTable.h"     // for isCtorDtor, isCtorDtorAssign
+#include "Common/GC.h"                 // for new_static_root, register_static_root
 #include "Common/PassVisitor.h"        // for PassVisitor, WithDeclsToAdd
 #include "Common/ScopedMap.h"          // for ScopedMap
@@ -673,8 +674,10 @@
 			// grab and remember declaration of size_t
 			SizeType = eliminator.pass.typedefNames["size_t"].first->get_base()->clone();
+			GC::get().register_static_root( SizeType );
 		} else {
 			// xxx - missing global typedef for size_t - default to long unsigned int, even though that may be wrong
 			// eventually should have a warning for this case.
-			SizeType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
+			SizeType = 
+				new_static_root<BasicType>( Type::Qualifiers(), BasicType::LongUnsignedInt );
 		}
 		filter( translationUnit, isTypedef );
Index: src/SynTree/GcTracer.h
===================================================================
--- src/SynTree/GcTracer.h	(revision fb97252f0e9f4779bc5cc9874715a695350b3660)
+++ src/SynTree/GcTracer.h	(revision 5af7306aa8aedc45c7e1b675f42139b19edd2a7c)
@@ -53,6 +53,22 @@
 	}
 
+	void postvisit( DeclarationWithType* decl ) {
+		maybeAccept( decl->asmName, *visitor );
+	}
+
+private:
+	void visit( InferredParams& inferParams ) {
+		for ( auto& entry : inferParams ) {
+			maybeAccept( entry.second.actualType, *visitor );
+			maybeAccept( entry.second.formalType, *visitor );
+			maybeAccept( entry.second.expr, *visitor );
+			visit( *entry.second.inferParams );
+		}
+	}
+
+public:
 	void postvisit( Expression* expr ) {
 		maybeAccept( expr->env, *visitor );
+		visit( expr->inferParams );
 	}
 
