Index: src/Common/GC.cc
===================================================================
--- src/Common/GC.cc	(revision 9f2012f92e024a65ddf3856c93f9664f8b327a1c)
+++ src/Common/GC.cc	(revision 34dcc474f4920507b7bdae9742138b4d088dcffc)
@@ -22,4 +22,6 @@
 #include <algorithm>
 #include <cassert>
+
+// #include <csignal>
 
 GC& GC::get() {
@@ -55,6 +57,7 @@
 
 void GC::register_object(GC_Object* obj) {
+	// if ( obj == (GC_Object*)0x60f00000e410ul ) std::raise( SIGTRAP );
 	(using_young ? young : old).push_back(obj);
-	obj->mark = this->mark;
+	obj->mark = ! this->mark;  // initialize as un-marked
 }
 
@@ -105,4 +108,5 @@
 	for ( GC_Object*& obj : old ) {
 		if ( obj->mark != mark ) {
+			// if ( obj == (GC_Object*)0x60f00000e410ul ) std::raise( SIGTRAP );
 			delete obj;
 			obj = nullptr;
Index: src/SynTree/GcTracer.h
===================================================================
--- src/SynTree/GcTracer.h	(revision 9f2012f92e024a65ddf3856c93f9664f8b327a1c)
+++ src/SynTree/GcTracer.h	(revision 34dcc474f4920507b7bdae9742138b4d088dcffc)
@@ -34,4 +34,6 @@
 	GcTracer( const GC& gc ) : gc(gc) {}
 
+	// mark node and children
+
 	void previsit( BaseSyntaxNode * node ) {
 		// skip tree if already seen
@@ -45,6 +47,13 @@
 	}
 
+	// add visits left out by PassVisitor
+
 	void postvisit( Expression* expr ) {
 		maybeAccept( expr->env, *visitor );
+	}
+
+	void postvisit( UntypedExpr* expr ) {
+		postvisit( static_cast<Expression*>(expr) );
+		maybeAccept( expr->function, *visitor );
 	}
 
