Index: tests/.expect/array-ERR1.txt
===================================================================
--- tests/.expect/array-ERR1.txt	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
+++ tests/.expect/array-ERR1.txt	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
@@ -0,0 +1,6 @@
+array.cfa:105:25: warning: Preprocessor started
+array.cfa:40:22: error: '[*]' not allowed in other than function prototype scope
+array.cfa:46:24: error: '[*]' not allowed in other than function prototype scope
+array.cfa: In function '_X4fredFi_i__1':
+array.cfa:52:16: error: array size missing in '_X2a1A0i_2'
+array.cfa:53:26: error: '[*]' not allowed in other than function prototype scope
Index: tests/.expect/array-ERR2.txt
===================================================================
--- tests/.expect/array-ERR2.txt	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
+++ tests/.expect/array-ERR2.txt	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
@@ -0,0 +1,2 @@
+array.cfa:105:25: warning: Preprocessor started
+array.cfa:95:32: error: syntax error, unexpected STATIC before token "static"
Index: tests/.expect/array-ERR3.txt
===================================================================
--- tests/.expect/array-ERR3.txt	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
+++ tests/.expect/array-ERR3.txt	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
@@ -0,0 +1,2 @@
+array.cfa:105:25: warning: Preprocessor started
+array.cfa:96:32: error: syntax error, unexpected ']' before token "]"
Index: tests/.expect/array.txt
===================================================================
--- tests/.expect/array.txt	(revision 42468693de700fc817ab7892fc8bd114feaa45f7)
+++ tests/.expect/array.txt	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
@@ -1,1 +1,1 @@
-array.cfa:52:25: warning: Compiled
+array.cfa:105:25: warning: Preprocessor started
Index: tests/Makefile.am
===================================================================
--- tests/Makefile.am	(revision 42468693de700fc817ab7892fc8bd114feaa45f7)
+++ tests/Makefile.am	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
@@ -211,4 +211,17 @@
 # expected failures
 # use custom target since they require a custom define *and* have a name that doesn't match the file
+
+array-ERR1 : array.cfa ${CFACCBIN}
+	${CFACOMPILE_SYNTAX} -DERR1
+	-cp ${test} ${abspath ${@}}
+
+array-ERR2 : array.cfa ${CFACCBIN}
+	${CFACOMPILE_SYNTAX} -DERR2
+	-cp ${test} ${abspath ${@}}
+
+array-ERR3 : array.cfa ${CFACCBIN}
+	${CFACOMPILE_SYNTAX} -DERR3
+	-cp ${test} ${abspath ${@}}
+
 alloc-ERROR : alloc.cfa ${CFACCBIN}
 	${CFACOMPILE_SYNTAX} -DERR1
Index: tests/array.cfa
===================================================================
--- tests/array.cfa	(revision 42468693de700fc817ab7892fc8bd114feaa45f7)
+++ tests/array.cfa	(revision a5aa5bf540d60862fa4c03609b41cf72df5835d0)
@@ -15,40 +15,93 @@
 //
 
-int a1[0];
-//int a2[*];
-//double a4[3.0];
+// Tests syntax.  Comments explain semantics.  Test does not show semantics.
+// Mostly illustrates facts about C (with which CFA is being tested to agree).
+// Is a test oracle under `gcc -x c`.
 
-int m1[0][3];
-//int m2[*][*];
-int m4[3][3];
+#ifdef ERR1
+#define E1(...) __VA_ARGS__
+#else
+#define E1(...)
+#endif
 
-typedef int T;
+#ifdef ERR2
+#define E2(...) __VA_ARGS__
+#else
+#define E2(...)
+#endif
 
-int fred() {
-//	int a1[];
-//	int a2[*];
-	int a4[3];
-	int T[3];
-}
+#ifdef ERR3
+#define E3(...) __VA_ARGS__
+#else
+#define E3(...)
+#endif
 
-int mary( int T[3],
-		  int p1[const 3],
-		  int p2[static 3],
-		  int p3[static const 3]
-	) {
-}
+	int a1[0];
+E1( int a2[*];       )
+                                                        #ifndef __cforall
+E1( double a4[3.0];  )                                  // BUG 275: CFA accepts but should reject
+                                                        #endif
 
-int (*tom())[3] {
-}
+	int m1[0][3];
+E1(	int m2[*][*];    )
+	int m4[3][3];
 
-int (*(jane)())( int T[3],
-				 int p1[const 3],
-				 int p2[static 3],
-				 int p3[static const 3]
-	) {
-}
+	typedef int T;
+
+	int fred(int n) {
+E1(		int a1[];    )
+E1(		int a2[*];   )
+		int a4[3];
+		int T[3];
+		int a5[n];
+	}
+
+	int mary( int T[3],                                 // same as: int *T
+			  int p1[const 3],                          // same as: int const *p1
+			  int p2[static 3],                         // same as T, but length >=3 checked
+			  int p3[static const 3]                    // both above: 3 is static, p3 is const
+		) {
+	}
+
+	// function taking (), returning pointer to array of ints
+	int (*tom())[3] {
+	}
+
+	// function taking (), returning pointer to function of same type as mary
+	int (*(jane)())( int T[3],
+					int p1[const 3],
+					int p2[static 3],
+					int p3[static const 3]
+		) {
+	}
+
+	// functions returning same exotic pointers, in CFA's non-onion syntax
+	#ifdef __cforall
+	[ * [3] int ] toms_twin(...) {
+	}
+	[ * [int]( [3] int T,
+			[const 3] int p1,
+			[static 3] int p2,
+			[static const 3] int p3
+			)
+	] janes_twin(...) {
+	}
+	#endif
+
+
+	int fm1( int, int, int[][*] );
+	int fm1( int r, int c, int m[][c] ) {}
+	int fm2( int r, int c, int (*m)[c] ) {}             // same as fm1
+E2(	int fm3( int r, int c, int m[][static c] ) {}  )    // that's not static
+E3(	int fm4( int r, int c, int m[][] );            )    // m's immediate element type is incomplete
+	int fm5( int, int, int[*][*] );                     // same as fm1 decl
+                                                        #ifndef __cforall
+	int fm5( int r, int c, int m[r][c] ) {}             // BUG 276: CFA chokes but should accept
+	                                                    // C: same as fm1 defn
+                                                        #endif
+
 
 int main() {
-    #pragma GCC warning "Compiled"                      // force non-empty .expect file, NO TABS!!!
+    #pragma GCC warning "Preprocessor started"          // force non-empty .expect file, NO TABS!!!
 }
 
