Index: tests/.expect/extension.x64.txt
===================================================================
--- tests/.expect/extension.x64.txt	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ tests/.expect/extension.x64.txt	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,201 @@
+__extension__ signed int __a__i_1;
+__extension__ signed int __b__i_1;
+__extension__ signed int __c__i_1;
+__extension__ struct S {
+    __extension__ signed int __a__i_1;
+    __extension__ signed int __b__i_1;
+    __extension__ signed int __c__i_1;
+};
+static inline void ___constructor__F_2sS_autogen___1(struct S *___dst__2sS_1);
+static inline void ___constructor__F_2sS2sS_autogen___1(struct S *___dst__2sS_1, struct S ___src__2sS_1);
+static inline void ___destructor__F_2sS_autogen___1(struct S *___dst__2sS_1);
+static inline struct S ___operator_assign__F2sS_2sS2sS_autogen___1(struct S *___dst__2sS_1, struct S ___src__2sS_1);
+static inline void ___constructor__F_2sSi_autogen___1(struct S *___dst__2sS_1, signed int __a__i_1);
+static inline void ___constructor__F_2sSii_autogen___1(struct S *___dst__2sS_1, signed int __a__i_1, signed int __b__i_1);
+static inline void ___constructor__F_2sSiii_autogen___1(struct S *___dst__2sS_1, signed int __a__i_1, signed int __b__i_1, signed int __c__i_1);
+static inline void ___constructor__F_2sS_autogen___1(struct S *___dst__2sS_1){
+    ((void)((*___dst__2sS_1).__a__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__b__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__c__i_1) /* ?{} */);
+}
+static inline void ___constructor__F_2sS2sS_autogen___1(struct S *___dst__2sS_1, struct S ___src__2sS_1){
+    ((void)((*___dst__2sS_1).__a__i_1=___src__2sS_1.__a__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__b__i_1=___src__2sS_1.__b__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__c__i_1=___src__2sS_1.__c__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_2sS_autogen___1(struct S *___dst__2sS_1){
+    ((void)((*___dst__2sS_1).__c__i_1) /* ^?{} */);
+    ((void)((*___dst__2sS_1).__b__i_1) /* ^?{} */);
+    ((void)((*___dst__2sS_1).__a__i_1) /* ^?{} */);
+}
+static inline struct S ___operator_assign__F2sS_2sS2sS_autogen___1(struct S *___dst__2sS_1, struct S ___src__2sS_1){
+    struct S ___ret__2sS_1;
+    ((void)((*___dst__2sS_1).__a__i_1=___src__2sS_1.__a__i_1));
+    ((void)((*___dst__2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
+    ((void)((*___dst__2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
+    ((void)___constructor__F_2sS2sS_autogen___1((&___ret__2sS_1), (*___dst__2sS_1)));
+    return ___ret__2sS_1;
+}
+static inline void ___constructor__F_2sSi_autogen___1(struct S *___dst__2sS_1, signed int __a__i_1){
+    ((void)((*___dst__2sS_1).__a__i_1=__a__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__b__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__c__i_1) /* ?{} */);
+}
+static inline void ___constructor__F_2sSii_autogen___1(struct S *___dst__2sS_1, signed int __a__i_1, signed int __b__i_1){
+    ((void)((*___dst__2sS_1).__a__i_1=__a__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__b__i_1=__b__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__c__i_1) /* ?{} */);
+}
+static inline void ___constructor__F_2sSiii_autogen___1(struct S *___dst__2sS_1, signed int __a__i_1, signed int __b__i_1, signed int __c__i_1){
+    ((void)((*___dst__2sS_1).__a__i_1=__a__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__b__i_1=__b__i_1) /* ?{} */);
+    ((void)((*___dst__2sS_1).__c__i_1=__c__i_1) /* ?{} */);
+}
+__extension__ union U {
+    __extension__ signed int __a__i_1;
+    __extension__ signed int __b__i_1;
+    __extension__ signed int __c__i_1;
+};
+static inline void ___constructor__F_2uU_autogen___1(__attribute__ ((unused)) union U *___dst__2uU_1);
+static inline void ___constructor__F_2uU2uU_autogen___1(union U *___dst__2uU_1, union U ___src__2uU_1);
+static inline void ___destructor__F_2uU_autogen___1(__attribute__ ((unused)) union U *___dst__2uU_1);
+static inline union U ___operator_assign__F2uU_2uU2uU_autogen___1(union U *___dst__2uU_1, union U ___src__2uU_1);
+static inline void ___constructor__F_2uUi_autogen___1(union U *___dst__2uU_1, signed int __a__i_1);
+static inline void ___constructor__F_2uU_autogen___1(__attribute__ ((unused)) union U *___dst__2uU_1){
+}
+static inline void ___constructor__F_2uU2uU_autogen___1(union U *___dst__2uU_1, union U ___src__2uU_1){
+    ((void)__builtin_memcpy(((void *)___dst__2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
+}
+static inline void ___destructor__F_2uU_autogen___1(__attribute__ ((unused)) union U *___dst__2uU_1){
+}
+static inline union U ___operator_assign__F2uU_2uU2uU_autogen___1(union U *___dst__2uU_1, union U ___src__2uU_1){
+    union U ___ret__2uU_1;
+    ((void)__builtin_memcpy(((void *)___dst__2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
+    ((void)___constructor__F_2uU2uU_autogen___1((&___ret__2uU_1), (*___dst__2uU_1)));
+    return ___ret__2uU_1;
+}
+static inline void ___constructor__F_2uUi_autogen___1(union U *___dst__2uU_1, signed int __a__i_1){
+    ((void)__builtin_memcpy(((void *)___dst__2uU_1), ((const void *)(&__a__i_1)), sizeof(signed int )));
+}
+__extension__ enum E {
+    __R__C2eE_1,
+    __G__C2eE_1,
+    __B__C2eE_1,
+};
+__extension__ signed int __f__Fi___1();
+__extension__ signed int i;
+__extension__ signed int j;
+__extension__ signed int __fred__Fi_i__1(signed int __p__i_1){
+    __attribute__ ((unused)) signed int ___retval_fred__i_1;
+    __extension__ struct S {
+        __extension__ signed int __a__i_2;
+        __extension__ signed int __b__i_2;
+        __extension__ signed int __c__i_2;
+        __extension__ signed int *__x__Pi_2;
+        __extension__ signed int *__y__Pi_2;
+        __extension__ signed int *__z__Pi_2;
+    };
+    inline void ___constructor__F_2sS_autogen___2(struct S *___dst__2sS_2){
+        ((void)((*___dst__2sS_2).__a__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_2sS2sS_autogen___2(struct S *___dst__2sS_2, struct S ___src__2sS_2){
+        ((void)((*___dst__2sS_2).__a__i_2=___src__2sS_2.__a__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2=___src__2sS_2.__b__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2=___src__2sS_2.__c__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2=___src__2sS_2.__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2=___src__2sS_2.__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__z__Pi_2=___src__2sS_2.__z__Pi_2) /* ?{} */);
+    }
+    inline void ___destructor__F_2sS_autogen___2(struct S *___dst__2sS_2){
+        ((void)((*___dst__2sS_2).__z__Pi_2) /* ^?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2) /* ^?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2) /* ^?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2) /* ^?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2) /* ^?{} */);
+        ((void)((*___dst__2sS_2).__a__i_2) /* ^?{} */);
+    }
+    inline struct S ___operator_assign__F2sS_2sS2sS_autogen___2(struct S *___dst__2sS_2, struct S ___src__2sS_2){
+        struct S ___ret__2sS_2;
+        ((void)((*___dst__2sS_2).__a__i_2=___src__2sS_2.__a__i_2));
+        ((void)((*___dst__2sS_2).__b__i_2=___src__2sS_2.__b__i_2));
+        ((void)((*___dst__2sS_2).__c__i_2=___src__2sS_2.__c__i_2));
+        ((void)((*___dst__2sS_2).__x__Pi_2=___src__2sS_2.__x__Pi_2));
+        ((void)((*___dst__2sS_2).__y__Pi_2=___src__2sS_2.__y__Pi_2));
+        ((void)((*___dst__2sS_2).__z__Pi_2=___src__2sS_2.__z__Pi_2));
+        ((void)___constructor__F_2sS2sS_autogen___2((&___ret__2sS_2), (*___dst__2sS_2)));
+        return ___ret__2sS_2;
+    }
+    inline void ___constructor__F_2sSi_autogen___2(struct S *___dst__2sS_2, signed int __a__i_2){
+        ((void)((*___dst__2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_2sSii_autogen___2(struct S *___dst__2sS_2, signed int __a__i_2, signed int __b__i_2){
+        ((void)((*___dst__2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_2sSiii_autogen___2(struct S *___dst__2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2){
+        ((void)((*___dst__2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_2sSiiiPi_autogen___2(struct S *___dst__2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2){
+        ((void)((*___dst__2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_2sSiiiPiPi_autogen___2(struct S *___dst__2sS_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__2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2=__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_2sSiiiPiPiPi_autogen___2(struct S *___dst__2sS_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__2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_2).__y__Pi_2=__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__2sS_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);
+    __extension__ signed int __a__i_2;
+    __extension__ signed int __b__i_2;
+    __extension__ signed int __c__i_2;
+    ((void)(__extension__ __a__i_2=(__extension__ __b__i_2+__extension__ __c__i_2)));
+    signed int _tmp_cp_ret2;
+    ((void)(((void)(_tmp_cp_ret2=__extension__ __fred__Fi_i__1(3))) , _tmp_cp_ret2));
+    ((void)(_tmp_cp_ret2) /* ^?{} */);
+    __extension__ signed int __mary__Fi_i__2(signed int __p__i_2){
+        __attribute__ ((unused)) signed int ___retval_mary__i_2;
+    }
+    ((void)__extension__ sizeof(3));
+    ((void)__extension__ ((3!=((signed int )0)) || (4!=((signed int )0))));
+    ((void)__extension__ __alignof__(__extension__ __a__i_2));
+    ((void)((__extension__ __a__i_2!=((signed int )0)) || (((__extension__ __b__i_2!=((signed int )0)) && (__extension__ __c__i_2!=((signed int )0)))!=((signed int )0))));
+    ((void)(((__extension__ __a__i_2>__extension__ __b__i_2)!=((signed int )0)) ? __extension__ __c__i_2 : __extension__ __c__i_2));
+    ((void)(__extension__ __a__i_2=__extension__ (__extension__ __b__i_2+__extension__ __c__i_2)));
+    ((void)(((void)(((void)__extension__ __a__i_2) , __extension__ __b__i_2)) , __extension__ __c__i_2));
+}
