Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ src/AST/Expr.cpp	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -26,4 +26,5 @@
 #include "Stmt.hpp"
 #include "Type.hpp"
+#include "Util.hpp"                // for TranslationDeps
 #include "TypeSubstitution.hpp"
 #include "Common/Utility.hpp"
@@ -281,20 +282,20 @@
 
 SizeofExpr::SizeofExpr( const CodeLocation & loc, const Type * t )
-: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), type( t ) {}
+: Expr( loc, ast::TranslationDeps::getSizeType() ), type( t ) {}
 
 // --- AlignofExpr
 
 AlignofExpr::AlignofExpr( const CodeLocation & loc, const Type * t )
-: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), type( t ) {}
+: Expr( loc, ast::TranslationDeps::getSizeType() ), type( t ) {}
 
 // --- CountofExpr
 
 CountofExpr::CountofExpr( const CodeLocation & loc, const Type * t )
-: Expr( loc, new BasicType( BasicKind::LongUnsignedInt) ), type( t ) {}
+: Expr( loc, ast::TranslationDeps::getSizeType() ), type( t ) {}
 
 // --- OffsetofExpr
 
 OffsetofExpr::OffsetofExpr( const CodeLocation & loc, const Type * ty, const DeclWithType * mem )
-: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), type( ty ), member( mem ) {
+: Expr( loc, ast::TranslationDeps::getSizeType() ), type( ty ), member( mem ) {
 	assert( type );
 	assert( member );
@@ -305,5 +306,5 @@
 OffsetPackExpr::OffsetPackExpr( const CodeLocation & loc, const StructInstType * ty )
 : Expr( loc, new ArrayType{
-	new BasicType{ BasicKind::LongUnsignedInt }, nullptr, FixedLen, DynamicDim }
+	ast::TranslationDeps::getSizeType(), nullptr, FixedLen, DynamicDim }
 ), type( ty ) {
 	assert( type );
Index: src/AST/Type.hpp
===================================================================
--- src/AST/Type.hpp	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ src/AST/Type.hpp	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -344,5 +344,5 @@
 struct TypeEnvKey;
 
-/// instance of named type alias (typedef or variable)
+/// instance of named type alias (typedef, variable, or even, just after parsing, the name of a struct)
 class TypeInstType final : public BaseInstType {
 public:
Index: src/AST/Util.cpp
===================================================================
--- src/AST/Util.cpp	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ src/AST/Util.cpp	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -22,4 +22,6 @@
 #include "Common/Utility.hpp"
 #include "GenPoly/ScopedSet.hpp"
+#include "Decl.hpp"
+#include "Type.hpp"
 
 #include <vector>
@@ -382,3 +384,30 @@
 }
 
+namespace {
+	const TranslationUnit * transUnit = 0;
+}
+
+void TranslationDeps::evolve( TranslationUnit & u ) {
+	transUnit = &u;
+}
+
+const ast::Type * TranslationDeps::getSizeType() {
+	static const ast::Type * zd_abstract = new TypeInstType{ "size_t", TypeDecl::Kind::Dtype };
+	static const ast::Type * ld_concrete = new BasicType( BasicKind::LongUnsignedInt );
+	if ( ! transUnit ) {
+		// early state
+		// as if `size_t` in program text were freshly parsed
+		return zd_abstract;
+	} else if ( transUnit->global.sizeType ) {
+		// late state, normal run
+		// whatever size_t was defined as
+		return transUnit->global.sizeType;
+	} else {
+		// late state, no prelude (-n)
+		// placeholder: cfa-cpp is being used experimentally, stay out of the way
+		return ld_concrete;
+	}
+}
+
+
 } // namespace ast
Index: src/AST/Util.hpp
===================================================================
--- src/AST/Util.hpp	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ src/AST/Util.hpp	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -16,4 +16,6 @@
 #pragma once
 
+#include "Fwd.hpp"
+
 namespace ast {
 
@@ -22,5 +24,29 @@
 /// Check anything that should always be true of the AST between passes.
 /// Insert this whenever you want additional debugging checks.
-void checkInvariants( TranslationUnit & transUnit );
+void checkInvariants( TranslationUnit & );
+
+/// Maintains an AST-module state for contextual information needed in
+/// ast::* implementations, notably constructors:
+///    early: while parsing, use bootstrap versions
+///    late: once a whole TranslationUnit exists, use its answers
+/// When the program is in the later state, ast::* construcors effectively get
+/// the benefit of WithTranslationUnit, without having to pass them one.
+class TranslationDeps {
+
+    TranslationDeps() = delete;
+
+    friend class SizeofExpr;
+    friend class AlignofExpr;
+    friend class CountofExpr;
+    friend class OffsetofExpr;
+    friend class OffsetPackExpr;
+
+    /// Appropriate return type for built-in expressions that report on sizes
+    static const Type * getSizeType();
+
+  public:
+    /// Transition from early to late states
+    static void evolve( TranslationUnit & );
+};
 
 }
Index: src/main.cpp
===================================================================
--- src/main.cpp	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ src/main.cpp	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -199,4 +199,6 @@
 		Stats::Time::StopBlock();
 
+		ast::TranslationDeps::evolve( transUnit );
+
 		PASS( "Hoist Type Decls", Validate::hoistTypeDecls, transUnit );
 
Index: tests/.expect/alloc-ERROR.arm64.txt
===================================================================
--- tests/.expect/alloc-ERROR.arm64.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
+++ tests/.expect/alloc-ERROR.arm64.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -0,0 +1,48 @@
+alloc.cfa:382:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: realloc
+  ...to:
+    Name: stp
+    Applying untyped:
+      Name: ?*?
+    ...to:
+      Name: dim
+      Sizeof Expression on: type-of expression Applying untyped:
+          Name: *?
+        ...to:
+          Name: stp
+
+      ... with resolved type:
+        unsigned long int
+
+
+
+alloc.cfa:383:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: memset
+  ...to:
+    Name: stp
+    Constant Expression (10: signed int)
+    ... with resolved type:
+      signed int
+
+
+alloc.cfa:384:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: memcpy
+  ...to:
+    Address of:
+      Name: st1
+    Address of:
+      Name: st
+
+
Index: sts/.expect/alloc-ERROR.txt
===================================================================
--- tests/.expect/alloc-ERROR.txt	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ 	(revision )
@@ -1,48 +1,0 @@
-alloc.cfa:382:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
-  Name: ?=?
-...to:
-  Name: ip
-  Applying untyped:
-    Name: realloc
-  ...to:
-    Name: stp
-    Applying untyped:
-      Name: ?*?
-    ...to:
-      Name: dim
-      Sizeof Expression on: type-of expression Applying untyped:
-          Name: *?
-        ...to:
-          Name: stp
-
-      ... with resolved type:
-        unsigned long int
-
-
-
-alloc.cfa:383:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
-  Name: ?=?
-...to:
-  Name: ip
-  Applying untyped:
-    Name: memset
-  ...to:
-    Name: stp
-    Constant Expression (10: signed int)
-    ... with resolved type:
-      signed int
-
-
-alloc.cfa:384:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
-  Name: ?=?
-...to:
-  Name: ip
-  Applying untyped:
-    Name: memcpy
-  ...to:
-    Address of:
-      Name: st1
-    Address of:
-      Name: st
-
-
Index: tests/.expect/alloc-ERROR.x64.txt
===================================================================
--- tests/.expect/alloc-ERROR.x64.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
+++ tests/.expect/alloc-ERROR.x64.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -0,0 +1,48 @@
+alloc.cfa:382:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: realloc
+  ...to:
+    Name: stp
+    Applying untyped:
+      Name: ?*?
+    ...to:
+      Name: dim
+      Sizeof Expression on: type-of expression Applying untyped:
+          Name: *?
+        ...to:
+          Name: stp
+
+      ... with resolved type:
+        unsigned long int
+
+
+
+alloc.cfa:383:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: memset
+  ...to:
+    Name: stp
+    Constant Expression (10: signed int)
+    ... with resolved type:
+      signed int
+
+
+alloc.cfa:384:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: memcpy
+  ...to:
+    Address of:
+      Name: st1
+    Address of:
+      Name: st
+
+
Index: tests/.expect/alloc-ERROR.x86.txt
===================================================================
--- tests/.expect/alloc-ERROR.x86.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
+++ tests/.expect/alloc-ERROR.x86.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -0,0 +1,48 @@
+alloc.cfa:382:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: realloc
+  ...to:
+    Name: stp
+    Applying untyped:
+      Name: ?*?
+    ...to:
+      Name: dim
+      Sizeof Expression on: type-of expression Applying untyped:
+          Name: *?
+        ...to:
+          Name: stp
+
+      ... with resolved type:
+        unsigned int
+
+
+
+alloc.cfa:383:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: memset
+  ...to:
+    Name: stp
+    Constant Expression (10: signed int)
+    ... with resolved type:
+      signed int
+
+
+alloc.cfa:384:1 error: Invalid application of existing declaration(s) in expression Applying untyped:
+  Name: ?=?
+...to:
+  Name: ip
+  Applying untyped:
+    Name: memcpy
+  ...to:
+    Address of:
+      Name: st1
+    Address of:
+      Name: st
+
+
Index: tests/.expect/extension.x86.txt
===================================================================
--- tests/.expect/extension.x86.txt	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ tests/.expect/extension.x86.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -120,5 +120,5 @@
 static inline void _X12_constructorFv_U1UU1U_autogen___1(__attribute__ ((unused)) union U *_X4_dstU1U_1, __attribute__ ((unused)) union U _X4_srcU1U_1){
     {
-        ((void)__builtin_memcpy(((void *)_X4_dstU1U_1), ((const void *)(&_X4_srcU1U_1)), sizeof(union U )));
+        ((void)__builtin_memcpy(((void *)_X4_dstU1U_1), ((const void *)(&_X4_srcU1U_1)), ((unsigned long int )sizeof(union U ))));
     }
 
@@ -129,5 +129,5 @@
     __attribute__ ((unused)) union U _X4_retU1U_1;
     {
-        ((void)__builtin_memcpy(((void *)_X4_dstU1U_1), ((const void *)(&_X4_srcU1U_1)), sizeof(union U )));
+        ((void)__builtin_memcpy(((void *)_X4_dstU1U_1), ((const void *)(&_X4_srcU1U_1)), ((unsigned long int )sizeof(union U ))));
     }
 
@@ -140,5 +140,5 @@
 static inline void _X12_constructorFv_U1Ui_autogen___1(__attribute__ ((unused)) union U *_X4_dstU1U_1, signed int _X1ai_1){
     {
-        ((void)__builtin_memcpy(((void *)_X4_dstU1U_1), ((const void *)(&_X1ai_1)), sizeof(signed int )));
+        ((void)__builtin_memcpy(((void *)_X4_dstU1U_1), ((const void *)(&_X1ai_1)), ((unsigned long int )sizeof(signed int ))));
     }
 
Index: tests/array-collections/.expect/dimexpr-match-c-ERRS.x86.txt
===================================================================
--- tests/array-collections/.expect/dimexpr-match-c-ERRS.x86.txt	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ tests/array-collections/.expect/dimexpr-match-c-ERRS.x86.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -208,54 +208,4 @@
   Address of:
     Name: a  InitAlternative: pointer to array of float with dimension of Generated Cast of:
-    Sizeof Expression on: instance of type dim7 (not function type)
-    ... with resolved type:
-      unsigned long int
-  ... to:
-    unsigned int
-  ... with resolved type:
-    unsigned int
-array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
-  Address of:
-    Name: a  InitAlternative: pointer to array of float with dimension of Generated Cast of:
-    Sizeof Expression on: instance of type dim7 (not function type)
-    ... with resolved type:
-      unsigned long int
-  ... to:
-    unsigned int
-  ... with resolved type:
-    unsigned int
-array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
-  Address of:
-    Name: a  InitAlternative: pointer to array of float with dimension of Generated Cast of:
-    Sizeof Expression on: instance of type dim7 (not function type)
-    ... with resolved type:
-      unsigned long int
-  ... to:
-    unsigned int
-  ... with resolved type:
-    unsigned int
-array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
-  Address of:
-    Name: a  InitAlternative: pointer to array of float with dimension of Generated Cast of:
-    Sizeof Expression on: instance of type dim7 (not function type)
-    ... with resolved type:
-      unsigned long int
-  ... to:
-    unsigned int
-  ... with resolved type:
-    unsigned int
-array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
-  Address of:
-    Name: a  InitAlternative: pointer to array of float with dimension of Generated Cast of:
-    Sizeof Expression on: instance of type dim7 (not function type)
-    ... with resolved type:
-      unsigned long int
-  ... to:
-    unsigned int
-  ... with resolved type:
-    unsigned int
-array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
-  Address of:
-    Name: a  InitAlternative: pointer to array of float with dimension of Generated Cast of:
     Variable Expression: enu7: const instance of enum __anonymous0 with body
     ... with resolved type:
@@ -307,4 +257,29 @@
 array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
   Address of:
+    Name: a  InitAlternative: pointer to array of float with dimension of Sizeof Expression on: instance of type dim7 (not function type)
+  ... with resolved type:
+    unsigned int
+array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
+  Address of:
+    Name: a  InitAlternative: pointer to array of float with dimension of Sizeof Expression on: instance of type dim7 (not function type)
+  ... with resolved type:
+    unsigned int
+array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
+  Address of:
+    Name: a  InitAlternative: pointer to array of float with dimension of Sizeof Expression on: instance of type dim7 (not function type)
+  ... with resolved type:
+    unsigned int
+array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
+  Address of:
+    Name: a  InitAlternative: pointer to array of float with dimension of Sizeof Expression on: instance of type dim7 (not function type)
+  ... with resolved type:
+    unsigned int
+array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
+  Address of:
+    Name: a  InitAlternative: pointer to array of float with dimension of Sizeof Expression on: instance of type dim7 (not function type)
+  ... with resolved type:
+    unsigned int
+array-collections/dimexpr-match-c.cfa:49:1 error: Invalid application of existing declaration(s) in expression Untyped Init Expression
+  Address of:
     Name: a  InitAlternative: pointer to variable length array of float with dimension of Generated Cast of:
     Variable Expression: _array_dim16: const unsigned int
Index: tests/nowarn/.expect/printf-sizeof.txt
===================================================================
--- tests/nowarn/.expect/printf-sizeof.txt	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ tests/nowarn/.expect/printf-sizeof.txt	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -2,2 +2,3 @@
 1
 10
+0 1 2 3 4 5 6 7 8 9
Index: tests/nowarn/printf-sizeof.cfa
===================================================================
--- tests/nowarn/printf-sizeof.cfa	(revision 92aeae1667289861a017707f978dd14d8c28e51e)
+++ tests/nowarn/printf-sizeof.cfa	(revision d3d54b3f6c6e72820dcc274dd66a67aa194b7ded)
@@ -11,12 +11,10 @@
 forall( [N] )
 void mary( array(char, N) & ) {
-    printf( "%zu\n", N );    
-  #if defined TRY_TRAC_269_REMAINDER
-	for ( i; N ) {
+    printf( "%zu\n", N );
+    for ( i; N ) {
         if (i > 0) printf(" ");
-        printf( "%zu", i); // FIX ME: i still getting type long unsigned int on -m32
-	}
+        printf( "%zu", i);
+    }
     printf("\n");
-  #endif
 }
 
