Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 943bfad2c0b8d6d35a71ff04892a3d14825e9dc8)
+++ src/SymTab/Validate.cc	(revision 1387ea0a67f58d42a195b4763adf85f77f4cad16)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:50:04 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Dec 13 23:43:34 2019
-// Update Count     : 363
+// Last Modified By : Andrew Beach
+// Last Modified On : Fri Nov 12 11:00:00 2021
+// Update Count     : 364
 //
 
@@ -334,15 +334,7 @@
 	};
 
-	void validate( std::list< Declaration * > &translationUnit, __attribute__((unused)) bool doDebug ) {
+	void validate_A( std::list< Declaration * > & translationUnit ) {
 		PassVisitor<EnumAndPointerDecay_old> epc;
-		PassVisitor<LinkReferenceToTypes_old> lrt( nullptr );
-		PassVisitor<ResolveEnumInitializers> rei( nullptr );
-		PassVisitor<ForallPointerDecay_old> fpd;
-		PassVisitor<CompoundLiteral> compoundliteral;
-		PassVisitor<ValidateGenericParameters> genericParams;
-		PassVisitor<LabelAddressFixer> labelAddrFixer;
 		PassVisitor<HoistTypeDecls> hoistDecls;
-		PassVisitor<FixQualifiedTypes> fixQual;
-
 		{
 			Stats::Heap::newPass("validate-A");
@@ -354,4 +346,9 @@
 			acceptAll( translationUnit, epc ); // must happen before VerifyCtorDtorAssign, because void return objects should not exist; before LinkReferenceToTypes_old because it is an indexer and needs correct types for mangling
 		}
+	}
+
+	void validate_B( std::list< Declaration * > & translationUnit ) {
+		PassVisitor<LinkReferenceToTypes_old> lrt( nullptr );
+		PassVisitor<FixQualifiedTypes> fixQual;
 		{
 			Stats::Heap::newPass("validate-B");
@@ -362,4 +359,9 @@
 			EliminateTypedef::eliminateTypedef( translationUnit );
 		}
+	}
+
+	void validate_C( std::list< Declaration * > & translationUnit ) {
+		PassVisitor<ValidateGenericParameters> genericParams;
+		PassVisitor<ResolveEnumInitializers> rei( nullptr );
 		{
 			Stats::Heap::newPass("validate-C");
@@ -381,4 +383,8 @@
 			});
 		}
+	}
+
+	void validate_D( std::list< Declaration * > & translationUnit ) {
+		PassVisitor<ForallPointerDecay_old> fpd;
 		{
 			Stats::Heap::newPass("validate-D");
@@ -397,4 +403,8 @@
 			});
 		}
+	}
+
+	void validate_E( std::list< Declaration * > & translationUnit ) {
+		PassVisitor<CompoundLiteral> compoundliteral;
 		{
 			Stats::Heap::newPass("validate-E");
@@ -415,4 +425,8 @@
 			}
 		}
+	}
+
+	void validate_F( std::list< Declaration * > & translationUnit ) {
+		PassVisitor<LabelAddressFixer> labelAddrFixer;
 		{
 			Stats::Heap::newPass("validate-F");
@@ -437,4 +451,13 @@
 			}
 		}
+	}
+
+	void validate( std::list< Declaration * > &translationUnit, __attribute__((unused)) bool doDebug ) {
+		validate_A( translationUnit );
+		validate_B( translationUnit );
+		validate_C( translationUnit );
+		validate_D( translationUnit );
+		validate_E( translationUnit );
+		validate_F( translationUnit );
 	}
 
Index: src/SymTab/Validate.h
===================================================================
--- src/SymTab/Validate.h	(revision 943bfad2c0b8d6d35a71ff04892a3d14825e9dc8)
+++ src/SymTab/Validate.h	(revision 1387ea0a67f58d42a195b4763adf85f77f4cad16)
@@ -35,4 +35,12 @@
 	void validateType( Type *type, const Indexer *indexer );
 
+	// Sub-passes of validate.
+	void validate_A( std::list< Declaration * > &translationUnit );
+	void validate_B( std::list< Declaration * > &translationUnit );
+	void validate_C( std::list< Declaration * > &translationUnit );
+	void validate_D( std::list< Declaration * > &translationUnit );
+	void validate_E( std::list< Declaration * > &translationUnit );
+	void validate_F( std::list< Declaration * > &translationUnit );
+
 	const ast::Type * validateType(
 		const CodeLocation & loc, const ast::Type * type, const ast::SymbolTable & symtab );
