Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/CodeGen/CodeGenerator.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -13,9 +13,9 @@
 // Update Count     : 485
 //
-#include "CodeGenerator.h"
 
 #include <cassert>                   // for assert, assertf
 #include <list>                      // for _List_iterator, list, list<>::it...
 
+#include "CodeGenerator.h"
 #include "Common/SemanticError.h"    // for SemanticError
 #include "Common/UniqueName.h"       // for UniqueName
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/CodeGen/GenType.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -13,5 +13,4 @@
 // Update Count     : 22
 //
-#include "GenType.h"
 
 #include <cassert>                // for assert, assertf
@@ -20,4 +19,5 @@
 
 #include "CodeGenerator.h"        // for CodeGenerator
+#include "GenType.h"
 #include "SynTree/Declaration.h"  // for DeclarationWithType
 #include "SynTree/Expression.h"   // for Expression
Index: src/CodeGen/Generate.cc
===================================================================
--- src/CodeGen/Generate.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/CodeGen/Generate.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -13,5 +13,4 @@
 // Update Count     : 6
 //
-#include "Generate.h"
 
 #include <iostream>                  // for ostream, endl, operator<<
@@ -21,4 +20,5 @@
 #include "CodeGenerator.h"           // for CodeGenerator, doSemicolon, oper...
 #include "GenType.h"                 // for genPrettyType
+#include "Generate.h"
 #include "Parser/LinkageSpec.h"      // for isBuiltin, isGeneratable
 #include "SynTree/BaseSyntaxNode.h"  // for BaseSyntaxNode
Index: src/CodeTools/TrackLoc.cc
===================================================================
--- src/CodeTools/TrackLoc.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/CodeTools/TrackLoc.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -16,13 +16,18 @@
 #include "TrackLoc.h"
 
-#include <cstdlib>                   // for exit, EXIT_FAILURE
-#include <iostream>                  // for operator<<, ostream, basic_ostream
-#include <stack>                     // for stack
-#include <string>                    // for operator<<, string
-#include <typeindex>                 // for type_index
+#include <cstdlib>                    // for size_t, exit, EXIT_FAILURE
+#include <iostream>                   // for operator<<, ostream, basic_ostream
+#include <iterator>                   // for back_inserter, inserter
+#include <stack>                      // for stack
+#include <string>                     // for operator<<, string
+#include <typeindex>                  // for type_index
 
-#include "Common/PassVisitor.h"      // for PassVisitor
-#include "Common/utility.h"          // for CodeLocation
-#include "SynTree/BaseSyntaxNode.h"  // for BaseSyntaxNode
+#include "Common/PassVisitor.h"       // for PassVisitor
+#include "Common/PassVisitor.impl.h"  // for acceptAll
+#include "Common/SemanticError.h"     // for SemanticError
+#include "Common/utility.h"           // for CodeLocation
+#include "SynTree/BaseSyntaxNode.h"   // for BaseSyntaxNode
+#include "SynTree/Mutator.h"          // for mutateAll
+#include "SynTree/Visitor.h"          // for acceptAll
 
 class Declaration;
@@ -41,5 +46,5 @@
 		std::stack< CodeLocation * > parents;
 	public:
-		LocationPrinter(size_t printLevel) :
+		LocationPrinter(size_t printLevel) : 
 			printLevel(printLevel), lastNode(nullptr)
 		{}
