Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 490fb92ee824a236b6dd44604bfed5090c7acc95)
+++ src/SymTab/Autogen.cc	(revision 16ba4a6fa0eb60a0cd27fb96882e37dbf94834dd)
@@ -38,4 +38,5 @@
 #include "SynTree/Type.h"          // for FunctionType, Type, TypeInstType
 #include "SynTree/Visitor.h"       // for maybeAccept, Visitor, acceptAll
+#include "CompilationState.h"
 
 class Attribute;
Index: src/SymTab/Autogen.h
===================================================================
--- src/SymTab/Autogen.h	(revision 490fb92ee824a236b6dd44604bfed5090c7acc95)
+++ src/SymTab/Autogen.h	(revision 16ba4a6fa0eb60a0cd27fb96882e37dbf94834dd)
@@ -167,5 +167,5 @@
 		fExpr->args.emplace_back( dstParam );
 
-		const ast::Stmt * listInit = srcParam.buildListInit( fExpr );
+		ast::ptr<ast::Stmt> listInit = srcParam.buildListInit( fExpr );
 
 		// fetch next set of arguments
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 490fb92ee824a236b6dd44604bfed5090c7acc95)
+++ src/SymTab/Validate.cc	(revision 16ba4a6fa0eb60a0cd27fb96882e37dbf94834dd)
@@ -64,4 +64,5 @@
 #include "Common/UniqueName.h"         // for UniqueName
 #include "Common/utility.h"            // for operator+, cloneAll, deleteAll
+#include "CompilationState.h"          // skip some passes in new-ast build
 #include "Concurrency/Keywords.h"      // for applyKeywords
 #include "FixFunction.h"               // for FixFunction
@@ -281,5 +282,5 @@
 
 		void previsit( ObjectDecl * objDecl );
-		void previsit( ArrayType * arrayType );
+		// void previsit( ArrayType * arrayType );
 	};
 
@@ -368,13 +369,17 @@
 				mutateAll( translationUnit, compoundliteral );
 			});
-			Stats::Time::TimeBlock("Resolve With Expressions", [&]() {
-				ResolvExpr::resolveWithExprs( translationUnit ); // must happen before FixObjectType because user-code is resolved and may contain with variables
-			});
+			if (!useNewAST) {
+				Stats::Time::TimeBlock("Resolve With Expressions", [&]() {
+					ResolvExpr::resolveWithExprs( translationUnit ); // must happen before FixObjectType because user-code is resolved and may contain with variables
+				});
+			}
 		}
 		{
 			Stats::Heap::newPass("validate-F");
 			Stats::Time::BlockGuard guard("validate-F");
-			Stats::Time::TimeCall("Fix Object Type",
-				FixObjectType::fix, translationUnit);
+			if (!useNewAST) {
+				Stats::Time::TimeCall("Fix Object Type",
+					FixObjectType::fix, translationUnit);
+			}
 			Stats::Time::TimeCall("Array Length",
 				ArrayLength::computeLength, translationUnit);
@@ -383,6 +388,8 @@
 			Stats::Time::TimeCall("Fix Label Address",
 				mutateAll<LabelAddressFixer>, translationUnit, labelAddrFixer);
-			Stats::Time::TimeCall("Handle Attributes",
-				Validate::handleAttributes, translationUnit);
+			if (!useNewAST) {
+				Stats::Time::TimeCall("Handle Attributes",
+					Validate::handleAttributes, translationUnit);
+			}
 		}
 	}
@@ -1339,4 +1346,7 @@
 	}
 
+	// xxx - this seems to be in HoistArrayDimension now.
+
+	/*
 	void ArrayLength::previsit( ArrayType * type ) {
 		if ( type->dimension ) {
@@ -1350,4 +1360,5 @@
 		}
 	}
+	*/
 
 	struct LabelFinder {
