1/*	$NetBSD: msg_102.c,v 1.6 2023/06/30 21:06:18 rillig Exp $	*/
2# 3 "msg_102.c"
3
4// Test for message: illegal use of member '%s' [102]
5
6// Anonymous members are defined in C11 6.7.2.1p2.
7
8struct unrelated {
9	union {
10		struct {
11			unsigned bit_0:1;
12			unsigned bit_1:1;
13		};
14		unsigned bits;
15	};
16};
17
18struct bit_fields_and_bits {
19	union {
20		struct {
21			unsigned bf_bit_0:1;
22			unsigned bf_bit_1:1;
23		};
24		unsigned bf_bits;
25	};
26};
27
28static struct unrelated *u1, *u2;
29static struct bit_fields_and_bits *b1, *b2;
30
31static inline _Bool
32eq(int x)
33{
34	if (x == 0)
35		/* Accessing a member from an unnamed struct member. */
36		return u1->bits == u2->bits;
37
38	/*
39	 * The struct does not have a member named 'bits'.  There's another
40	 * struct with a member of that name, and in traditional C, it was
41	 * possible but discouraged to access members of other structs via
42	 * their plain name.
43	 */
44	/* expect+2: error: illegal use of member 'bits' [102] */
45	/* expect+1: error: illegal use of member 'bits' [102] */
46	return b1->bits == b2->bits;
47}
48