Module Name:    src
Committed By:   rillig
Date:           Sun Mar 28 14:01:50 UTC 2021

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/usr.bin/xlint/lint1: Makefile d_c99_init.c d_c99_init.exp
            msg_176.c t_integration.sh
        src/usr.bin/xlint/lint1: err.c init.c
Removed Files:
        src/tests/usr.bin/xlint/lint1: msg_176.exp

Log Message:
lint: remove wrong warning about wrong initializer type

The following code is valid:

        int valid = {{{ 3 }}};

C90 3.5.7 and C99 6.7.8 both say that the "initializer for a scalar
shall be a single expression, optionally enclosed in braces".  They
don't put any upper bound on the amount of braces, not even in the
"Translation limits" section.


To generate a diff of this commit:
cvs rdiff -u -r1.1033 -r1.1034 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.36 -r1.37 src/tests/usr.bin/xlint/lint1/Makefile \
    src/tests/usr.bin/xlint/lint1/t_integration.sh
cvs rdiff -u -r1.16 -r1.17 src/tests/usr.bin/xlint/lint1/d_c99_init.c
cvs rdiff -u -r1.12 -r1.13 src/tests/usr.bin/xlint/lint1/d_c99_init.exp
cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/msg_176.c
cvs rdiff -u -r1.2 -r0 src/tests/usr.bin/xlint/lint1/msg_176.exp
cvs rdiff -u -r1.96 -r1.97 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.161 -r1.162 src/usr.bin/xlint/lint1/init.c

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

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1033 src/distrib/sets/lists/tests/mi:1.1034
--- src/distrib/sets/lists/tests/mi:1.1033	Tue Mar 23 21:19:08 2021
+++ src/distrib/sets/lists/tests/mi	Sun Mar 28 14:01:49 2021
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1033 2021/03/23 21:19:08 rillig Exp $
+# $NetBSD: mi,v 1.1034 2021/03/28 14:01:49 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -6532,7 +6532,7 @@
 ./usr/tests/usr.bin/xlint/lint1/msg_175.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/msg_175.exp			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/msg_176.c			tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/xlint/lint1/msg_176.exp			tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/msg_176.exp			tests-obsolete		obsolete
 ./usr/tests/usr.bin/xlint/lint1/msg_177.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/msg_177.exp			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/msg_178.c			tests-usr.bin-tests	compattestfile,atf

Index: src/tests/usr.bin/xlint/lint1/Makefile
diff -u src/tests/usr.bin/xlint/lint1/Makefile:1.36 src/tests/usr.bin/xlint/lint1/Makefile:1.37
--- src/tests/usr.bin/xlint/lint1/Makefile:1.36	Tue Mar 23 21:19:08 2021
+++ src/tests/usr.bin/xlint/lint1/Makefile	Sun Mar 28 14:01:50 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.36 2021/03/23 21:19:08 rillig Exp $
+# $NetBSD: Makefile,v 1.37 2021/03/28 14:01:50 rillig Exp $
 
 NOMAN=		# defined
 
@@ -98,7 +98,7 @@ FILES+=		d_type_question_colon.c
 FILES+=		d_typefun.c
 FILES+=		d_typename_as_var.c
 FILES+=		d_zero_sized_arrays.c
-FILES+=		${:U0 ${:U:range=340}:C,^.$,0&,:C,^..$,0&,:@msg@msg_${msg}.c msg_${msg}.exp@}
+FILES+=		${:U0 ${:U:range=340}:C,^.$,0&,:C,^..$,0&,:@msg@msg_${msg}.c msg_${msg}.exp@:Nmsg_176.exp}
 
 # Note: only works for adding tests.
 # To remove a test, the $$mi file must be edited manually.
