Index: src/GenPoly/ScrubTyVars.h
===================================================================
--- src/GenPoly/ScrubTyVars.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/GenPoly/ScrubTyVars.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// ScrubTyVars.h -- 
+// ScrubTyVars.h --
 //
 // Author           : Richard C. Bilson
@@ -16,5 +16,5 @@
 #pragma once
 
-#include <assert.h>           // for assert
+#include <cassert>            // for assert
 
 #include "GenPoly.h"          // for TyVarMap, isPolyType, isDynType
@@ -69,8 +69,8 @@
 			// return dynamicOnly ? isDynType( ty, tyVars ) : isPolyType( ty, tyVars );
 		}
-		
+
 		/// Mutates (possibly generic) aggregate types appropriately
 		Type* mutateAggregateType( Type *ty );
-		
+
 		const TyVarMap *tyVars;  ///< Type variables to scrub
 		ScrubMode mode;          ///< which type variables to scrub? [FromMap]
Index: src/InitTweak/FixGlobalInit.cc
===================================================================
--- src/InitTweak/FixGlobalInit.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/InitTweak/FixGlobalInit.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,5 +16,5 @@
 #include "FixGlobalInit.h"
 
-#include <assert.h>                // for assert
+#include <cassert>                 // for assert
 #include <stddef.h>                // for NULL
 #include <algorithm>               // for replace_if
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/Parser/ExpressionNode.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,5 +14,5 @@
 //
 
-#include <assert.h>                // for assert
+#include <cassert>                 // for assert
 #include <stdio.h>                 // for sscanf, size_t
 #include <climits>                 // for LLONG_MAX, LONG_MAX, INT_MAX, UINT...
@@ -78,5 +78,5 @@
 		goto CLEANUP;
 	} // if
