Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/xlint/lint1 lint: remove wrong warning about wrong i...



details:   https://anonhg.NetBSD.org/src/rev/7421b8b14314
branches:  trunk
changeset: 960763:7421b8b14314
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Mar 28 14:01:49 2021 +0000

description:
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.

diffstat:

 distrib/sets/lists/tests/mi                |   4 ++--
 tests/usr.bin/xlint/lint1/Makefile         |   4 ++--
 tests/usr.bin/xlint/lint1/d_c99_init.c     |  10 +++++-----
 tests/usr.bin/xlint/lint1/d_c99_init.exp   |   2 --
 tests/usr.bin/xlint/lint1/msg_176.c        |  13 ++++++++++---
 tests/usr.bin/xlint/lint1/msg_176.exp      |   1 -
 tests/usr.bin/xlint/lint1/t_integration.sh |  21 +++++++++------------
 usr.bin/xlint/lint1/err.c                  |   6 +++---
 usr.bin/xlint/lint1/init.c                 |  23 ++++++++---------------
 9 files changed, 39 insertions(+), 45 deletions(-)

diffs (235 lines):

diff -r 019a1b024208 -r 7421b8b14314 distrib/sets/lists/tests/mi
--- a/distrib/sets/lists/tests/mi       Sun Mar 28 13:39:39 2021 +0000
+++ b/distrib/sets/lists/tests/mi       Sun Mar 28 14:01:49 2021 +0000
@@ -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
diff -r 019a1b024208 -r 7421b8b14314 tests/usr.bin/xlint/lint1/Makefile
--- a/tests/usr.bin/xlint/lint1/Makefile        Sun Mar 28 13:39:39 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/Makefile        Sun Mar 28 14:01:49 2021 +0000
@@ -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_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.
diff -r 019a1b024208 -r 7421b8b14314 tests/usr.bin/xlint/lint1/d_c99_init.c
--- a/tests/usr.bin/xlint/lint1/d_c99_init.c    Sun Mar 28 13:39:39 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_c99_init.c    Sun Mar 28 14:01:49 2021 +0000
@@ -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 @@
 } 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 @@
  * 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}}}},
 };
 
diff -r 019a1b024208 -r 7421b8b14314 tests/usr.bin/xlint/lint1/d_c99_init.exp
--- a/tests/usr.bin/xlint/lint1/d_c99_init.exp  Sun Mar 28 13:39:39 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_c99_init.exp  Sun Mar 28 14:01:49 2021 +0000
@@ -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]
diff -r 019a1b024208 -r 7421b8b14314 tests/usr.bin/xlint/lint1/msg_176.c
--- a/tests/usr.bin/xlint/lint1/msg_176.c       Sun Mar 28 13:39:39 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_176.c       Sun Mar 28 14:01:49 2021 +0000
@@ -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}}};
diff -r 019a1b024208 -r 7421b8b14314 tests/usr.bin/xlint/lint1/msg_176.exp
--- a/tests/usr.bin/xlint/lint1/msg_176.exp     Sun Mar 28 13:39:39 2021 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-msg_176.c(6): error: syntax error ':' [249]
diff -r 019a1b024208 -r 7421b8b14314 tests/usr.bin/xlint/lint1/t_integration.sh
--- a/tests/usr.bin/xlint/lint1/t_integration.sh        Sun Mar 28 13:39:39 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/t_integration.sh        Sun Mar 28 14:01:49 2021 +0000
@@ -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 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
 }
 
 
diff -r 019a1b024208 -r 7421b8b14314 usr.bin/xlint/lint1/err.c
--- a/usr.bin/xlint/lint1/err.c Sun Mar 28 13:39:39 2021 +0000
+++ b/usr.bin/xlint/lint1/err.c Sun Mar 28 14:01:49 2021 +0000
@@ -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 @@
        "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 */
diff -r 019a1b024208 -r 7421b8b14314 usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c        Sun Mar 28 13:39:39 2021 +0000
+++ b/usr.bin/xlint/lint1/init.c        Sun Mar 28 14:01:49 2021 +0000
@@ -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 @@
 
        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 @@
        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 @@
        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);



Home | Main Index | Thread Index | Old Index