Module Name:    src
Committed By:   rillig
Date:           Tue Dec 28 22:54:08 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint1: d_c99_init.c d_c99_init.exp

Log Message:
tests/lint: extend documentation for omitted braces in initializer


To generate a diff of this commit:
cvs rdiff -u -r1.38 -r1.39 src/tests/usr.bin/xlint/lint1/d_c99_init.c
cvs rdiff -u -r1.28 -r1.29 src/tests/usr.bin/xlint/lint1/d_c99_init.exp

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/xlint/lint1/d_c99_init.c
diff -u src/tests/usr.bin/xlint/lint1/d_c99_init.c:1.38 src/tests/usr.bin/xlint/lint1/d_c99_init.c:1.39
--- src/tests/usr.bin/xlint/lint1/d_c99_init.c:1.38	Wed Dec 22 14:49:11 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_init.c	Tue Dec 28 22:54:08 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: d_c99_init.c,v 1.38 2021/12/22 14:49:11 rillig Exp $	*/
+/*	$NetBSD: d_c99_init.c,v 1.39 2021/12/28 22:54:08 rillig Exp $	*/
 # 3 "d_c99_init.c"
 
 /*
@@ -81,7 +81,7 @@ int array_with_fixed_size[3] = {
 	444,			/* expect: too many array initializers */
 };
 
-// See initialization_set_set_of_unknown_array.
+// See update_type_of_array_of_unknown_size.
 int array_of_unknown_size[] = {
 	111,
 	222,
@@ -150,8 +150,11 @@ int array_with_designator[] = {
  * C99 6.7.8p11 says that the initializer of a scalar can be "optionally
  * enclosed in braces".  It does not explicitly set an upper limit on the
  * number of braces.  It also doesn't restrict the term "initializer" to only
- * mean the "outermost initializer".  Both GCC 10 and Clang 8 already warn
- * about this, so there is no extra work for lint to do.
+ * mean the "outermost initializer".  6.7.8p13 defines that a brace for a
+ * structure or union always means to descend into the type.  Both GCC 10 and
+ * Clang 8 already warn about these extra braces, nevertheless there is
+ * real-life code (the Postfix MTA) that exploits this corner case of the
+ * standard.
  */
 struct point scalar_with_several_braces = {
 	{{{3}}},

Index: src/tests/usr.bin/xlint/lint1/d_c99_init.exp
diff -u src/tests/usr.bin/xlint/lint1/d_c99_init.exp:1.28 src/tests/usr.bin/xlint/lint1/d_c99_init.exp:1.29
--- src/tests/usr.bin/xlint/lint1/d_c99_init.exp:1.28	Wed Dec 22 00:45:53 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_init.exp	Tue Dec 28 22:54:08 2021
@@ -3,27 +3,27 @@ d_c99_init.c(64): error: cannot initiali
 d_c99_init.c(81): error: too many array initializers, expected 3 [173]
 d_c99_init.c(139): error: too many struct/union initializers [172]
 d_c99_init.c(145): error: syntax error 'designator '.member' is only for struct/union' [249]
-d_c99_init.c(218): error: array subscript cannot be > 2: 3 [168]
-d_c99_init.c(220): error: array subscript cannot be > 4: 5 [168]
-d_c99_init.c(222): error: array subscript cannot be > 1: 2 [168]
-d_c99_init.c(231): error: too many struct/union initializers [172]
-d_c99_init.c(237): warning: illegal combination of integer (char) and pointer (pointer to char) [183]
-d_c99_init.c(331): error: negative array dimension (-8) [20]
-d_c99_init.c(333): error: negative array dimension (-12) [20]
-d_c99_init.c(386): error: duplicate case in switch: 0 [199]
-d_c99_init.c(394): error: negative array dimension (-12) [20]
-d_c99_init.c(398): error: type 'struct point' does not have member 'r' [101]
-d_c99_init.c(405): error: type 'struct point' does not have member 'r' [101]
-d_c99_init.c(412): error: type 'struct point' does not have member 'r' [101]
-d_c99_init.c(421): error: type 'union value' does not have member 'unknown_value' [101]
-d_c99_init.c(427): error: type 'union value' does not have member 'unknown_value' [101]
-d_c99_init.c(431): error: syntax error 'designator '[...]' is only for arrays' [249]
-d_c99_init.c(436): error: type 'struct point' does not have member 'member' [101]
-d_c99_init.c(441): error: syntax error 'scalar type cannot use designator' [249]
-d_c99_init.c(448): warning: structure has no named members [65]
-d_c99_init.c(448): error: cannot initialize struct/union with no named member [179]
-d_c99_init.c(456): warning: union has no named members [65]
-d_c99_init.c(456): error: cannot initialize struct/union with no named member [179]
-d_c99_init.c(461): error: syntax error 'scalar type cannot use designator' [249]
-d_c99_init.c(465): error: syntax error 'scalar type cannot use designator' [249]
-d_c99_init.c(469): error: syntax error 'designator '[...]' is only for arrays' [249]
+d_c99_init.c(221): error: array subscript cannot be > 2: 3 [168]
+d_c99_init.c(223): error: array subscript cannot be > 4: 5 [168]
+d_c99_init.c(225): error: array subscript cannot be > 1: 2 [168]
+d_c99_init.c(234): error: too many struct/union initializers [172]
+d_c99_init.c(240): warning: illegal combination of integer (char) and pointer (pointer to char) [183]
+d_c99_init.c(334): error: negative array dimension (-8) [20]
+d_c99_init.c(336): error: negative array dimension (-12) [20]
+d_c99_init.c(389): error: duplicate case in switch: 0 [199]
+d_c99_init.c(397): error: negative array dimension (-12) [20]
+d_c99_init.c(401): error: type 'struct point' does not have member 'r' [101]
+d_c99_init.c(408): error: type 'struct point' does not have member 'r' [101]
+d_c99_init.c(415): error: type 'struct point' does not have member 'r' [101]
+d_c99_init.c(424): error: type 'union value' does not have member 'unknown_value' [101]
+d_c99_init.c(430): error: type 'union value' does not have member 'unknown_value' [101]
+d_c99_init.c(434): error: syntax error 'designator '[...]' is only for arrays' [249]
+d_c99_init.c(439): error: type 'struct point' does not have member 'member' [101]
+d_c99_init.c(444): error: syntax error 'scalar type cannot use designator' [249]
+d_c99_init.c(451): warning: structure has no named members [65]
+d_c99_init.c(451): error: cannot initialize struct/union with no named member [179]
+d_c99_init.c(459): warning: union has no named members [65]
+d_c99_init.c(459): error: cannot initialize struct/union with no named member [179]
+d_c99_init.c(464): error: syntax error 'scalar type cannot use designator' [249]
+d_c99_init.c(468): error: syntax error 'scalar type cannot use designator' [249]
+d_c99_init.c(472): error: syntax error 'designator '[...]' is only for arrays' [249]

Reply via email to