Source-Changes-HG archive

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

[src/trunk]: src/tests/usr.bin/xlint/lint1 tests/lint: explain wrong type mis...



details:   https://anonhg.NetBSD.org/src/rev/1788b6200cdb
branches:  trunk
changeset: 953864:1788b6200cdb
user:      rillig <rillig%NetBSD.org@localhost>
date:      Mon Mar 22 16:51:24 2021 +0000

description:
tests/lint: explain wrong type mismatch in compound literal

When a pointer to a compound literal is used as an initializer, lint
reports a wrong type mismatch.  The details of what happens are now
documented, which allows this problem to be fixed properly.

diffstat:

 tests/usr.bin/xlint/lint1/msg_171.c |  18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diffs (30 lines):

diff -r a06a8a87819f -r 1788b6200cdb tests/usr.bin/xlint/lint1/msg_171.c
--- a/tests/usr.bin/xlint/lint1/msg_171.c       Mon Mar 22 15:29:43 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_171.c       Mon Mar 22 16:51:24 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: msg_171.c,v 1.4 2021/03/22 15:29:43 rillig Exp $       */
+/*     $NetBSD: msg_171.c,v 1.5 2021/03/22 16:51:24 rillig Exp $       */
 # 3 "msg_171.c"
 
 // Test for message: cannot assign to '%s' from '%s' [171]
@@ -34,4 +34,20 @@
        struct point *p = &(struct point){
            12, 5,
        };                      /* expect: 171 *//*FIXME*/
+       /*
+        * FIXME: The type mismatch in the above line occurs because lint
+        * wrongly assumes that there is only ever a single initialization
+        * going on, which takes place in initstk.
+        *
+        * In the debug log, this is marked by the two calls to initstack_init
+        * that are happily intermixed with 'begin initialization' and 'end
+        * initialization'.  This was not planned for, and it worked well
+        * before C99, since compound literals are a new feature from C99.
+        *
+        * The proper fix, as for so many similar problems is to not use
+        * global variables for things that have a limited lifetime, but
+        * instead let the grammar determine the lifetime and scope of these
+        * objects, which makes them only accessible when they can actually be
+        * used.
+        */
 }



Home | Main Index | Thread Index | Old Index