Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 2be10237217d3203f88d37d1da72d6ec3736ab71)
+++ src/SymTab/Autogen.cc	(revision 5f98ce5c7a2f9f7f1b2877251c37b8b1f6bec9a7)
@@ -26,4 +26,6 @@
 
 namespace SymTab {
+	Type * SizeType = 0;
+
 	class AutogenerateRoutines : public Visitor {
 		public:
Index: src/SymTab/Autogen.h
===================================================================
--- src/SymTab/Autogen.h	(revision 2be10237217d3203f88d37d1da72d6ec3736ab71)
+++ src/SymTab/Autogen.h	(revision 5f98ce5c7a2f9f7f1b2877251c37b8b1f6bec9a7)
@@ -29,4 +29,8 @@
 	/// returns true if obj's name is the empty string and it has a bitfield width
 	bool isUnnamedBitfield( ObjectDecl * obj );
+
+	/// size_t type - set when size_t typedef is seen. Useful in a few places,
+	/// such as in determining array dimension type
+	extern Type * SizeType;
 
 	/// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls.
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 2be10237217d3203f88d37d1da72d6ec3736ab71)
+++ src/SymTab/Validate.cc	(revision 5f98ce5c7a2f9f7f1b2877251c37b8b1f6bec9a7)
@@ -174,5 +174,5 @@
 
 		virtual void visit( FunctionDecl *funcDecl );
-};
+	};
 
 	class CompoundLiteral : public GenPoly::DeclMutator {
@@ -490,5 +490,12 @@
 		EliminateTypedef eliminator;
 		mutateAll( translationUnit, eliminator );
+		if ( eliminator.typedefNames.count( "size_t" ) ) {
+			// grab and remember declaration of size_t
+			SizeType = eliminator.typedefNames["size_t"].first->get_base()->clone();
+		} else {
+			assert( false && "missing global typedef for size_t" );
+		}
 		filter( translationUnit, isTypedef, true );
+
 	}
 
@@ -518,4 +525,5 @@
 	Declaration *EliminateTypedef::mutate( TypedefDecl * tyDecl ) {
 		Declaration *ret = Mutator::mutate( tyDecl );
+
 		if ( typedefNames.count( tyDecl->get_name() ) == 1 && typedefNames[ tyDecl->get_name() ].second == scopeLevel ) {
 			// typedef to the same name from the same scope
