Index: src/SymTab/AddVisit.h
===================================================================
--- src/SymTab/AddVisit.h	(revision 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/AddVisit.h	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -14,4 +14,6 @@
 //
 
+#include "SynTree/Statement.h"
+
 namespace SymTab {
 	void addDecls( std::list< Declaration* > &declsToAdd, std::list< Statement* > &statements, std::list< Statement* >::iterator i );
@@ -28,5 +30,5 @@
 
 			if ( stmt == stmts.end() ) break;
-			
+
 			// run mutator on statement
 			maybeAccept( *stmt, visitor );
@@ -59,5 +61,5 @@
 
 			if ( decl == translationUnit.end() ) break;
-			
+
 			// run mutator on declaration
 			maybeAccept( *decl, visitor );
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/Autogen.cc	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -13,19 +13,25 @@
 // Update Count     : 62
 //
-
-#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 "GenPoly/ScopedSet.h"
-#include "Common/ScopedMap.h"
-#include "SymTab/Mangler.h"
-#include "GenPoly/DeclMutator.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;
 
 namespace SymTab {
@@ -512,5 +518,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 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/Autogen.h	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -16,10 +16,19 @@
 #pragma once
 
-#include <string>
-#include "SynTree/Statement.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Initializer.h"
-#include "InitTweak/InitTweak.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
 
 namespace SymTab {
@@ -154,5 +163,5 @@
 		if ( isUnnamedBitfield( obj ) ) return;
 
-		bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) );
+		bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && ! obj->get_bitfieldWidth() ) );
 		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 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/FixFunction.cc	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -15,8 +15,10 @@
 
 #include "FixFunction.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "Common/utility.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...
 
 namespace SymTab {
Index: src/SymTab/FixFunction.h
===================================================================
--- src/SymTab/FixFunction.h	(revision 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/FixFunction.h	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// FixFunction.h -- 
+// FixFunction.h --
 //
 // Author           : Richard C. Bilson
@@ -16,5 +16,6 @@
 #pragma once
 
-#include "SynTree/Mutator.h"
+#include "SynTree/Mutator.h"  // for Mutator
+#include "SynTree/SynTree.h"  // for Types
 
 namespace SymTab {
@@ -43,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 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/ImplementationType.cc	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -15,9 +15,11 @@
 
 #include "ImplementationType.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Visitor.h"
-#include "SymTab/Indexer.h"
-#include "Common/utility.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
 
 
Index: src/SymTab/ImplementationType.h
===================================================================
--- src/SymTab/ImplementationType.h	(revision 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/ImplementationType.h	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -16,8 +16,9 @@
 #pragma once
 
-#include "SynTree/SynTree.h"
-#include "SymTab/Indexer.h"
+class Type;
 
 namespace SymTab {
+class Indexer;
+
 	Type *implementationType( Type *, const SymTab::Indexer &indexer );
 
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/Indexer.cc	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -16,24 +16,23 @@
 #include "Indexer.h"
 
-#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"
+#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
 
 #define debugPrint(x) if ( doDebug ) { std::cout << x; }
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/Indexer.h	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -16,8 +16,10 @@
 #pragma once
 
-#include <list>
-#include <string>
+#include <iosfwd>             // for ostream
+#include <list>               // for list
+#include <string>             // for string
 
-#include "SynTree/Visitor.h"
+#include "SynTree/Visitor.h"  // for Visitor
+#include "SynTree/SynTree.h"  // for AST nodes
 
 namespace SymTab {
@@ -125,4 +127,5 @@
 
 		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 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/Mangler.cc	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -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 "CodeGen/OperatorTable.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...
 
 namespace SymTab {
Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/Mangler.h	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Mangler.h -- 
+// Mangler.h --
 //
 // Author           : Richard C. Bilson
@@ -16,7 +16,11 @@
 #pragma once
 
-#include <sstream>
-#include "SynTree/SynTree.h"
-#include "SynTree/Visitor.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
 
 namespace SymTab {
@@ -47,5 +51,5 @@
 		virtual void visit( ZeroType *zeroType );
 		virtual void visit( OneType *oneType );
-  
+
 		std::string get_mangleName() { return mangleName.str(); }
 	  private:
@@ -57,12 +61,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 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/TypeEquality.cc	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// TypeEquality.cc -- 
+// TypeEquality.cc --
 //
 // Author           : Rob Schluntz
@@ -13,19 +13,20 @@
 // 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;
@@ -71,5 +72,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;
@@ -98,5 +99,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() ) {
@@ -146,5 +147,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 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/TypeEquality.h	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// TypeEquality.h -- 
+// TypeEquality.h --
 //
 // Author           : Rob Schluntz
@@ -14,8 +14,10 @@
 //
 
+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 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/Validate.cc	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -38,39 +38,41 @@
 //   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 "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"
+#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
 
 #define debugPrint( x ) if ( doDebug ) { std::cout << x; }
@@ -605,5 +607,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() == NULL && returnVals.size() != 0 ) {
+		if ( ! returnStmt->get_expr() && returnVals.size() != 0 ) {
 			throw SemanticError( "Non-void function returns no values: " , returnStmt );
 		}
@@ -836,5 +838,5 @@
 	void validateGeneric( Aggr * inst ) {
 		std::list< TypeDecl * > * params = inst->get_baseParameters();
-		if ( params != NULL ) {
+		if ( params ) {
 			std::list< Expression * > & args = inst->get_parameters();
 
@@ -937,5 +939,5 @@
 	void ArrayLength::previsit( ObjectDecl * objDecl ) {
 		if ( ArrayType * at = dynamic_cast< ArrayType * >( objDecl->get_type() ) ) {
-			if ( at->get_dimension() != nullptr ) return;
+			if ( at->get_dimension() ) 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 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/SymTab/Validate.h	(revision b947fb2e40ff1eb3c74f2ca17397c8a24c9a2a9c)
@@ -17,5 +17,8 @@
 #pragma once
 
-#include "SynTree/SynTree.h"
+#include <list>  // for list
+
+class Declaration;
+class Type;
 
 namespace SymTab {
