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);