Index: src/tests/.expect/extension.txt
===================================================================
--- src/tests/.expect/extension.txt	(revision d9b499c283968b82e25f4c4e76dea9c6e8bda5d9)
+++ src/tests/.expect/extension.txt	(revision d9b499c283968b82e25f4c4e76dea9c6e8bda5d9)
@@ -0,0 +1,111 @@
+extern void abort(void);
+extern int atexit(void (*__func)(void));
+extern void exit(int __status);
+__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)((*___dst__P2sS_1).__a__i_1) /* ?{} */);
+    ((void)((*___dst__P2sS_1).__b__i_1) /* ?{} */);
+    ((void)((*___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)((*___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) /* ?{} */);
+}
+static inline void ___destructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
+    ((void)((*___dst__P2sS_1).__c__i_1) /* ^?{} */);
+    ((void)((*___dst__P2sS_1).__b__i_1) /* ^?{} */);
+    ((void)((*___dst__P2sS_1).__a__i_1) /* ^?{} */);
+}
+static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __a__i_1){
+    ((void)((*___dst__P2sS_1).__a__i_1=__a__i_1) /* ?{} */);
+    ((void)((*___dst__P2sS_1).__b__i_1) /* ?{} */);
+    ((void)((*___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)((*___dst__P2sS_1).__a__i_1=__a__i_1) /* ?{} */);
+    ((void)((*___dst__P2sS_1).__b__i_1=__b__i_1) /* ?{} */);
+    ((void)((*___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)((*___dst__P2sS_1).__a__i_1=__a__i_1) /* ?{} */);
+    ((void)((*___dst__P2sS_1).__b__i_1=__b__i_1) /* ?{} */);
+    ((void)((*___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/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision fcf041c95d024529c8d7cda462578337731ba731)
+++ src/tests/Makefile.am	(revision d9b499c283968b82e25f4c4e76dea9c6e8bda5d9)
@@ -55,2 +55,6 @@
 gccExtensions : gccExtensions.c
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
+
+extension : extension.c
+	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
+
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision fcf041c95d024529c8d7cda462578337731ba731)
+++ src/tests/Makefile.in	(revision d9b499c283968b82e25f4c4e76dea9c6e8bda5d9)
@@ -663,4 +663,7 @@
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
+extension : extension.c
+	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
