Index: src/ResolvExpr/AdjustExprType.cc
===================================================================
--- src/ResolvExpr/AdjustExprType.cc	(revision 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/AdjustExprType.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/Alternative.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/Alternative.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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;
@@ -979,6 +979,6 @@
 	void AlternativeFinder::visit( SizeofExpr *sizeofExpr ) {
 		if ( sizeofExpr->get_isType() ) {
-			// xxx - resolveTypeof?
-			alternatives.push_back( Alternative( sizeofExpr->clone(), env, Cost::zero ) );
+			Type * newType = sizeofExpr->get_type()->clone();
+			alternatives.push_back( Alternative( new SizeofExpr( resolveTypeof( newType, indexer ) ), env, Cost::zero ) );
 		} else {
 			// find all alternatives for the argument to sizeof
@@ -1000,6 +1000,6 @@
 	void AlternativeFinder::visit( AlignofExpr *alignofExpr ) {
 		if ( alignofExpr->get_isType() ) {
-			// xxx - resolveTypeof?
-			alternatives.push_back( Alternative( alignofExpr->clone(), env, Cost::zero ) );
+			Type * newType = alignofExpr->get_type()->clone();
+			alternatives.push_back( Alternative( new AlignofExpr( resolveTypeof( newType, indexer ) ), env, Cost::zero ) );
 		} else {
 			// find all alternatives for the argument to sizeof
Index: src/ResolvExpr/AlternativeFinder.h
===================================================================
--- src/ResolvExpr/AlternativeFinder.h	(revision 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/AlternativeFinder.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/AlternativePrinter.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/AlternativePrinter.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/CastCost.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/CommonType.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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
 
 // #define DEBUG
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/ConversionCost.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/ConversionCost.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -16,10 +16,15 @@
 #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:
Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/CurrentObject.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/CurrentObject.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/FindOpenVars.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/FindOpenVars.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/Occurs.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/PolyCost.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/PtrsAssignable.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/PtrsCastable.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/RenameVars.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/RenameVars.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/ResolveTypeof.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/ResolveTypeof.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/Resolver.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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;
@@ -390,4 +394,9 @@
 
 	void Resolver::visit( CatchStmt *catchStmt ) {
+		// inline Indexer::visit so that the exception variable is still in-scope for
+		// findSingleExpression() below
+		Parent::enterScope();
+		Visitor::visit( catchStmt );
+		
 		if ( catchStmt->get_cond() ) {
 			Expression * wrapped = new CastExpr(
@@ -397,4 +406,6 @@
 			catchStmt->set_cond( findSingleExpression( wrapped, *this ) );
 		}
+
+		Parent::leaveScope();
 	}
 
Index: src/ResolvExpr/Resolver.h
===================================================================
--- src/ResolvExpr/Resolver.h	(revision 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/Resolver.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/TypeEnvironment.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/Unify.cc	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 5ccb10d750e81ef921035bdd254327997acd80ae)
+++ src/ResolvExpr/Unify.h	(revision 1efa1e1365cea2b0ae3470dca4cad8a09b133eba)
@@ -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 {
