Index: src/ControlStruct/ExceptTranslate.cc
===================================================================
--- src/ControlStruct/ExceptTranslate.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/ExceptTranslate.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -15,11 +15,25 @@
 
 #include "ExceptTranslate.h"
-#include "Common/PassVisitor.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Type.h"
-#include "SynTree/Attribute.h"
-#include "SynTree/VarExprReplacer.h"
+
+#include <stddef.h>                   // for NULL
+#include <cassert>                    // for assert, assertf
+#include <iterator>                   // for back_inserter, inserter
+#include <string>                     // for string, operator==
+
+#include "Common/PassVisitor.h"       // for PassVisitor, WithGuards
+#include "Common/SemanticError.h"     // for SemanticError
+#include "Common/utility.h"           // for CodeLocation
+#include "Parser/LinkageSpec.h"       // for Cforall
+#include "SynTree/Attribute.h"        // for Attribute
+#include "SynTree/Constant.h"         // for Constant
+#include "SynTree/Declaration.h"      // for ObjectDecl, FunctionDecl, Struc...
+#include "SynTree/Expression.h"       // for UntypedExpr, ConstantExpr, Name...
+#include "SynTree/Initializer.h"      // for SingleInit, ListInit
+#include "SynTree/Label.h"            // for Label, noLabels
+#include "SynTree/Mutator.h"          // for mutateAll
+#include "SynTree/Statement.h"        // for CompoundStmt, CatchStmt, ThrowStmt
+#include "SynTree/Type.h"             // for FunctionType, Type, noQualifiers
+#include "SynTree/VarExprReplacer.h"  // for VarExprReplacer, VarExprReplace...
+#include "SynTree/Visitor.h"          // for acceptAll
 
 namespace ControlStruct {
Index: src/ControlStruct/ExceptTranslate.h
===================================================================
--- src/ControlStruct/ExceptTranslate.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/ExceptTranslate.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,6 +16,7 @@
 #pragma once
 
-#include <list>
-#include "SynTree/SynTree.h"
+#include <list>  // for list
+
+class Declaration;
 
 namespace ControlStruct {
Index: src/ControlStruct/ForExprMutator.cc
===================================================================
--- src/ControlStruct/ForExprMutator.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/ForExprMutator.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,7 +14,9 @@
 //
 
-#include "SynTree/Mutator.h"
-#include "SynTree/Statement.h"
+#include <list>                 // for list, _List_iterator, list<>::iterator
+
 #include "ForExprMutator.h"
+#include "SynTree/Label.h"      // for Label
+#include "SynTree/Statement.h"  // for Statement (ptr only), ForStmt, Compou...
 
 namespace ControlStruct {
Index: src/ControlStruct/ForExprMutator.h
===================================================================
--- src/ControlStruct/ForExprMutator.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/ForExprMutator.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,6 +16,6 @@
 #pragma once
 
-#include "SynTree/Mutator.h"
-#include "Common/utility.h"
+class ForStmt;
+class Statement;
 
 namespace ControlStruct {
Index: src/ControlStruct/LabelFixer.cc
===================================================================
--- src/ControlStruct/LabelFixer.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/LabelFixer.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,15 +14,15 @@
 //
 
-#include <list>
-#include <cassert>
+#include <cassert>                         // for assert
+#include <list>                            // for list, _List_iterator, list...
+#include <string>                          // for operator+, string, operator==
+#include <utility>                         // for pair
 
+#include "ControlStruct/LabelGenerator.h"  // for LabelGenerator
 #include "LabelFixer.h"
-#include "MLEMutator.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Declaration.h"
-#include "Common/utility.h"
-
-#include <iostream>
+#include "MLEMutator.h"                    // for MLEMutator
+#include "SynTree/Declaration.h"           // for FunctionDecl
+#include "SynTree/Expression.h"            // for NameExpr, Expression, Unty...
+#include "SynTree/Statement.h"             // for Statement, BranchStmt, Com...
 
 namespace ControlStruct {
Index: src/ControlStruct/LabelFixer.h
===================================================================
--- src/ControlStruct/LabelFixer.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/LabelFixer.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,13 +16,16 @@
 #pragma once
 
-#include "Common/utility.h"
-#include "SynTree/SynTree.h"
-#include "SynTree/Visitor.h"
-#include "SynTree/Label.h"
-#include "LabelGenerator.h"
-#include <map>
+#include <list>                    // for list
+#include <map>                     // for map
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "SynTree/Label.h"         // for Label
+#include "SynTree/Visitor.h"       // for Visitor
+#include "SynTree/SynTree.h"       // for Visitor Nodes
 
 namespace ControlStruct {
 	/// normalizes label definitions and generates multi-level exit labels
+class LabelGenerator;
+
 	class LabelFixer final : public Visitor {
 		typedef Visitor Parent;
Index: src/ControlStruct/LabelGenerator.cc
===================================================================
--- src/ControlStruct/LabelGenerator.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/LabelGenerator.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,11 +14,11 @@
 //
 
-#include <iostream>
-#include <sstream>
+#include <iostream>             // for operator<<, basic_ostream, ostringstream
+#include <list>                 // for list
 
 #include "LabelGenerator.h"
-#include "SynTree/Label.h"
-#include "SynTree/Attribute.h"
-#include "SynTree/Statement.h"
+#include "SynTree/Attribute.h"  // for Attribute
+#include "SynTree/Label.h"      // for Label, operator<<
+#include "SynTree/Statement.h"  // for Statement
 
 namespace ControlStruct {
Index: src/ControlStruct/LabelGenerator.h
===================================================================
--- src/ControlStruct/LabelGenerator.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/LabelGenerator.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,6 +16,9 @@
 #pragma once
 
-#include "SynTree/SynTree.h"
-#include <string>
+#include <string>           // for string
+
+#include "SynTree/Label.h"  // for Label
+
+class Statement;
 
 namespace ControlStruct {
Index: src/ControlStruct/MLEMutator.cc
===================================================================
--- src/ControlStruct/MLEMutator.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/MLEMutator.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -20,11 +20,15 @@
 // where these labels are generated.
 
-#include <cassert>
-#include <algorithm>
-
+#include <ext/alloc_traits.h>              // for __alloc_traits<>::value_type
+#include <algorithm>                       // for find, find_if
+#include <cassert>                         // for assert, assertf
+#include <memory>                          // for allocator_traits<>::value_...
+
+#include "Common/utility.h"                // for toString, operator+
+#include "ControlStruct/LabelGenerator.h"  // for LabelGenerator
 #include "MLEMutator.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Attribute.h"
+#include "SynTree/Attribute.h"             // for Attribute
+#include "SynTree/Expression.h"            // for Expression
+#include "SynTree/Statement.h"             // for BranchStmt, CompoundStmt
 
 namespace ControlStruct {
Index: src/ControlStruct/MLEMutator.h
===================================================================
--- src/ControlStruct/MLEMutator.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/MLEMutator.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,17 +16,19 @@
 #pragma once
 
-#include <map>
-#include <list>
+#include <list>                    // for list
+#include <map>                     // for map
+#include <string>                  // for string
 
-#include "Common/utility.h"
-#include "SynTree/SynTree.h"
-#include "SynTree/Mutator.h"
-#include "SynTree/Label.h"
-
-#include "LabelGenerator.h"
+#include "Common/SemanticError.h"  // for SemanticError
+#include "SynTree/Label.h"         // for Label
+#include "SynTree/Mutator.h"       // for Mutator
+#include "SynTree/SynTree.h"       // for Visitor Nodes
 
 namespace ControlStruct {
+class LabelGenerator;
+
 	class MLEMutator : public Mutator {
 		class Entry;
+
 		typedef Mutator Parent;
 	  public:
Index: src/ControlStruct/Mutate.cc
===================================================================
--- src/ControlStruct/Mutate.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/Mutate.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,19 +14,18 @@
 //
 
-#include <algorithm>
-#include <iostream>
-#include <cassert>
-#include <list>
+#include <iterator>                // for back_inserter, inserter
+#include <list>                    // for list
 
+#include "Common/SemanticError.h"  // for SemanticError
+#include "ForExprMutator.h"        // for ForExprMutator
+#include "LabelFixer.h"            // for LabelFixer
 #include "Mutate.h"
-#include "LabelFixer.h"
-#include "MLEMutator.h"
-#include "ForExprMutator.h"
+#include "PassVisitor.h"           // for mutateAll
+#include "SynTree/Declaration.h"   // for Declaration
+#include "SynTree/Mutator.h"       // for mutateAll
 //#include "ExceptMutator.h"
 
-#include "Common/utility.h"
-#include "Common/PassVisitor.h"
-
-#include "SynTree/Visitor.h"
+#include "Common/PassVisitor.h"    // for PassVisitor
+#include "SynTree/Visitor.h"       // for acceptAll
 
 using namespace std;
Index: src/ControlStruct/Mutate.h
===================================================================
--- src/ControlStruct/Mutate.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/ControlStruct/Mutate.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,8 +16,7 @@
 #pragma once
 
-#include <list>
-#include <iostream>
+#include <list>  // for list
 
-#include "SynTree/Declaration.h"
+class Declaration;
 
 namespace ControlStruct {
Index: src/InitTweak/FixGlobalInit.cc
===================================================================
--- src/InitTweak/FixGlobalInit.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/InitTweak/FixGlobalInit.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -15,13 +15,22 @@
 
 #include "FixGlobalInit.h"
-#include "InitTweak.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Visitor.h"
-#include "SynTree/Attribute.h"
-#include <algorithm>
+
+#include <assert.h>                // for assert
+#include <stddef.h>                // for NULL
+#include <algorithm>               // for replace_if
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/UniqueName.h"     // for UniqueName
+#include "InitTweak.h"             // for isIntrinsicSingleArgCallStmt
+#include "Parser/LinkageSpec.h"    // for C
+#include "SynTree/Attribute.h"     // for Attribute
+#include "SynTree/Constant.h"      // for Constant
+#include "SynTree/Declaration.h"   // for FunctionDecl, ObjectDecl, Declaration
+#include "SynTree/Expression.h"    // for ConstantExpr, Expression (ptr only)
+#include "SynTree/Initializer.h"   // for ConstructorInit, Initializer
+#include "SynTree/Label.h"         // for Label, noLabels
+#include "SynTree/Statement.h"     // for CompoundStmt, Statement (ptr only)
+#include "SynTree/Type.h"          // for Type, Type::StorageClasses, Functi...
+#include "SynTree/Visitor.h"       // for acceptAll, Visitor
 
 namespace InitTweak {
Index: src/InitTweak/FixGlobalInit.h
===================================================================
--- src/InitTweak/FixGlobalInit.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/InitTweak/FixGlobalInit.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,9 +16,8 @@
 #pragma once
 
-#include <string>
-#include <list>
+#include <list>    // for list
+#include <string>  // for string
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Declaration.h"
+class Declaration;
 
 namespace InitTweak {
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/InitTweak/FixInit.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,32 +14,49 @@
 //
 
-#include <stack>
-#include <list>
-#include <iterator>
-#include <algorithm>
-#include <unordered_map>
-#include <unordered_set>
-
-#include "InitTweak.h"
-#include "GenInit.h"
+#include <stddef.h>                    // for NULL
+#include <algorithm>                   // for set_difference, copy_if
+#include <cassert>                     // for assert, safe_dynamic_cast
+#include <iostream>                    // for operator<<, ostream, basic_ost...
+#include <iterator>                    // for insert_iterator, back_inserter
+#include <list>                        // for _List_iterator, list, list<>::...
+#include <map>                         // for _Rb_tree_iterator, _Rb_tree_co...
+#include <memory>                      // for allocator_traits<>::value_type
+#include <set>                         // for set, set<>::value_type
+#include <unordered_map>               // for unordered_map, unordered_map<>...
+#include <unordered_set>               // for unordered_set
+#include <utility>                     // for pair
+
+#include "CodeGen/GenType.h"           // for genPrettyType
+#include "Common/PassVisitor.h"        // for PassVisitor, WithStmtsToAdd
+#include "Common/SemanticError.h"      // for SemanticError
+#include "Common/UniqueName.h"         // for UniqueName
+#include "Common/utility.h"            // for CodeLocation, ValueGuard, toSt...
+#include "FixGlobalInit.h"             // for fixGlobalInit
 #include "FixInit.h"
-#include "FixGlobalInit.h"
-#include "CodeGen/GenType.h"  // for warning/error messages
-#include "Common/PassVisitor.h"
-#include "GenPoly/DeclMutator.h"
-#include "GenPoly/PolyMutator.h"
-#include "ResolvExpr/Resolver.h"
-#include "ResolvExpr/typeops.h"
-#include "SymTab/Autogen.h"
-#include "SymTab/Indexer.h"
-#include "SynTree/AddStmtVisitor.h"
-#include "SynTree/Attribute.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Mutator.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Type.h"
-#include "Tuples/Tuples.h"
+#include "GenInit.h"                   // for genCtorDtor
+#include "GenPoly/DeclMutator.h"       // for DeclMutator
+#include "GenPoly/GenPoly.h"           // for getFunctionType
+#include "GenPoly/PolyMutator.h"       // for PolyMutator
+#include "InitTweak.h"                 // for getFunctionName, getCallArg
+#include "Parser/LinkageSpec.h"        // for C, Spec, Cforall, isBuiltin
+#include "PassVisitor.h"               // for mutateAll
+#include "ResolvExpr/Resolver.h"       // for findVoidExpression
+#include "ResolvExpr/typeops.h"        // for typesCompatible
+#include "SymTab/Autogen.h"            // for genImplicitCall
+#include "SymTab/Indexer.h"            // for Indexer
+#include "SymTab/Mangler.h"            // for Mangler
+#include "SynTree/AddStmtVisitor.h"    // for AddStmtVisitor
+#include "SynTree/Attribute.h"         // for Attribute
+#include "SynTree/Constant.h"          // for Constant
+#include "SynTree/Declaration.h"       // for ObjectDecl, FunctionDecl, Decl...
+#include "SynTree/Expression.h"        // for UniqueExpr, VariableExpr, Unty...
+#include "SynTree/Initializer.h"       // for ConstructorInit, SingleInit
+#include "SynTree/Label.h"             // for Label, noLabels, operator<
+#include "SynTree/Mutator.h"           // for mutateAll, Mutator, maybeMutate
+#include "SynTree/Statement.h"         // for ExprStmt, CompoundStmt, Branch...
+#include "SynTree/Type.h"              // for Type, Type::StorageClasses
+#include "SynTree/TypeSubstitution.h"  // for TypeSubstitution, operator<<
+#include "SynTree/Visitor.h"           // for acceptAll, maybeAccept
+#include "Tuples/Tuples.h"             // for isTtype
 
 bool ctordtorp = false; // print all debug
Index: src/InitTweak/FixInit.h
===================================================================
--- src/InitTweak/FixInit.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/InitTweak/FixInit.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,10 +16,8 @@
 #pragma once
 
-#include <string>
-#include <list>
+#include <list>    // for list
+#include <string>  // for string
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Mutator.h"
+class Declaration;
 
 namespace InitTweak {
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/InitTweak/GenInit.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,27 +14,31 @@
 //
 
-#include <stack>
-#include <list>
-
-#include "InitTweak.h"
+#include <stddef.h>                // for NULL
+#include <algorithm>               // for any_of
+#include <cassert>                 // for assert, safe_dynamic_cast, assertf
+#include <iterator>                // for back_inserter, inserter, back_inse...
+#include <list>                    // for _List_iterator, list
+
+#include "Common/PassVisitor.h"    // for PassVisitor, WithGuards, WithShort...
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/UniqueName.h"     // for UniqueName
+#include "Common/utility.h"        // for ValueGuard, maybeClone
 #include "GenInit.h"
-
-#include "Common/PassVisitor.h"
-
-#include "GenPoly/DeclMutator.h"
-#include "GenPoly/PolyMutator.h"
-#include "GenPoly/ScopedSet.h"
-
-#include "ResolvExpr/typeops.h"
-
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Mutator.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Type.h"
-
-#include "SymTab/Autogen.h"
-#include "SymTab/Mangler.h"
+#include "GenPoly/DeclMutator.h"   // for DeclMutator
+#include "GenPoly/GenPoly.h"       // for getFunctionType, isPolyType
+#include "GenPoly/ScopedSet.h"     // for ScopedSet, ScopedSet<>::const_iter...
+#include "InitTweak.h"             // for isConstExpr, InitExpander, checkIn...
+#include "Parser/LinkageSpec.h"    // for isOverridable, C
+#include "PassVisitor.h"           // for bool_ref, acceptAll, mutateAll
+#include "SymTab/Autogen.h"        // for genImplicitCall, SizeType
+#include "SymTab/Mangler.h"        // for Mangler
+#include "SynTree/Declaration.h"   // for ObjectDecl, DeclarationWithType
+#include "SynTree/Expression.h"    // for VariableExpr, UntypedExpr, Address...
+#include "SynTree/Initializer.h"   // for ConstructorInit, SingleInit, Initi...
+#include "SynTree/Label.h"         // for Label
+#include "SynTree/Mutator.h"       // for mutateAll
+#include "SynTree/Statement.h"     // for CompoundStmt, ImplicitCtorDtorStmt
+#include "SynTree/Type.h"          // for Type, ArrayType, Type::Qualifiers
+#include "SynTree/Visitor.h"       // for acceptAll, maybeAccept
 
 namespace InitTweak {
Index: src/InitTweak/GenInit.h
===================================================================
--- src/InitTweak/GenInit.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/InitTweak/GenInit.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,10 +16,8 @@
 #pragma once
 
-#include <string>
-#include <list>
+#include <list>               // for list
+#include <string>             // for string
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Mutator.h"
+#include "SynTree/SynTree.h"  // for Visitor Nodes
 
 namespace InitTweak {
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/InitTweak/InitTweak.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -1,11 +1,28 @@
-#include <algorithm>
+#include <stddef.h>                // for NULL
+#include <algorithm>               // for find, all_of
+#include <cassert>                 // for assertf, assert, safe_dynamic_cast
+#include <iostream>                // for ostream, cerr, endl
+#include <iterator>                // for back_insert_iterator, back_inserter
+#include <memory>                  // for __shared_ptr
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/UniqueName.h"     // for UniqueName
+#include "Common/utility.h"        // for toString, deleteAll, maybeClone
+#include "GenPoly/GenPoly.h"       // for getFunctionType
 #include "InitTweak.h"
-#include "SynTree/Visitor.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Initializer.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Attribute.h"
-#include "GenPoly/GenPoly.h"
-#include "ResolvExpr/typeops.h"
+#include "Parser/LinkageSpec.h"    // for Spec, isBuiltin, Intrinsic
+#include "ResolvExpr/typeops.h"    // for typesCompatibleIgnoreQualifiers
+#include "SymTab/Indexer.h"        // for Indexer
+#include "SynTree/Attribute.h"     // for Attribute
+#include "SynTree/Constant.h"      // for Constant
+#include "SynTree/Declaration.h"   // for ObjectDecl, DeclarationWithType
+#include "SynTree/Expression.h"    // for Expression, UntypedExpr, Applicati...
+#include "SynTree/Initializer.h"   // for Initializer, ListInit, Designation
+#include "SynTree/Label.h"         // for Label, noLabels
+#include "SynTree/Statement.h"     // for CompoundStmt, ExprStmt, BranchStmt
+#include "SynTree/Type.h"          // for FunctionType, ArrayType, PointerType
+#include "SynTree/Visitor.h"       // for Visitor, maybeAccept
+
+class UntypedValofExpr;
 
 namespace InitTweak {
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/InitTweak/InitTweak.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,10 +16,9 @@
 #pragma once
 
-#include <string>
-#include <list>
+#include <bits/shared_ptr.h>  // for shared_ptr
+#include <list>               // for list
+#include <string>             // for string, allocator
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Mutator.h"
+#include "SynTree/SynTree.h"  // for Visitor Nodes
 
 // helper functions for initialization
@@ -105,4 +104,5 @@
 
 		class ExpanderImpl;
+
 		typedef std::list< Expression * > IndexList;
 	private:
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/DeclarationNode.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,17 +14,26 @@
 //
 
-#include <string>
-#include <list>
-#include <iterator>
-#include <algorithm>
-#include <cassert>
-
-#include "TypeData.h"
-
-#include "SynTree/Attribute.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-
-#include "TypedefTable.h"
+#include <cassert>                 // for assert, assertf, safe_dynamic_cast
+#include <iterator>                // for back_insert_iterator
+#include <list>                    // for list
+#include <memory>                  // for unique_ptr
+#include <ostream>                 // for operator<<, ostream, basic_ostream
+#include <string>                  // for string, operator+, allocator, char...
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/UniqueName.h"     // for UniqueName
+#include "Common/utility.h"        // for maybeClone, maybeBuild, CodeLocation
+#include "Parser/LinkageSpec.h"    // for Spec, linkageName, Cforall
+#include "Parser/ParseNode.h"      // for DeclarationNode, ExpressionNode
+#include "SynTree/Attribute.h"     // for Attribute
+#include "SynTree/Declaration.h"   // for TypeDecl, ObjectDecl, Declaration
+#include "SynTree/Expression.h"    // for Expression, ConstantExpr
+#include "SynTree/Statement.h"     // for AsmStmt
+#include "SynTree/Type.h"          // for Type, Type::StorageClasses, Type::...
+#include "TypeData.h"              // for TypeData, TypeData::Aggregate_t
+#include "TypedefTable.h"          // for TypedefTable, TypedefTable::kind_t...
+
+class Initializer;
+
 extern TypedefTable typedefTable;
 
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/ExpressionNode.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,13 +14,22 @@
 //
 
-#include <climits>										// access INT_MAX, UINT_MAX, LONG_MAX, ULONG_MAX, LLONG_MAX
-#include <sstream>
-
-#include "ParseNode.h"
-#include "TypeData.h"
-#include "SynTree/Constant.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Declaration.h"
-#include "parserutility.h"
+#include <assert.h>                // for assert
+#include <stdio.h>                 // for sscanf, size_t
+#include <climits>                 // for LLONG_MAX, LONG_MAX, INT_MAX, UINT...
+#include <list>                    // for list
+#include <sstream>                 // for basic_istream::operator>>, basic_i...
+#include <string>                  // for string, operator+, operator==
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for maybeMoveBuild, maybeBuild, CodeLo...
+#include "ParseNode.h"             // for ExpressionNode, maybeMoveBuildType
+#include "SynTree/Constant.h"      // for Constant
+#include "SynTree/Declaration.h"   // for EnumDecl, StructDecl, UnionDecl
+#include "SynTree/Expression.h"    // for Expression, ConstantExpr, NameExpr
+#include "SynTree/Statement.h"     // for CompoundStmt, Statement
+#include "SynTree/Type.h"          // for BasicType, Type, Type::Qualifiers
+#include "parserutility.h"         // for notZeroExpr
+
+class Initializer;
 
 using namespace std;
Index: src/Parser/InitializerNode.cc
===================================================================
--- src/Parser/InitializerNode.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/InitializerNode.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,11 +14,15 @@
 //
 
-#include <cassert>
-#include <iostream>
+#include <iostream>                // for operator<<, ostream, basic_ostream
+#include <list>                    // for list
+#include <string>                  // for operator<<, string
+
 using namespace std;
 
-#include "ParseNode.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Initializer.h"
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for maybeBuild
+#include "ParseNode.h"             // for InitializerNode, ExpressionNode
+#include "SynTree/Expression.h"    // for Expression
+#include "SynTree/Initializer.h"   // for Initializer, ListInit, SingleInit
 
 InitializerNode::InitializerNode( ExpressionNode * _expr, bool aggrp, ExpressionNode * des )
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/ParseNode.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,23 +16,28 @@
 #pragma once
 
-#include <string>
-#include <list>
-#include <iterator>
-#include <memory>
-
-#include "Parser/LinkageSpec.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Label.h"
-#include "Common/utility.h"
-#include "Common/UniqueName.h"
-
+#include <algorithm>               // for move
+#include <cassert>                 // for assert, assertf
+#include <iosfwd>                  // for ostream
+#include <iterator>                // for back_insert_iterator
+#include <list>                    // for list
+#include <memory>                  // for unique_ptr, pointer_traits
+#include <string>                  // for string
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for maybeClone, CodeLocation, maybeBuild
+#include "Parser/LinkageSpec.h"    // for Spec
+#include "SynTree/Expression.h"    // for Expression, ConstantExpr (ptr only)
+#include "SynTree/Label.h"         // for Label
+#include "SynTree/Statement.h"     // for Statement, BranchStmt, BranchStmt:...
+#include "SynTree/Type.h"          // for Type, Type::FuncSpecifiers, Type::...
+
+class Attribute;
+class Declaration;
+class DeclarationNode;
+class DeclarationWithType;
+class ExpressionNode;
+class Initializer;
 class StatementNode;
-class CompoundStmtNode;
-class DeclarationNode;
-class ExpressionNode;
-class InitializerNode;
-class Attribute;
+class UniqueName;
 
 //##############################################################################
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/StatementNode.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,13 +14,18 @@
 //
 
-#include <list>
-#include <algorithm>
-#include <cassert>
-
-#include "ParseNode.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Expression.h"
-#include "parserutility.h"
-#include "Common/utility.h"
+#include <cassert>                 // for assert, safe_dynamic_cast, assertf
+#include <list>                    // for list
+#include <memory>                  // for unique_ptr
+#include <string>                  // for string
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for maybeMoveBuild, maybeBuild
+#include "ParseNode.h"             // for StatementNode, ExpressionNode, bui...
+#include "SynTree/Expression.h"    // for Expression, ConstantExpr
+#include "SynTree/Label.h"         // for Label, noLabels
+#include "SynTree/Statement.h"     // for Statement, BranchStmt, CaseStmt
+#include "parserutility.h"         // for notZeroExpr
+
+class Declaration;
 
 using namespace std;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/TypeData.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,14 +14,19 @@
 //
 
-#include <cassert>
-#include <algorithm>
-#include <iterator>
-#include "Common/utility.h"
+#include <cassert>                 // for assert
+#include <ostream>                 // for operator<<, ostream, basic_ostream
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for maybeClone, maybeBuild, maybeMoveB...
+#include "Parser/ParseNode.h"      // for DeclarationNode, ExpressionNode
+#include "SynTree/Declaration.h"   // for TypeDecl, ObjectDecl, FunctionDecl
+#include "SynTree/Expression.h"    // for Expression, ConstantExpr (ptr only)
+#include "SynTree/Initializer.h"   // for SingleInit, Initializer (ptr only)
+#include "SynTree/Statement.h"     // for CompoundStmt, Statement
+#include "SynTree/Type.h"          // for BasicType, Type, Type::ForallList
 #include "TypeData.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Initializer.h"
+
+class Attribute;
+
 using namespace std;
 
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/TypeData.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,6 +16,12 @@
 #pragma once
 
-#include "ParseNode.h"
-#include "SynTree/Type.h"
+#include <iosfwd>                // for ostream
+#include <list>                  // for list
+#include <string>                // for string
+
+#include "ParseNode.h"           // for DeclarationNode, DeclarationNode::Ag...
+#include "Parser/LinkageSpec.h"  // for Spec
+#include "SynTree/Type.h"        // for Type, ReferenceToType (ptr only)
+#include "SynTree/SynTree.h"     // for Visitor Nodes
 
 struct TypeData {
Index: src/Parser/TypedefTable.cc
===================================================================
--- src/Parser/TypedefTable.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/TypedefTable.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -14,12 +14,20 @@
 //
 
-#include <map>
-#include <list>
-#include <cassert>
+#include <ext/alloc_traits.h>    // for __alloc_traits<>::value_type
+#include <cassert>               // for assert
+#include <list>                  // for list, _List_iterator, list<>::iterator
+#include <map>                   // for _Rb_tree_iterator, _Rb_tree_const_it...
+#include <memory>                // for allocator_traits<>::value_type
+#include <utility>               // for pair
+
+#include "Parser/ParserTypes.h"  // for typedefTable
+#include "Parser/parser.hh"      // for IDENTIFIER
 #include "TypedefTable.h"
+
 using namespace std;
 
 #if 0
 #include <iostream>
+
 #define debugPrint( x ) cerr << x
 #else
Index: src/Parser/TypedefTable.h
===================================================================
--- src/Parser/TypedefTable.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/TypedefTable.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,11 +16,10 @@
 #pragma once
 
-#include <map>
-#include <list>
-#include <string>
-#include <stack>
+#include <list>       // for list
+#include <map>        // for map, map<>::value_compare
+#include <stack>      // for stack
+#include <string>     // for string
 
-#include "ParserTypes.h"
-#include "parser.hh"
+#include "parser.hh"  // for IDENTIFIER, TYPEDEFname, TYPEGENname
 
 class TypedefTable {
Index: src/Parser/parserutility.cc
===================================================================
--- src/Parser/parserutility.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/parserutility.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -15,6 +15,11 @@
 
 #include "parserutility.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
+
+#include <list>                  // for list
+#include <string>                // for string
+
+#include "SynTree/Constant.h"    // for Constant
+#include "SynTree/Expression.h"  // for UntypedExpr, CastExpr, ConstantExpr
+#include "SynTree/Type.h"        // for BasicType, ZeroType, BasicType::Kind...
 
 // rewrite
Index: src/Parser/parserutility.h
===================================================================
--- src/Parser/parserutility.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/Parser/parserutility.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -16,5 +16,5 @@
 #pragma once
 
-#include "SynTree/SynTree.h"
+class Expression;
 
 Expression *notZeroExpr( Expression *orig );
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/SymTab/Autogen.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -15,26 +15,15 @@
 #include "Autogen.h"
 
-#include <cstddef>                 // for NULL
-#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 <utility>                 // for pair
-#include <vector>                  // for vector
-
-#include "AddVisit.h"              // for addVisit
-#include "Common/ScopedMap.h"      // for ScopedMap<>::const_iterator, Scope...
-#include "Common/SemanticError.h"  // for SemanticError
-#include "Common/utility.h"        // for cloneAll, operator+
-#include "GenPoly/DeclMutator.h"   // for DeclMutator
-#include "GenPoly/ScopedSet.h"     // for ScopedSet, ScopedSet<>::iterator
-#include "SymTab/Mangler.h"        // for Mangler
-#include "SynTree/Mutator.h"       // for maybeMutate
-#include "SynTree/Statement.h"     // for CompoundStmt, ReturnStmt, ExprStmt
-#include "SynTree/Type.h"          // for FunctionType, Type, TypeInstType
-#include "SynTree/Visitor.h"       // for maybeAccept, Visitor, acceptAll
-
-class Attribute;
+#include <cassert>                // for assert, assertf
+#include <cstddef>                // for NULL
+
+#include "AddVisit.h"             // for addVisit
+#include "Common/ScopedMap.h"     // for ScopedMap
+#include "GenPoly/DeclMutator.h"  // for DeclMutator
+#include "GenPoly/ScopedSet.h"    // for ScopedSet
+#include "Parser/LinkageSpec.h"   // for AutoGen, Intrinsic, Spec
+#include "SynTree/Statement.h"    // for SwitchStmt (ptr only), CompoundStmt
+#include "SynTree/Type.h"         // for Type, ArrayType, Type::StorageClasses
+#include "SynTree/Visitor.h"      // for Visitor
 
 namespace SymTab {
Index: src/SymTab/Autogen.h
===================================================================
--- src/SymTab/Autogen.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/SymTab/Autogen.h	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -17,18 +17,15 @@
 
 #include <cassert>                // for assert
-#include <iterator>               // for back_insert_iterator, back_inserter
-#include <list>                   // for list
-#include <string>                 // for string, operator==
+#include <string>                 // for string
 
 #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/Declaration.h"  // for DeclarationWithType, ObjectDecl
+#include "SynTree/Expression.h"   // for NameExpr, ConstantExpr, UntypedExpr...
 #include "SynTree/Type.h"         // for Type, ArrayType, Type::Qualifiers
+
+class CompoundStmt;
+class Statement;
 
 namespace SymTab {
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
+++ src/SymTab/Validate.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
@@ -40,42 +40,32 @@
 #include "Validate.h"
 
-#include <algorithm>                   // for move, transform
-#include <cassert>                     // for safe_dynamic_cast, assertf
+#include <cassert>                     // for assertf, assert
 #include <cstddef>                     // for size_t
-#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 <type_traits>                 // for remove_reference<>::type
-#include <utility>                     // for pair, make_pair
-
-#include "AddVisit.h"                  // for addVisit
-#include "Autogen.h"                   // for SizeType, autogenerateRoutines
-#include "CodeGen/CodeGenerator.h"     // for genName
+#include <list>                        // for list
+#include <string>                      // for string
+#include <utility>                     // for pair
+
 #include "Common/PassVisitor.h"        // for PassVisitor, WithDeclsToAdd
-#include "Common/ScopedMap.h"          // for ScopedMap<>::const_iterator
+#include "Common/ScopedMap.h"          // for ScopedMap
 #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 "Parser/ParseNode.h"          // for DeclarationNode, DeclarationNo...
-#include "PassVisitor.h"               // for acceptAll, mutateAll
-#include "ResolvExpr/typeops.h"        // for extractResultType, typesCompat...
-#include "SynTree/Attribute.h"         // for noAttributes, Attribute
+#include "InitTweak/InitTweak.h"       // for isCtorDtorAssign
+#include "Parser/LinkageSpec.h"        // for C
+#include "ResolvExpr/typeops.h"        // for typesCompatible
 #include "SynTree/Constant.h"          // for Constant
-#include "SynTree/Declaration.h"       // for EnumDecl, StructDecl, TypedefDecl
-#include "SynTree/Expression.h"        // for TypeExpr, CompoundLiteralExpr
-#include "SynTree/Initializer.h"       // for ListInit, Initializer, noDesig...
-#include "SynTree/Mutator.h"           // for mutateAll, Mutator
-#include "SynTree/Statement.h"         // for CompoundStmt, DeclStmt, Return...
-#include "SynTree/Type.h"              // for Type, TypeInstType, TraitInstType
-#include "SynTree/TypeSubstitution.h"  // for TypeSubstitution, applySubstit...
-#include "SynTree/Visitor.h"           // for acceptAll, Visitor
+#include "SynTree/Declaration.h"       // for ObjectDecl, DeclarationWithType
+#include "SynTree/Expression.h"        // for CompoundLiteralExpr, Expressio...
+#include "SynTree/Initializer.h"       // for ListInit, Initializer
+#include "SynTree/Label.h"             // for operator==, Label
+#include "SynTree/Mutator.h"           // for Mutator
+#include "SynTree/Type.h"              // for Type, TypeInstType, EnumInstType
+#include "SynTree/TypeSubstitution.h"  // for TypeSubstitution
+#include "SynTree/Visitor.h"           // for Visitor
+
+class CompoundStmt;
+class ReturnStmt;
+class SwitchStmt;
 
 #define debugPrint( x ) if ( doDebug ) { std::cout << x; }