@@ -60,8 +65,8 @@
 				if ( !parents.empty() ) {
 					node->location = *parents.top();
-				}
+				} 
 				else if (nullptr != lastNode) {
 					node->location = *lastNode;
-				}
+				} 
 				else {
 					std::cerr << "Top level node has no CodeLocation " << name << std::endl;
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/Common/PassVisitor.impl.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -1,4 +1,3 @@
 #pragma once
-// IWYU pragma: private, include "PassVisitor.h"
 
 #define VISIT_START( node )                     \
Index: src/Common/PassVisitor.proto.h
===================================================================
--- src/Common/PassVisitor.proto.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/Common/PassVisitor.proto.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -1,4 +1,3 @@
 #pragma once
-// IWYU pragma: private, include "PassVisitor.h"
 
 template<typename pass_type>
Index: src/SymTab/AddVisit.h
===================================================================
--- src/SymTab/AddVisit.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/AddVisit.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -14,6 +14,4 @@
 //
 
-#include "SynTree/Statement.h"
-
 namespace SymTab {
 	void addDecls( std::list< Declaration* > &declsToAdd, std::list< Statement* > &statements, std::list< Statement* >::iterator i );
@@ -30,5 +28,5 @@
 
 			if ( stmt == stmts.end() ) break;
-
+			
 			// run mutator on statement
 			maybeAccept( *stmt, visitor );
@@ -61,5 +59,5 @@
 
 			if ( decl == translationUnit.end() ) break;
-
+			
 			// run mutator on declaration
 			maybeAccept( *decl, visitor );
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/Autogen.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -13,25 +13,19 @@
 // Update Count     : 61
 //
+
+#include <list>
+#include <iterator>
+#include "SynTree/Visitor.h"
+#include "SynTree/Type.h"
+#include "SynTree/Statement.h"
+#include "SynTree/TypeSubstitution.h"
+#include "Common/utility.h"
+#include "AddVisit.h"
+#include "MakeLibCfa.h"
 #include "Autogen.h"
-
-#include <algorithm>               // for count_if
-#include <cassert>                 // for safe_dynamic_cast, assert, assertf
-#include <iterator>                // for back_insert_iterator, back_inserter
-#include <list>                    // for list, _List_iterator, list<>::iter...
-#include <set>                     // for set, _Rb_tree_const_iterator
-#include <vector>                  // for vector
-
-#include "AddVisit.h"              // for addVisit
-#include "Common/ScopedMap.h"      // for ScopedMap<>::const_iterator, Scope...
-#include "Common/utility.h"        // for cloneAll, operator+
-#include "GenPoly/DeclMutator.h"   // for DeclMutator
-#include "GenPoly/ScopedSet.h"     // for ScopedSet, ScopedSet<>::iterator
-#include "SymTab/Mangler.h"        // for Mangler
-#include "SynTree/Mutator.h"       // for maybeMutate
-#include "SynTree/Statement.h"     // for CompoundStmt, ReturnStmt, ExprStmt
-#include "SynTree/Type.h"          // for FunctionType, Type, TypeInstType
-#include "SynTree/Visitor.h"       // for maybeAccept, Visitor, acceptAll
-
-class Attribute;
+#include "GenPoly/ScopedSet.h"
+#include "Common/ScopedMap.h"
+#include "SymTab/Mangler.h"
+#include "GenPoly/DeclMutator.h"
 
 namespace SymTab {
@@ -518,5 +512,5 @@
 		// Make function polymorphic in same parameters as generic union, if applicable
 		const std::list< TypeDecl* > & typeParams = aggregateDecl->get_parameters(); // List of type variables to be placed on the generated functions
-
+		
 		// default ctor/dtor need only first parameter
 		// void ?{}(T *); void ^?{}(T *);
Index: src/SymTab/Autogen.h
===================================================================
--- src/SymTab/Autogen.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/Autogen.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -17,19 +17,10 @@
 #define AUTOGEN_H
 
-#include <cassert>                // for assert
-#include <iterator>               // for back_insert_iterator, back_inserter
-#include <list>                   // for list
-#include <string>                 // for string, operator==
-
-#include "Common/UniqueName.h"    // for UniqueName
-#include "InitTweak/InitTweak.h"  // for InitExpander
-#include "Parser/LinkageSpec.h"   // for C
-#include "SynTree/Constant.h"     // for Constant
-#include "SynTree/Declaration.h"  // for ObjectDecl, Declaration (ptr only)
-#include "SynTree/Expression.h"   // for UntypedExpr, NameExpr, VariableExpr
-#include "SynTree/Initializer.h"  // for SingleInit
-#include "SynTree/Label.h"        // for Label, noLabels
-#include "SynTree/Statement.h"    // for Statement (ptr only), CompoundStmt
-#include "SynTree/Type.h"         // for Type, ArrayType, Type::Qualifiers
+#include <string>
+#include "SynTree/Statement.h"
+#include "SynTree/Expression.h"
+#include "SynTree/Declaration.h"
+#include "SynTree/Initializer.h"
+#include "InitTweak/InitTweak.h"
 
 namespace SymTab {
@@ -164,5 +155,5 @@
 		if ( isUnnamedBitfield( obj ) ) return;
 
-		bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && ! obj->get_bitfieldWidth() ) );
+		bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) );
 		std::list< Statement * > stmts;
 		genCall( srcParam, dstParam, fname, back_inserter( stmts ), obj->get_type(), addCast, forward );
