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: fix wrong warning about bitfield i...



details:   https://anonhg.NetBSD.org/src/rev/502189306e2f
branches:  trunk
changeset: 979572:502189306e2f
user:      rillig <rillig%NetBSD.org@localhost>
date:      Fri Jan 01 19:11:19 2021 +0000

description:
lint: fix wrong warning about bitfield in C99 structure initialization

The variable namemem is supposed to be a circular list, which is
"documented" implicitly in push_member.

The implementation was buggy though.  In pop_member, the circular list
was destroyed though.  Given the list (capital, major, favorite_color,
green), removing capital made major point to itself in the forward
direction, even though it should not have been modified at all.

In the test, I had been too optimistic to quickly understand the code
around variable initialization.  I was wrong though, so I had to adjust
the comments there to reality.

diffstat:

 tests/usr.bin/xlint/lint1/d_init_pop_member.c   |  10 +++++-----
 tests/usr.bin/xlint/lint1/d_init_pop_member.exp |   2 --
 usr.bin/xlint/lint1/init.c                      |   8 ++++----
 3 files changed, 9 insertions(+), 11 deletions(-)

diffs (74 lines):

diff -r 12bf61848c56 -r 502189306e2f tests/usr.bin/xlint/lint1/d_init_pop_member.c
--- a/tests/usr.bin/xlint/lint1/d_init_pop_member.c     Fri Jan 01 17:21:47 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_init_pop_member.c     Fri Jan 01 19:11:19 2021 +0000
@@ -1,7 +1,7 @@
 # 2
 
 /*
- * Between init.c 1.27 from 2015-07-28 and init.c 1.52 from 2021-01-01,
+ * Since init.c 1.27 from 2015-07-28,
  * a bug in memberpop or pop_member led to a wrong error message
  * "undefined struct/union member: capital [101]" in the second and third
  * named initializer.
@@ -37,20 +37,20 @@
        struct state st = {
            .capital.major.hobbies.dancing = 1,
            /*
-            * Between 2015-07-28 and 2021-01-01:
+            * Since 2015-07-28:
             * wrong "undefined struct/union member: capital [101]"
             */
            /*
-            * As of 2020-01-01:
+            * Before init.c 1.52 from 2020-01-01:
             * wrong "warning: bit-field initializer does not fit [180]"
             */
            .capital.major.favorite_color.green = 0xFF,
            /*
-            * Between 2015-07-28 and 2021-01-01:
+            * Since 2015-07-28:
             * wrong "undefined struct/union member: capital [101]"
             */
            /*
-            * As of 2020-01-01:
+            * Before init.c 1.52 from 2020-01-01:
             * wrong "warning: bit-field initializer does not fit [180]"
             */
            .capital.major.favorite_color.red = 0xFF
diff -r 12bf61848c56 -r 502189306e2f tests/usr.bin/xlint/lint1/d_init_pop_member.exp
--- a/tests/usr.bin/xlint/lint1/d_init_pop_member.exp   Fri Jan 01 17:21:47 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_init_pop_member.exp   Fri Jan 01 19:11:19 2021 +0000
@@ -1,4 +1,2 @@
 (47): undefined struct/union member: capital [101]
-(47): warning: bit-field initializer does not fit [180]
 (57): undefined struct/union member: capital [101]
-(57): warning: bit-field initializer does not fit [180]
diff -r 12bf61848c56 -r 502189306e2f usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c        Fri Jan 01 17:21:47 2021 +0000
+++ b/usr.bin/xlint/lint1/init.c        Fri Jan 01 19:11:19 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: init.c,v 1.51 2021/01/01 16:50:47 rillig Exp $ */
+/*     $NetBSD: init.c,v 1.52 2021/01/01 19:11:19 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.51 2021/01/01 16:50:47 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.52 2021/01/01 19:11:19 rillig Exp $");
 #endif
 
 #include <ctype.h>
@@ -109,8 +109,8 @@
        } else {
                namlist_t *nam = namedmem;
                namedmem = namedmem->n_next;
-               namedmem->n_next = nam->n_next; /* FIXME: inner circle */
-               namedmem->n_prev = nam->n_prev;
+               nam->n_prev->n_next = nam->n_next;
+               nam->n_next->n_prev = nam->n_prev;
                free(nam);
        }
 }



Home | Main Index | Thread Index | Old Index