Index: src/tests/.expect/32/extension.txt
===================================================================
--- src/tests/.expect/32/extension.txt	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/tests/.expect/32/extension.txt	(revision b542bfb3722bdbb64bd16d352ff9d563d92afb57)
@@ -70,4 +70,9 @@
 static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
 }
+static inline void ___constructor__F_P2uUi_autogen___1(union U *___dst__P2uU_1, int __src__i_1){
+    void *_tmp_cp_ret2;
+    ((void)((_tmp_cp_ret2=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&__src__i_1)), sizeof(int ))) , _tmp_cp_ret2));
+    ((void)(_tmp_cp_ret2) /* ^?{} */);
+}
 __extension__ enum E {
     __R__C2eE_1,
@@ -89,7 +94,7 @@
     __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) /* ^?{} */);
+    int _tmp_cp_ret3;
+    ((void)((_tmp_cp_ret3=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret3));
+    ((void)(_tmp_cp_ret3) /* ^?{} */);
     ((void)__extension__ sizeof(3));
     ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
Index: src/tests/.expect/64/extension.txt
===================================================================
--- src/tests/.expect/64/extension.txt	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/tests/.expect/64/extension.txt	(revision b542bfb3722bdbb64bd16d352ff9d563d92afb57)
@@ -70,4 +70,9 @@
 static inline void ___destructor__F_P2uU_autogen___1(union U *___dst__P2uU_1){
 }
+static inline void ___constructor__F_P2uUi_autogen___1(union U *___dst__P2uU_1, int __src__i_1){
+    void *_tmp_cp_ret2;
+    ((void)((_tmp_cp_ret2=__builtin_memcpy(((void *)___dst__P2uU_1), ((const void *)(&__src__i_1)), sizeof(int ))) , _tmp_cp_ret2));
+    ((void)(_tmp_cp_ret2) /* ^?{} */);
+}
 __extension__ enum E {
     __R__C2eE_1,
@@ -89,7 +94,7 @@
     __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) /* ^?{} */);
+    int _tmp_cp_ret3;
+    ((void)((_tmp_cp_ret3=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret3));
+    ((void)(_tmp_cp_ret3) /* ^?{} */);
     ((void)__extension__ sizeof(3));
     ((void)__extension__ (((int )(3!=0)) || ((int )(4!=0))));
Index: src/tests/.expect/ctorWarnings.txt
===================================================================
--- src/tests/.expect/ctorWarnings.txt	(revision b542bfb3722bdbb64bd16d352ff9d563d92afb57)
+++ src/tests/.expect/ctorWarnings.txt	(revision b542bfb3722bdbb64bd16d352ff9d563d92afb57)
@@ -0,0 +1,7 @@
+CFA Version 1.0.0 (debug)
+Warning: in void ?{}(struct A *a, int x), member z may not have been constructed
+Warning: in void ?{}(struct B *b), member a2 used before being constructed
+Warning: in void ?{}(struct B *b), member a2 may not have been constructed
+Warning: in void ?{}(struct B *b), member a3 may not have been constructed
+Warning: in void ^?{}(struct B *b), member a2 may not have been destructed
+Warning: in void ^?{}(struct B *b), member a3 may not have been destructed
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/tests/Makefile.am	(revision b542bfb3722bdbb64bd16d352ff9d563d92afb57)
@@ -62,2 +62,5 @@
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
+ctorWarnings: ctorWarnings.c
+	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o /dev/null 2> ${@}
+
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
+++ src/tests/Makefile.in	(revision b542bfb3722bdbb64bd16d352ff9d563d92afb57)
@@ -670,4 +670,7 @@
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
+ctorWarnings: ctorWarnings.c
+	${CC} ${CFALGS} -CFA -XCFA -p ${<} -o /dev/null 2> ${@}
+
 # 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.
Index: src/tests/ctorWarnings.c
===================================================================
--- src/tests/ctorWarnings.c	(revision b542bfb3722bdbb64bd16d352ff9d563d92afb57)
+++ src/tests/ctorWarnings.c	(revision b542bfb3722bdbb64bd16d352ff9d563d92afb57)
@@ -0,0 +1,26 @@
+struct A {
+  int x, y, z;
+};
+
+void ?{}(A * a, int x) {
+  (&a->x){ x+999 };
+  a->y = 0; // not technically a constructor, but okay
+} // z never constructed
+
+struct B {
+  A a1, a2, a3;
+};
+
+void ?{}(B * b) {
+  b->a2 = (A) { 2 }; // a2 used before constructed
+  (&b->a1){ 1 };
+} // a2, a3 never constructed
+
+void ^?{}(B * b) {
+  b->a2 = (A) { 0 };
+  ^(&b->a1){};
+} // a2, a3 never destructed
+
+int main() {
+  B b;
+}
