Module Name:    src
Committed By:   rillig
Date:           Tue May  4 05:32:52 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint1: gcc_bit_field_types.c

Log Message:
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.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/gcc_bit_field_types.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/xlint/lint1/gcc_bit_field_types.c
diff -u src/tests/usr.bin/xlint/lint1/gcc_bit_field_types.c:1.3 src/tests/usr.bin/xlint/lint1/gcc_bit_field_types.c:1.4
--- src/tests/usr.bin/xlint/lint1/gcc_bit_field_types.c:1.3	Sun May  2 22:07:49 2021
+++ src/tests/usr.bin/xlint/lint1/gcc_bit_field_types.c	Tue May  4 05:32:52 2021
@@ -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 @@ struct example {
 	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;
+}

Reply via email to