Index: src/InitTweak/FixInitNew.cpp
===================================================================
--- src/InitTweak/FixInitNew.cpp	(revision 153d34408419fe9615ec1c323d9841d6de91b72f)
+++ src/InitTweak/FixInitNew.cpp	(revision eb8d7911730848b28e94420c3e942149c370232e)
@@ -1312,7 +1312,5 @@
 		// xxx - functions returning ast::ptr seems wrong...
 		auto res = ResolvExpr::findVoidExpression( untypedExpr, { symtab, transUnit().global } );
-		// Fix CodeLocation (at least until resolver is fixed).
-		auto fix = localFillCodeLocations( untypedExpr->location, res.release() );
-		return strict_dynamic_cast<const ast::Expr *>( fix );
+		return res.release();
 	}
 
Index: src/ResolvExpr/CandidateFinder.cpp
===================================================================
--- src/ResolvExpr/CandidateFinder.cpp	(revision 153d34408419fe9615ec1c323d9841d6de91b72f)
+++ src/ResolvExpr/CandidateFinder.cpp	(revision eb8d7911730848b28e94420c3e942149c370232e)
@@ -279,4 +279,5 @@
 	/// Instantiates an argument to match a parameter, returns false if no matching results left
 	bool instantiateArgument(
+		const CodeLocation & location,
 		const ast::Type * paramType, const ast::Init * init, const ExplodedArgs_new & args,
 		std::vector< ArgPack > & results, std::size_t & genStart, const ast::SymbolTable & symtab,
@@ -289,5 +290,5 @@
 				// xxx - dropping initializer changes behaviour from previous, but seems correct
 				// ^^^ need to handle the case where a tuple has a default argument
-				if ( ! instantiateArgument(
+				if ( ! instantiateArgument( location,
 					type, nullptr, args, results, genStart, symtab, nTuples ) ) return false;
 				nTuples = 0;
@@ -341,5 +342,5 @@
 							// push empty tuple expression
 							newResult.parent = i;
-							newResult.expr = new ast::TupleExpr{ CodeLocation{}, {} };
+							newResult.expr = new ast::TupleExpr( location, {} );
 							argType = newResult.expr->result;
 						} else {
@@ -614,4 +615,5 @@
 		/// Builds a list of candidates for a function, storing them in out
 		void makeFunctionCandidates(
+			const CodeLocation & location,
 			const CandidateRef & func, const ast::FunctionType * funcType,
 			const ExplodedArgs_new & args, CandidateList & out );
@@ -732,4 +734,5 @@
 	/// Builds a list of candidates for a function, storing them in out
 	void Finder::makeFunctionCandidates(
+		const CodeLocation & location,
 		const CandidateRef & func, const ast::FunctionType * funcType,
 		const ExplodedArgs_new & args, CandidateList & out
@@ -768,5 +771,5 @@
 				for (size_t i=0; i<nParams; ++i) {
 					auto obj = funcDecl->params[i].strict_as<ast::ObjectDecl>();
-					if (!instantiateArgument(
+					if (!instantiateArgument( location,
 						funcType->params[i], obj->init, args, results, genStart, symtab)) return;
 				}
@@ -778,5 +781,5 @@
 			// matches
 			// no default args for indirect calls
-			if ( ! instantiateArgument(
+			if ( ! instantiateArgument( location,
 				param, nullptr, args, results, genStart, symtab ) ) return;
 		}
@@ -1007,5 +1010,6 @@
 						newFunc->expr =
 							referenceToRvalueConversion( newFunc->expr, newFunc->cost );
-						makeFunctionCandidates( newFunc, function, argExpansions, found );
+						makeFunctionCandidates( untypedExpr->location,
+							newFunc, function, argExpansions, found );
 					}
 				} else if (
@@ -1017,5 +1021,6 @@
 							newFunc->expr =
 								referenceToRvalueConversion( newFunc->expr, newFunc->cost );
-							makeFunctionCandidates( newFunc, function, argExpansions, found );
+							makeFunctionCandidates( untypedExpr->location,
+								newFunc, function, argExpansions, found );
 						}
 					}
@@ -1043,5 +1048,6 @@
 							newOp->expr =
 								referenceToRvalueConversion( newOp->expr, newOp->cost );
-							makeFunctionCandidates( newOp, function, argExpansions, found );
+							makeFunctionCandidates( untypedExpr->location,
+								newOp, function, argExpansions, found );
 						}
 					}
Index: src/ResolvExpr/ExplodedArg.hpp
===================================================================
--- src/ResolvExpr/ExplodedArg.hpp	(revision 153d34408419fe9615ec1c323d9841d6de91b72f)
+++ src/ResolvExpr/ExplodedArg.hpp	(revision eb8d7911730848b28e94420c3e942149c370232e)
@@ -35,5 +35,5 @@
 	ExplodedArg() : env(), cost( Cost::zero ), exprs() {}
 	ExplodedArg( const Candidate & arg, const ast::SymbolTable & symtab );
-	
+
 	ExplodedArg( ExplodedArg && ) = default;
 	ExplodedArg & operator= ( ExplodedArg && ) = default;
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 153d34408419fe9615ec1c323d9841d6de91b72f)
+++ src/main.cc	(revision eb8d7911730848b28e94420c3e942149c370232e)
@@ -310,8 +310,4 @@
 
 		PASS( "Hoist Type Decls", Validate::hoistTypeDecls( transUnit ) );
-		// Hoist Type Decls pulls some declarations out of contexts where
-		// locations are not tracked. Perhaps they should be, but for now
-		// the full fill solves it.
-		forceFillCodeLocations( transUnit );
 
 		PASS( "Translate Exception Declarations", ControlStruct::translateExcept( transUnit ) );
@@ -343,5 +339,4 @@
 		PASS( "Implement Actors", Concurrency::implementActors( transUnit ) );
         PASS( "Implement Virtual Destructors", Virtual::implementVirtDtors(transUnit) );
-        
 		PASS( "Implement Mutex", Concurrency::implementMutex( transUnit ) );
 		PASS( "Implement Thread Start", Concurrency::implementThreadStarter( transUnit ) );
@@ -396,6 +391,4 @@
 			return EXIT_SUCCESS;
 		} // if
-
-		forceFillCodeLocations( transUnit );
 
 		PASS( "Fix Init", InitTweak::fix(transUnit, buildingLibrary()));