-	
+
 	if ( str[0] == '0' ) {								// octal/hex constant ?
 		dec = false;
Index: src/ResolvExpr/AdjustExprType.cc
===================================================================
--- src/ResolvExpr/AdjustExprType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/AdjustExprType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,8 +14,9 @@
 //
 
-#include "typeops.h"
-#include "SynTree/Type.h"
-#include "TypeEnvironment.h"
-#include "SymTab/Indexer.h"
+#include "SymTab/Indexer.h"       // for Indexer
+#include "SynTree/Declaration.h"  // for TypeDecl, TypeDecl::Kind::Ftype
+#include "SynTree/Mutator.h"      // for Mutator
+#include "SynTree/Type.h"         // for PointerType, TypeInstType, Type
+#include "TypeEnvironment.h"      // for EqvClass, TypeEnvironment
 
 namespace ResolvExpr {
Index: src/ResolvExpr/Alternative.cc
===================================================================
--- src/ResolvExpr/Alternative.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/Alternative.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -15,7 +15,13 @@
 
 #include "Alternative.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "Common/utility.h"
+
+#include <ostream>                       // for operator<<, ostream, basic_o...
+#include <string>                        // for operator<<, char_traits, string
+
+#include "Common/utility.h"              // for maybeClone
+#include "ResolvExpr/Cost.h"             // for Cost, Cost::zero, operator<<
+#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment
+#include "SynTree/Expression.h"          // for Expression
+#include "SynTree/Type.h"                // for Type
 
 namespace ResolvExpr {
Index: src/ResolvExpr/Alternative.h
===================================================================
--- src/ResolvExpr/Alternative.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/Alternative.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,11 +16,15 @@
 #pragma once
 
-#include <list>
-#include "SynTree/SynTree.h"
-#include "Cost.h"
-#include "TypeEnvironment.h"
+#include <iosfwd>             // for ostream
+#include <list>               // for list
+
+#include "Cost.h"             // for Cost
+#include "TypeEnvironment.h"  // for TypeEnvironment
+
+class Expression;
 
 namespace ResolvExpr {
 	struct Alternative;
+
 	typedef std::list< Alternative > AltList;
 
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,35 +14,35 @@
 //
 
-#include <list>
-#include <iterator>
-#include <algorithm>
-#include <functional>
-#include <cassert>
-#include <unordered_map>
-#include <utility>
-#include <vector>
-
+#include <algorithm>               // for copy
+#include <cassert>                 // for safe_dynamic_cast, assert, assertf
+#include <iostream>                // for operator<<, cerr, ostream, endl
+#include <iterator>                // for back_insert_iterator, back_inserter
+#include <list>                    // for _List_iterator, list, _List_const_...
+#include <map>                     // for _Rb_tree_iterator, map, _Rb_tree_c...
+#include <memory>                  // for allocator_traits<>::value_type
+#include <utility>                 // for pair
+
+#include "Alternative.h"           // for AltList, Alternative
 #include "AlternativeFinder.h"
-#include "Alternative.h"
-#include "Cost.h"
-#include "typeops.h"
-#include "Unify.h"
-#include "RenameVars.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Visitor.h"
-#include "SymTab/Indexer.h"
-#include "SymTab/Mangler.h"
-#include "SynTree/TypeSubstitution.h"
-#include "SymTab/Validate.h"
-#include "Tuples/Tuples.h"
-#include "Tuples/Explode.h"
-#include "Common/utility.h"
-#include "InitTweak/InitTweak.h"
-#include "InitTweak/GenInit.h"
-#include "ResolveTypeof.h"
-#include "Resolver.h"
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for deleteAll, printAll, CodeLocation
+#include "Cost.h"                  // for Cost, Cost::zero, operator<<, Cost...
+#include "InitTweak/InitTweak.h"   // for getFunctionName
+#include "RenameVars.h"            // for RenameVars, global_renamer
+#include "ResolveTypeof.h"         // for resolveTypeof
+#include "Resolver.h"              // for resolveStmtExpr
+#include "SymTab/Indexer.h"        // for Indexer
+#include "SymTab/Mangler.h"        // for Mangler
+#include "SymTab/Validate.h"       // for validateType
+#include "SynTree/Constant.h"      // for Constant
+#include "SynTree/Declaration.h"   // for DeclarationWithType, TypeDecl, Dec...
+#include "SynTree/Expression.h"    // for Expression, CastExpr, NameExpr
+#include "SynTree/Initializer.h"   // for SingleInit, operator<<, Designation
+#include "SynTree/SynTree.h"       // for UniqueId
+#include "SynTree/Type.h"          // for Type, FunctionType, PointerType
+#include "Tuples/Explode.h"        // for explode
+#include "Tuples/Tuples.h"         // for isTtype, handleTupleAssignment
+#include "Unify.h"                 // for unify
+#include "typeops.h"               // for adjustExprType, polyCost, castCost
 
 extern bool resolvep;
Index: src/ResolvExpr/AlternativeFinder.h
===================================================================
--- src/ResolvExpr/AlternativeFinder.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/AlternativeFinder.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,11 +16,17 @@
 #pragma once
 
-#include <set>
+#include <algorithm>                     // for copy
+#include <list>                          // for list
+#include <string>                        // for string
 
-#include "Alternative.h"
-#include "Unify.h"
-#include "SynTree/SynTree.h"
-#include "SymTab/Indexer.h"
-#include "SynTree/TypeSubstitution.h"
+#include "Alternative.h"                 // for AltList, Alternative
+#include "ResolvExpr/Cost.h"             // for Cost, Cost::infinity
+#include "ResolvExpr/TypeEnvironment.h"  // for AssertionSet, OpenVarSet
+#include "SynTree/Visitor.h"             // for Visitor
+#include "SynTree/SynTree.h"             // for Visitor Nodes
+
+namespace SymTab {
+class Indexer;
+}  // namespace SymTab
 
 namespace ResolvExpr {
Index: src/ResolvExpr/AlternativePrinter.cc
===================================================================
--- src/ResolvExpr/AlternativePrinter.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/AlternativePrinter.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -15,10 +15,13 @@
 
 #include "AlternativePrinter.h"
-#include "AlternativeFinder.h"
-#include "Alternative.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "Common/utility.h"
+
+#include <list>                          // for _List_const_iterator, list<>...
+
+#include "Alternative.h"                 // for AltList, Alternative
+#include "AlternativeFinder.h"           // for AlternativeFinder
+#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment
+#include "SynTree/Expression.h"          // for Expression
+#include "SynTree/Statement.h"           // for ExprStmt
+#include "SynTree/Type.h"                // for Type
 
 namespace ResolvExpr {
Index: src/ResolvExpr/AlternativePrinter.h
===================================================================
--- src/ResolvExpr/AlternativePrinter.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/AlternativePrinter.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,8 +16,9 @@
 #pragma once
 
-#include <iostream>
+#include <iostream>          // for ostream
 
-#include "Alternative.h"
-#include "SymTab/Indexer.h"
+#include "SymTab/Indexer.h"  // for Indexer
+
+class ExprStmt;
 
 namespace ResolvExpr {
Index: src/ResolvExpr/CastCost.cc
===================================================================
--- src/ResolvExpr/CastCost.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/CastCost.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,10 +14,13 @@
 //
 
-#include "typeops.h"
-#include "Cost.h"
-#include "ConversionCost.h"
-#include "SynTree/Type.h"
-#include "SynTree/Visitor.h"
-#include "SymTab/Indexer.h"
+#include <cassert>                       // for assert
+
+#include "ConversionCost.h"              // for ConversionCost
+#include "Cost.h"                        // for Cost, Cost::infinity
+#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment, EqvClass
+#include "SymTab/Indexer.h"              // for Indexer
+#include "SynTree/Declaration.h"         // for TypeDecl, NamedTypeDecl
+#include "SynTree/Type.h"                // for PointerType, Type, TypeInstType
+#include "typeops.h"                     // for typesCompatibleIgnoreQualifiers
 
 
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/CommonType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,15 @@
 //
 
-#include "typeops.h"
-#include "SynTree/Type.h"
-#include "Unify.h"
+#include <cassert>                       // for safe_dynamic_cast
+#include <map>                           // for _Rb_tree_const_iterator
+#include <utility>                       // for pair
+
+#include "ResolvExpr/TypeEnvironment.h"  // for OpenVarSet, AssertionSet
+#include "SymTab/Indexer.h"              // for Indexer
+#include "SynTree/Declaration.h"         // for TypeDecl, NamedTypeDecl (ptr...
+#include "SynTree/Type.h"                // for BasicType, BasicType::Kind::...
+#include "SynTree/Visitor.h"             // for Visitor
+#include "Unify.h"                       // for unifyExact, bindVar, WidenMode
+#include "typeops.h"                     // for isFtype
 
 
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/ConversionCost.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -15,8 +15,15 @@
 
 #include "ConversionCost.h"
-#include "typeops.h"
-#include "SynTree/Type.h"
-#include "SynTree/Visitor.h"
-#include "SymTab/Indexer.h"
+
+#include <cassert>                       // for assert
+#include <list>                          // for list, list<>::const_iterator
+#include <string>                        // for operator==, string
+
+#include "ResolvExpr/Cost.h"             // for Cost
+#include "ResolvExpr/TypeEnvironment.h"  // for EqvClass, TypeEnvironment
+#include "SymTab/Indexer.h"              // for Indexer
+#include "SynTree/Declaration.h"         // for TypeDecl, NamedTypeDecl
+#include "SynTree/Type.h"                // for Type, BasicType, TypeInstType
+#include "typeops.h"                     // for typesCompatibleIgnoreQualifiers
 
 namespace ResolvExpr {
Index: src/ResolvExpr/ConversionCost.h
===================================================================
--- src/ResolvExpr/ConversionCost.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/ConversionCost.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// ConversionCost.h -- 
+// ConversionCost.h --
 //
 // Author           : Richard C. Bilson
@@ -16,14 +16,19 @@
 #pragma once
 
-#include "SynTree/Visitor.h"
-#include "SymTab/Indexer.h"
-#include "Cost.h"
-#include "TypeEnvironment.h"
+#include "Cost.h"             // for Cost
+#include "SynTree/Visitor.h"  // for Visitor
+#include "SynTree/SynTree.h"  // for Visitor Nodes
+
+namespace SymTab {
+class Indexer;
+}  // namespace SymTab
 
 namespace ResolvExpr {
+class TypeEnvironment;
+
 	class ConversionCost : public Visitor {
 	  public:
 		ConversionCost( Type *dest, const SymTab::Indexer &indexer, const TypeEnvironment &env );
-  
+
 		Cost get_cost() const { return cost; }
 
Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/CurrentObject.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,15 +14,20 @@
 //
 
-#include <stack>
-#include <iostream>
-
+#include <stddef.h>                    // for size_t
+#include <cassert>                     // for assertf, assert, safe_dynamic_...
+#include <iostream>                    // for ostream, operator<<, basic_ost...
+#include <stack>                       // for stack
+#include <string>                      // for string, operator<<, allocator
+
+#include "Common/Indenter.h"           // for Indenter, operator<<
+#include "Common/SemanticError.h"      // for SemanticError
+#include "Common/utility.h"            // for toString
 #include "CurrentObject.h"
-
-#include "Common/Indenter.h"
-
-#include "SynTree/Declaration.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Type.h"
-#include "SynTree/TypeSubstitution.h"
+#include "SynTree/Constant.h"          // for Constant
+#include "SynTree/Declaration.h"       // for ObjectDecl, Declaration, Struc...
+#include "SynTree/Expression.h"        // for InitAlternative, VariableExpr
+#include "SynTree/Initializer.h"       // for Designation, operator<<
+#include "SynTree/Type.h"              // for Type, StructInstType, UnionIns...
+#include "SynTree/TypeSubstitution.h"  // for TypeSubstitution
 
 #if 0
Index: src/ResolvExpr/CurrentObject.h
===================================================================
--- src/ResolvExpr/CurrentObject.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/CurrentObject.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,8 +16,10 @@
 #pragma once
 
-#include <stack>
+#include <list>   // for list
+#include <stack>  // for stack
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Expression.h"
+class Designation;
+class Type;
+struct InitAlternative;
 
 namespace ResolvExpr {
Index: src/ResolvExpr/FindOpenVars.cc
===================================================================
--- src/ResolvExpr/FindOpenVars.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/FindOpenVars.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -15,6 +15,11 @@
 
 #include "FindOpenVars.h"
-#include "SynTree/Type.h"
-#include "SynTree/Visitor.h"
+
+#include <list>                   // for _List_const_iterator, list<>::const...
+#include <map>                    // for map<>::mapped_type
+
+#include "SynTree/Declaration.h"  // for TypeDecl, DeclarationWithType (ptr ...
+#include "SynTree/Type.h"         // for Type, Type::ForallList, ArrayType
+#include "SynTree/Visitor.h"      // for Visitor
 
 namespace ResolvExpr {
Index: src/ResolvExpr/FindOpenVars.h
===================================================================
--- src/ResolvExpr/FindOpenVars.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/FindOpenVars.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,6 +16,7 @@
 #pragma once
 
-#include "Unify.h"
-#include "SynTree/SynTree.h"
+#include "ResolvExpr/TypeEnvironment.h"  // for AssertionSet, OpenVarSet
+
+class Type;
 
 namespace ResolvExpr {
Index: src/ResolvExpr/Occurs.cc
===================================================================
--- src/ResolvExpr/Occurs.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/Occurs.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,10 +14,10 @@
 //
 
-#include <set>
-#include <algorithm>
-#include <iterator>
-#include "SynTree/Type.h"
-#include "SynTree/Visitor.h"
-#include "TypeEnvironment.h"
+#include <set>                // for set, _Rb_tree_const_iterator
+#include <string>             // for string
+
+#include "SynTree/Type.h"     // for TypeInstType, Type
+#include "SynTree/Visitor.h"  // for Visitor
+#include "TypeEnvironment.h"  // for EqvClass, TypeEnvironment
 
 namespace ResolvExpr {
Index: src/ResolvExpr/PolyCost.cc
===================================================================
--- src/ResolvExpr/PolyCost.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/PolyCost.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,9 +14,8 @@
 //
 
-#include "typeops.h"
-#include "SynTree/Type.h"
-#include "SynTree/Visitor.h"
-#include "SymTab/Indexer.h"
-#include "TypeEnvironment.h"
+#include "SymTab/Indexer.h"   // for Indexer
+#include "SynTree/Type.h"     // for TypeInstType, Type
+#include "SynTree/Visitor.h"  // for Visitor
+#include "TypeEnvironment.h"  // for EqvClass, TypeEnvironment
 
 namespace ResolvExpr {
Index: src/ResolvExpr/PtrsAssignable.cc
===================================================================
--- src/ResolvExpr/PtrsAssignable.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/PtrsAssignable.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,8 +14,7 @@
 //
 
-#include "typeops.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Visitor.h"
+#include "ResolvExpr/TypeEnvironment.h"  // for EqvClass, TypeEnvironment
+#include "SynTree/Type.h"                // for TypeInstType, Type, BasicType
+#include "SynTree/Visitor.h"             // for Visitor
 
 
Index: src/ResolvExpr/PtrsCastable.cc
===================================================================
--- src/ResolvExpr/PtrsCastable.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/PtrsCastable.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,9 +14,10 @@
 //
 
-#include "typeops.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Visitor.h"
-#include "SymTab/Indexer.h"
+#include "ResolvExpr/TypeEnvironment.h"  // for EqvClass, TypeEnvironment
+#include "SymTab/Indexer.h"              // for Indexer
+#include "SynTree/Declaration.h"         // for TypeDecl, TypeDecl::Kind::Ftype
+#include "SynTree/Type.h"                // for TypeInstType, Type, BasicType
+#include "SynTree/Visitor.h"             // for Visitor
+#include "typeops.h"                     // for ptrsAssignable
 
 
Index: src/ResolvExpr/RenameVars.cc
===================================================================
--- src/ResolvExpr/RenameVars.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/RenameVars.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,11 +14,15 @@
 //
 
-#include <sstream>
+#include <ext/alloc_traits.h>      // for __alloc_traits<>::value_type
+#include <memory>                  // for allocator_traits<>::value_type
+#include <sstream>                 // for operator<<, basic_ostream, ostring...
+#include <utility>                 // for pair
 
+#include "Common/SemanticError.h"  // for SemanticError
 #include "RenameVars.h"
-#include "SynTree/Visitor.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
+#include "SynTree/Declaration.h"   // for DeclarationWithType, TypeDecl, Dec...
+#include "SynTree/Expression.h"    // for Expression
+#include "SynTree/Type.h"          // for Type, TypeInstType, TraitInstType
+#include "SynTree/Visitor.h"       // for acceptAll, maybeAccept
 
 namespace ResolvExpr {
Index: src/ResolvExpr/RenameVars.h
===================================================================
--- src/ResolvExpr/RenameVars.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/RenameVars.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// RenameVars.h -- 
+// RenameVars.h --
 //
 // Author           : Richard C. Bilson
@@ -16,10 +16,10 @@
 #pragma once
 
-#include <list>
-#include <map>
-#include <string>
+#include <list>               // for list
+#include <map>                // for map
+#include <string>             // for string
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Visitor.h"
+#include "SynTree/SynTree.h"  // for Visitor Nodes
+#include "SynTree/Visitor.h"  // for Visitor
 
 namespace ResolvExpr {
Index: src/ResolvExpr/ResolveTypeof.cc
===================================================================
--- src/ResolvExpr/ResolveTypeof.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/ResolveTypeof.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -15,10 +15,15 @@
 
 #include "ResolveTypeof.h"
-#include "Alternative.h"
-#include "AlternativeFinder.h"
-#include "Resolver.h"
-#include "TypeEnvironment.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Type.h"
+
+#include <cassert>               // for assert
+
+#include "Resolver.h"            // for resolveInVoidContext
+#include "SynTree/Expression.h"  // for Expression
+#include "SynTree/Mutator.h"     // for Mutator
+#include "SynTree/Type.h"        // for TypeofType, Type
+
+namespace SymTab {
+class Indexer;
+}  // namespace SymTab
 
 namespace ResolvExpr {
Index: src/ResolvExpr/ResolveTypeof.h
===================================================================
--- src/ResolvExpr/ResolveTypeof.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/ResolveTypeof.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,6 +16,8 @@
 #pragma once
 
-#include "SynTree/SynTree.h"
-#include "SymTab/Indexer.h"
+class Type;
+namespace SymTab {
+class Indexer;
+}  // namespace SymTab
 
 namespace ResolvExpr {
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/Resolver.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,25 +14,29 @@
 //
 
-#include <iostream>
-
-#include "Alternative.h"
-#include "AlternativeFinder.h"
-#include "CurrentObject.h"
-#include "RenameVars.h"
+#include <stddef.h>                      // for NULL
+#include <cassert>                       // for safe_dynamic_cast, assert
+#include <memory>                        // for allocator, allocator_traits<...
+#include <tuple>                         // for get
+
+#include "Alternative.h"                 // for Alternative, AltList
+#include "AlternativeFinder.h"           // for AlternativeFinder, resolveIn...
+#include "Common/SemanticError.h"        // for SemanticError
+#include "Common/utility.h"              // for ValueGuard, group_iterate
+#include "CurrentObject.h"               // for CurrentObject
+#include "InitTweak/InitTweak.h"         // for isIntrinsicSingleArgCallStmt
+#include "RenameVars.h"                  // for RenameVars, global_renamer
+#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment
+#include "ResolveTypeof.h"               // for resolveTypeof
 #include "Resolver.h"
-#include "ResolveTypeof.h"
-#include "typeops.h"
-
-#include "SynTree/Expression.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Type.h"
-
-#include "SymTab/Autogen.h"
-#include "SymTab/Indexer.h"
-
-#include "Common/utility.h"
-
-#include "InitTweak/InitTweak.h"
+#include "SymTab/Autogen.h"              // for SizeType
+#include "SymTab/Indexer.h"              // for Indexer
+#include "SynTree/Declaration.h"         // for ObjectDecl, TypeDecl, Declar...
+#include "SynTree/Expression.h"          // for Expression, CastExpr, InitExpr
+#include "SynTree/Initializer.h"         // for ConstructorInit, SingleInit
+#include "SynTree/Statement.h"           // for ForStmt, Statement, BranchStmt
+#include "SynTree/Type.h"                // for Type, BasicType, PointerType
+#include "SynTree/TypeSubstitution.h"    // for TypeSubstitution
+#include "SynTree/Visitor.h"             // for acceptAll, maybeAccept
+#include "typeops.h"                     // for extractResultType
 
 using namespace std;
Index: src/ResolvExpr/Resolver.h
===================================================================
--- src/ResolvExpr/Resolver.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/Resolver.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,6 +16,13 @@
 #pragma once
 
-#include "SynTree/SynTree.h"
-#include "SymTab/Indexer.h"
+#include <list>  // for list
+
+class ConstructorInit;
+class Declaration;
+class Expression;
+class StmtExpr;
+namespace SymTab {
+class Indexer;
+}  // namespace SymTab
 
 namespace ResolvExpr {
Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,11 +14,13 @@
 //
 
-#include <algorithm>
-#include <iterator>
-
+#include <cassert>                     // for assert
+#include <algorithm>                   // for copy, set_intersection
+#include <iterator>                    // for ostream_iterator, insert_iterator
+#include <utility>                     // for pair
+
+#include "Common/utility.h"            // for maybeClone
+#include "SynTree/Type.h"              // for Type, FunctionType, Type::Fora...
+#include "SynTree/TypeSubstitution.h"  // for TypeSubstitution
 #include "TypeEnvironment.h"
-#include "SynTree/Type.h"
-#include "SynTree/TypeSubstitution.h"
-#include "Common/utility.h"
 
 namespace ResolvExpr {
Index: src/ResolvExpr/TypeEnvironment.h
===================================================================
--- src/ResolvExpr/TypeEnvironment.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/TypeEnvironment.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,13 +16,14 @@
 #pragma once
 
-#include <string>
-#include <set>
-#include <list>
-#include <iostream>
+#include <iostream>                    // for ostream
+#include <list>                        // for list, list<>::iterator, list<>...
+#include <map>                         // for map, map<>::value_compare
+#include <set>                         // for set
+#include <string>                      // for string
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Type.h"
-#include "SynTree/TypeSubstitution.h"
-#include "SynTree/Declaration.h"
+#include "SynTree/Declaration.h"       // for TypeDecl::Data, DeclarationWit...
+#include "SynTree/SynTree.h"           // for UniqueId
+#include "SynTree/Type.h"              // for Type, Type::ForallList
+#include "SynTree/TypeSubstitution.h"  // for TypeSubstitution
 
 namespace ResolvExpr {
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/Unify.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,17 +14,28 @@
 //
 
-#include <set>
-#include <memory>
-
+#include <cassert>                // for assertf, assert
+#include <iterator>               // for back_insert_iterator, back_inserter
+#include <map>                    // for _Rb_tree_const_iterator, _Rb_tree_i...
+#include <memory>                 // for unique_ptr, auto_ptr
+#include <set>                    // for set
+#include <string>                 // for string, operator==, operator!=, bas...
+#include <utility>                // for pair
+
+#include "FindOpenVars.h"         // for findOpenVars
+#include "Parser/LinkageSpec.h"   // for C
+#include "SynTree/Constant.h"     // for Constant
+#include "SynTree/Declaration.h"  // for TypeDecl, TypeDecl::Data, Declarati...
+#include "SynTree/Expression.h"   // for TypeExpr, Expression, ConstantExpr
+#include "SynTree/Mutator.h"      // for Mutator
+#include "SynTree/Type.h"         // for Type, TypeInstType, FunctionType
+#include "SynTree/Visitor.h"      // for Visitor
+#include "Tuples/Tuples.h"        // for isTtype
+#include "TypeEnvironment.h"      // for EqvClass, AssertionSet, OpenVarSet
 #include "Unify.h"
-#include "TypeEnvironment.h"
-#include "typeops.h"
-#include "FindOpenVars.h"
-#include "SynTree/Visitor.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SymTab/Indexer.h"
-#include "Common/utility.h"
-#include "Tuples/Tuples.h"
+#include "typeops.h"              // for flatten, occurs, commonType
+
+namespace SymTab {
+class Indexer;
+}  // namespace SymTab
 
 // #define DEBUG
Index: src/ResolvExpr/Unify.h
===================================================================
--- src/ResolvExpr/Unify.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ResolvExpr/Unify.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,12 +16,15 @@
 #pragma once
 
-#include <map>
-#include <list>
-#include "SynTree/SynTree.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SymTab/Indexer.h"
-#include "TypeEnvironment.h"
-#include "Common/utility.h"
+#include <list>                   // for list
+
+#include "Common/utility.h"       // for deleteAll
+#include "SynTree/Declaration.h"  // for TypeDecl, TypeDecl::Data
+#include "TypeEnvironment.h"      // for AssertionSet, OpenVarSet
+
+class Type;
+class TypeInstType;
+namespace SymTab {
+class Indexer;
+}  // namespace SymTab
 
 namespace ResolvExpr {
Index: src/SynTree/AddStmtVisitor.cc
===================================================================
--- src/SynTree/AddStmtVisitor.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/AddStmtVisitor.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -15,8 +15,10 @@
 
 #include "AddStmtVisitor.h"
-#include "Statement.h"
-#include "Declaration.h"
-#include "Expression.h"
-#include "Common/utility.h"
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Declaration.h"           // for Declaration
+#include "Expression.h"            // for Expression
+#include "Statement.h"             // for CompoundStmt, ForStmt, IfStmt, Sta...
+#include "SynTree/Label.h"         // for Label, noLabels
 
 void AddStmtVisitor::visitStatementList( std::list< Statement* > &statements ) {
Index: src/SynTree/AddStmtVisitor.h
===================================================================
--- src/SynTree/AddStmtVisitor.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/AddStmtVisitor.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,8 +16,8 @@
 #pragma once
 
-#include <list>
+#include <list>               // for list
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Visitor.h"
+#include "SynTree/SynTree.h"  // for Visitor Nodes
+#include "SynTree/Visitor.h"  // for Visitor
 
 class AddStmtVisitor : public Visitor {
Index: src/SynTree/AddressExpr.cc
===================================================================
--- src/SynTree/AddressExpr.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/AddressExpr.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,10 @@
 //
 
-#include "Expression.h"
-#include "Type.h"
-#include "Common/utility.h"
+#include <ostream>           // for ostream, operator<<, basic_ostream, endl
+#include <string>            // for operator<<, string
+
+#include "Common/utility.h"  // for maybeClone
+#include "Expression.h"      // for AddressExpr, Expression
+#include "Type.h"            // for PointerType, Type, Type::Qualifiers
 
 AddressExpr::AddressExpr( Expression *arg, Expression *_aname ) : Expression( _aname ), arg( arg ) {
Index: src/SynTree/AggregateDecl.cc
===================================================================
--- src/SynTree/AggregateDecl.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/AggregateDecl.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,8 +14,13 @@
 //
 
-#include "Declaration.h"
-#include "Attribute.h"
-#include "Type.h"
-#include "Common/utility.h"
+#include <list>                  // for list
+#include <ostream>               // for operator<<, basic_ostream, ostream
+#include <string>                // for operator<<, string, char_traits
+
+#include "Attribute.h"           // for Attribute
+#include "Common/utility.h"      // for printAll, cloneAll, deleteAll
+#include "Declaration.h"         // for AggregateDecl, TypeDecl, Declaration
+#include "Parser/LinkageSpec.h"  // for Spec, linkageName, Cforall
+#include "Type.h"                // for Type, Type::StorageClasses
 
 
Index: src/SynTree/ApplicationExpr.cc
===================================================================
--- src/SynTree/ApplicationExpr.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/ApplicationExpr.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,12 +14,17 @@
 //
 
-#include <cassert>
+#include <cassert>               // for safe_dynamic_cast, assert
+#include <list>                  // for list
+#include <map>                   // for _Rb_tree_const_iterator, map, map<>:...
+#include <memory>                // for unique_ptr
+#include <ostream>               // for operator<<, ostream, basic_ostream
+#include <string>                // for operator<<, string, char_traits
+#include <utility>               // for pair
 
-#include "Expression.h"
-#include "Declaration.h"
-#include "Type.h"
-#include "TypeSubstitution.h"
-#include "Common/utility.h"
-#include "ResolvExpr/typeops.h"
+#include "Common/utility.h"      // for maybeClone, cloneAll, deleteAll, pri...
+#include "Declaration.h"         // for Declaration
+#include "Expression.h"          // for ParamEntry, ApplicationExpr, Expression
+#include "ResolvExpr/typeops.h"  // for extractResultType
+#include "Type.h"                // for Type, PointerType, FunctionType
 
 ParamEntry::ParamEntry( const ParamEntry &other ) :
Index: src/SynTree/ArrayType.cc
===================================================================
--- src/SynTree/ArrayType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/ArrayType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,12 @@
 //
 
-#include "Type.h"
-#include "Expression.h"
-#include "Common/utility.h"
+#include <list>              // for list
+#include <ostream>           // for operator<<, ostream
+
+#include "Common/utility.h"  // for maybeClone
+#include "Expression.h"      // for Expression
+#include "Type.h"            // for ArrayType, Type, Type::Qualifiers
+
+class Attribute;
 
 
Index: src/SynTree/AttrType.cc
===================================================================
--- src/SynTree/AttrType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/AttrType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,13 @@
 //
 
-#include "Type.h"
-#include "Expression.h"
-#include "Common/utility.h"
+#include <list>              // for list
+#include <ostream>           // for operator<<, ostream, basic_ostream
+#include <string>            // for char_traits, operator<<, string
+
+#include "Common/utility.h"  // for maybeClone
+#include "Expression.h"      // for Expression
+#include "Type.h"            // for AttrType, Type, Type::Qualifiers
+
+class Attribute;
 
 
Index: src/SynTree/Attribute.cc
===================================================================
--- src/SynTree/Attribute.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Attribute.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,9 +14,9 @@
 //
 
-#include <cassert>
+#include <ostream>           // for operator<<, ostream, basic_ostream, endl
 
-#include "Common/utility.h"
 #include "Attribute.h"
-#include "Expression.h"
+#include "Common/utility.h"  // for cloneAll, deleteAll, printAll
+#include "Expression.h"      // for Expression
 
 Attribute::Attribute( const Attribute &other ) : name( other.name ) {
Index: src/SynTree/Attribute.h
===================================================================
--- src/SynTree/Attribute.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Attribute.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,5 +16,9 @@
 #pragma once
 
-#include "SynTree.h"
+#include <iosfwd>  // for ostream
+#include <list>    // for list
+#include <string>  // for string, operator==
+
+class Expression;
 
 // GCC attribute
Index: src/SynTree/BasicType.cc
===================================================================
--- src/SynTree/BasicType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/BasicType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,6 +14,11 @@
 //
 
-#include <cassert>
-#include "Type.h"
+#include <cassert>  // for assert
+#include <list>     // for list
+#include <ostream>  // for operator<<, ostream
+
+#include "Type.h"   // for BasicType, Type, BasicType::Kind, BasicType::Kind...
+
+class Attribute;
 
 BasicType::BasicType( const Type::Qualifiers &tq, Kind bt, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), kind( bt ) {}
Index: src/SynTree/CommaExpr.cc
===================================================================
--- src/SynTree/CommaExpr.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/CommaExpr.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,10 @@
 //
 
-#include "Expression.h"
-#include "Type.h"
-#include "Common/utility.h"
+#include <ostream>           // for ostream, endl, operator<<, basic_ostream
+#include <string>            // for operator<<, string
+
+#include "Common/utility.h"  // for maybeClone
+#include "Expression.h"      // for CommaExpr, Expression
+#include "Type.h"            // for Type
 
 CommaExpr::CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname )
Index: src/SynTree/CompoundStmt.cc
===================================================================
--- src/SynTree/CompoundStmt.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/CompoundStmt.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,11 +14,14 @@
 //
 
-#include "Statement.h"
-#include "Common/utility.h"
-#include <algorithm>
-#include <functional>
-#include "Expression.h"
-#include "Declaration.h"
-#include "SynTree/VarExprReplacer.h"
+#include <cassert>                    // for assert, safe_dynamic_cast
+#include <list>                       // for list, _List_const_iterator, lis...
+#include <ostream>                    // for operator<<, ostream, basic_ostream
+#include <string>                     // for operator==, string
+
+#include "Common/utility.h"           // for cloneAll, deleteAll, printAll
+#include "Declaration.h"              // for DeclarationWithType, Declaration
+#include "Statement.h"                // for CompoundStmt, Statement, DeclStmt
+#include "SynTree/Label.h"            // for Label
+#include "SynTree/VarExprReplacer.h"  // for VarExprReplacer, VarExprReplace...
 
 using std::string;
Index: src/SynTree/Constant.cc
===================================================================
--- src/SynTree/Constant.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Constant.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,10 +14,10 @@
 //
 
-#include <iostream>
-#include <list>
-#include <string>
+#include <cassert>   // for safe_dynamic_cast, assertf
+#include <iostream>  // for operator<<, ostream, basic_ostream
+#include <string>    // for to_string, string, char_traits, operator<<
 
 #include "Constant.h"
-#include "Type.h"
+#include "Type.h"    // for BasicType, Type, Type::Qualifiers, PointerType
 
 Constant::Constant( Type * type, std::string rep, unsigned long long val ) : type( type ), rep( rep ), val( val ) {}
Index: src/SynTree/Constant.h
===================================================================
--- src/SynTree/Constant.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Constant.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,7 +16,11 @@
 #pragma once
 
-#include "SynTree.h"
-#include "Visitor.h"
-#include "Mutator.h"
+#include <iosfwd>     // for ostream
+#include <string>     // for string
+
+#include "Mutator.h"  // for Mutator
+#include "Visitor.h"  // for Visitor
+
+class Type;
 
 class Constant {
Index: src/SynTree/DeclStmt.cc
===================================================================
--- src/SynTree/DeclStmt.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/DeclStmt.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// DeclStmt.cc -- 
+// DeclStmt.cc --
 //
 // Author           : Richard C. Bilson
@@ -14,7 +14,12 @@
 //
 
-#include "Statement.h"
-#include "Declaration.h"
-#include "Common/utility.h"
+#include <cassert>           // for assert
+#include <list>              // for list
+#include <ostream>           // for operator<<, ostream
+
+#include "Common/utility.h"  // for maybeClone
+#include "Declaration.h"     // for Declaration
+#include "Statement.h"       // for DeclStmt, Statement
+#include "SynTree/Label.h"   // for Label
 
 DeclStmt::DeclStmt( std::list<Label> labels, Declaration *decl ) : Statement( labels ), decl( decl ) {
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Declaration.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,12 +14,15 @@
 //
 
-#include <string>
-#include <map>
+#include <map>                       // for _Rb_tree_const_iterator, map<>::...
+#include <ostream>                   // for ostream, operator<<, basic_ostre...
+#include <string>                    // for string
+#include <utility>                   // for pair
+
+#include "Common/utility.h"          // for maybeClone
 #include "Declaration.h"
-#include "Expression.h"
-#include "Initializer.h"
-#include "Type.h"
-#include "Attribute.h"
-#include "Common/utility.h"
+#include "SynTree/BaseSyntaxNode.h"  // for BaseSyntaxNode
+#include "SynTree/Statement.h"       // for AsmStmt
+#include "SynTree/SynTree.h"         // for UniqueId
+#include "Type.h"                    // for Type, Type::StorageClasses
 
 static UniqueId lastUniqueId = 0;
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Declaration.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,12 +16,24 @@
 #pragma once
 
-#include <string>
-
-#include "BaseSyntaxNode.h"
-#include "Mutator.h"
-#include "Visitor.h"
-#include "SynTree.h"
-#include "Parser/LinkageSpec.h"
-#include "Parser/ParseNode.h"
+#include <cassert>               // for assertf
+#include <iosfwd>                // for ostream
+#include <list>                  // for list
+#include <string>                // for string, operator+, allocator, to_string
+
+#include "BaseSyntaxNode.h"      // for BaseSyntaxNode
+#include "Mutator.h"             // for Mutator
+#include "Parser/LinkageSpec.h"  // for Spec, Cforall
+#include "Parser/ParseNode.h"    // for DeclarationNode, DeclarationNode::Ag...
+#include "SynTree.h"             // for UniqueId
+#include "SynTree/Type.h"        // for Type, Type::StorageClasses, Type::Fu...
+#include "Visitor.h"             // for Visitor
+
+class AsmStmt;
+class Attribute;
+class CompoundStmt;
+class ConstantExpr;
+class Expression;
+class Initializer;
+class TypeDecl;
 
 class Declaration : public BaseSyntaxNode {
Index: src/SynTree/DeclarationWithType.cc
===================================================================
--- src/SynTree/DeclarationWithType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/DeclarationWithType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,8 +14,13 @@
 //
 
-#include "Declaration.h"
-#include "Type.h"
-#include "Attribute.h"
-#include "Common/utility.h"
+#include <list>                  // for list
+#include <string>                // for string
+
+#include "Attribute.h"           // for Attribute
+#include "Common/utility.h"      // for cloneAll, deleteAll, maybeClone
+#include "Declaration.h"         // for DeclarationWithType, Declaration
+#include "Parser/LinkageSpec.h"  // for Spec
+#include "SynTree/Expression.h"  // for ConstantExpr
+#include "Type.h"                // for Type, Type::FuncSpecifiers, Type::St...
 
 DeclarationWithType::DeclarationWithType( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, Type::FuncSpecifiers fs )
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Expression.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,23 +14,20 @@
 //
 
-#include <iostream>
-#include <cassert>
-#include <list>
-#include <algorithm>
-
-#include <iterator>
-
-#include "Declaration.h"
-#include "Expression.h"
-#include "Initializer.h"
-#include "Statement.h"
-#include "Type.h"
-#include "TypeSubstitution.h"
-#include "VarExprReplacer.h"
-
-#include "Common/utility.h"
-#include "Common/PassVisitor.h"
-
-#include "InitTweak/InitTweak.h"
+#include "SynTree/Expression.h"
+
+#include <cassert>                   // for assert, assertf
+#include <iostream>                  // for ostream, operator<<, basic_ostream
+#include <list>                      // for list, _List_iterator, list<>::co...
+
+#include "Common/utility.h"          // for maybeClone, cloneAll, deleteAll
+#include "Declaration.h"             // for ObjectDecl, DeclarationWithType
+#include "Expression.h"              // for Expression, ImplicitCopyCtorExpr
+#include "InitTweak/InitTweak.h"     // for getCallArg, getPointerBase
+#include "Initializer.h"             // for Designation, Initializer
+#include "Statement.h"               // for CompoundStmt, ExprStmt, Statement
+#include "SynTree/BaseSyntaxNode.h"  // for BaseSyntaxNode
+#include "SynTree/Constant.h"        // for Constant
+#include "Type.h"                    // for Type, BasicType, Type::Qualifiers
+#include "TypeSubstitution.h"        // for TypeSubstitution
 
 
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Expression.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -13,16 +13,19 @@
 // Update Count     : 44
 //
-
 #pragma once
 
-#include <map>
-#include <memory>
-
-#include "BaseSyntaxNode.h"
-#include "Constant.h"
-#include "Mutator.h"
-#include "SynTree.h"
-#include "Visitor.h"
-#include "Common/UniqueName.h"
+#include <iosfwd>                 // for ostream
+#include <list>                   // for list, list<>::iterator
+#include <map>                    // for map, map<>::value_compare
+#include <memory>                 // for allocator, unique_ptr
+#include <string>                 // for string
+
+#include "BaseSyntaxNode.h"       // for BaseSyntaxNode
+#include "Constant.h"             // for Constant
+#include "Initializer.h"          // for Designation (ptr only), Initializer
+#include "Mutator.h"              // for Mutator
+#include "SynTree.h"              // for UniqueId
+#include "Visitor.h"              // for Visitor
+
 
 /// Expression is the root type for all expressions
@@ -57,4 +60,5 @@
 
 struct ParamEntry;
+
 typedef std::map< UniqueId, ParamEntry > InferredParams;
 
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/FunctionDecl.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,13 +14,16 @@
 //
 
-#include <cassert>
+#include <cassert>               // for assert
+#include <list>                  // for list
+#include <ostream>               // for operator<<, ostream, basic_ostream
+#include <string>                // for operator<<, string, char_traits, ope...
 
-#include "Declaration.h"
-#include "Statement.h"
-#include "Type.h"
-#include "Attribute.h"
-#include "Common/utility.h"
-#include "InitTweak/InitTweak.h"
-#include "CodeGen/FixMain.h"
+#include "Attribute.h"           // for Attribute
+#include "CodeGen/FixMain.h"     // for FixMain
+#include "Common/utility.h"      // for maybeClone, printAll
+#include "Declaration.h"         // for FunctionDecl, FunctionDecl::Parent
+#include "Parser/LinkageSpec.h"  // for Spec, linkageName, Cforall
+#include "Statement.h"           // for CompoundStmt
+#include "Type.h"                // for Type, FunctionType, Type::FuncSpecif...
 
 extern bool translation_unit_nomain;
Index: src/SynTree/FunctionType.cc
===================================================================
--- src/SynTree/FunctionType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/FunctionType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,10 +14,14 @@
 //
 
-#include <algorithm>
+#include <list>              // for list
+#include <ostream>           // for operator<<, basic_ostream, ostream, endl
+#include <string>            // for operator<<, char_traits, string
 
-#include "Type.h"
-#include "Declaration.h"
-#include "Common/utility.h"
-#include "Tuples/Tuples.h"
+#include "Common/utility.h"  // for cloneAll, deleteAll, printAll
+#include "Declaration.h"     // for DeclarationWithType
+#include "Tuples/Tuples.h"   // for isTtype
+#include "Type.h"            // for FunctionType, Type, Type::Qualifiers
+
+class Attribute;
 
 FunctionType::FunctionType( const Type::Qualifiers &tq, bool isVarArgs, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), isVarArgs( isVarArgs ) {
Index: src/SynTree/Initializer.cc
===================================================================
--- src/SynTree/Initializer.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Initializer.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -15,7 +15,13 @@
 
 #include "Initializer.h"
-#include "Expression.h"
-#include "Statement.h"
-#include "Common/utility.h"
+
+#include <cassert>                   // for assertf
+#include <ostream>                   // for ostream, operator<<, basic_ostream
+#include <string>                    // for operator<<, string, char_traits
+
+#include "Common/utility.h"          // for maybeClone, cloneAll, deleteAll
+#include "Expression.h"              // for Expression
+#include "Statement.h"               // for Statement
+#include "SynTree/BaseSyntaxNode.h"  // for BaseSyntaxNode
 
 Designation::Designation( const std::list< Expression * > & designators ) : designators( designators ) {}
Index: src/SynTree/Initializer.h
===================================================================
--- src/SynTree/Initializer.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Initializer.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,11 +16,13 @@
 #pragma once
 
-#include <cassert>
+#include <iosfwd>            // for ostream
+#include <list>              // for list, list<>::const_iterator, list<>::it...
 
-#include "BaseSyntaxNode.h"
-#include "Mutator.h"
-#include "SynTree.h"
-#include "Type.h"
-#include "Visitor.h"
+#include "BaseSyntaxNode.h"  // for BaseSyntaxNode
+#include "Mutator.h"         // for Mutator
+#include "Visitor.h"         // for Visitor
+
+class Expression;
+class Statement;
 
 // Designation: list of designator (NameExpr, VariableExpr, and ConstantExpr) expressions that specify an object being initialized.
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Mutator.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,14 +14,17 @@
 //
 
-#include <cassert>
+#include <cassert>             // for assert
+#include <list>                // for list
+
+#include "Declaration.h"       // for ObjectDecl, Declaration, DeclarationWi...
+#include "Expression.h"        // for Expression, ConstantExpr, ConditionalExpr
+#include "Initializer.h"       // for ConstructorInit, Initializer, Designation
 #include "Mutator.h"
-#include "Initializer.h"
-#include "Statement.h"
-#include "Type.h"
-#include "Declaration.h"
-#include "Expression.h"
-#include "Constant.h"
-#include "Common/utility.h"
-#include "TypeSubstitution.h"
+#include "Statement.h"         // for Statement, CatchStmt, AsmStmt, ForStmt
+#include "Type.h"              // for Type, Type::ForallList, AttrType, Arra...
+#include "TypeSubstitution.h"  // for TypeSubstitution
+
+class Constant;
+class Subrange;
 
 Mutator::Mutator() {}
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Mutator.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -13,10 +13,10 @@
 // Update Count     : 16
 //
-#include <cassert>
+#pragma once
 
-#include "SynTree.h"
-#include "Common/SemanticError.h"
+#include <cassert>                 // for assert
 
-#pragma once
+#include "Common/SemanticError.h"  // for SemanticError
+#include "SynTree/SynTree.h"       // for AST nodes
 
 class Mutator {
Index: src/SynTree/NamedTypeDecl.cc
===================================================================
--- src/SynTree/NamedTypeDecl.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/NamedTypeDecl.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,12 @@
 //
 
-#include "Declaration.h"
-#include "Type.h"
-#include "Common/utility.h"
+#include <list>                  // for list
+#include <ostream>               // for operator<<, ostream, basic_ostream
+#include <string>                // for operator<<, string, char_traits, ope...
+
+#include "Common/utility.h"      // for printAll, cloneAll, deleteAll, maybe...
+#include "Declaration.h"         // for NamedTypeDecl, DeclarationWithType
+#include "Parser/LinkageSpec.h"  // for Spec, Cforall, linkageName
+#include "Type.h"                // for Type, Type::StorageClasses
 
 NamedTypeDecl::NamedTypeDecl( const std::string &name, Type::StorageClasses scs, Type *base )
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/ObjectDecl.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,11 +14,15 @@
 //
 
-#include "Declaration.h"
-#include "Type.h"
-#include "Initializer.h"
-#include "Expression.h"
-#include "Attribute.h"
-#include "Common/utility.h"
-#include "Statement.h"
+#include <list>                  // for list
+#include <ostream>               // for operator<<, ostream, basic_ostream
+#include <string>                // for operator<<, string, char_traits, ope...
+
+#include "Attribute.h"           // for Attribute
+#include "Common/utility.h"      // for maybeClone, printAll
+#include "Declaration.h"         // for ObjectDecl, ObjectDecl::Parent
+#include "Expression.h"          // for Expression
+#include "Initializer.h"         // for Initializer
+#include "Parser/LinkageSpec.h"  // for Spec, linkageName, Cforall
+#include "Type.h"                // for Type, Type::StorageClasses, Type::Fu...
 
 ObjectDecl::ObjectDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, Type::FuncSpecifiers fs )
Index: src/SynTree/PointerType.cc
===================================================================
--- src/SynTree/PointerType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/PointerType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,12 @@
 //
 
-#include "Type.h"
-#include "Expression.h"
-#include "Common/utility.h"
+#include <list>              // for list
+#include <ostream>           // for operator<<, ostream
+
+#include "Common/utility.h"  // for maybeClone
+#include "Expression.h"      // for Expression
+#include "Type.h"            // for PointerType, Type, Type::Qualifiers
+
+class Attribute;
 
 PointerType::PointerType( const Type::Qualifiers &tq, Type *base, const std::list< Attribute * > & attributes )
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/ReferenceToType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,12 +14,16 @@
 //
 
-#include <string>
-#include <cassert>
+#include <stddef.h>          // for NULL
+#include <cassert>           // for assert
+#include <list>              // for list, _List_const_iterator, list<>::cons...
+#include <ostream>           // for operator<<, basic_ostream, ostream, endl
+#include <string>            // for string, operator<<, char_traits, operator==
 
-#include "Type.h"
-#include "Declaration.h"
-#include "Expression.h"
-#include "TypeSubstitution.h"
-#include "Common/utility.h"
+#include "Common/utility.h"  // for printAll, cloneAll, deleteAll
+#include "Declaration.h"     // for StructDecl, UnionDecl, EnumDecl, Declara...
+#include "Expression.h"      // for Expression
+#include "Type.h"            // for TypeInstType, StructInstType, UnionInstType
+
+class Attribute;
 
 ReferenceToType::ReferenceToType( const Type::Qualifiers &tq, const std::string &name, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), name( name ), hoistType( false ) {
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Statement.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,14 +14,18 @@
 //
 
-#include <functional>
-#include <algorithm>
-#include <iostream>
-#include <list>
-#include <cassert>
-
-#include "Statement.h"
-#include "Expression.h"
-#include "Declaration.h"
-#include "Common/SemanticError.h"
+#include "SynTree/Statement.h"
+
+#include <stddef.h>                // for NULL
+#include <cassert>                 // for assert, assertf
+#include <iostream>                // for operator<<, basic_ostream, endl
+#include <list>                    // for list, list<>::const_iterator, _Lis...
+#include <string>                  // for operator<<, string, char_traits
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for maybeClone, cloneAll, deleteAll
+#include "Declaration.h"           // for Declaration
+#include "Expression.h"            // for Expression, ConstantExpr
+#include "Statement.h"             // for Statement, ForStmt, AsmStmt, Catch...
+#include "SynTree/Label.h"         // for Label, operator<<
 
 using std::string;
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Statement.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,11 +16,19 @@
 #pragma once
 
-#include "BaseSyntaxNode.h"
-#include "Label.h"
-#include "Mutator.h"
-#include "SynTree.h"
-#include "Type.h"
-#include "Visitor.h"
-#include "Common/SemanticError.h"
+#include <iosfwd>                  // for ostream
+#include <list>                    // for list
+#include <memory>                  // for allocator
+
+#include "BaseSyntaxNode.h"        // for BaseSyntaxNode
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Label.h"                 // for Label
+#include "Mutator.h"               // for Mutator
+#include "Visitor.h"               // for Visitor
+
+class CatchStmt;
+class ConstantExpr;
+class Declaration;
+class Expression;
+class FinallyStmt;
 
 class Statement : public BaseSyntaxNode {
Index: src/SynTree/TupleExpr.cc
===================================================================
--- src/SynTree/TupleExpr.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/TupleExpr.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,10 +14,17 @@
 //
 
-#include "Expression.h"
-#include "Common/utility.h"
-#include "Type.h"
-#include "Declaration.h"
-#include "Tuples/Tuples.h"
-#include "VarExprReplacer.h"
+#include <cassert>              // for assert, safe_dynamic_cast, assertf
+#include <iterator>             // for next
+#include <list>                 // for list, _List_iterator
+#include <ostream>              // for ostream, operator<<, basic_ostream, endl
+#include <string>               // for operator<<, string, char_traits
+
+#include "Common/utility.h"     // for cloneAll, deleteAll, printAll, toString
+#include "Declaration.h"        // for ObjectDecl
+#include "Expression.h"         // for Expression, TupleExpr, TupleIndexExpr
+#include "SynTree/Label.h"      // for Label, noLabels
+#include "SynTree/Statement.h"  // for CompoundStmt, DeclStmt, ExprStmt, Sta...
+#include "Tuples/Tuples.h"      // for makeTupleType
+#include "Type.h"               // for TupleType, Type
 
 UntypedTupleExpr::UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) {
Index: src/SynTree/TupleType.cc
===================================================================
--- src/SynTree/TupleType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/TupleType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,9 +14,14 @@
 //
 
-#include "Declaration.h"
-#include "Initializer.h"
-#include "Type.h"
-#include "Common/utility.h"
-#include "Parser/LinkageSpec.h"
+#include <list>                  // for list
+#include <ostream>               // for operator<<, ostream, basic_ostream
+
+#include "Common/utility.h"      // for cloneAll, deleteAll, printAll
+#include "Declaration.h"         // for Declaration, ObjectDecl
+#include "Initializer.h"         // for ListInit
+#include "Parser/LinkageSpec.h"  // for Cforall
+#include "Type.h"                // for TupleType, Type, Type::Qualifiers
+
+class Attribute;
 
 TupleType::TupleType( const Type::Qualifiers &tq, const std::list< Type * > & types, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), types( types ) {
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Type.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,11 +14,9 @@
 //
 
-#include "SynTree.h"
-#include "Visitor.h"
+#include "Attribute.h"               // for Attribute
+#include "Common/utility.h"          // for cloneAll, deleteAll, printAll
+#include "InitTweak/InitTweak.h"     // for getPointerBase
+#include "SynTree/BaseSyntaxNode.h"  // for BaseSyntaxNode
 #include "Type.h"
-#include "Declaration.h"
-#include "Attribute.h"
-#include "InitTweak/InitTweak.h"
-#include "Common/utility.h"
 
 using namespace std;
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Type.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,9 +16,15 @@
 #pragma once
 
-#include "BaseSyntaxNode.h"
-#include "Mutator.h"
-#include "SynTree.h"
-#include "Visitor.h"
-#include <strings.h>									// ffs
+#include <strings.h>         // for ffs
+#include <cassert>           // for assert, assertf
+#include <list>              // for list, _List_iterator
+#include <ostream>           // for ostream, operator<<, basic_ostream
+#include <string>            // for string
+
+#include "BaseSyntaxNode.h"  // for BaseSyntaxNode
+#include "Common/utility.h"  // for operator+
+#include "Mutator.h"         // for Mutator
+#include "SynTree.h"         // for AST nodes
+#include "Visitor.h"         // for Visitor
 
 class Type : public BaseSyntaxNode {
Index: src/SynTree/TypeDecl.cc
===================================================================
--- src/SynTree/TypeDecl.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/TypeDecl.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,10 @@
 //
 
-#include "Declaration.h"
-#include "Type.h"
-#include "Common/utility.h"
+#include <ostream>           // for ostream, operator<<, basic_ostream, basi...
+#include <string>            // for string, char_traits, operator+, operator<<
+
+#include "Common/utility.h"  // for maybeClone
+#include "Declaration.h"     // for TypeDecl, TypeDecl::Data, TypeDecl::Kind...
+#include "Type.h"            // for Type, Type::StorageClasses
 
 TypeDecl::TypeDecl( const std::string &name, Type::StorageClasses scs, Type *type, Kind kind, Type * init ) : Parent( name, scs, type ), init( init ), sized( kind == Any || kind == Ttype ), kind( kind ) {
Index: src/SynTree/TypeExpr.cc
===================================================================
--- src/SynTree/TypeExpr.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/TypeExpr.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,9 @@
 //
 
-#include "Expression.h"
-#include "Type.h"
-#include "Common/utility.h"
+#include <iosfwd>            // for ostream
+
+#include "Common/utility.h"  // for maybeClone
+#include "Expression.h"      // for TypeExpr, Expression
+#include "Type.h"            // for Type
 
 TypeExpr::TypeExpr( Type *type ) : type( type ) {
Index: src/SynTree/TypeSubstitution.cc
===================================================================
--- src/SynTree/TypeSubstitution.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/TypeSubstitution.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,5 +14,7 @@
 //
 
-#include "Type.h"
+#include <ostream>  // for ostream, basic_ostream, operator<<, endl
+
+#include "Type.h"   // for TypeInstType, Type, StructInstType, UnionInstType
 #include "TypeSubstitution.h"
 
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/TypeSubstitution.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,11 +16,17 @@
 #pragma once
 
-#include <map>
-#include <set>
-#include <cassert>
+#include <cassert>                 // for assert
+#include <iosfwd>                  // for ostream
+#include <list>                    // for list<>::iterator, _List_iterator
+#include <map>                     // for _Rb_tree_iterator, map, map<>::val...
+#include <set>                     // for set
+#include <string>                  // for string, operator!=
+#include <utility>                 // for pair
 
-#include "SynTree/Mutator.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
+#include "Common/SemanticError.h"  // for SemanticError
+#include "SynTree/Declaration.h"   // for TypeDecl, Declaration (ptr only)
+#include "SynTree/Expression.h"    // for Expression (ptr only), NameExpr (p...
+#include "SynTree/Mutator.h"       // for Mutator
+#include "SynTree/Type.h"          // for Type, ArrayType (ptr only), BasicT...
 
 class TypeSubstitution : public Mutator {
Index: src/SynTree/TypeofType.cc
===================================================================
--- src/SynTree/TypeofType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/TypeofType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,7 +14,12 @@
 //
 
-#include "Type.h"
-#include "Expression.h"
-#include "Common/utility.h"
+#include <list>              // for list
+#include <ostream>           // for operator<<, ostream
+
+#include "Common/utility.h"  // for maybeClone
+#include "Expression.h"      // for Expression
+#include "Type.h"            // for TypeofType, Type, Type::Qualifiers
+
+class Attribute;
 
 TypeofType::TypeofType( const Type::Qualifiers &tq, Expression *expr, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), expr( expr ) {
Index: src/SynTree/VarArgsType.cc
===================================================================
--- src/SynTree/VarArgsType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/VarArgsType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,5 +14,10 @@
 //
 
-#include "Type.h"
+#include <list>     // for list
+#include <ostream>  // for operator<<, ostream
+
+#include "Type.h"   // for Type, VarArgsType, Type::Qualifiers
+
+class Attribute;
 
 VarArgsType::VarArgsType() : Type( Type::Qualifiers(), std::list< Attribute * >() ) {}
Index: src/SynTree/VarExprReplacer.cc
===================================================================
--- src/SynTree/VarExprReplacer.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/VarExprReplacer.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,6 +14,8 @@
 //
 
-#include "Declaration.h"
-#include "Expression.h"
+#include <iostream>       // for operator<<, basic_ostream, ostream, basic_o...
+
+#include "Declaration.h"  // for operator<<, DeclarationWithType
+#include "Expression.h"   // for VariableExpr
 #include "VarExprReplacer.h"
 
Index: src/SynTree/VarExprReplacer.h
===================================================================
--- src/SynTree/VarExprReplacer.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/VarExprReplacer.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,7 +16,10 @@
 #pragma once
 
-#include <map>
+#include <map>                // for map, map<>::value_compare
 
-#include "SynTree/SynTree.h"
+#include "SynTree/Visitor.h"  // for Visitor
+
+class DeclarationWithType;
+class VariableExpr;
 
 /// Visitor that replaces the declarations that VariableExprs refer to, according to the supplied mapping
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Visitor.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,12 +14,16 @@
 //
 
-#include <cassert>
+#include <cassert>        // for assert
+#include <list>           // for list
+
+#include "Constant.h"     // for Constant
+#include "Declaration.h"  // for DeclarationWithType, ObjectDecl, Declaration
+#include "Expression.h"   // for Expression, ConstantExpr, ImplicitCopyCtorExpr
+#include "Initializer.h"  // for Initializer, Designation, ConstructorInit
+#include "Statement.h"    // for Statement, CatchStmt, AsmStmt, CompoundStmt
+#include "Type.h"         // for Type, Type::ForallList, AttrType, FunctionType
 #include "Visitor.h"
-#include "Initializer.h"
-#include "Statement.h"
-#include "Type.h"
-#include "Declaration.h"
-#include "Expression.h"
-#include "Constant.h"
+
+class Subrange;
 
 Visitor::Visitor() {}
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/Visitor.h	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -16,7 +16,6 @@
 #pragma once
 
-#include "SynTree.h"
-#include "Common/SemanticError.h"
-#include "Common/CompilerError.h"
+#include "Common/SemanticError.h"  // for SemanticError
+#include "SynTree.h"               // for AST nodes
 
 class Visitor {
Index: src/SynTree/VoidType.cc
===================================================================
--- src/SynTree/VoidType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/VoidType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,5 +14,10 @@
 //
 
-#include "Type.h"
+#include <list>     // for list
+#include <ostream>  // for operator<<, ostream
+
+#include "Type.h"   // for VoidType, Type, Type::Qualifiers
+
+class Attribute;
 
 VoidType::VoidType( const Type::Qualifiers &tq, const std::list< Attribute * > & attributes ) : Type( tq, attributes ) {
Index: src/SynTree/ZeroOneType.cc
===================================================================
--- src/SynTree/ZeroOneType.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/SynTree/ZeroOneType.cc	(revision ea6332d2c7319372654f557cb69ec651fdc92331)
@@ -14,5 +14,10 @@
 //
 
-#include "Type.h"
+#include <list>     // for list
+#include <ostream>  // for operator<<, ostream
+
+#include "Type.h"   // for Type, Type::Qualifiers, OneType, ZeroType
+
+class Attribute;
 
 ZeroType::ZeroType() : Type( Type::Qualifiers(), std::list< Attribute * >() ) {}