Index: src/tests/usr.bin/xlint/lint1/t_integration.sh
diff -u src/tests/usr.bin/xlint/lint1/t_integration.sh:1.36 src/tests/usr.bin/xlint/lint1/t_integration.sh:1.37
--- src/tests/usr.bin/xlint/lint1/t_integration.sh:1.36	Sat Mar 27 13:59:18 2021
+++ src/tests/usr.bin/xlint/lint1/t_integration.sh	Sun Mar 28 14:01:50 2021
@@ -1,4 +1,4 @@
-# $NetBSD: t_integration.sh,v 1.36 2021/03/27 13:59:18 rillig Exp $
+# $NetBSD: t_integration.sh,v 1.37 2021/03/28 14:01:50 rillig Exp $
 #
 # Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -169,22 +169,19 @@ test_case d_long_double_int
 test_case all_messages
 all_messages_body()
 {
-	local srcdir ok msg base flags
+	local failed msg
 
-	srcdir="$(atf_get_srcdir)"
-	ok="true"
+	failed=""
 
 	for msg in $(seq 0 340); do
-		base="$(printf '%s/msg_%03d' "${srcdir}" "${msg}")"
-		flags="$(extract_flags "${base}.c")"
-
-		# shellcheck disable=SC2154 disable=SC2086
-		${Atf_Check} -s not-exit:0 -o "file:${base}.exp" -e empty \
-		    ${LINT1} ${flags} "${base}.c" /dev/null \
-		|| ok="false"
+		name="$(printf 'msg_%03d.c' "${msg}")"
+		check_lint1 "${name}" \
+		|| failed="$failed${failed:+ }$name"
 	done
 
-	atf_check "${ok}"
+	if [ "$failed" != "" ]; then
+		atf_check "false" "$failed"
+	fi
 }
 
 

Index: src/tests/usr.bin/xlint/lint1/d_c99_init.c
diff -u src/tests/usr.bin/xlint/lint1/d_c99_init.c:1.16 src/tests/usr.bin/xlint/lint1/d_c99_init.c:1.17
--- src/tests/usr.bin/xlint/lint1/d_c99_init.c:1.16	Sat Mar 27 23:13:48 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_init.c	Sun Mar 28 14:01:50 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: d_c99_init.c,v 1.16 2021/03/27 23:13:48 rillig Exp $	*/
+/*	$NetBSD: d_c99_init.c,v 1.17 2021/03/28 14:01:50 rillig Exp $	*/
 # 3 "d_c99_init.c"
 
 /*
@@ -15,11 +15,11 @@ typedef struct any {
 } any;
 
 
-// C99 6.7.8p11 says "optionally enclosed in braces".  The intended
-// interpretation is "optionally enclosed in a single pair of braces".
+// C99 6.7.8p11 says "optionally enclosed in braces".  There is no limitation
+// on the number of brace pairs.
 int scalar_without_braces = 3;
 int scalar_with_optional_braces = { 3 };
-int scalar_with_too_many_braces = {{ 3 }};		/* expect: 176 */
+int scalar_with_too_many_braces = {{ 3 }};
 int scalar_with_too_many_initializers = { 3, 5 };	/* expect: 174 */
 
 
