Index: src/tests/.expect/ctorWarnings.txt
===================================================================
--- src/tests/.expect/ctorWarnings.txt	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
+++ src/tests/.expect/ctorWarnings.txt	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -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 04cdd9b5929496a9d5ff3a09e77200621001ed5a)
+++ src/tests/Makefile.am	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -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 04cdd9b5929496a9d5ff3a09e77200621001ed5a)
+++ src/tests/Makefile.in	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -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 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
+++ src/tests/ctorWarnings.c	(revision 486341f038e1f9ecaa54644f8c0f7a9679756b9a)
@@ -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;
+}
