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;

Reply via email to