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;

Reply via email to