Index: src/SymTab/FixFunction.cc
===================================================================
--- src/SymTab/FixFunction.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/FixFunction.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -15,10 +15,8 @@
 
 #include "FixFunction.h"
-
-#include <list>                   // for list
-
-#include "Common/utility.h"       // for maybeClone
-#include "SynTree/Declaration.h"  // for FunctionDecl, ObjectDecl, Declarati...
-#include "SynTree/Type.h"         // for ArrayType, PointerType, Type, Basic...
+#include "SynTree/Declaration.h"
+#include "SynTree/Type.h"
+#include "SynTree/Expression.h"
+#include "Common/utility.h"
 
 namespace SymTab {
Index: src/SymTab/FixFunction.h
===================================================================
--- src/SymTab/FixFunction.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/FixFunction.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// FixFunction.h --
+// FixFunction.h -- 
 //
 // Author           : Richard C. Bilson
@@ -17,6 +17,5 @@
 #define FIXFUNCTION_H
 
-#include "SynTree/Mutator.h"  // for Mutator
-#include "SynTree/SynTree.h"  // for Types
+#include "SynTree/Mutator.h"
 
 namespace SymTab {
@@ -45,5 +44,5 @@
 		virtual Type* mutate(ZeroType *zeroType);
 		virtual Type* mutate(OneType *oneType);
-
+  
 		bool isVoid;
 	};
Index: src/SymTab/ImplementationType.cc
===================================================================
--- src/SymTab/ImplementationType.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/ImplementationType.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -15,11 +15,9 @@
 
 #include "ImplementationType.h"
-
-#include <list>                   // for list, _List_iterator, list<>::iterator
-
-#include "SymTab/Indexer.h"       // for Indexer
-#include "SynTree/Declaration.h"  // for NamedTypeDecl
-#include "SynTree/Type.h"         // for TupleType, Type, ArrayType, Pointer...
-#include "SynTree/Visitor.h"      // for Visitor
+#include "SynTree/Type.h"
+#include "SynTree/Declaration.h"
+#include "SynTree/Visitor.h"
+#include "SymTab/Indexer.h"
+#include "Common/utility.h"
 
 
Index: src/SymTab/ImplementationType.h
===================================================================
--- src/SymTab/ImplementationType.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/ImplementationType.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -17,9 +17,8 @@
 #define IMPLEMENTATIONTYPE_H
 
-class Type;
+#include "SynTree/SynTree.h"
+#include "SymTab/Indexer.h"
 
 namespace SymTab {
-class Indexer;
-
 	Type *implementationType( Type *, const SymTab::Indexer &indexer );
 
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/Indexer.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -16,23 +16,24 @@
 #include "Indexer.h"
 
-#include <cassert>                 // for assert, safe_dynamic_cast
-#include <iostream>                // for operator<<, basic_ostream, ostream
-#include <string>                  // for string, operator<<, operator!=
-#include <unordered_map>           // for operator!=, unordered_map<>::const...
-#include <unordered_set>           // for unordered_set
-#include <utility>                 // for pair, make_pair, move
-
-#include "Common/SemanticError.h"  // for SemanticError
-#include "Common/utility.h"        // for cloneAll
-#include "InitTweak/InitTweak.h"   // for isConstructor, isCopyFunction, isC...
-#include "Mangler.h"               // for Mangler
-#include "Parser/LinkageSpec.h"    // for isMangled, isOverridable, Spec
-#include "ResolvExpr/typeops.h"    // for typesCompatible
-#include "SynTree/Constant.h"      // for Constant
-#include "SynTree/Declaration.h"   // for DeclarationWithType, FunctionDecl
-#include "SynTree/Expression.h"    // for Expression, ImplicitCopyCtorExpr
-#include "SynTree/Initializer.h"   // for Initializer
-#include "SynTree/Statement.h"     // for CompoundStmt, Statement, ForStmt (...
-#include "SynTree/Type.h"          // for Type, StructInstType, UnionInstType
+#include <string>
+#include <typeinfo>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <algorithm>
+
+#include "Mangler.h"
+
+#include "Common/utility.h"
+
+#include "ResolvExpr/typeops.h"
+
+#include "SynTree/Declaration.h"
+#include "SynTree/Type.h"
+#include "SynTree/Expression.h"
+#include "SynTree/Initializer.h"
+#include "SynTree/Statement.h"
+
+#include "InitTweak/InitTweak.h"
 
 #define debugPrint(x) if ( doDebug ) { std::cout << x; }
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/Indexer.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -17,10 +17,8 @@
 #define INDEXER_H
 
-#include <iosfwd>             // for ostream
-#include <list>               // for list
-#include <string>             // for string
+#include <list>
+#include <string>
 
-#include "SynTree/Visitor.h"  // for Visitor
-#include "SynTree/SynTree.h"  // for AST nodes
+#include "SynTree/Visitor.h"
 
 namespace SymTab {
@@ -128,5 +126,4 @@
 
 		struct Impl;
-
 		Impl *tables;         ///< Copy-on-write instance of table data structure
 		unsigned long scope;  ///< Scope index of this pointer
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/Mangler.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -13,19 +13,19 @@
 // Update Count     : 21
 //
+
+#include <cassert>
+#include <string>
+#include <algorithm>
+#include <iterator>
+#include <functional>
+#include <set>
+
+#include "SynTree/Declaration.h"
+#include "SynTree/Type.h"
+#include "SynTree/Expression.h"
+#include "SynTree/Initializer.h"
+#include "SynTree/Statement.h"
 #include "Mangler.h"
-
-#include <algorithm>                // for copy, transform
-#include <cassert>                  // for assert, assertf
-#include <functional>               // for const_mem_fun_t, mem_fun
-#include <iterator>                 // for ostream_iterator, back_insert_ite...
-#include <list>                     // for _List_iterator, list, _List_const...
-#include <string>                   // for string, operator<<, basic_string
-
-#include "CodeGen/OperatorTable.h"  // for OperatorInfo, operatorLookup
-#include "Common/utility.h"         // for toString
-#include "Parser/LinkageSpec.h"     // for Spec, isOverridable, AutoGen, Int...
-#include "SynTree/Declaration.h"    // for TypeDecl, DeclarationWithType
-#include "SynTree/Expression.h"     // for TypeExpr, Expression, operator<<
-#include "SynTree/Type.h"           // for Type, ReferenceToType, Type::Fora...
+#include "CodeGen/OperatorTable.h"
 
 namespace SymTab {
Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/Mangler.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Mangler.h --
+// Mangler.h -- 
 //
 // Author           : Richard C. Bilson
@@ -17,11 +17,7 @@
 #define MANGLER_H
 
-#include <map>                // for map, map<>::value_compare
-#include <sstream>            // for ostringstream
-#include <string>             // for string
-#include <utility>            // for pair
-
-#include "SynTree/SynTree.h"  // for Types
-#include "SynTree/Visitor.h"  // for Visitor, maybeAccept
+#include <sstream>
+#include "SynTree/SynTree.h"
+#include "SynTree/Visitor.h"
 
 namespace SymTab {
@@ -52,5 +48,5 @@
 		virtual void visit( ZeroType *zeroType );
 		virtual void visit( OneType *oneType );
-
+  
 		std::string get_mangleName() { return mangleName.str(); }
 	  private:
@@ -62,12 +58,12 @@
 		bool mangleOverridable;         ///< Specially mangle overridable built-in methods
 		bool typeMode;                  ///< Produce a unique mangled name for a type
-
+  
 		Mangler( bool mangleOverridable, bool typeMode );
 		Mangler( const Mangler & );
-
+  
 		void mangleDecl( DeclarationWithType *declaration );
 		void mangleRef( ReferenceToType *refType, std::string prefix );
 		void mangleGenericRef( ReferenceToType *refType, std::string prefix );
-
+  
 		void printQualifiers( Type *type );
 	}; // Mangler
Index: src/SymTab/TypeEquality.cc
===================================================================
--- src/SymTab/TypeEquality.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/TypeEquality.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// TypeEquality.cc --
+// TypeEquality.cc -- 
 //
 // Author           : Rob Schluntz
@@ -13,20 +13,19 @@
 // Update Count     : 37
 //
+
+#include <list>
+#include <iterator>
+#include "Validate.h"
+#include "SynTree/Visitor.h"
+#include "SynTree/Type.h"
+#include "SynTree/Statement.h"
+#include "SynTree/TypeSubstitution.h"
+#include "Indexer.h"
 #include "TypeEquality.h"
-
-#include <cassert>                // for assert
-#include <list>                   // for list, list<>::iterator, _List_iterator
-#include <string>                 // for operator==, string, basic_string
-
-#include "SynTree/Constant.h"     // for Constant
-#include "SynTree/Declaration.h"  // for DeclarationWithType
-#include "SynTree/Expression.h"   // for ConstantExpr, Expression
-#include "SynTree/Type.h"         // for Type, ArrayType, FunctionType, Enum...
-#include "SynTree/Visitor.h"      // for Visitor
 
 namespace SymTab {
 	class TypeEquality : public Visitor {
   public:
-		TypeEquality( Type * other, bool vlaErr ) : result( true ), other( other ),
+		TypeEquality( Type * other, bool vlaErr ) : result( true ), other( other ), 
 			vlaErr( vlaErr ) {}
 		bool result;
@@ -72,5 +71,5 @@
 		handleQualifiers( basicType );
 		if ( BasicType * bt = dynamic_cast< BasicType * >( other ) ) {
-			result = result && basicType->get_kind() == bt->get_kind();
+			result = result && basicType->get_kind() == bt->get_kind(); 
 		} else {
 			result = false;
@@ -99,5 +98,5 @@
 
 			if ( vlaErr ) {
-				// useful for comparing typedef types - in this case, we
+				// useful for comparing typedef types - in this case, we 
 				// want types to appear distinct if either is a VLA type
 				if ( arrayType->get_isVarLen() || at->get_isVarLen() ) {
@@ -147,5 +146,5 @@
 
 			// parameter types must be equivalent
-			it1 = funcType->get_parameters().begin();
+			it1 = funcType->get_parameters().begin(); 
 			it2 = ft->get_parameters().begin();
 			for ( ; it1 != funcType->get_parameters().end(); ++it1, ++it2 ) {
Index: src/SymTab/TypeEquality.h
===================================================================
--- src/SymTab/TypeEquality.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/TypeEquality.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// TypeEquality.h --
+// TypeEquality.h -- 
 //
 // Author           : Rob Schluntz
@@ -14,10 +14,8 @@
 //
 
-class Type;
-
 namespace SymTab {
   // compare types t1 and t2 for equality
-  // if vlaErr is true, then if at least one of the types is a
-  // variable-length array type, then the result will be false
+  // if vlaErr is true, then if at least one of the types is a 
+  // variable-length array type, then the result will be false 
   bool typeEquals( Type * t1, Type * t2, bool vlaErr = false );
 } // namespace SymTab
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/Validate.cc	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -38,41 +38,39 @@
 //   definition occurs later in the input.
 
+#include <algorithm>
+#include <iterator>
+#include <list>
+
+#include "CodeGen/CodeGenerator.h"
+
+#include "Common/PassVisitor.h"
+#include "Common/ScopedMap.h"
+#include "Common/UniqueName.h"
+#include "Common/utility.h"
+
+#include "Concurrency/Keywords.h"
+
+#include "GenPoly/DeclMutator.h"
+
+#include "InitTweak/InitTweak.h"
+
+#include "AddVisit.h"
+#include "Autogen.h"
+#include "FixFunction.h"
+// #include "ImplementationType.h"
+#include "Indexer.h"
+#include "MakeLibCfa.h"
+#include "TypeEquality.h"
 #include "Validate.h"
 
-#include <cstddef>                     // for size_t
-#include <algorithm>                   // for move, transform
-#include <cassert>                     // for safe_dynamic_cast, assertf
-#include <iterator>                    // for back_inserter, inserter, back_...
-#include <list>                        // for list, _List_iterator, list<>::...
-#include <map>                         // for _Rb_tree_iterator, map, map<>:...
-#include <memory>                      // for unique_ptr, allocator
-#include <string>                      // for string, operator+, operator==
-#include <tuple>                       // for get
-#include <utility>                     // for pair, make_pair
-
-#include "AddVisit.h"                  // for addVisit
-#include "Autogen.h"                   // for SizeType, autogenerateRoutines
-#include "CodeGen/CodeGenerator.h"     // for genName
-#include "Common/PassVisitor.h"        // for PassVisitor, WithDeclsToAdd
-#include "Common/ScopedMap.h"          // for ScopedMap<>::const_iterator
-#include "Common/SemanticError.h"      // for SemanticError
-#include "Common/UniqueName.h"         // for UniqueName
-#include "Common/utility.h"            // for operator+, cloneAll, deleteAll
-#include "Concurrency/Keywords.h"      // for applyKeywords, implementMutexF...
-#include "FixFunction.h"               // for FixFunction
-#include "Indexer.h"                   // for Indexer
-#include "InitTweak/InitTweak.h"       // for isCtorDtor, isCtorDtorAssign
-#include "Parser/LinkageSpec.h"        // for C, Cforall
-#include "ResolvExpr/typeops.h"        // for extractResultType, typesCompat...
-#include "SynTree/Attribute.h"         // for Attribute
-#include "SynTree/Constant.h"          // for Constant
-#include "SynTree/Declaration.h"       // for EnumDecl, StructDecl, UnionDecl
-#include "SynTree/Expression.h"        // for TypeExpr, CompoundLiteralExpr
-#include "SynTree/Initializer.h"       // for ListInit, Initializer, noDesig...
-#include "SynTree/Mutator.h"           // for mutateAll, Mutator
-#include "SynTree/Statement.h"         // for CompoundStmt, DeclStmt, Return...
-#include "SynTree/Type.h"              // for Type, TypeInstType, TraitInstType
-#include "SynTree/TypeSubstitution.h"  // for TypeSubstitution, applySubstit...
-#include "SynTree/Visitor.h"           // for acceptAll, Visitor
+#include "ResolvExpr/typeops.h"
+
+#include "SynTree/Attribute.h"
+#include "SynTree/Expression.h"
+#include "SynTree/Mutator.h"
+#include "SynTree/Statement.h"
+#include "SynTree/Type.h"
+#include "SynTree/TypeSubstitution.h"
+#include "SynTree/Visitor.h"
 
 #define debugPrint( x ) if ( doDebug ) { std::cout << x; }
@@ -607,5 +605,5 @@
 		// a return statement in a void-returning function in C. The expression is treated as if it
 		// were cast to void.
-		if ( ! returnStmt->get_expr() && returnVals.size() != 0 ) {
+		if ( returnStmt->get_expr() == NULL && returnVals.size() != 0 ) {
 			throw SemanticError( "Non-void function returns no values: " , returnStmt );
 		}
@@ -838,5 +836,5 @@
 	void validateGeneric( Aggr * inst ) {
 		std::list< TypeDecl * > * params = inst->get_baseParameters();
-		if ( params ) {
+		if ( params != NULL ) {
 			std::list< Expression * > & args = inst->get_parameters();
 
@@ -939,5 +937,5 @@
 	void ArrayLength::previsit( ObjectDecl * objDecl ) {
 		if ( ArrayType * at = dynamic_cast< ArrayType * >( objDecl->get_type() ) ) {
-			if ( at->get_dimension() ) return;
+			if ( at->get_dimension() != nullptr ) return;
 			if ( ListInit * init = dynamic_cast< ListInit * >( objDecl->get_init() ) ) {
 				at->set_dimension( new ConstantExpr( Constant::from_ulong( init->get_initializers().size() ) ) );
Index: src/SymTab/Validate.h
===================================================================
--- src/SymTab/Validate.h	(revision 02d62bbb5b99cacf169597fa49751f170fb87c4b)
+++ src/SymTab/Validate.h	(revision acb89ed284a096777eee8392dd775f6c9e5785ff)
@@ -18,8 +18,5 @@
 #define VALIDATE_H
 
-#include <list>  // for list
-
-class Declaration;
-class Type;
+#include "SynTree/SynTree.h"
 
 namespace SymTab {
