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;