Index: src/Tests/Attributes.c
===================================================================
--- src/Tests/Attributes.c	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Attributes.c	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,11 +1,61 @@
+// I Compile-time resolution
+// =========================
+// 
+// 1. an isolated name, where the argument is implicitly determined by the result context
+// 
+//    @max
+// 
+// 2. a direct application to a manifest type
+// 
+//    @max( int )
+// 
+// 3. constraining a type variable; the application is implicitly performed at the call site as in (2)
+// 
+//    forall( type T | { T @max( T ); } ) T x( T t );
+// 
+// 
+// II Run-time resolution
+// ======================
+// 
+// 1. an indirect reference, where the argument is implicitly determined by the result context
+// 
+//    attr_var = &@max;
+//    x = (*attr_var);
+// 
+// 2. an indirect application to a manifest type
+// 
+//    (*attr_var)( int )
+// 
+// 3. a direct application to a type variable
+// 
+//    @max( T )
+// 
+// Under what circumstances can this be done at compile/link time?
+// 
+// 
+// III Declaration forms
+// =====================
+// 
+// 1. monomorphic with implicit argument
+// 
+//    int @max;
+// 
+// 2. monomorphic with explicit argument
+// 
+//    int @max( int );
+// 
+// 3. polymorphic
+// 
+//    forall( type T | constraint( T ) ) int @attr( T );
+
 int @max = 3;
 
 int main() {
     int x;
-    type @type(type t);		// compiler intrinsic
+    type @type(type t);									// compiler intrinsic
     type @widest(type t);
-    @type(x) *y;		// gcc: typeof(x) *y;
-    const @widest(double) *w;	// gcc: const typeof(x) *w;
-    * @type(3 + 4) z;		// cfa declaration syntax
+    @type(x) *y;										// gcc: typeof(x) *y;
+    const @widest(double) *w;							// gcc: const typeof(x) *w;
+    * @type(3 + 4) z;									// cfa declaration syntax
     y = @max;		
     z = @max(x) + @size(int);
Index: src/Tests/Expect-a/AsmName.txt
===================================================================
--- src/Tests/Expect-a/AsmName.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-a/AsmName.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,3 +1,3 @@
-x: auto signed int 
+x: extern signed int 
 fred: function
     with parameters
Index: src/Tests/Expect-a/Attributes.txt
===================================================================
--- src/Tests/Expect-a/Attributes.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-a/Attributes.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,1 +1,1 @@
-Error at line 8 reading token "*"
+Error at line 58 reading token "*"
Index: src/Tests/Expect-a/Context.txt
===================================================================
--- src/Tests/Expect-a/Context.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-a/Context.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -52,6 +52,6 @@
 
 
-        Declaration of x: auto type
-        Declaration of y: auto type
+        Declaration of x: extern type
+        Declaration of y: extern type
           with assertions
             instance of context has_r 
Index: src/Tests/Expect-a/Functions.txt
===================================================================
--- src/Tests/Expect-a/Functions.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-a/Functions.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -173,13 +173,13 @@
       CompoundStmt
 
-fII3: auto function
-    with parameters
-      i: signed int 
-    returning 
-      signed int 
-    with body 
-      CompoundStmt
-
-fII4: auto function
+fII3: extern function
+    with parameters
+      i: signed int 
+    returning 
+      signed int 
+    with body 
+      CompoundStmt
+
+fII4: extern function
     with parameters
       i: signed int 
@@ -257,5 +257,5 @@
       CompoundStmt
 
-fO4: auto function
+fO4: extern function
       accepting unspecified arguments
     returning 
@@ -268,5 +268,5 @@
       CompoundStmt
 
-fO5: auto function
+fO5: extern function
       accepting unspecified arguments
     returning 
Index: src/Tests/Expect-a/TypeGenerator.txt
===================================================================
--- src/Tests/Expect-a/TypeGenerator.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-a/TypeGenerator.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -65,23 +65,4 @@
       signed int 
 
-struct S1
-    with parameters
-      T: type
-
-struct S1
-    with parameters
-      T: type
-
-    with members
-      i: instance of type T (not function type) 
-
-v1: instance of struct S1 
-  with parameters
-    signed int 
-
-p: pointer to instance of struct S1 
-  with parameters
-    signed int 
-
 struct S2
     with parameters
@@ -91,5 +72,20 @@
       i: instance of type T (not function type) 
 
-v2: instance of struct S2 
+v1: instance of struct S3 
+  with parameters
+    signed int 
+
+p: pointer to instance of struct S3 
+  with parameters
+    signed int 
+
+struct S24
+    with parameters
+      T: type
+
+    with members
+      i: instance of type T (not function type) 
+
+v2: instance of struct S24 
   with parameters
     signed int 
Index: src/Tests/Expect-e/AsmName.txt
===================================================================
--- src/Tests/Expect-e/AsmName.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-e/AsmName.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,3 +1,3 @@
-x: auto signed int 
+x: extern signed int 
 fred: function
     with parameters
Index: src/Tests/Expect-e/Attributes.txt
===================================================================
--- src/Tests/Expect-e/Attributes.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-e/Attributes.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,1 +1,1 @@
-Error at line 8 reading token "*"
+Error at line 58 reading token "*"
Index: src/Tests/Expect-e/Context.txt
===================================================================
--- src/Tests/Expect-e/Context.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-e/Context.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -54,5 +54,5 @@
 
 
-        Declaration of x: auto type
+        Declaration of x: extern type
         Declaration of ?=?: automatically generated function
             with parameters
@@ -62,5 +62,5 @@
               instance of type x (not function type) 
 
-        Declaration of y: auto type
+        Declaration of y: extern type
           with assertions
             instance of context has_r 
Index: src/Tests/Expect-e/Function.txt
===================================================================
--- src/Tests/Expect-e/Function.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-e/Function.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -245,4 +245,4 @@
 
 
-cfa-cpp: GenPoly/Box.cc:398: void GenPoly::{anonymous}::Pass1::boxParams(ApplicationExpr*, FunctionType*, std::list<Expression*>::iterator&, const TyVarMap&): Assertion `arg != appExpr->get_args().end()' failed.
+cfa-cpp: GenPoly/Box.cc:401: void GenPoly::{anonymous}::Pass1::boxParams(ApplicationExpr*, FunctionType*, std::list<Expression*>::iterator&, const TyVarMap&): Assertion `arg != appExpr->get_args().end()' failed.
 Aborted (core dumped)
Index: src/Tests/Expect-e/TypeGenerator.txt
===================================================================
--- src/Tests/Expect-e/TypeGenerator.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-e/TypeGenerator.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -53,9 +53,9 @@
             Name: *?
         ...to: 
-            Variable Expression: _dst: pointer to instance of struct S1 
+            Variable Expression: _dst: pointer to instance of struct S2 
     Member Expression, with field: 
       i: instance of type T (not function type) 
     from aggregate: 
-      Variable Expression: _src: instance of struct S1 
+      Variable Expression: _src: instance of struct S2 
 
 Error: No reasonable alternatives for expression Applying untyped: 
@@ -69,9 +69,9 @@
             Name: *?
         ...to: 
-            Variable Expression: _dst: pointer to instance of struct S2 
+            Variable Expression: _dst: pointer to instance of struct S24 
     Member Expression, with field: 
       i: instance of type T (not function type) 
     from aggregate: 
-      Variable Expression: _src: instance of struct S2 
+      Variable Expression: _src: instance of struct S24 
 
 Error: No reasonable alternatives for expression Applying untyped: 
Index: src/Tests/Expect-e/report
===================================================================
--- src/Tests/Expect-e/report	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-e/report	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -2,4 +2,8 @@
 ---Array.txt---
 ---AsmName.txt---
+1c1
+< x: auto signed int 
+---
+> x: extern signed int 
 ---Attributes.txt---
 ---Cast.txt---
@@ -9,4 +13,12 @@
 ---Constant0-1.txt---
 ---Context.txt---
+56c56
+<         Declaration of x: auto type
+---
+>         Declaration of x: extern type
+64c64
+<         Declaration of y: auto type
+---
+>         Declaration of y: extern type
 ---DeclarationErrors.txt---
 ---DeclarationSpecifier.txt---
@@ -16,4 +28,8 @@
 ---Forall.txt---
 ---Function.txt---
+247c247
+< cfa-cpp: GenPoly/Box.cc:398: void GenPoly::{anonymous}::Pass1::boxParams(ApplicationExpr*, FunctionType*, std::list<Expression*>::iterator&, const TyVarMap&): Assertion `arg != appExpr->get_args().end()' failed.
+---
+> cfa-cpp: GenPoly/Box.cc:401: void GenPoly::{anonymous}::Pass1::boxParams(ApplicationExpr*, FunctionType*, std::list<Expression*>::iterator&, const TyVarMap&): Assertion `arg != appExpr->get_args().end()' failed.
 ---Functions.txt---
 ---GccExtensions.txt---
Index: src/Tests/Expect-f/Attributes.txt
===================================================================
--- src/Tests/Expect-f/Attributes.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-f/Attributes.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,1 +1,1 @@
-Error at line 8 reading token "*"
+Error at line 58 reading token "*"
Index: src/Tests/Expect-f/TypeGenerator.txt
===================================================================
--- src/Tests/Expect-f/TypeGenerator.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-f/TypeGenerator.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -47,9 +47,9 @@
             Name: *?
         ...to: 
-            Variable Expression: _dst: pointer to instance of struct S1 
+            Variable Expression: _dst: pointer to instance of struct S2 
     Member Expression, with field: 
       i: instance of type T (not function type) 
     from aggregate: 
-      Variable Expression: _src: instance of struct S1 
+      Variable Expression: _src: instance of struct S2 
 
 Error: No reasonable alternatives for expression Applying untyped: 
@@ -63,9 +63,9 @@
             Name: *?
         ...to: 
-            Variable Expression: _dst: pointer to instance of struct S2 
+            Variable Expression: _dst: pointer to instance of struct S24 
     Member Expression, with field: 
       i: instance of type T (not function type) 
     from aggregate: 
-      Variable Expression: _src: instance of struct S2 
+      Variable Expression: _src: instance of struct S24 
 
 Error: No reasonable alternatives for expression Applying untyped: 
Index: src/Tests/Expect-r/Attributes.txt
===================================================================
--- src/Tests/Expect-r/Attributes.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-r/Attributes.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,1 +1,1 @@
-Error at line 8 reading token "*"
+Error at line 58 reading token "*"
Index: src/Tests/Expect-r/Function.txt
===================================================================
--- src/Tests/Expect-r/Function.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-r/Function.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -4954,4 +4954,4 @@
 there are 1 alternatives before elimination
 there are 1 alternatives after elimination
-cfa-cpp: GenPoly/Box.cc:398: void GenPoly::{anonymous}::Pass1::boxParams(ApplicationExpr*, FunctionType*, std::list<Expression*>::iterator&, const TyVarMap&): Assertion `arg != appExpr->get_args().end()' failed.
+cfa-cpp: GenPoly/Box.cc:401: void GenPoly::{anonymous}::Pass1::boxParams(ApplicationExpr*, FunctionType*, std::list<Expression*>::iterator&, const TyVarMap&): Assertion `arg != appExpr->get_args().end()' failed.
 Aborted (core dumped)
Index: src/Tests/Expect-r/TypeGenerator.txt
===================================================================
--- src/Tests/Expect-r/TypeGenerator.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-r/TypeGenerator.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -610,8 +610,8 @@
 decl is ?=?: automatically generated inline static function
   with parameters
-    _dst: pointer to instance of struct S1 
-    _src: instance of struct S1 
+    _dst: pointer to instance of struct S2 
+    _src: instance of struct S2 
   returning 
-    instance of struct S1 
+    instance of struct S2 
   with body 
     CompoundStmt
@@ -627,11 +627,11 @@
                       Name: *?
                   ...to: 
-                      Variable Expression: _dst: pointer to instance of struct S1 
+                      Variable Expression: _dst: pointer to instance of struct S2 
               Member Expression, with field: 
                 i: instance of type T (not function type) 
               from aggregate: 
-                Variable Expression: _src: instance of struct S1 
-
-              Return Statement, returning: Variable Expression: _src: instance of struct S1 
+                Variable Expression: _src: instance of struct S2 
+
+              Return Statement, returning: Variable Expression: _src: instance of struct S2 
 
 
@@ -639,8 +639,8 @@
 newExpr is Variable Expression: ?=?: inline static function
     with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
+      _dst: pointer to instance of struct S2 
+      _src: instance of struct S2 
+    returning 
+      instance of struct S2 
 
 
@@ -698,16 +698,16 @@
 Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
     with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
+      _dst: pointer to instance of struct S2 
+      _src: instance of struct S2 
+    returning 
+      instance of struct S2 
 
 (types:
     pointer to function
         with parameters
-          _dst: pointer to instance of struct S1 
-          _src: instance of struct S1 
+          _dst: pointer to instance of struct S2 
+          _src: instance of struct S2 
         returning 
-          instance of struct S1 
+          instance of struct S2 
 
 )
@@ -741,5 +741,5 @@
       Name: *?
   ...to: 
-      Variable Expression: _dst: pointer to instance of struct S1 
+      Variable Expression: _dst: pointer to instance of struct S2 
 (types:
     lvalue instance of type T (not function type) 
@@ -757,5 +757,5 @@
         Name: *?
     ...to: 
-        Variable Expression: _dst: pointer to instance of struct S1 
+        Variable Expression: _dst: pointer to instance of struct S2 
 (types:
     pointer to instance of type T (not function type) 
@@ -773,5 +773,5 @@
         Name: *?
     ...to: 
-        Variable Expression: _dst: pointer to instance of struct S1 
+        Variable Expression: _dst: pointer to instance of struct S2 
 (types:
     pointer to instance of type T (not function type) 
@@ -783,5 +783,5 @@
   i: instance of type T (not function type) 
 from aggregate: 
-  Variable Expression: _src: instance of struct S1 
+  Variable Expression: _src: instance of struct S2 
 (types:
     lvalue instance of type T (not function type) 
@@ -795,5 +795,5 @@
   i: instance of type T (not function type) 
 from aggregate: 
-  Variable Expression: _src: instance of struct S1 
+  Variable Expression: _src: instance of struct S2 
 (types:
     lvalue instance of type T (not function type) 
@@ -824,20 +824,20 @@
         Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
             with parameters
-              _dst: pointer to instance of struct S1 
-              _src: instance of struct S1 
+              _dst: pointer to instance of struct S2 
+              _src: instance of struct S2 
             returning 
-              instance of struct S1 
+              instance of struct S2 
 
 (types:
             pointer to function
                 with parameters
-                  _dst: pointer to instance of struct S1 
-                  _src: instance of struct S1 
+                  _dst: pointer to instance of struct S2 
+                  _src: instance of struct S2 
                 returning 
-                  instance of struct S1 
+                  instance of struct S2 
 
 )
         Environment: 
-formal type is pointer to instance of struct S1 
+formal type is pointer to instance of struct S2 
 actual type is pointer to instance of type T (not function type) 
 working on alternative: 
@@ -862,7 +862,7 @@
 actual type is pointer to instance of type T (not function type) 
 alternatives before prune:
-Cost ( 0, 0, 0 ): Variable Expression: _src: instance of struct S1 
-(types:
-    lvalue instance of struct S1 
+Cost ( 0, 0, 0 ): Variable Expression: _src: instance of struct S2 
+(types:
+    lvalue instance of struct S2 
 )
 Environment: 
@@ -872,10 +872,10 @@
 alternatives before prune:
 Cost ( 0, 0, 0 ): Cast of:
-  Variable Expression: _src: instance of struct S1 
+  Variable Expression: _src: instance of struct S2 
 
 to:
-  instance of struct S1 
-(types:
-    instance of struct S1 
+  instance of struct S2 
+(types:
+    instance of struct S2 
 )
 Environment: 
@@ -953,48 +953,4 @@
 decl is ?=?: automatically generated inline static function
   with parameters
-    _dst: pointer to instance of struct S1 
-    _src: instance of struct S1 
-  returning 
-    instance of struct S1 
-  with body 
-    CompoundStmt
-              Expression Statement:
-          Applying untyped: 
-              Name: ?=?
-          ...to: 
-              Address of:
-                Member Expression, with field: 
-                  i: instance of type T (not function type) 
-                from aggregate: 
-                  Applying untyped: 
-                      Name: *?
-                  ...to: 
-                      Variable Expression: _dst: pointer to instance of struct S1 
-              Member Expression, with field: 
-                i: instance of type T (not function type) 
-              from aggregate: 
-                Variable Expression: _src: instance of struct S1 
-
-              Return Statement, returning: Cast of:
-  Variable Expression: _src: instance of struct S1 
-
-to:
-  instance of struct S1 
-with environment:
-  Types:
-  Non-types:
-
-
-
-newExpr is Variable Expression: ?=?: inline static function
-    with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-
-decl is ?=?: automatically generated inline static function
-  with parameters
     _dst: pointer to instance of struct S2 
     _src: instance of struct S2 
@@ -1020,5 +976,12 @@
                 Variable Expression: _src: instance of struct S2 
 
-              Return Statement, returning: Variable Expression: _src: instance of struct S2 
+              Return Statement, returning: Cast of:
+  Variable Expression: _src: instance of struct S2 
+
+to:
+  instance of struct S2 
+with environment:
+  Types:
+  Non-types:
 
 
@@ -1030,4 +993,41 @@
     returning 
       instance of struct S2 
+
+
+decl is ?=?: automatically generated inline static function
+  with parameters
+    _dst: pointer to instance of struct S24 
+    _src: instance of struct S24 
+  returning 
+    instance of struct S24 
+  with body 
+    CompoundStmt
+              Expression Statement:
+          Applying untyped: 
+              Name: ?=?
+          ...to: 
+              Address of:
+                Member Expression, with field: 
+                  i: instance of type T (not function type) 
+                from aggregate: 
+                  Applying untyped: 
+                      Name: *?
+                  ...to: 
+                      Variable Expression: _dst: pointer to instance of struct S24 
+              Member Expression, with field: 
+                i: instance of type T (not function type) 
+              from aggregate: 
+                Variable Expression: _src: instance of struct S24 
+
+              Return Statement, returning: Variable Expression: _src: instance of struct S24 
+
+
+
+newExpr is Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
 
 
@@ -1085,22 +1085,4 @@
 Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
     with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-(types:
-    pointer to function
-        with parameters
-          _dst: pointer to instance of struct S1 
-          _src: instance of struct S1 
-        returning 
-          instance of struct S1 
-
-)
-Environment: 
-
-Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
-    with parameters
       _dst: pointer to instance of struct S2 
       _src: instance of struct S2 
@@ -1115,4 +1097,22 @@
         returning 
           instance of struct S2 
+
+)
+Environment: 
+
+Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
+
+(types:
+    pointer to function
+        with parameters
+          _dst: pointer to instance of struct S24 
+          _src: instance of struct S24 
+        returning 
+          instance of struct S24 
 
 )
@@ -1146,5 +1146,5 @@
       Name: *?
   ...to: 
-      Variable Expression: _dst: pointer to instance of struct S2 
+      Variable Expression: _dst: pointer to instance of struct S24 
 (types:
     lvalue instance of type T (not function type) 
@@ -1162,5 +1162,5 @@
         Name: *?
     ...to: 
-        Variable Expression: _dst: pointer to instance of struct S2 
+        Variable Expression: _dst: pointer to instance of struct S24 
 (types:
     pointer to instance of type T (not function type) 
@@ -1178,5 +1178,5 @@
         Name: *?
     ...to: 
-        Variable Expression: _dst: pointer to instance of struct S2 
+        Variable Expression: _dst: pointer to instance of struct S24 
 (types:
     pointer to instance of type T (not function type) 
@@ -1188,5 +1188,5 @@
   i: instance of type T (not function type) 
 from aggregate: 
-  Variable Expression: _src: instance of struct S2 
+  Variable Expression: _src: instance of struct S24 
 (types:
     lvalue instance of type T (not function type) 
@@ -1200,5 +1200,5 @@
   i: instance of type T (not function type) 
 from aggregate: 
-  Variable Expression: _src: instance of struct S2 
+  Variable Expression: _src: instance of struct S24 
 (types:
     lvalue instance of type T (not function type) 
@@ -1225,4 +1225,24 @@
         Environment: 
 formal type is pointer to instance of type List1 (not function type) 
+actual type is pointer to instance of type T (not function type) 
+working on alternative: 
+        Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
+            with parameters
+              _dst: pointer to instance of struct S24 
+              _src: instance of struct S24 
+            returning 
+              instance of struct S24 
+
+(types:
+            pointer to function
+                with parameters
+                  _dst: pointer to instance of struct S24 
+                  _src: instance of struct S24 
+                returning 
+                  instance of struct S24 
+
+)
+        Environment: 
+formal type is pointer to instance of struct S24 
 actual type is pointer to instance of type T (not function type) 
 working on alternative: 
@@ -1249,24 +1269,4 @@
         Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
             with parameters
-              _dst: pointer to instance of struct S1 
-              _src: instance of struct S1 
-            returning 
-              instance of struct S1 
-
-(types:
-            pointer to function
-                with parameters
-                  _dst: pointer to instance of struct S1 
-                  _src: instance of struct S1 
-                returning 
-                  instance of struct S1 
-
-)
-        Environment: 
-formal type is pointer to instance of struct S1 
-actual type is pointer to instance of type T (not function type) 
-working on alternative: 
-        Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
-            with parameters
               _dst: pointer to instance of struct __anonymous0 
               _src: instance of struct __anonymous0 
@@ -1287,7 +1287,7 @@
 actual type is pointer to instance of type T (not function type) 
 alternatives before prune:
-Cost ( 0, 0, 0 ): Variable Expression: _src: instance of struct S2 
-(types:
-    lvalue instance of struct S2 
+Cost ( 0, 0, 0 ): Variable Expression: _src: instance of struct S24 
+(types:
+    lvalue instance of struct S24 
 )
 Environment: 
@@ -1297,10 +1297,10 @@
 alternatives before prune:
 Cost ( 0, 0, 0 ): Cast of:
-  Variable Expression: _src: instance of struct S2 
+  Variable Expression: _src: instance of struct S24 
 
 to:
-  instance of struct S2 
-(types:
-    instance of struct S2 
+  instance of struct S24 
+(types:
+    instance of struct S24 
 )
 Environment: 
@@ -1415,48 +1415,4 @@
 decl is ?=?: automatically generated inline static function
   with parameters
-    _dst: pointer to instance of struct S1 
-    _src: instance of struct S1 
-  returning 
-    instance of struct S1 
-  with body 
-    CompoundStmt
-              Expression Statement:
-          Applying untyped: 
-              Name: ?=?
-          ...to: 
-              Address of:
-                Member Expression, with field: 
-                  i: instance of type T (not function type) 
-                from aggregate: 
-                  Applying untyped: 
-                      Name: *?
-                  ...to: 
-                      Variable Expression: _dst: pointer to instance of struct S1 
-              Member Expression, with field: 
-                i: instance of type T (not function type) 
-              from aggregate: 
-                Variable Expression: _src: instance of struct S1 
-
-              Return Statement, returning: Cast of:
-  Variable Expression: _src: instance of struct S1 
-
-to:
-  instance of struct S1 
-with environment:
-  Types:
-  Non-types:
-
-
-
-newExpr is Variable Expression: ?=?: inline static function
-    with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-
-decl is ?=?: automatically generated inline static function
-  with parameters
     _dst: pointer to instance of struct S2 
     _src: instance of struct S2 
@@ -1499,4 +1455,48 @@
     returning 
       instance of struct S2 
+
+
+decl is ?=?: automatically generated inline static function
+  with parameters
+    _dst: pointer to instance of struct S24 
+    _src: instance of struct S24 
+  returning 
+    instance of struct S24 
+  with body 
+    CompoundStmt
+              Expression Statement:
+          Applying untyped: 
+              Name: ?=?
+          ...to: 
+              Address of:
+                Member Expression, with field: 
+                  i: instance of type T (not function type) 
+                from aggregate: 
+                  Applying untyped: 
+                      Name: *?
+                  ...to: 
+                      Variable Expression: _dst: pointer to instance of struct S24 
+              Member Expression, with field: 
+                i: instance of type T (not function type) 
+              from aggregate: 
+                Variable Expression: _src: instance of struct S24 
+
+              Return Statement, returning: Cast of:
+  Variable Expression: _src: instance of struct S24 
+
+to:
+  instance of struct S24 
+with environment:
+  Types:
+  Non-types:
+
+
+
+newExpr is Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
 
 
@@ -1572,22 +1572,4 @@
 Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
     with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-(types:
-    pointer to function
-        with parameters
-          _dst: pointer to instance of struct S1 
-          _src: instance of struct S1 
-        returning 
-          instance of struct S1 
-
-)
-Environment: 
-
-Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
-    with parameters
       _dst: pointer to instance of struct S2 
       _src: instance of struct S2 
@@ -1602,4 +1584,22 @@
         returning 
           instance of struct S2 
+
+)
+Environment: 
+
+Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
+
+(types:
+    pointer to function
+        with parameters
+          _dst: pointer to instance of struct S24 
+          _src: instance of struct S24 
+        returning 
+          instance of struct S24 
 
 )
@@ -1716,4 +1716,24 @@
         Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
             with parameters
+              _dst: pointer to instance of struct S24 
+              _src: instance of struct S24 
+            returning 
+              instance of struct S24 
+
+(types:
+            pointer to function
+                with parameters
+                  _dst: pointer to instance of struct S24 
+                  _src: instance of struct S24 
+                returning 
+                  instance of struct S24 
+
+)
+        Environment: 
+formal type is pointer to instance of struct S24 
+actual type is pointer to instance of type T (not function type) 
+working on alternative: 
+        Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
+            with parameters
               _dst: pointer to instance of struct S2 
               _src: instance of struct S2 
@@ -1732,24 +1752,4 @@
         Environment: 
 formal type is pointer to instance of struct S2 
-actual type is pointer to instance of type T (not function type) 
-working on alternative: 
-        Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
-            with parameters
-              _dst: pointer to instance of struct S1 
-              _src: instance of struct S1 
-            returning 
-              instance of struct S1 
-
-(types:
-            pointer to function
-                with parameters
-                  _dst: pointer to instance of struct S1 
-                  _src: instance of struct S1 
-                returning 
-                  instance of struct S1 
-
-)
-        Environment: 
-formal type is pointer to instance of struct S1 
 actual type is pointer to instance of type T (not function type) 
 working on alternative: 
@@ -1929,48 +1929,4 @@
 decl is ?=?: automatically generated inline static function
   with parameters
-    _dst: pointer to instance of struct S1 
-    _src: instance of struct S1 
-  returning 
-    instance of struct S1 
-  with body 
-    CompoundStmt
-              Expression Statement:
-          Applying untyped: 
-              Name: ?=?
-          ...to: 
-              Address of:
-                Member Expression, with field: 
-                  i: instance of type T (not function type) 
-                from aggregate: 
-                  Applying untyped: 
-                      Name: *?
-                  ...to: 
-                      Variable Expression: _dst: pointer to instance of struct S1 
-              Member Expression, with field: 
-                i: instance of type T (not function type) 
-              from aggregate: 
-                Variable Expression: _src: instance of struct S1 
-
-              Return Statement, returning: Cast of:
-  Variable Expression: _src: instance of struct S1 
-
-to:
-  instance of struct S1 
-with environment:
-  Types:
-  Non-types:
-
-
-
-newExpr is Variable Expression: ?=?: inline static function
-    with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-
-decl is ?=?: automatically generated inline static function
-  with parameters
     _dst: pointer to instance of struct S2 
     _src: instance of struct S2 
@@ -2013,4 +1969,48 @@
     returning 
       instance of struct S2 
+
+
+decl is ?=?: automatically generated inline static function
+  with parameters
+    _dst: pointer to instance of struct S24 
+    _src: instance of struct S24 
+  returning 
+    instance of struct S24 
+  with body 
+    CompoundStmt
+              Expression Statement:
+          Applying untyped: 
+              Name: ?=?
+          ...to: 
+              Address of:
+                Member Expression, with field: 
+                  i: instance of type T (not function type) 
+                from aggregate: 
+                  Applying untyped: 
+                      Name: *?
+                  ...to: 
+                      Variable Expression: _dst: pointer to instance of struct S24 
+              Member Expression, with field: 
+                i: instance of type T (not function type) 
+              from aggregate: 
+                Variable Expression: _src: instance of struct S24 
+
+              Return Statement, returning: Cast of:
+  Variable Expression: _src: instance of struct S24 
+
+to:
+  instance of struct S24 
+with environment:
+  Types:
+  Non-types:
+
+
+
+newExpr is Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
 
 
@@ -2146,22 +2146,4 @@
 Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
     with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-(types:
-    pointer to function
-        with parameters
-          _dst: pointer to instance of struct S1 
-          _src: instance of struct S1 
-        returning 
-          instance of struct S1 
-
-)
-Environment: 
-
-Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
-    with parameters
       _dst: pointer to instance of struct S2 
       _src: instance of struct S2 
@@ -2176,4 +2158,22 @@
         returning 
           instance of struct S2 
+
+)
+Environment: 
+
+Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
+
+(types:
+    pointer to function
+        with parameters
+          _dst: pointer to instance of struct S24 
+          _src: instance of struct S24 
+        returning 
+          instance of struct S24 
 
 )
@@ -2328,4 +2328,24 @@
         Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
             with parameters
+              _dst: pointer to instance of struct S24 
+              _src: instance of struct S24 
+            returning 
+              instance of struct S24 
+
+(types:
+            pointer to function
+                with parameters
+                  _dst: pointer to instance of struct S24 
+                  _src: instance of struct S24 
+                returning 
+                  instance of struct S24 
+
+)
+        Environment: 
+formal type is pointer to instance of struct S24 
+actual type is pointer to instance of type T (not function type) 
+working on alternative: 
+        Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
+            with parameters
               _dst: pointer to instance of struct S2 
               _src: instance of struct S2 
@@ -2344,24 +2364,4 @@
         Environment: 
 formal type is pointer to instance of struct S2 
-actual type is pointer to instance of type T (not function type) 
-working on alternative: 
-        Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
-            with parameters
-              _dst: pointer to instance of struct S1 
-              _src: instance of struct S1 
-            returning 
-              instance of struct S1 
-
-(types:
-            pointer to function
-                with parameters
-                  _dst: pointer to instance of struct S1 
-                  _src: instance of struct S1 
-                returning 
-                  instance of struct S1 
-
-)
-        Environment: 
-formal type is pointer to instance of struct S1 
 actual type is pointer to instance of type T (not function type) 
 working on alternative: 
@@ -2519,48 +2519,4 @@
 decl is ?=?: automatically generated inline static function
   with parameters
-    _dst: pointer to instance of struct S1 
-    _src: instance of struct S1 
-  returning 
-    instance of struct S1 
-  with body 
-    CompoundStmt
-              Expression Statement:
-          Applying untyped: 
-              Name: ?=?
-          ...to: 
-              Address of:
-                Member Expression, with field: 
-                  i: instance of type T (not function type) 
-                from aggregate: 
-                  Applying untyped: 
-                      Name: *?
-                  ...to: 
-                      Variable Expression: _dst: pointer to instance of struct S1 
-              Member Expression, with field: 
-                i: instance of type T (not function type) 
-              from aggregate: 
-                Variable Expression: _src: instance of struct S1 
-
-              Return Statement, returning: Cast of:
-  Variable Expression: _src: instance of struct S1 
-
-to:
-  instance of struct S1 
-with environment:
-  Types:
-  Non-types:
-
-
-
-newExpr is Variable Expression: ?=?: inline static function
-    with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-
-decl is ?=?: automatically generated inline static function
-  with parameters
     _dst: pointer to instance of struct S2 
     _src: instance of struct S2 
@@ -2603,4 +2559,48 @@
     returning 
       instance of struct S2 
+
+
+decl is ?=?: automatically generated inline static function
+  with parameters
+    _dst: pointer to instance of struct S24 
+    _src: instance of struct S24 
+  returning 
+    instance of struct S24 
+  with body 
+    CompoundStmt
+              Expression Statement:
+          Applying untyped: 
+              Name: ?=?
+          ...to: 
+              Address of:
+                Member Expression, with field: 
+                  i: instance of type T (not function type) 
+                from aggregate: 
+                  Applying untyped: 
+                      Name: *?
+                  ...to: 
+                      Variable Expression: _dst: pointer to instance of struct S24 
+              Member Expression, with field: 
+                i: instance of type T (not function type) 
+              from aggregate: 
+                Variable Expression: _src: instance of struct S24 
+
+              Return Statement, returning: Cast of:
+  Variable Expression: _src: instance of struct S24 
+
+to:
+  instance of struct S24 
+with environment:
+  Types:
+  Non-types:
+
+
+
+newExpr is Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
 
 
@@ -2736,22 +2736,4 @@
 Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
     with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-(types:
-    pointer to function
-        with parameters
-          _dst: pointer to instance of struct S1 
-          _src: instance of struct S1 
-        returning 
-          instance of struct S1 
-
-)
-Environment: 
-
-Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
-    with parameters
       _dst: pointer to instance of struct S2 
       _src: instance of struct S2 
@@ -2766,4 +2748,22 @@
         returning 
           instance of struct S2 
+
+)
+Environment: 
+
+Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
+
+(types:
+    pointer to function
+        with parameters
+          _dst: pointer to instance of struct S24 
+          _src: instance of struct S24 
+        returning 
+          instance of struct S24 
 
 )
@@ -2954,4 +2954,27 @@
         Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
             with parameters
+              _dst: pointer to instance of struct S24 
+              _src: instance of struct S24 
+            returning 
+              instance of struct S24 
+
+(types:
+            pointer to function
+                with parameters
+                  _dst: pointer to instance of struct S24 
+                  _src: instance of struct S24 
+                returning 
+                  instance of struct S24 
+
+)
+        Environment: 
+formal type is pointer to instance of struct S24 
+actual type is pointer to pointer to instance of struct node 
+with parameters
+  instance of type T (not function type) 
+
+working on alternative: 
+        Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
+            with parameters
               _dst: pointer to instance of struct S2 
               _src: instance of struct S2 
@@ -2970,27 +2993,4 @@
         Environment: 
 formal type is pointer to instance of struct S2 
-actual type is pointer to pointer to instance of struct node 
-with parameters
-  instance of type T (not function type) 
-
-working on alternative: 
-        Cost ( 0, 0, 0 ):         Variable Expression: ?=?: inline static function
-            with parameters
-              _dst: pointer to instance of struct S1 
-              _src: instance of struct S1 
-            returning 
-              instance of struct S1 
-
-(types:
-            pointer to function
-                with parameters
-                  _dst: pointer to instance of struct S1 
-                  _src: instance of struct S1 
-                returning 
-                  instance of struct S1 
-
-)
-        Environment: 
-formal type is pointer to instance of struct S1 
 actual type is pointer to pointer to instance of struct node 
 with parameters
@@ -3179,48 +3179,4 @@
 decl is ?=?: automatically generated inline static function
   with parameters
-    _dst: pointer to instance of struct S1 
-    _src: instance of struct S1 
-  returning 
-    instance of struct S1 
-  with body 
-    CompoundStmt
-              Expression Statement:
-          Applying untyped: 
-              Name: ?=?
-          ...to: 
-              Address of:
-                Member Expression, with field: 
-                  i: instance of type T (not function type) 
-                from aggregate: 
-                  Applying untyped: 
-                      Name: *?
-                  ...to: 
-                      Variable Expression: _dst: pointer to instance of struct S1 
-              Member Expression, with field: 
-                i: instance of type T (not function type) 
-              from aggregate: 
-                Variable Expression: _src: instance of struct S1 
-
-              Return Statement, returning: Cast of:
-  Variable Expression: _src: instance of struct S1 
-
-to:
-  instance of struct S1 
-with environment:
-  Types:
-  Non-types:
-
-
-
-newExpr is Variable Expression: ?=?: inline static function
-    with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-
-decl is ?=?: automatically generated inline static function
-  with parameters
     _dst: pointer to instance of struct S2 
     _src: instance of struct S2 
@@ -3263,4 +3219,48 @@
     returning 
       instance of struct S2 
+
+
+decl is ?=?: automatically generated inline static function
+  with parameters
+    _dst: pointer to instance of struct S24 
+    _src: instance of struct S24 
+  returning 
+    instance of struct S24 
+  with body 
+    CompoundStmt
+              Expression Statement:
+          Applying untyped: 
+              Name: ?=?
+          ...to: 
+              Address of:
+                Member Expression, with field: 
+                  i: instance of type T (not function type) 
+                from aggregate: 
+                  Applying untyped: 
+                      Name: *?
+                  ...to: 
+                      Variable Expression: _dst: pointer to instance of struct S24 
+              Member Expression, with field: 
+                i: instance of type T (not function type) 
+              from aggregate: 
+                Variable Expression: _src: instance of struct S24 
+
+              Return Statement, returning: Cast of:
+  Variable Expression: _src: instance of struct S24 
+
+to:
+  instance of struct S24 
+with environment:
+  Types:
+  Non-types:
+
+
+
+newExpr is Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
 
 
@@ -3441,22 +3441,4 @@
 Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
     with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-
-(types:
-    pointer to function
-        with parameters
-          _dst: pointer to instance of struct S1 
-          _src: instance of struct S1 
-        returning 
-          instance of struct S1 
-
-)
-Environment: 
-
-Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
-    with parameters
       _dst: pointer to instance of struct S2 
       _src: instance of struct S2 
@@ -3471,4 +3453,22 @@
         returning 
           instance of struct S2 
+
+)
+Environment: 
+
+Cost ( 0, 0, 0 ): Variable Expression: ?=?: inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
+
+(types:
+    pointer to function
+        with parameters
+          _dst: pointer to instance of struct S24 
+          _src: instance of struct S24 
+        returning 
+          instance of struct S24 
 
 )
@@ -3619,9 +3619,9 @@
             Name: *?
         ...to: 
-            Variable Expression: _dst: pointer to instance of struct S1 
+            Variable Expression: _dst: pointer to instance of struct S2 
     Member Expression, with field: 
       i: instance of type T (not function type) 
     from aggregate: 
-      Variable Expression: _src: instance of struct S1 
+      Variable Expression: _src: instance of struct S2 
 
 Error: No reasonable alternatives for expression Applying untyped: 
@@ -3635,9 +3635,9 @@
             Name: *?
         ...to: 
-            Variable Expression: _dst: pointer to instance of struct S2 
+            Variable Expression: _dst: pointer to instance of struct S24 
     Member Expression, with field: 
       i: instance of type T (not function type) 
     from aggregate: 
-      Variable Expression: _src: instance of struct S2 
+      Variable Expression: _src: instance of struct S24 
 
 Error: No reasonable alternatives for expression Applying untyped: 
Index: src/Tests/Expect-r/report
===================================================================
--- src/Tests/Expect-r/report	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-r/report	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -16,4 +16,8 @@
 ---Forall.txt---
 ---Function.txt---
+4956c4956
+< cfa-cpp: GenPoly/Box.cc:398: void GenPoly::{anonymous}::Pass1::boxParams(ApplicationExpr*, FunctionType*, std::list<Expression*>::iterator&, const TyVarMap&): Assertion `arg != appExpr->get_args().end()' failed.
+---
+> cfa-cpp: GenPoly/Box.cc:401: void GenPoly::{anonymous}::Pass1::boxParams(ApplicationExpr*, FunctionType*, std::list<Expression*>::iterator&, const TyVarMap&): Assertion `arg != appExpr->get_args().end()' failed.
 ---Functions.txt---
 ---GccExtensions.txt---
Index: src/Tests/Expect-s/Attributes.txt
===================================================================
--- src/Tests/Expect-s/Attributes.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-s/Attributes.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,1 +1,1 @@
-Error at line 8 reading token "*"
+Error at line 58 reading token "*"
Index: src/Tests/Expect-s/TypeGenerator.txt
===================================================================
--- src/Tests/Expect-s/TypeGenerator.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-s/TypeGenerator.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -4,4 +4,7 @@
 Adding type T
 Adding function ?+?
+--- Entering scope
+--- Leaving scope containing
+Adding function ?=?
 --- Entering scope
 --- Leaving scope containing
@@ -33,27 +36,4 @@
 Adding object p
 --- Leaving scope containing
-Adding fwd decl for struct S1
---- Entering scope
---- Entering scope
---- Leaving scope containing
-Adding type T
---- Leaving scope containing
-T
-Adding struct S1
-Adding fwd decl for struct S1
---- Entering scope
---- Entering scope
---- Leaving scope containing
-Adding type T
-Adding object i
---- Leaving scope containing
-T
-Adding struct S1
---- Entering scope
---- Leaving scope containing
-Adding object v1
---- Entering scope
---- Leaving scope containing
-Adding object p
 Adding fwd decl for struct S2
 --- Entering scope
@@ -65,4 +45,20 @@
 T
 Adding struct S2
+Adding struct S3 from implicit forward declaration
+--- Entering scope
+--- Leaving scope containing
+Adding object v1
+--- Entering scope
+--- Leaving scope containing
+Adding object p
+Adding fwd decl for struct S24
+--- Entering scope
+--- Entering scope
+--- Leaving scope containing
+Adding type T
+Adding object i
+--- Leaving scope containing
+T
+Adding struct S24
 --- Entering scope
 --- Leaving scope containing
Index: src/Tests/Expect-v/AsmName.txt
===================================================================
--- src/Tests/Expect-v/AsmName.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-v/AsmName.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,3 +1,3 @@
-x: auto signed int 
+x: extern signed int 
 fred: function
     with parameters
Index: src/Tests/Expect-v/Attributes.txt
===================================================================
--- src/Tests/Expect-v/Attributes.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-v/Attributes.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -1,1 +1,1 @@
-Error at line 8 reading token "*"
+Error at line 58 reading token "*"
Index: src/Tests/Expect-v/Context.txt
===================================================================
--- src/Tests/Expect-v/Context.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-v/Context.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -54,5 +54,5 @@
 
 
-        Declaration of x: auto type
+        Declaration of x: extern type
         Declaration of ?=?: automatically generated function
             with parameters
@@ -62,5 +62,5 @@
               instance of type x (not function type) 
 
-        Declaration of y: auto type
+        Declaration of y: extern type
           with assertions
             instance of context has_r 
Index: src/Tests/Expect-v/Functions.txt
===================================================================
--- src/Tests/Expect-v/Functions.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-v/Functions.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -165,13 +165,13 @@
       CompoundStmt
 
-fII3: auto function
-    with parameters
-      i: signed int 
-    returning 
-      signed int 
-    with body 
-      CompoundStmt
-
-fII4: auto function
+fII3: extern function
+    with parameters
+      i: signed int 
+    returning 
+      signed int 
+    with body 
+      CompoundStmt
+
+fII4: extern function
     with parameters
       i: signed int 
@@ -249,5 +249,5 @@
       CompoundStmt
 
-fO4: auto function
+fO4: extern function
       accepting unspecified arguments
     returning 
@@ -260,5 +260,5 @@
       CompoundStmt
 
-fO5: auto function
+fO5: extern function
       accepting unspecified arguments
     returning 
Index: src/Tests/Expect-v/TypeGenerator.txt
===================================================================
--- src/Tests/Expect-v/TypeGenerator.txt	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/Expect-v/TypeGenerator.txt	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -140,52 +140,4 @@
       signed int 
 
-struct S1
-    with parameters
-      T: type
-
-struct S1
-    with parameters
-      T: type
-
-    with members
-      i: instance of type T (not function type) 
-
-?=?: automatically generated inline static function
-    with parameters
-      _dst: pointer to instance of struct S1 
-      _src: instance of struct S1 
-    returning 
-      instance of struct S1 
-    with body 
-      CompoundStmt
-                  Expression Statement:
-            Applying untyped: 
-                Name: ?=?
-            ...to: 
-                Address of:
-                  Member Expression, with field: 
-                    i: instance of type T (not function type) 
-                  from aggregate: 
-                    Applying untyped: 
-                        Name: *?
-                    ...to: 
-                        Variable Expression: _dst: pointer to instance of struct S1 
-                Member Expression, with field: 
-                  i: instance of type T (not function type) 
-                from aggregate: 
-                  Variable Expression: _src: instance of struct S1 
-
-                  Return Statement, returning: Variable Expression: _src: instance of struct S1 
-
-
-
-v1: instance of struct S1 
-  with parameters
-    signed int 
-
-p: pointer to instance of struct S1 
-  with parameters
-    signed int 
-
 struct S2
     with parameters
@@ -224,5 +176,49 @@
 
 
-v2: instance of struct S2 
+v1: instance of struct S3 
+  with parameters
+    signed int 
+
+p: pointer to instance of struct S3 
+  with parameters
+    signed int 
+
+struct S24
+    with parameters
+      T: type
+
+    with members
+      i: instance of type T (not function type) 
+
+?=?: automatically generated inline static function
+    with parameters
+      _dst: pointer to instance of struct S24 
+      _src: instance of struct S24 
+    returning 
+      instance of struct S24 
+    with body 
+      CompoundStmt
+                  Expression Statement:
+            Applying untyped: 
+                Name: ?=?
+            ...to: 
+                Address of:
+                  Member Expression, with field: 
+                    i: instance of type T (not function type) 
+                  from aggregate: 
+                    Applying untyped: 
+                        Name: *?
+                    ...to: 
+                        Variable Expression: _dst: pointer to instance of struct S24 
+                Member Expression, with field: 
+                  i: instance of type T (not function type) 
+                from aggregate: 
+                  Variable Expression: _src: instance of struct S24 
+
+                  Return Statement, returning: Variable Expression: _src: instance of struct S24 
+
+
+
+v2: instance of struct S24 
   with parameters
     signed int 
Index: src/Tests/TypeGenerator.c
===================================================================
--- src/Tests/TypeGenerator.c	(revision 7bcf74e253a6d4f6973b37412379348b25c0171e)
+++ src/Tests/TypeGenerator.c	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
@@ -11,8 +11,7 @@
 [int] h( * List1( int ) p );							// new declaration syntax
 
-struct( type T ) S1;									// forward definition
-struct( type T ) S1 { T i; };							// actual definition
-struct( int ) S1 v1, *p;								// expansion and instantiation
-struct( type T )( int ) S2 { T i; } v2;					// actual definition, expansion and instantiation
+struct( type T ) S2 { T i; };							// actual definition
+struct( int ) S3 v1, *p;								// expansion and instantiation
+struct( type T )( int ) S24 { T i; } v2;				// actual definition, expansion and instantiation
 struct( type T )( int ) { T i; } v2;					// anonymous actual definition, expansion and instantiation
 
