Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision ceedde6025cceafa3bb88869c460143c276914fa)
+++ src/Concurrency/Keywords.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -19,4 +19,5 @@
 #include <string>                  // for string, operator==
 
+#include "Common/GC.h"             // for new_static_root
 #include "Common/PassVisitor.h"    // for PassVisitor
 #include "Common/SemanticError.h"  // for SemanticError
@@ -206,13 +207,8 @@
 		StructDecl* dtor_guard_decl = nullptr;
 
-		static std::unique_ptr< Type > generic_func;
+		static Type* generic_func;
 	};
 
-	std::unique_ptr< Type > MutexKeyword::generic_func = std::unique_ptr< Type >(
-		new FunctionType(
-			noQualifiers,
-			true
-		)
-	);
+	Type* MutexKeyword::generic_func = new_static_root<FunctionType>( noQualifiers, true );
 
 	//-----------------------------------------------------------------------------
@@ -288,10 +284,7 @@
 			// convert (thread &)t to (thread_desc &)*get_thread(t), etc.
 			if( !type_decl ) SemanticError( cast, context_error );
-			Expression * arg = cast->arg;
-			cast->arg = nullptr;
-			delete cast;
 			return new CastExpr(
 				UntypedExpr::createDeref(
-					new UntypedExpr( new NameExpr( getter_name ), { arg } )
+					new UntypedExpr( new NameExpr( getter_name ), { cast->arg } )
 				),
 				new ReferenceType(
@@ -318,5 +311,4 @@
 		StructDecl * forward = decl->clone();
 		forward->set_body( false );
-		deleteAll( forward->get_members() );
 		forward->get_members().clear();
 
@@ -382,6 +374,4 @@
 			fixupGenerics(main_type, decl);
 		}
-
-		delete this_decl;
 
 		declsToAddBefore.push_back( forward );
Index: src/Concurrency/Waitfor.cc
===================================================================
--- src/Concurrency/Waitfor.cc	(revision ceedde6025cceafa3bb88869c460143c276914fa)
+++ src/Concurrency/Waitfor.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -137,6 +137,4 @@
 		StructDecl          * decl_acceptable = nullptr;
 		StructDecl          * decl_monitor    = nullptr;
-
-		static std::unique_ptr< Type > generic_func;
 
 		UniqueName namer_acc = "__acceptables_"s;
@@ -476,6 +474,4 @@
 		}
 
-		delete setter;
-
 		return new VariableExpr( timeout );
 	}
