Index: src/tests/.expect/memberCtors.txt
===================================================================
--- src/tests/.expect/memberCtors.txt	(revision 0f35657ae520d3e4d0fd40c5151fc45879ad5bee)
+++ src/tests/.expect/memberCtors.txt	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -6,12 +6,24 @@
 constructing int
 constructing int
+begin construct B
+assign b->a2
 constructing int
 constructing int
+begin construct A
+construct a->x
 constructing int: 1001
+assign a->y
 assigning int: 0 0
+end construct A
+construct b->a1
 constructing int
 constructing int
+begin construct A
+construct a->x
 constructing int: 1000
+assign a->y
 assigning int: 0 0
+end construct A
+end construct B
 destructing int: 0
 destructing int: 0
@@ -20,16 +32,32 @@
 copy constructing int: 0
 copy constructing int: 0
+begin copy construct A
+copy construct this->x
 copy constructing int: 1000
+assign this->y
+end copy construct A
 copy constructing int: 0
 copy constructing int: 0
+begin copy construct A
+copy construct this->x
 copy constructing int: 1001
+assign this->y
+end copy construct A
 copy constructing int: 0
 copy constructing int: 0
+begin copy construct A
+copy construct this->x
 copy constructing int: 0
+assign this->y
+end copy construct A
 End of main
 constructing int
 constructing int
+begin construct A
+construct a->x
 constructing int: 999
+assign a->y
 assigning int: 0 0
+end construct A
 destructing int: 0
 destructing int: 0
@@ -46,6 +74,10 @@
 constructing int
 constructing int
+begin construct A
+construct a->x
 constructing int: 999
+assign a->y
 assigning int: 0 0
+end construct A
 destructing int: 0
 destructing int: 0
Index: src/tests/.expect/simpleGenericTriple.txt
===================================================================
--- src/tests/.expect/simpleGenericTriple.txt	(revision 0f35657ae520d3e4d0fd40c5151fc45879ad5bee)
+++ src/tests/.expect/simpleGenericTriple.txt	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -1,1 +1,2 @@
 132 1001 459
+132 1001.12 459
Index: src/tests/.expect/tupleCast.txt
===================================================================
--- src/tests/.expect/tupleCast.txt	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
+++ src/tests/.expect/tupleCast.txt	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -0,0 +1,5 @@
+10 A 3.14
+10 A
+10 65
+ran f
+99 F
Index: src/tests/.expect/tuplePolymorphism.txt
===================================================================
--- src/tests/.expect/tuplePolymorphism.txt	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
+++ src/tests/.expect/tuplePolymorphism.txt	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -0,0 +1,4 @@
+132 1001 459
+132 1001.12 459
+123 999.123 456
+246 1998.25 912
Index: src/tests/completeTypeError.c
===================================================================
--- src/tests/completeTypeError.c	(revision 0f35657ae520d3e4d0fd40c5151fc45879ad5bee)
+++ src/tests/completeTypeError.c	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -5,10 +5,20 @@
 forall(dtype T | sized(T)) void quux(T *);
 
+struct A; // incomplete
+struct B {}; // complete
+
 int main() {
 	int *i;
 	void *v;
 
+	// A * x;
+	// A * y;
+	// B * x;
+	// B * z;
+
 	// okay
 	*i;
+	// *x; // picks B
+	// *z;
 	foo(i);
 	bar(i);
@@ -23,7 +33,9 @@
 	// bad
 	*v;
+	// *y;
 	baz(v);
 	quux(v);
 }
+
 
 forall(otype T)
@@ -60,3 +72,2 @@
 	baz(z);
 }
-
Index: src/tests/memberCtors.c
===================================================================
--- src/tests/memberCtors.c	(revision 0f35657ae520d3e4d0fd40c5151fc45879ad5bee)
+++ src/tests/memberCtors.c	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -32,11 +32,19 @@
 
 void ?{}(A * a, int x) {
+  printf("begin construct A\n");
+  printf("construct a->x\n");
   (&a->x){ x+999 };
+  printf("assign a->y\n");
   a->y = 0; // not a constructor - default constructor will be inserted
+  printf("end construct A\n");
 } // z never constructed - will be automatically default constructed
 
 void ?{}(A * this, A other) {
+  printf("begin copy construct A\n");
+  printf("copy construct this->x\n");
   (&this->x){ other.x };
+  printf("assign this->y\n");
   this->y = other.y; // not a constructor - copy constructor will be inserted
+  printf("end copy construct A\n");
 } // z never constructed - will be automatically copy constructed
 
