Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/Box.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -14,50 +14,44 @@
 //
 
-#include <algorithm>
-#include <iterator>
-#include <list>
-#include <map>
-#include <set>
-#include <stack>
-#include <string>
-#include <utility>
-#include <vector>
-#include <cassert>
+#include <algorithm>                     // for mismatch
+#include <cassert>                       // for assert, safe_dynamic_cast
+#include <iostream>                      // for operator<<, stringstream
+#include <list>                          // for list, list<>::iterator, _Lis...
+#include <map>                           // for _Rb_tree_const_iterator, map
+#include <memory>                        // for auto_ptr
+#include <set>                           // for set
+#include <string>                        // for string, allocator, basic_string
+#include <utility>                       // for pair
 
 #include "Box.h"
-#include "DeclMutator.h"
-#include "Lvalue.h"
-#include "FindFunction.h"
-#include "PolyMutator.h"
-#include "ScopedSet.h"
-#include "ScrubTyVars.h"
-
-#include "Parser/ParseNode.h"
-
-#include "SynTree/Attribute.h"
-#include "SynTree/Constant.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 "SynTree/TypeSubstitution.h"
-
-#include "ResolvExpr/TypeEnvironment.h"
-#include "ResolvExpr/TypeMap.h"
-#include "ResolvExpr/typeops.h"
-
-#include "SymTab/Indexer.h"
-#include "SymTab/Mangler.h"
-
-#include "Common/ScopedMap.h"
-#include "Common/SemanticError.h"
-#include "Common/UniqueName.h"
-#include "Common/utility.h"
-
-#include "InitTweak/InitTweak.h"
-
-#include <ext/functional> // temporary
+#include "Common/ScopedMap.h"            // for ScopedMap, ScopedMap<>::iter...
+#include "Common/SemanticError.h"        // for SemanticError
+#include "Common/UniqueName.h"           // for UniqueName
+#include "Common/utility.h"              // for toString
+#include "DeclMutator.h"                 // for DeclMutator
+#include "FindFunction.h"                // for findFunction, findAndReplace...
+#include "GenPoly/ErasableScopedMap.h"   // for ErasableScopedMap<>::const_i...
+#include "GenPoly/GenPoly.h"             // for TyVarMap, isPolyType, mangle...
+#include "InitTweak/InitTweak.h"         // for getFunctionName, isAssignment
+#include "Lvalue.h"                      // for generalizedLvalue
+#include "Parser/LinkageSpec.h"          // for C, Spec, Cforall, Intrinsic
+#include "PolyMutator.h"                 // for PolyMutator
+#include "ResolvExpr/TypeEnvironment.h"  // for EqvClass
+#include "ResolvExpr/typeops.h"          // for typesCompatible
+#include "ScopedSet.h"                   // for ScopedSet, ScopedSet<>::iter...
+#include "ScrubTyVars.h"                 // for ScrubTyVars
+#include "SymTab/Indexer.h"              // for Indexer
+#include "SymTab/Mangler.h"              // for Mangler
+#include "SynTree/Attribute.h"           // for Attribute
+#include "SynTree/Constant.h"            // for Constant
+#include "SynTree/Declaration.h"         // for DeclarationWithType, ObjectDecl
+#include "SynTree/Expression.h"          // for ApplicationExpr, UntypedExpr
+#include "SynTree/Initializer.h"         // for SingleInit, Initializer, Lis...
+#include "SynTree/Label.h"               // for Label, noLabels
+#include "SynTree/Mutator.h"             // for maybeMutate, Mutator, mutateAll
+#include "SynTree/Statement.h"           // for ExprStmt, DeclStmt, ReturnStmt
+#include "SynTree/SynTree.h"             // for UniqueId
+#include "SynTree/Type.h"                // for Type, FunctionType, PointerType
+#include "SynTree/TypeSubstitution.h"    // for TypeSubstitution, operator<<
 
 namespace GenPoly {
Index: src/GenPoly/Box.h
===================================================================
--- src/GenPoly/Box.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/Box.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,6 +16,7 @@
 #pragma once
 
-#include <list>
-#include "SynTree/SynTree.h"
+#include <list>  // for list
+
+class Declaration;
 
 namespace GenPoly {
Index: src/GenPoly/CopyParams.cc
===================================================================
--- src/GenPoly/CopyParams.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/CopyParams.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -14,14 +14,20 @@
 //
 
-#include <set>
-#include <map>
-#include <cassert>
+#include <cassert>                 // for assert
+#include <list>                    // for list, _List_iterator, _List_const_...
+#include <map>                     // for map, _Rb_tree_const_iterator, map<...
+#include <set>                     // for set, set<>::const_iterator
+#include <string>                  // for string, operator==
+#include <utility>                 // for pair
 
-#include "SynTree/Declaration.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Visitor.h"
-#include "Common/UniqueName.h"
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/UniqueName.h"     // for UniqueName
+#include "SynTree/Declaration.h"   // for DeclarationWithType, TypeDecl, Fun...
+#include "SynTree/Expression.h"    // for VariableExpr, ApplicationExpr, Add...
+#include "SynTree/Label.h"         // for Label, noLabels
+#include "SynTree/Statement.h"     // for CompoundStmt, DeclStmt, ExprStmt
+#include "SynTree/SynTree.h"       // for UniqueId
+#include "SynTree/Type.h"          // for FunctionType, TypeInstType, Type
+#include "SynTree/Visitor.h"       // for acceptAll, Visitor
 
 namespace GenPoly {
Index: src/GenPoly/DeclMutator.cc
===================================================================
--- src/GenPoly/DeclMutator.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/DeclMutator.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,6 +16,11 @@
 #include "DeclMutator.h"
 
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
+#include <memory>                  // for allocator_traits<>::value_type
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "SynTree/Declaration.h"   // for Declaration
+#include "SynTree/Expression.h"    // for Expression
+#include "SynTree/Label.h"         // for Label, noLabels
+#include "SynTree/Statement.h"     // for CatchStmt, Statement, CompoundStmt
 
 namespace GenPoly {
Index: src/GenPoly/DeclMutator.h
===================================================================
--- src/GenPoly/DeclMutator.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/DeclMutator.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,10 +16,9 @@
 #pragma once
 
-#include <list>
-#include <vector>
+#include <list>               // for list
+#include <vector>             // for vector
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Mutator.h"
+#include "SynTree/Mutator.h"  // for Mutator
+#include "SynTree/SynTree.h"  // for Visitor Nodes
 
 namespace GenPoly {
Index: src/GenPoly/FindFunction.cc
===================================================================
--- src/GenPoly/FindFunction.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/FindFunction.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -15,9 +15,14 @@
 
 #include "FindFunction.h"
-#include "SynTree/Type.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Visitor.h"
 
-#include "ScrubTyVars.h"
+#include <utility>                      // for pair
+
+#include "Common/SemanticError.h"       // for SemanticError
+#include "GenPoly/ErasableScopedMap.h"  // for ErasableScopedMap<>::iterator
+#include "GenPoly/GenPoly.h"            // for TyVarMap
+#include "ScrubTyVars.h"                // for ScrubTyVars
+#include "SynTree/Declaration.h"        // for DeclarationWithType, TypeDecl
+#include "SynTree/Mutator.h"            // for Mutator, mutateAll
+#include "SynTree/Type.h"               // for FunctionType, Type, Type::For...
 
 namespace GenPoly {
Index: src/GenPoly/FindFunction.h
===================================================================
--- src/GenPoly/FindFunction.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/FindFunction.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,6 +16,10 @@
 #pragma once
 
-#include "SynTree/SynTree.h"
-#include "GenPoly.h"
+#include <list>       // for list
+
+#include "GenPoly.h"  // for TyVarMap
+
+class FunctionType;
+class Type;
 
 namespace GenPoly {
Index: src/GenPoly/GenPoly.cc
===================================================================
--- src/GenPoly/GenPoly.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/GenPoly.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -15,16 +15,20 @@
 
 #include "GenPoly.h"
-#include "assert.h"
-
-#include "SynTree/Expression.h"
-#include "SynTree/Type.h"
-#include "ResolvExpr/typeops.h"
-
-#include <iostream>
-#include <iterator>
-#include <list>
-#include <typeindex>
-#include <typeinfo>
-#include <vector>
+
+#include <cassert>                      // for assertf, assert
+#include <iostream>                     // for operator<<, ostream, basic_os...
+#include <iterator>                     // for back_insert_iterator, back_in...
+#include <list>                         // for list, _List_iterator, list<>:...
+#include <typeindex>                    // for type_index
+#include <utility>                      // for pair
+#include <vector>                       // for vector
+
+#include "GenPoly/ErasableScopedMap.h"  // for ErasableScopedMap<>::const_it...
+#include "ResolvExpr/typeops.h"         // for flatten
+#include "SynTree/Constant.h"           // for Constant
+#include "SynTree/Expression.h"         // for Expression, TypeExpr, Constan...
+#include "SynTree/Type.h"               // for Type, StructInstType, UnionIn...
+#include "SynTree/TypeSubstitution.h"   // for TypeSubstitution
+
 using namespace std;
 
Index: src/GenPoly/GenPoly.h
===================================================================
--- src/GenPoly/GenPoly.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/GenPoly.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,15 +16,11 @@
 #pragma once
 
-#include <string>
-#include <iostream>
-#include <utility>
+#include <iostream>               // for ostream
+#include <string>                 // for string, allocator, operator+, basic...
 
-#include "ErasableScopedMap.h"
-
-#include "SymTab/Mangler.h"
-
-#include "SynTree/Declaration.h"
-#include "SynTree/Type.h"
-#include "SynTree/TypeSubstitution.h"
+#include "ErasableScopedMap.h"    // for ErasableScopedMap
+#include "SymTab/Mangler.h"       // for Mangler
+#include "SynTree/Declaration.h"  // for TypeDecl::Data, AggregateDecl, Type...
+#include "SynTree/SynTree.h"      // for Visitor Nodes
 
 namespace GenPoly {
@@ -66,9 +62,9 @@
 	Type *hasPolyBase( Type *type, const TyVarMap &tyVars, int *levels = 0, const TypeSubstitution *env = 0 );
 
-	/// true iff this type or some base of this type after dereferencing pointers is either polymorphic or a generic type with at least one 
+	/// true iff this type or some base of this type after dereferencing pointers is either polymorphic or a generic type with at least one
 	/// polymorphic parameter; will look up substitution in env if provided.
 	bool includesPolyType( Type *type, const TypeSubstitution *env = 0 );
 
-	/// true iff this type or some base of this type after dereferencing pointers is either polymorphic in tyVars, or a generic type with 
+	/// true iff this type or some base of this type after dereferencing pointers is either polymorphic in tyVars, or a generic type with
 	/// at least one polymorphic parameter in tyVars; will look up substitution in env if provided.
 	bool includesPolyType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env = 0 );
Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/InstantiateGeneric.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -14,29 +14,26 @@
 //
 
-#include <cassert>
-#include <list>
-#include <unordered_map>
-#include <utility>
-#include <vector>
-
+#include <cassert>                     // for assertf, assert
+#include <iterator>                    // for back_inserter, inserter
+#include <list>                        // for list, _List_const_iterator
+#include <utility>                     // for move, pair
+#include <vector>                      // for vector
+
+#include "Common/PassVisitor.h"        // for PassVisitor, WithDeclsToAdd
+#include "Common/ScopedMap.h"          // for ScopedMap
+#include "Common/SemanticError.h"      // for SemanticError
+#include "Common/UniqueName.h"         // for UniqueName
+#include "Common/utility.h"            // for deleteAll, cloneAll
+#include "GenPoly.h"                   // for isPolyType, typesPolyCompatible
 #include "InstantiateGeneric.h"
-
-#include "GenPoly.h"
-#include "ScopedSet.h"
-#include "ScrubTyVars.h"
-
-#include "Common/PassVisitor.h"
-#include "Common/ScopedMap.h"
-#include "Common/UniqueName.h"
-#include "Common/utility.h"
-
-#include "ResolvExpr/typeops.h"
-
-#include "SynTree/Declaration.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Type.h"
-
-
-#include "InitTweak/InitTweak.h"
+#include "PassVisitor.h"               // for mutateAll
+#include "ScopedSet.h"                 // for ScopedSet, ScopedSet<>::iterator
+#include "ScrubTyVars.h"               // for ScrubTyVars
+#include "SynTree/Declaration.h"       // for StructDecl, UnionDecl, TypeDecl
+#include "SynTree/Expression.h"        // for TypeExpr, Expression
+#include "SynTree/Mutator.h"           // for mutateAll
+#include "SynTree/Type.h"              // for StructInstType, UnionInstType
+#include "SynTree/TypeSubstitution.h"  // for TypeSubstitution
+#include "SynTree/Visitor.h"           // for acceptAll
 
 
Index: src/GenPoly/InstantiateGeneric.h
===================================================================
--- src/GenPoly/InstantiateGeneric.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/InstantiateGeneric.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,5 +16,7 @@
 #pragma once
 
-#include "SynTree/SynTree.h"
+#include <list>  // for list
+
+class Declaration;
 
 namespace GenPoly {
Index: src/GenPoly/Lvalue.cc
===================================================================
--- src/GenPoly/Lvalue.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/Lvalue.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -14,25 +14,20 @@
 //
 
-#include <cassert>
-
+#include <cassert>                       // for safe_dynamic_cast
+#include <string>                        // for string
+
+#include "Common/SemanticError.h"        // for SemanticError
+#include "GenPoly.h"                     // for isPolyType
 #include "Lvalue.h"
-
-#include "GenPoly.h"
-
-#include "SynTree/Declaration.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Visitor.h"
-#include "SynTree/Mutator.h"
-#include "SymTab/Indexer.h"
-
-#include "ResolvExpr/Resolver.h"
-#include "ResolvExpr/TypeEnvironment.h"
-#include "ResolvExpr/typeops.h"
-#include "ResolvExpr/Unify.h"
-
-#include "Common/UniqueName.h"
-#include "Common/utility.h"
+#include "Parser/LinkageSpec.h"          // for Spec, isBuiltin, Intrinsic
+#include "ResolvExpr/TypeEnvironment.h"  // for AssertionSet, OpenVarSet
+#include "ResolvExpr/Unify.h"            // for unify
+#include "SymTab/Indexer.h"              // for Indexer
+#include "SynTree/Declaration.h"         // for Declaration, FunctionDecl
+#include "SynTree/Expression.h"          // for Expression, ConditionalExpr
+#include "SynTree/Mutator.h"             // for mutateAll, Mutator
+#include "SynTree/Statement.h"           // for ReturnStmt, Statement (ptr o...
+#include "SynTree/Type.h"                // for PointerType, Type, FunctionType
+#include "SynTree/Visitor.h"             // for Visitor, acceptAll
 
 namespace GenPoly {
Index: src/GenPoly/Lvalue.h
===================================================================
--- src/GenPoly/Lvalue.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/Lvalue.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,7 +16,8 @@
 #pragma once
 
-#include <list>
+#include <list>  // for list
 
-#include "SynTree/SynTree.h"
+class Declaration;
+class Expression;
 
 namespace GenPoly {
Index: src/GenPoly/PolyMutator.cc
===================================================================
--- src/GenPoly/PolyMutator.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/PolyMutator.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -15,10 +15,15 @@
 
 #include "PolyMutator.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Mutator.h"
-#include "SynTree/Initializer.h"
+
+#include "Common/SemanticError.h"  // for SemanticError
+#include "Common/utility.h"        // for ValueGuard
+#include "SynTree/Declaration.h"   // for Declaration, TypeDecl, TypeDecl::Data
+#include "SynTree/Expression.h"    // for Expression, UntypedExpr, StmtExpr ...
+#include "SynTree/Initializer.h"   // for SingleInit, Initializer (ptr only)
+#include "SynTree/Label.h"         // for Label, noLabels
+#include "SynTree/Mutator.h"       // for maybeMutate, mutateAll
+#include "SynTree/Statement.h"     // for CatchStmt, CompoundStmt, ForStmt
+
+class TypeSubstitution;
 
 namespace GenPoly {
Index: src/GenPoly/PolyMutator.h
===================================================================
--- src/GenPoly/PolyMutator.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/PolyMutator.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,13 +16,9 @@
 #pragma once
 
-#include <map>
-#include <string>
-#include <list>
+#include <list>               // for list
 
-#include "GenPoly.h"
-
-#include "SynTree/SynTree.h"
-#include "SynTree/Declaration.h"
-#include "SynTree/Mutator.h"
+#include "GenPoly.h"          // for TyVarMap
+#include "SynTree/Mutator.h"  // for Mutator
+#include "SynTree/SynTree.h"  // for Visitor Nodes
 
 namespace GenPoly {
Index: src/GenPoly/ScrubTyVars.cc
===================================================================
--- src/GenPoly/ScrubTyVars.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/ScrubTyVars.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -14,13 +14,13 @@
 //
 
-#include <sstream>
-#include <string>
+#include <utility>                      // for pair
 
-#include "GenPoly.h"
+#include "GenPoly.h"                    // for mangleType, TyVarMap, alignof...
+#include "GenPoly/ErasableScopedMap.h"  // for ErasableScopedMap<>::const_it...
 #include "ScrubTyVars.h"
-
-#include "SynTree/Mutator.h"
-#include "SynTree/Type.h"
-#include "SynTree/Expression.h"
+#include "SynTree/Declaration.h"        // for TypeDecl, TypeDecl::Data, Typ...
+#include "SynTree/Expression.h"         // for Expression (ptr only), NameExpr
+#include "SynTree/Mutator.h"            // for Mutator
+#include "SynTree/Type.h"               // for PointerType, TypeInstType, Type
 
 namespace GenPoly {
Index: src/GenPoly/ScrubTyVars.h
===================================================================
--- src/GenPoly/ScrubTyVars.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/ScrubTyVars.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,10 +16,13 @@
 #pragma once
 
-#include <string>
+#include <assert.h>           // for assert
 
-#include "GenPoly.h"
+#include "GenPoly.h"          // for TyVarMap, isPolyType, isDynType
+#include "SynTree/Mutator.h"  // for Mutator
+#include "SynTree/Type.h"     // for Type (ptr only), PointerType (ptr only)
 
-#include "SynTree/SynTree.h"
-#include "SynTree/Mutator.h"
+class AlignofExpr;
+class Expression;
+class SizeofExpr;
 
 namespace GenPoly {
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/Specialize.cc	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -14,23 +14,31 @@
 //
 
-#include <cassert>
-
+#include <cassert>                       // for assert, assertf
+#include <iterator>                      // for back_insert_iterator, back_i...
+#include <map>                           // for _Rb_tree_iterator, _Rb_tree_...
+#include <memory>                        // for unique_ptr
+#include <string>                        // for string
+#include <tuple>                         // for get
+#include <utility>                       // for pair
+
+#include "Common/SemanticError.h"        // for SemanticError
+#include "Common/UniqueName.h"           // for UniqueName
+#include "Common/utility.h"              // for group_iterate
+#include "GenPoly.h"                     // for getFunctionType
+#include "InitTweak/InitTweak.h"         // for isIntrinsicCallExpr
+#include "Parser/LinkageSpec.h"          // for C
+#include "PolyMutator.h"                 // for PolyMutator
+#include "ResolvExpr/FindOpenVars.h"     // for findOpenVars
+#include "ResolvExpr/TypeEnvironment.h"  // for OpenVarSet, AssertionSet
 #include "Specialize.h"
-#include "GenPoly.h"
-#include "PolyMutator.h"
-
-#include "Parser/ParseNode.h"
-
-#include "SynTree/Expression.h"
-#include "SynTree/Statement.h"
-#include "SynTree/Type.h"
-#include "SynTree/Attribute.h"
-#include "SynTree/TypeSubstitution.h"
-#include "SynTree/Mutator.h"
-#include "ResolvExpr/FindOpenVars.h"
-#include "Common/UniqueName.h"
-#include "Common/utility.h"
-#include "InitTweak/InitTweak.h"
-#include "Tuples/Tuples.h"
+#include "SynTree/Attribute.h"           // for Attribute
+#include "SynTree/Declaration.h"         // for FunctionDecl, DeclarationWit...
+#include "SynTree/Expression.h"          // for ApplicationExpr, Expression
+#include "SynTree/Label.h"               // for Label, noLabels
+#include "SynTree/Mutator.h"             // for mutateAll
+#include "SynTree/Statement.h"           // for CompoundStmt, DeclStmt, Expr...
+#include "SynTree/Type.h"                // for FunctionType, TupleType, Type
+#include "SynTree/TypeSubstitution.h"    // for TypeSubstitution
+#include "SynTree/Visitor.h"             // for Visitor
 
 namespace GenPoly {
Index: src/GenPoly/Specialize.h
===================================================================
--- src/GenPoly/Specialize.h	(revision acd7c5dd143dff5c52de066e47bcb0c79b405bf2)
+++ src/GenPoly/Specialize.h	(revision 08fc48f4a5c70b7f3e402da3afef2763f754ff3a)
@@ -16,7 +16,7 @@
 #pragma once
 
-#include <list>
+#include <list>  // for list
 
-#include "SynTree/SynTree.h"
+class Declaration;
 
 namespace GenPoly {
