Index: src/tests/.expect/32/extension.txt
===================================================================
--- src/tests/.expect/32/extension.txt	(revision fa4c0940a6fc79cad6f4ecf3a66c07d1ba8d8055)
+++ src/tests/.expect/32/extension.txt	(revision e2203912dc6851873d11c3523fda6ab1175b95b5)
@@ -17,4 +17,7 @@
 static inline void ___destructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1);
 static inline struct S ___operator_assign__F2sS_R2sS2sS_autogen___1(struct S *___dst__R2sS_1, struct S ___src__2sS_1);
+static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1);
+static inline void ___constructor__F_R2sSii_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1, signed int __b__i_1);
+static inline void ___constructor__F_R2sSiii_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1, signed int __b__i_1, signed int __c__i_1);
 static inline void ___constructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1){
     ((void)((*___dst__R2sS_1).__a__i_1) /* ?{} */);
@@ -37,5 +40,5 @@
     ((void)((*___dst__R2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
     ((void)((*___dst__R2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
-    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
+    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), (*___dst__R2sS_1)));
     return ___ret__2sS_1;
 }
@@ -60,4 +63,9 @@
     __extension__ signed int __c__i_1;
 };
+static inline void ___constructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1);
+static inline void ___constructor__F_R2uU2uU_autogen___1(union U *___dst__R2uU_1, union U ___src__2uU_1);
+static inline void ___destructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1);
+static inline union U ___operator_assign__F2uU_R2uU2uU_autogen___1(union U *___dst__R2uU_1, union U ___src__2uU_1);
+static inline void ___constructor__F_R2uUi_autogen___1(union U *___dst__R2uU_1, signed int __a__i_1);
 static inline void ___constructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1){
 }
@@ -70,9 +78,9 @@
     union U ___ret__2uU_1;
     ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
-    ((void)___constructor__F_R2uU2uU_autogen___1((&___ret__2uU_1), ___src__2uU_1));
+    ((void)___constructor__F_R2uU2uU_autogen___1((&___ret__2uU_1), (*___dst__R2uU_1)));
     return ___ret__2uU_1;
 }
-static inline void ___constructor__F_R2uUi_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1, signed int __src__i_1){
-    ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&__src__i_1)), sizeof(signed int )));
+static inline void ___constructor__F_R2uUi_autogen___1(union U *___dst__R2uU_1, signed int __a__i_1){
+    ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&__a__i_1)), sizeof(signed int )));
 }
 __extension__ enum E {
@@ -94,5 +102,88 @@
         __extension__ signed int *__z__Pi_2;
     };
-    signed int __i__i_2 = ((signed int )(__extension__ __a__i_1+__extension__ 3));
+    inline void ___constructor__F_R2sS_autogen___2(struct S *___dst__R2sS_2){
+        ((void)((*___dst__R2sS_2).__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sS2sS_autogen___2(struct S *___dst__R2sS_2, struct S ___src__2sS_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=___src__2sS_2.__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=___src__2sS_2.__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=___src__2sS_2.__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=___src__2sS_2.__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=___src__2sS_2.__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2=___src__2sS_2.__z__Pi_2) /* ?{} */);
+    }
+    inline void ___destructor__F_R2sS_autogen___2(struct S *___dst__R2sS_2){
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__a__i_2) /* ^?{} */);
+    }
+    inline struct S ___operator_assign__F2sS_R2sS2sS_autogen___2(struct S *___dst__R2sS_2, struct S ___src__2sS_2){
+        struct S ___ret__2sS_2;
+        ((void)((*___dst__R2sS_2).__a__i_2=___src__2sS_2.__a__i_2));
+        ((void)((*___dst__R2sS_2).__b__i_2=___src__2sS_2.__b__i_2));
+        ((void)((*___dst__R2sS_2).__c__i_2=___src__2sS_2.__c__i_2));
+        ((void)((*___dst__R2sS_2).__x__Pi_2=___src__2sS_2.__x__Pi_2));
+        ((void)((*___dst__R2sS_2).__y__Pi_2=___src__2sS_2.__y__Pi_2));
+        ((void)((*___dst__R2sS_2).__z__Pi_2=___src__2sS_2.__z__Pi_2));
+        ((void)___constructor__F_R2sS2sS_autogen___2((&___ret__2sS_2), (*___dst__R2sS_2)));
+        return ___ret__2sS_2;
+    }
+    inline void ___constructor__F_R2sSi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSii_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiii_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2, signed int *__y__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPiPiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2, signed int *__y__Pi_2, signed int *__z__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2=__z__Pi_2) /* ?{} */);
+    }
+    signed int __i__i_2 = (__extension__ __a__i_1+__extension__ 3);
     ((void)__extension__ 3);
     ((void)__extension__ __a__i_1);
