Module Name: src Committed By: rillig Date: Sat Jul 1 06:09:24 UTC 2023
Modified Files: src/tests/usr.bin/xlint/lint1: init_braces.c src/usr.bin/xlint/lint1: externs1.h init.c tree.c Log Message: lint: fix initialization of unnamed union member To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint1/init_braces.c cvs rdiff -u -r1.183 -r1.184 src/usr.bin/xlint/lint1/externs1.h cvs rdiff -u -r1.243 -r1.244 src/usr.bin/xlint/lint1/init.c cvs rdiff -u -r1.538 -r1.539 src/usr.bin/xlint/lint1/tree.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/init_braces.c diff -u src/tests/usr.bin/xlint/lint1/init_braces.c:1.6 src/tests/usr.bin/xlint/lint1/init_braces.c:1.7 --- src/tests/usr.bin/xlint/lint1/init_braces.c:1.6 Fri Jun 30 22:27:47 2023 +++ src/tests/usr.bin/xlint/lint1/init_braces.c Sat Jul 1 06:09:24 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: init_braces.c,v 1.6 2023/06/30 22:27:47 rillig Exp $ */ +/* $NetBSD: init_braces.c,v 1.7 2023/07/01 06:09:24 rillig Exp $ */ # 3 "init_braces.c" /* @@ -97,7 +97,8 @@ init_anonymous_struct_and_union(void) return var.times.t0.ns; } -// Minimized example taken from jemalloc.c, init_lock. +// Initializers may designate members from unnamed struct/union members. +// Example code adapted from jemalloc 5.1.0, jemalloc.c, init_lock. unsigned char init_unnamed_union(void) { @@ -121,8 +122,6 @@ init_unnamed_union(void) { .padded_union = { .pad1 = { 0, 0, 0 }, -/* FIXME: Allow access to unnamed struct/union members. */ -/* expect+1: error: type 'struct padded_union' does not have member 'u1' [101] */ .u1 = 0, .pad2 = { 0, 0, 0 }, }, Index: src/usr.bin/xlint/lint1/externs1.h diff -u src/usr.bin/xlint/lint1/externs1.h:1.183 src/usr.bin/xlint/lint1/externs1.h:1.184 --- src/usr.bin/xlint/lint1/externs1.h:1.183 Fri Jun 30 21:39:54 2023 +++ src/usr.bin/xlint/lint1/externs1.h Sat Jul 1 06:09:24 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: externs1.h,v 1.183 2023/06/30 21:39:54 rillig Exp $ */ +/* $NetBSD: externs1.h,v 1.184 2023/07/01 06:09:24 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -275,6 +275,7 @@ void check_expr_misc(const tnode_t *, bo bool constant_addr(const tnode_t *, const sym_t **, ptrdiff_t *); strg_t *cat_strings(strg_t *, strg_t *); unsigned int type_size_in_bits(const type_t *); +sym_t *find_member(const type_t *, const char *); void begin_statement_expr(void); void do_statement_expr(tnode_t *); Index: src/usr.bin/xlint/lint1/init.c diff -u src/usr.bin/xlint/lint1/init.c:1.243 src/usr.bin/xlint/lint1/init.c:1.244 --- src/usr.bin/xlint/lint1/init.c:1.243 Fri Jun 30 21:06:18 2023 +++ src/usr.bin/xlint/lint1/init.c Sat Jul 1 06:09:24 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: init.c,v 1.243 2023/06/30 21:06:18 rillig Exp $ */ +/* $NetBSD: init.c,v 1.244 2023/07/01 06:09:24 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: init.c,v 1.243 2023/06/30 21:06:18 rillig Exp $"); +__RCSID("$NetBSD: init.c,v 1.244 2023/07/01 06:09:24 rillig Exp $"); #endif #include <stdlib.h> @@ -234,18 +234,6 @@ first_named_member(const type_t *tp) return skip_unnamed(tp->t_sou->sou_first_member); } -static const sym_t * -look_up_member(const type_t *tp, const char *name) -{ - const sym_t *m; - - lint_assert(is_struct_or_union(tp->t_tspec)); - for (m = tp->t_sou->sou_first_member; m != NULL; m = m->s_next) - if (strcmp(m->s_name, name) == 0) - return m; - return NULL; -} - /* * C99 6.7.8p22 says that the type of an array of unknown size becomes known * at the end of its initializer list. @@ -862,7 +850,7 @@ initialization_add_designator_member(ini } proceed:; - const sym_t *member = look_up_member(tp, name); + const sym_t *member = find_member(tp, name); if (member == NULL) { /* type '%s' does not have member '%s' */ error(101, type_name(tp), name); Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.538 src/usr.bin/xlint/lint1/tree.c:1.539 --- src/usr.bin/xlint/lint1/tree.c:1.538 Fri Jun 30 21:39:54 2023 +++ src/usr.bin/xlint/lint1/tree.c Sat Jul 1 06:09:24 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.538 2023/06/30 21:39:54 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.539 2023/07/01 06:09:24 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: tree.c,v 1.538 2023/06/30 21:39:54 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.539 2023/07/01 06:09:24 rillig Exp $"); #endif #include <float.h> @@ -1882,7 +1882,7 @@ all_members_compatible(const sym_t *msym return true; } -static sym_t * +sym_t * find_member(const type_t *tp, const char *name) { for (sym_t *mem = tp->t_sou->sou_first_member;