Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision d76c588058daa6269114595a571223a110ced0ab)
+++ src/ResolvExpr/Resolver.cc	(revision a93589218b787f36ca9d02a420b5d7b54ed5fc68)
@@ -45,4 +45,5 @@
 #include "SynTree/Visitor.h"             // for acceptAll, maybeAccept
 #include "Tuples/Tuples.h"
+#include "Validate/FindSpecialDecls.h"   // for SizeType
 
 using namespace std;
@@ -237,5 +238,5 @@
 				winner.cost = winner.cvtCost;
 			}
-			
+
 			// produce ambiguous errors, if applicable
 			if ( winners.size() != 1 ) {
@@ -257,5 +258,5 @@
 
 			// xxx - check for ambiguous expressions
-			
+
 			// output selected choice
 			alt = std::move( choice );
@@ -421,5 +422,5 @@
 	void Resolver_old::handlePtrType( PtrType * type ) {
 		if ( type->get_dimension() ) {
-			findSingleExpression( type->dimension, SymTab::SizeType->clone(), indexer );
+			findSingleExpression( type->dimension, Validate::SizeType->clone(), indexer );
 		}
 	}
@@ -446,5 +447,5 @@
 		// default value expressions have an environment which shouldn't be there and trips up 
 		// later passes.
-		// xxx - it might be necessary to somehow keep the information from this environment, but I 
+		// xxx - it might be necessary to somehow keep the information from this environment, but I
 		// can't currently see how it's useful.
 		for ( Declaration * d : functionDecl->type->parameters ) {
@@ -797,11 +798,11 @@
 		initExpr->expr = nullptr;
 		std::swap( initExpr->env, newExpr->env );
-		// InitExpr may have inferParams in the case where the expression specializes a function 
-		// pointer, and newExpr may already have inferParams of its own, so a simple swap is not 
+		// InitExpr may have inferParams in the case where the expression specializes a function
+		// pointer, and newExpr may already have inferParams of its own, so a simple swap is not
 		// sufficient.
 		newExpr->spliceInferParams( initExpr );
 		delete initExpr;
 
-		// get the actual object's type (may not exactly match what comes back from the resolver 
+		// get the actual object's type (may not exactly match what comes back from the resolver
 		// due to conversions)
 		Type * initContext = currentObject.getCurrentType();
@@ -816,5 +817,5 @@
 					if ( isCharType( pt->get_base() ) ) {
 						if ( CastExpr * ce = dynamic_cast< CastExpr * >( newExpr ) ) {
-							// strip cast if we're initializing a char[] with a char *, 
+							// strip cast if we're initializing a char[] with a char *,
 							// e.g.  char x[] = "hello";
 							newExpr = ce->get_arg();
@@ -839,9 +840,9 @@
 		// move cursor into brace-enclosed initializer-list
 		currentObject.enterListInit();
-		// xxx - fix this so that the list isn't copied, iterator should be used to change current 
+		// xxx - fix this so that the list isn't copied, iterator should be used to change current
 		// element
 		std::list<Designation *> newDesignations;
 		for ( auto p : group_iterate(listInit->get_designations(), listInit->get_initializers()) ) {
-			// iterate designations and initializers in pairs, moving the cursor to the current 
+			// iterate designations and initializers in pairs, moving the cursor to the current
 			// designated object and resolving the initializer against that object.
 			Designation * des = std::get<0>(p);
