Module Name: src
Committed By: rillig
Date: Mon Jul 31 20:31:58 UTC 2023
Modified Files:
src/tests/usr.bin/xlint/lint1: decl.c
src/usr.bin/xlint/lint1: decl.c
Log Message:
lint: fix assertion failure after unnamed bit-field member
Since 2023-07-15.
To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/tests/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.369 -r1.370 src/usr.bin/xlint/lint1/decl.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/decl.c
diff -u src/tests/usr.bin/xlint/lint1/decl.c:1.23 src/tests/usr.bin/xlint/lint1/decl.c:1.24
--- src/tests/usr.bin/xlint/lint1/decl.c:1.23 Thu Jul 13 22:44:10 2023
+++ src/tests/usr.bin/xlint/lint1/decl.c Mon Jul 31 20:31:58 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.23 2023/07/13 22:44:10 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.24 2023/07/31 20:31:58 rillig Exp $ */
# 3 "decl.c"
/*
@@ -190,3 +190,24 @@ const volatile int
/* expect+1: warning: duplicate 'volatile' [10] */
*volatile const volatile
*duplicate_ptr;
+
+
+/*
+ * Since tree.c 1.573 from 2023-07-15 and before decl.c 1.370 from 2023-07-31,
+ * lint crashed due to a failed assertion in find_member. The assertion states
+ * that every member of a struct or union must link back to its containing
+ * type, which had not been the case for unnamed bit-fields.
+ */
+struct bit_and_data {
+ unsigned int :0;
+ unsigned int bit:1;
+ unsigned int :0;
+
+ void *data;
+};
+
+static inline void *
+bit_and_data(struct bit_and_data *node)
+{
+ return node->data;
+}
Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.369 src/usr.bin/xlint/lint1/decl.c:1.370
--- src/usr.bin/xlint/lint1/decl.c:1.369 Sun Jul 30 22:38:09 2023
+++ src/usr.bin/xlint/lint1/decl.c Mon Jul 31 20:31:58 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.369 2023/07/30 22:38:09 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.370 2023/07/31 20:31:58 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: decl.c,v 1.369 2023/07/30 22:38:09 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.370 2023/07/31 20:31:58 rillig Exp $");
#endif
#include <sys/param.h>
@@ -1132,6 +1132,8 @@ set_bit_field_width(sym_t *dsym, int bit
dsym->s_scl = STRUCT_MEMBER;
dsym->s_type = gettyp(UINT);
dsym->s_block_level = -1;
+ lint_assert(dcs->d_tag_type->t_sou != NULL);
+ dsym->u.s_member.sm_containing_type = dcs->d_tag_type->t_sou;
}
dsym->s_type = block_dup_type(dsym->s_type);
dsym->s_type->t_bitfield = true;