Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
+++ src/Concurrency/Keywords.cc	(revision 42107b41a887b7888f179ea48e8f6e41ba1607d8)
@@ -284,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(
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
+++ src/Parser/DeclarationNode.cc	(revision 42107b41a887b7888f179ea48e8f6e41ba1607d8)
@@ -93,5 +93,4 @@
 
 	delete assert.condition;
-	delete assert.message;
 }
 
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
+++ src/SymTab/Validate.cc	(revision 42107b41a887b7888f179ea48e8f6e41ba1607d8)
@@ -312,5 +312,5 @@
 		} // if
 		// Always remove the hoisted aggregate from the inner structure.
-		GuardAction( [aggregateDecl]() { filter( aggregateDecl->members, shouldHoist, false ); } );
+		GuardAction( [aggregateDecl]() { filter( aggregateDecl->members, shouldHoist ); } );
 	}
 
@@ -692,5 +692,5 @@
 				new_static_root<BasicType>( Type::Qualifiers(), BasicType::LongUnsignedInt );
 		}
-		filter( translationUnit, isTypedef, true );
+		filter( translationUnit, isTypedef );
 	}
 
@@ -829,5 +829,5 @@
 			} // if
 			return false;
-		}, true);
+		} );
 		return compoundStmt;
 	}
@@ -837,5 +837,5 @@
 	template<typename AggDecl>
 	AggDecl *EliminateTypedef::handleAggregate( AggDecl * aggDecl ) {
-		filter( aggDecl->members, isTypedef, true );
+		filter( aggDecl->members, isTypedef );
 		return aggDecl;
 	}
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
+++ src/SynTree/Declaration.cc	(revision 42107b41a887b7888f179ea48e8f6e41ba1607d8)
@@ -80,9 +80,4 @@
 }
 
-StaticAssertDecl::~StaticAssertDecl() {
-	delete condition;
-	delete message;
-}
-
 void StaticAssertDecl::print( std::ostream &os, Indenter indent ) const {
 	os << "Static Assert with condition: ";
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
+++ src/SynTree/Declaration.h	(revision 42107b41a887b7888f179ea48e8f6e41ba1607d8)
@@ -364,5 +364,4 @@
 	StaticAssertDecl( Expression * condition, ConstantExpr * message );
 	StaticAssertDecl( const StaticAssertDecl & other );
-	virtual ~StaticAssertDecl();
 
 	virtual StaticAssertDecl * clone() const override { return new StaticAssertDecl( *this ); }
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
+++ src/SynTree/Expression.cc	(revision 42107b41a887b7888f179ea48e8f6e41ba1607d8)
@@ -268,8 +268,4 @@
 }
 
-KeywordCastExpr::~KeywordCastExpr() {
-	delete arg;
-}
-
 const std::string & KeywordCastExpr::targetString() const {
 	static const std::string targetStrs[] = {
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
+++ src/SynTree/Expression.h	(revision 42107b41a887b7888f179ea48e8f6e41ba1607d8)
@@ -210,5 +210,4 @@
 	KeywordCastExpr( Expression * arg, Target target );
 	KeywordCastExpr( const KeywordCastExpr & other );
-	virtual ~KeywordCastExpr();
 
 	const std::string & targetString() const;
Index: src/SynTree/GcTracer.h
===================================================================
--- src/SynTree/GcTracer.h	(revision 1cdfa82ab4efb64ed6273f4e8e3993bc8895a419)
+++ src/SynTree/GcTracer.h	(revision 42107b41a887b7888f179ea48e8f6e41ba1607d8)
@@ -78,4 +78,9 @@
 	}
 
+	void postvisit( OffsetofExpr* expr ) {
+		postvisit( static_cast<Expression*>(expr) );
+		maybeAccept( expr->member, *visitor );
+	}
+
 	void postvisit( UniqueExpr* expr ) {
 		postvisit( static_cast<Expression*>(expr) );
