Index: src/ResolvExpr/CandidateFinder.cpp
===================================================================
--- src/ResolvExpr/CandidateFinder.cpp	(revision 81da70a5fabf0e44bf05c7b927e395b9e4c76239)
+++ src/ResolvExpr/CandidateFinder.cpp	(revision aebf5b06ce02ccc1e53da100979d710879fe0d6c)
@@ -596,4 +596,5 @@
 		const ast::SymbolTable & symtab;
 	public:
+		static size_t traceId;
 		CandidateFinder & selfFinder;
 		CandidateList & candidates;
@@ -1507,4 +1508,5 @@
 	};
 
+	size_t Finder::traceId = Stats::Heap::new_stacktrace_id("Finder");
 	/// Prunes a list of candidates down to those that have the minimum conversion cost for a given
 	/// return type. Skips ambiguous candidates.
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 81da70a5fabf0e44bf05c7b927e395b9e4c76239)
+++ src/ResolvExpr/CommonType.cc	(revision aebf5b06ce02ccc1e53da100979d710879fe0d6c)
@@ -666,4 +666,5 @@
 		const ast::OpenVarSet & open;
 	public:
+		static size_t traceId;
 		ast::ptr< ast::Type > result;
 
@@ -893,4 +894,5 @@
 	};
 
+	size_t CommonType_new::traceId = Stats::Heap::new_stacktrace_id("CommonType_new");
 	namespace {
 		ast::ptr< ast::Type > handleReference(
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 81da70a5fabf0e44bf05c7b927e395b9e4c76239)
+++ src/ResolvExpr/ConversionCost.cc	(revision aebf5b06ce02ccc1e53da100979d710879fe0d6c)
@@ -795,5 +795,5 @@
 	}
 }
-
+size_t ConversionCost_new::traceId = Stats::Heap::new_stacktrace_id("ConversionCost");
 
 } // namespace ResolvExpr
Index: src/ResolvExpr/ConversionCost.h
===================================================================
--- src/ResolvExpr/ConversionCost.h	(revision 81da70a5fabf0e44bf05c7b927e395b9e4c76239)
+++ src/ResolvExpr/ConversionCost.h	(revision aebf5b06ce02ccc1e53da100979d710879fe0d6c)
@@ -88,4 +88,5 @@
 	CostCalculation costCalc;
 public:
+	static size_t traceId;
 	Cost cost;
 
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 81da70a5fabf0e44bf05c7b927e395b9e4c76239)
+++ src/ResolvExpr/Resolver.cc	(revision aebf5b06ce02ccc1e53da100979d710879fe0d6c)
@@ -1236,4 +1236,5 @@
 
 	public:
+		static size_t traceId;
 		Resolver_new() = default;
 		Resolver_new( const ast::SymbolTable & syms ) { symtab = syms; }
@@ -1266,4 +1267,5 @@
 		const ast::ConstructorInit * previsit( const ast::ConstructorInit * );
 	};
+	size_t Resolver_new::traceId = Stats::Heap::new_stacktrace_id("Resolver");
 
 	void resolve( std::list< ast::ptr< ast::Decl > >& translationUnit ) {
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 81da70a5fabf0e44bf05c7b927e395b9e4c76239)
+++ src/ResolvExpr/Unify.cc	(revision aebf5b06ce02ccc1e53da100979d710879fe0d6c)
@@ -702,4 +702,5 @@
 		const ast::SymbolTable & symtab;
 	public:
+		static size_t traceId;
 		bool result;
 
@@ -1135,4 +1136,5 @@
 	};
 
+	size_t Unify_new::traceId = Stats::Heap::new_stacktrace_id("Unify_new");
 	bool unify(
 			const ast::ptr<ast::Type> & type1, const ast::ptr<ast::Type> & type2,