@@ -46,9 +54,13 @@
 
 void ?{}(B * b) {
+  printf("begin construct B\n");
+  printf("assign b->a2\n");
   b->a2 = (A) { 2 };
+  printf("construct b->a1\n");
   (&b->a1){ 1 };
 #ifdef ERR1
   (&b->a2){ b->a3 }; // error, b->a2 was used previously but is explicitly constructed
 #endif
+  printf("end construct B\n");
 } // a2, a3 never constructed - will be automatically default constructed
 
Index: src/tests/simpleGenericTriple.c
===================================================================
--- src/tests/simpleGenericTriple.c	(revision 0f35657ae520d3e4d0fd40c5151fc45879ad5bee)
+++ src/tests/simpleGenericTriple.c	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -28,8 +28,13 @@
   int x1 = 123, x3 = 456;
   double x2 = 999.123;
-  struct T3(int) L = { x1, x2, x3 };
-  struct T3(int) R = { 9, 2, 3 };
-  struct T3(int) ret = L+R;
-  printf("%d %d %d\n", ret.f0, ret.f1, ret.f2);
+  struct T3(int) Li = { x1, x2, x3 };
+  struct T3(int) Ri = { 9, 2, 3 };
+  struct T3(int) reti = Li+Ri;
+  printf("%d %d %d\n", reti.f0, reti.f1, reti.f2);
+
+  struct T3(double) Ld = { x1, x2, x3 };
+  struct T3(double) Rd = { 9, 2, 3 };
+  struct T3(double) retd = Ld+Rd;
+  printf("%g %g %g\n", retd.f0, retd.f1, retd.f2);
 }
 
Index: src/tests/tupleCast.c
===================================================================
--- src/tests/tupleCast.c	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
+++ src/tests/tupleCast.c	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -0,0 +1,28 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// tupleCast.c --
+//
+// Author           : Rob Schluntz
+// Created On       : Mon Dec 12 15:56:07 2016
+// Last Modified By : Rob Schluntz
+// Last Modified On : Mon Dec 12 15:56:20 2016
+// Update Count     : 2
+//
+
+[char, int, double] f() { printf("ran f\n"); return ['c', 70, 6.28]; }
+
+int main() {
+  [int, char, float] x = [10, 'A', 3.14f];
+  printf("%d %c %g\n", ([int, char, float])x);
+  printf("%d %c\n", ([int, char])x);
+  printf("%g %g\n", ([double, float])x);
+  printf("%d %c\n", ([int, char])f());
+}
+
+// Local Variables: //
+// tab-width: 2 //
+// End: //
Index: src/tests/tuplePolymorphism.c
===================================================================
--- src/tests/tuplePolymorphism.c	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
+++ src/tests/tuplePolymorphism.c	(revision f7e749fe66afec27c3d97b647b99b4aaab0e6641)
@@ -0,0 +1,53 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// tuplePolymorphism.c --
+//
+// Author           : Rob Schluntz
+// Created On       : Tue Nov 16 10:38:00 2016
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Nov 16 10:39:18 2016
+// Update Count     : 2
+//
+
+forall(otype T | { T ?+?(T, T); })
+[T, T, T] ?+?([T, T, T] x, [T, T, T] y) {
+	return [x.0+y.0, x.1+y.1, x.2+y.2];
+}
+
+int main() {
+  int x1 = 123, x3 = 456;
+  double x2 = 999.123;
+
+  int i1 = 111, i3 = 222;
+  double i2 = 333;
+
+  int d1 = 555, d3 = 444;
+  double d2 = 666;
+
+
+  [i1, i2, i3] = ([x1, (int)x2, x3]) + ([9, 2, 3]);
+  [d1, d2, d3] = ([x1, x2, x3]) + ([9, 2, 3]);
+  printf("%d %g %d\n", i1, i2, i3);
+  printf("%d %g %d\n", d1, d2, d3);
+
+  [double, double, double] zzz;
+  zzz = [x1, x2, x3];
+  printf("%g %g %g\n", zzz);
+  [x1, x2, x3] = zzz+zzz;
+  printf("%d %g %d\n", x1, x2, x3);
+}
+
+forall(otype T)
+[T, T] foo([T, T] y) {
+	[T, T] x;
+	return x;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// End: //
+
