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: demonstrate assertion ...



details:   https://anonhg.NetBSD.org/src/rev/f5e85af85ebd
branches:  trunk
changeset: 1021040:f5e85af85ebd
user:      rillig <rillig%NetBSD.org@localhost>
date:      Tue May 04 05:32:52 2021 +0000

description:
tests/lint: demonstrate assertion failure "len == size_in_bits(INT)"

Seen on sparc64 in hdtoa.c:341 since sparc64 is one of the platforms
that has 128-bit long double and defines struct ieee_ext.ext_frach:48
based on uint64_t, which is a GCC extension.  Plain C99 only allows
_Bool, signed int and unsigned int as base type for bit-fields.

diffstat:

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

diffs (29 lines):

diff -r d15bf6966cbb -r f5e85af85ebd tests/usr.bin/xlint/lint1/gcc_bit_field_types.c
--- a/tests/usr.bin/xlint/lint1/gcc_bit_field_types.c   Mon May 03 20:07:57 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/gcc_bit_field_types.c   Tue May 04 05:32:52 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: gcc_bit_field_types.c,v 1.3 2021/05/02 22:07:49 rillig Exp $   */
+/*     $NetBSD: gcc_bit_field_types.c,v 1.4 2021/05/04 05:32:52 rillig Exp $   */
 # 3 "gcc_bit_field_types.c"
 
 /*
@@ -19,3 +19,19 @@
        unsigned long long unsigned_long_long_flag: 1;
        double double_flag: 1;  /* expect: illegal bit-field type 'double' */
 };
+
+struct large_bit_field {
+       unsigned long long member: 48;
+};
+
+unsigned long long
+promote_large_bit_field(struct large_bit_field lbf)
+{
+       /*
+        * Before tree.c 1.281 from 2021-05-04:
+        * lint: assertion "len == size_in_bits(INT)" failed
+        *     in promote at tree.c:1698
+        */
+       /* TODO: remove the cast since it hides an assertion failure */
+       return (unsigned long long)lbf.member & 0xf;
+}



Home | Main Index | Thread Index | Old Index