@@ -139,7 +139,7 @@ int array_with_designator[] = {
  * about this, so there is no extra work for lint to do.
  */
 struct point scalar_with_several_braces = {
-	{{{3}}},		/*FIXME*//* expect: invalid initializer type int */
+	{{{3}}},
 	{{{{4}}}},
 };
 

Index: src/tests/usr.bin/xlint/lint1/d_c99_init.exp
diff -u src/tests/usr.bin/xlint/lint1/d_c99_init.exp:1.12 src/tests/usr.bin/xlint/lint1/d_c99_init.exp:1.13
--- src/tests/usr.bin/xlint/lint1/d_c99_init.exp:1.12	Sat Mar 27 23:13:48 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_init.exp	Sun Mar 28 14:01:50 2021
@@ -1,7 +1,5 @@
-d_c99_init.c(22): error: invalid initializer type int [176]
 d_c99_init.c(23): error: too many initializers [174]
 d_c99_init.c(49): error: cannot initialize 'pointer to const void' from 'struct any' [185]
 d_c99_init.c(65): error: too many array initializers, expected 3 [173]
 d_c99_init.c(130): error: syntax error 'named member must only be used with struct/union' [249]
-d_c99_init.c(142): error: invalid initializer type int [176]
 d_c99_init.c(217): error: too many struct/union initializers [172]

Index: src/tests/usr.bin/xlint/lint1/msg_176.c
diff -u src/tests/usr.bin/xlint/lint1/msg_176.c:1.2 src/tests/usr.bin/xlint/lint1/msg_176.c:1.3
--- src/tests/usr.bin/xlint/lint1/msg_176.c:1.2	Sun Feb 21 09:07:58 2021
+++ src/tests/usr.bin/xlint/lint1/msg_176.c	Sun Mar 28 14:01:50 2021
@@ -1,7 +1,14 @@
-/*	$NetBSD: msg_176.c,v 1.2 2021/02/21 09:07:58 rillig Exp $	*/
+/*	$NetBSD: msg_176.c,v 1.3 2021/03/28 14:01:50 rillig Exp $	*/
 # 3 "msg_176.c"
 
 // Test for message: invalid initializer type %s [176]
 
-TODO: "Add example code that triggers the above message." /* expect: 249 */
-TODO: "Add example code that almost triggers the above message."
+/*
+ * Before init.c 1.161 from 2021-03-28, lint wronly complained about
+ * initializers with redundant braces.
+ *
+ * C99 allows these, both GCC and Clang warn about them since they are unusual
+ * and confusing.
+ */
+
+int valid = {{{3}}};

Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.96 src/usr.bin/xlint/lint1/err.c:1.97
--- src/usr.bin/xlint/lint1/err.c:1.96	Sat Mar 27 12:42:22 2021
+++ src/usr.bin/xlint/lint1/err.c	Sun Mar 28 14:01:49 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: err.c,v 1.96 2021/03/27 12:42:22 rillig Exp $	*/
+/*	$NetBSD: err.c,v 1.97 2021/03/28 14:01:49 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: err.c,v 1.96 2021/03/27 12:42:22 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.97 2021/03/28 14:01:49 rillig Exp $");
 #endif
 
 #include <sys/types.h>
@@ -230,7 +230,7 @@ const	char *msgs[] = {
 	"too many array initializers, expected %d",		      /* 173 */
 	"too many initializers",				      /* 174 */
 	"initialization of an incomplete type",			      /* 175 */
-	"invalid initializer type %s",				      /* 176 */
+	"",			/* no longer used */		      /* 176 */
 	"non-constant initializer",				      /* 177 */
 	"initializer does not fit",				      /* 178 */
 	"cannot initialize struct/union with no named member",	      /* 179 */

Index: src/usr.bin/xlint/lint1/init.c
diff -u src/usr.bin/xlint/lint1/init.c:1.161 src/usr.bin/xlint/lint1/init.c:1.162
--- src/usr.bin/xlint/lint1/init.c:1.161	Sun Mar 28 13:09:43 2021
+++ src/usr.bin/xlint/lint1/init.c	Sun Mar 28 14:01:49 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: init.c,v 1.161 2021/03/28 13:09:43 rillig Exp $	*/
+/*	$NetBSD: init.c,v 1.162 2021/03/28 14:01:49 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: init.c,v 1.161 2021/03/28 13:09:43 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.162 2021/03/28 14:01:49 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -858,12 +858,13 @@ initialization_push(struct initializatio
 
 	level = in->brace_level;
 	lint_assert(level->bl_remaining > 0);
-	lint_assert(level->bl_type == NULL ||
-		    !is_scalar(level->bl_type->t_tspec));
 
 	in->brace_level = xcalloc(1, sizeof *in->brace_level);
 	in->brace_level->bl_enclosing = level;
 	in->brace_level->bl_type = level->bl_subtype;
+	if (in->brace_level->bl_type == NULL)
+		in->brace_level->bl_type = level->bl_type;
+	lint_assert(in->brace_level->bl_type != NULL);
 	lint_assert(in->brace_level->bl_type->t_tspec != FUNC);
 
 again:
@@ -1012,13 +1013,6 @@ initialization_next_brace(struct initial
 	debug_enter();
 	initialization_debug(in);
 
-	if (in->brace_level->bl_type != NULL &&
-	    is_scalar(in->brace_level->bl_type->t_tspec)) {
-		/* invalid initializer type %s */
-		error(176, type_name(in->brace_level->bl_type));
-		initialization_set_error(in);
-	}
-
 	if (!in->initerr &&
 	    !brace_level_check_too_many_initializers(in->brace_level))
 		initialization_set_error(in);
@@ -1029,10 +1023,9 @@ initialization_next_brace(struct initial
 	if (!in->initerr) {
 		in->brace_level->bl_brace = true;
 		designation_debug(&in->designation);
-		debug_step("expecting type '%s'",
-		    type_name(in->brace_level->bl_type != NULL
-			? in->brace_level->bl_type
-			: in->brace_level->bl_subtype));
+		if (in->brace_level->bl_type != NULL)
+			debug_step("expecting type '%s'",
+			    type_name(in->brace_level->bl_type));
 	}
 
 	initialization_debug(in);

Reply via email to