Index: src/tests/.expect/32/extension.txt
===================================================================
--- src/tests/.expect/32/extension.txt	(revision 917f93c5858146d09fb5d314e9dda9e0ab63c70e)
+++ src/tests/.expect/32/extension.txt	(revision 917f93c5858146d09fb5d314e9dda9e0ab63c70e)
@@ -0,0 +1,114 @@
+extern void *malloc(unsigned int __size);
+extern void free(void *__ptr);
+extern void abort(void);
+extern int atexit(void (*__func)(void));
+extern void exit(int __status);
+extern int printf(const char *__restrict __format, ...);
+__extension__ int __a__i_1;
+__extension__ int __b__i_1;
+__extension__ int __c__i_1;
+__extension__ struct S {
+    __extension__ int __a__i_1;
+    __extension__ int __b__i_1;
+    __extension__ int __c__i_1;
+};
+static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
+    ((void)((*___dst__P2sS_1).__a__i_1=___src__2sS_1.__a__i_1));
+    ((void)((*___dst__P2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
+    ((void)((*___dst__P2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
+    return ((struct S )___src__2sS_1);
+}
+static inline void ___constructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=___src__2sS_1.__a__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=___src__2sS_1.__b__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))=___src__2sS_1.__c__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ^?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ^?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __a__i_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P2sSii_autogen___1(struct S *___dst__P2sS_1, int __a__i_1, int __b__i_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=__b__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P2sSiii_autogen___1(struct S *___dst__P2sS_1, int __a__i_1, int __b__i_1, int __c__i_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=__b__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))=__c__i_1) /* ?{} */);
+}
+__extension__ union U {
+    __extension__ int __a__i_1;
+    __extension__ int __b__i_1;
+    __extension__ int __c__i_1;
+};
+static inline union U ___operator_assign__F2uU_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
+    void *_tmp_cp_ret0;
+    ((void)((_tmp_cp_ret0=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret0));
+    ((void)(_tmp_cp_ret0) /* ^?{} */);
+    return ((union U )___src__2uU_1);
+}
+static inline void ___constructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
+}
+static inline void ___constructor__F_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
+    void *_tmp_cp_ret1;
+    ((void)((_tmp_cp_ret1=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret1));
+    ((void)(_tmp_cp_ret1) /* ^?{} */);
+    return ((void)___src__2uU_1);
+}
+static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
+}
+__extension__ enum E {
+    __R__C2eE_1,
+    __G__C2eE_1,
+    __B__C2eE_1,
+};
+__extension__ int __fred__Fi_i__1(int __p__i_1){
+    __extension__ struct S {
+        __extension__ int __a__i_2;
+        __extension__ int __b__i_2;
+        __extension__ int __c__i_2;
+    };
+    int __i__i_2;
+    ((void)((*((int *)(&__i__i_2)))=(__extension__ __a__i_1+__extension__ 3)) /* ?{} */);
+    ((void)__extension__ 3);
+    ((void)__extension__ __a__i_1);
+    __extension__ int __a__i_2;
+    __extension__ int __b__i_2;
+    __extension__ int __c__i_2;
+    ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
+    int _tmp_cp_ret2;
+    ((void)((_tmp_cp_ret2=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret2));
+    ((void)(_tmp_cp_ret2) /* ^?{} */);
+    ((void)__extension__ sizeof(3));
+    ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
+    ((void)__extension__ __alignof__(__extension__ __a__i_2));
+    ((void)(((int )(__extension__ __a__i_2!=0)) || ((int )((((int )(__extension__ __b__i_2!=0)) && ((int )(__extension__ __c__i_2!=0)))!=0))));
+    ((void)(((int )((__extension__ __a__i_2>__extension__ __b__i_2)!=0)) ? __extension__ __c__i_2 : __extension__ __c__i_2));
+    ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
+    ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
+}
+__attribute__ ((constructor(),)) static void _init_extension(void){
+    int _global_init0;
+    ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);
+    int _global_init1;
+    ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);
+    int _global_init2;
+    ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);
+}
+__attribute__ ((destructor(),)) static void _destroy_extension(void){
+    ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);
+    ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);
+    ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);
+}
Index: src/tests/.expect/64/extension.txt
===================================================================
--- src/tests/.expect/64/extension.txt	(revision 917f93c5858146d09fb5d314e9dda9e0ab63c70e)
+++ src/tests/.expect/64/extension.txt	(revision 917f93c5858146d09fb5d314e9dda9e0ab63c70e)
@@ -0,0 +1,114 @@
+extern void *malloc(unsigned int __size);
+extern void free(void *__ptr);
+extern void abort(void);
+extern int atexit(void (*__func)(void));
+extern void exit(int __status);
+extern int printf(const char *__restrict __format, ...);
+__extension__ int __a__i_1;
+__extension__ int __b__i_1;
+__extension__ int __c__i_1;
+__extension__ struct S {
+    __extension__ int __a__i_1;
+    __extension__ int __b__i_1;
+    __extension__ int __c__i_1;
+};
+static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
+    ((void)((*___dst__P2sS_1).__a__i_1=___src__2sS_1.__a__i_1));
+    ((void)((*___dst__P2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
+    ((void)((*___dst__P2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
+    return ((struct S )___src__2sS_1);
+}
+static inline void ___constructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=___src__2sS_1.__a__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=___src__2sS_1.__b__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))=___src__2sS_1.__c__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ^?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ^?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))) /* ^?{} */);
+}
+static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __a__i_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P2sSii_autogen___1(struct S *___dst__P2sS_1, int __a__i_1, int __b__i_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=__b__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P2sSiii_autogen___1(struct S *___dst__P2sS_1, int __a__i_1, int __b__i_1, int __c__i_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=__b__i_1) /* ?{} */);
+    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))=__c__i_1) /* ?{} */);
+}
+__extension__ union U {
+    __extension__ int __a__i_1;
+    __extension__ int __b__i_1;
+    __extension__ int __c__i_1;
+};
+static inline union U ___operator_assign__F2uU_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
+    void *_tmp_cp_ret0;
+    ((void)((_tmp_cp_ret0=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret0));
+    ((void)(_tmp_cp_ret0) /* ^?{} */);
+    return ((union U )___src__2uU_1);
+}
+static inline void ___constructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
+}
+static inline void ___constructor__F_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
+    void *_tmp_cp_ret1;
+    ((void)((_tmp_cp_ret1=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret1));
+    ((void)(_tmp_cp_ret1) /* ^?{} */);
+    return ((void)___src__2uU_1);
+}
+static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
+}
+__extension__ enum E {
+    __R__C2eE_1,
+    __G__C2eE_1,
+    __B__C2eE_1,
+};
+__extension__ int __fred__Fi_i__1(int __p__i_1){
+    __extension__ struct S {
+        __extension__ int __a__i_2;
+        __extension__ int __b__i_2;
+        __extension__ int __c__i_2;
+    };
+    int __i__i_2;
+    ((void)((*((int *)(&__i__i_2)))=(__extension__ __a__i_1+__extension__ 3)) /* ?{} */);
+    ((void)__extension__ 3);
+    ((void)__extension__ __a__i_1);
+    __extension__ int __a__i_2;
+    __extension__ int __b__i_2;
+    __extension__ int __c__i_2;
+    ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
+    int _tmp_cp_ret2;
+    ((void)((_tmp_cp_ret2=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret2));
+    ((void)(_tmp_cp_ret2) /* ^?{} */);
+    ((void)__extension__ sizeof(3));
+    ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
+    ((void)__extension__ __alignof__(__extension__ __a__i_2));
+    ((void)(((int )(__extension__ __a__i_2!=0)) || ((int )((((int )(__extension__ __b__i_2!=0)) && ((int )(__extension__ __c__i_2!=0)))!=0))));
+    ((void)(((int )((__extension__ __a__i_2>__extension__ __b__i_2)!=0)) ? __extension__ __c__i_2 : __extension__ __c__i_2));
+    ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
+    ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
+}
+__attribute__ ((constructor(),)) static void _init_extension(void){
+    int _global_init0;
+    ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);
+    int _global_init1;
+    ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);
+    int _global_init2;
+    ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);
+}
+__attribute__ ((destructor(),)) static void _destroy_extension(void){
+    ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);
+    ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);
+    ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);
+}
Index: src/tests/.expect/extension.txt
===================================================================
--- src/tests/.expect/extension.txt	(revision e28d0f51d4dad2b0d772cc4ff46502f7d0c126bb)
+++ 	(revision )
@@ -1,114 +1,0 @@
-extern void *malloc(long unsigned int __size);
-extern void free(void *__ptr);
-extern void abort(void);
-extern int atexit(void (*__func)(void));
-extern void exit(int __status);
-extern int printf(const char *__restrict __format, ...);
-__extension__ int __a__i_1;
-__extension__ int __b__i_1;
-__extension__ int __c__i_1;
-__extension__ struct S {
-    __extension__ int __a__i_1;
-    __extension__ int __b__i_1;
-    __extension__ int __c__i_1;
-};
-static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
-    ((void)((*___dst__P2sS_1).__a__i_1=___src__2sS_1.__a__i_1));
-    ((void)((*___dst__P2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
-    ((void)((*___dst__P2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
-    return ((struct S )___src__2sS_1);
-}
-static inline void ___constructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
-    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
-    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=___src__2sS_1.__a__i_1) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=___src__2sS_1.__b__i_1) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))=___src__2sS_1.__c__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
-    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ^?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ^?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))) /* ^?{} */);
-}
-static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __a__i_1){
-    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P2sSii_autogen___1(struct S *___dst__P2sS_1, int __a__i_1, int __b__i_1){
-    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=__b__i_1) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))) /* ?{} */);
-}
-static inline void ___constructor__F_P2sSiii_autogen___1(struct S *___dst__P2sS_1, int __a__i_1, int __b__i_1, int __c__i_1){
-    ((void)((*((int *)(&(*___dst__P2sS_1).__a__i_1)))=__a__i_1) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__b__i_1)))=__b__i_1) /* ?{} */);
-    ((void)((*((int *)(&(*___dst__P2sS_1).__c__i_1)))=__c__i_1) /* ?{} */);
-}
-__extension__ union U {
-    __extension__ int __a__i_1;
-    __extension__ int __b__i_1;
-    __extension__ int __c__i_1;
-};
-static inline union U ___operator_assign__F2uU_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
-    void *_tmp_cp_ret0;
-    ((void)((_tmp_cp_ret0=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret0));
-    ((void)(_tmp_cp_ret0) /* ^?{} */);
-    return ((union U )___src__2uU_1);
-}
-static inline void ___constructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
-}
-static inline void ___constructor__F_P2uU2uU_autogen___1(union U *___dst__P2uU_1, union U ___src__2uU_1){
-    void *_tmp_cp_ret1;
-    ((void)((_tmp_cp_ret1=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U ))) , _tmp_cp_ret1));
-    ((void)(_tmp_cp_ret1) /* ^?{} */);
-    return ((void)___src__2uU_1);
-}
-static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
-}
-__extension__ enum E {
-    __R__C2eE_1,
-    __G__C2eE_1,
-    __B__C2eE_1,
-};
-__extension__ int __fred__Fi_i__1(int __p__i_1){
-    __extension__ struct S {
-        __extension__ int __a__i_2;
-        __extension__ int __b__i_2;
-        __extension__ int __c__i_2;
-    };
-    int __i__i_2;
-    ((void)((*((int *)(&__i__i_2)))=(__extension__ __a__i_1+__extension__ 3)) /* ?{} */);
-    ((void)__extension__ 3);
-    ((void)__extension__ __a__i_1);
-    __extension__ int __a__i_2;
-    __extension__ int __b__i_2;
-    __extension__ int __c__i_2;
-    ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
-    int _tmp_cp_ret2;
-    ((void)((_tmp_cp_ret2=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret2));
-    ((void)(_tmp_cp_ret2) /* ^?{} */);
-    ((void)__extension__ sizeof(3));
-    ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
-    ((void)__extension__ __alignof__(__extension__ __a__i_2));
-    ((void)(((int )(__extension__ __a__i_2!=0)) || ((int )((((int )(__extension__ __b__i_2!=0)) && ((int )(__extension__ __c__i_2!=0)))!=0))));
-    ((void)(((int )((__extension__ __a__i_2>__extension__ __b__i_2)!=0)) ? __extension__ __c__i_2 : __extension__ __c__i_2));
-    ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
-    ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
-}
-__attribute__ ((constructor(),)) static void _init_extension(void){
-    int _global_init0;
-    ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);
-    int _global_init1;
-    ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);
-    int _global_init2;
-    ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);
-}
-__attribute__ ((destructor(),)) static void _destroy_extension(void){
-    ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);
-    ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);
-    ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);
-}
