xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_102.c (revision e50dbdf451c05cd4203d32971385809406ec02e0)
1*e50dbdf4Srillig /*	$NetBSD: msg_102.c,v 1.6 2023/06/30 21:06:18 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_102.c"
3a0a15c14Srillig 
4a8941949Srillig // Test for message: illegal use of member '%s' [102]
5a0a15c14Srillig 
63398fb24Srillig // Anonymous members are defined in C11 6.7.2.1p2.
73398fb24Srillig 
8bf86468dSrillig struct unrelated {
93398fb24Srillig 	union {
103398fb24Srillig 		struct {
113398fb24Srillig 			unsigned bit_0:1;
123398fb24Srillig 			unsigned bit_1:1;
133398fb24Srillig 		};
143398fb24Srillig 		unsigned bits;
153398fb24Srillig 	};
163398fb24Srillig };
173398fb24Srillig 
18bf86468dSrillig struct bit_fields_and_bits {
19bf86468dSrillig 	union {
20bf86468dSrillig 		struct {
21bf86468dSrillig 			unsigned bf_bit_0:1;
22bf86468dSrillig 			unsigned bf_bit_1:1;
23bf86468dSrillig 		};
24bf86468dSrillig 		unsigned bf_bits;
25bf86468dSrillig 	};
26bf86468dSrillig };
27bf86468dSrillig 
28bf86468dSrillig static struct unrelated *u1, *u2;
29bf86468dSrillig static struct bit_fields_and_bits *b1, *b2;
30bf86468dSrillig 
313398fb24Srillig static inline _Bool
eq(int x)32bf86468dSrillig eq(int x)
333398fb24Srillig {
34bf86468dSrillig 	if (x == 0)
35*e50dbdf4Srillig 		/* Accessing a member from an unnamed struct member. */
36bf86468dSrillig 		return u1->bits == u2->bits;
37bf86468dSrillig 
38bf86468dSrillig 	/*
39bf86468dSrillig 	 * The struct does not have a member named 'bits'.  There's another
40bf86468dSrillig 	 * struct with a member of that name, and in traditional C, it was
41bf86468dSrillig 	 * possible but discouraged to access members of other structs via
42bf86468dSrillig 	 * their plain name.
43bf86468dSrillig 	 */
44bf86468dSrillig 	/* expect+2: error: illegal use of member 'bits' [102] */
45bf86468dSrillig 	/* expect+1: error: illegal use of member 'bits' [102] */
46bf86468dSrillig 	return b1->bits == b2->bits;
473398fb24Srillig }
48