xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_101.c (revision b2baa50111d645353fa30b4deab0f79d93650c8c)
1*b2baa501Srillig /*	$NetBSD: msg_101.c,v 1.10 2023/03/28 14:44:34 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_101.c"
3a0a15c14Srillig 
494c797a8Srillig // Test for message: type '%s' does not have member '%s' [101]
5a0a15c14Srillig 
6*b2baa501Srillig /* lint1-extra-flags: -X 351 */
7*b2baa501Srillig 
8af03d2a0Srillig struct point {
9af03d2a0Srillig 	int x, y;
10af03d2a0Srillig };
11af03d2a0Srillig 
123390d7b9Srillig void sink(int);
133390d7b9Srillig 
143390d7b9Srillig void
test(const struct point * ptr,const struct point pt)153390d7b9Srillig test(const struct point *ptr, const struct point pt)
16af03d2a0Srillig {
173390d7b9Srillig 	/* accessing an existing member */
183390d7b9Srillig 	sink(ptr->x);
193390d7b9Srillig 	sink(pt.x);
203390d7b9Srillig 
213390d7b9Srillig 	/* accessing a nonexistent member */
2219c35874Srillig 	/* expect+1: error: type 'pointer to const struct point' does not have member 'z' [101] */
233390d7b9Srillig 	sink(ptr->z);
2419c35874Srillig 	/* expect+1: error: type 'const struct point' does not have member 'z' [101] */
253390d7b9Srillig 	sink(pt.z);
263390d7b9Srillig 
273390d7b9Srillig 	/* mixed up '.' and '->' */
288b62008aSrillig 	/* expect+1: error: left operand of '.' must be struct or union, not 'pointer to const struct point' [103] */
293390d7b9Srillig 	sink(ptr.x);
308b62008aSrillig 	/* expect+1: error: left operand of '->' must be pointer to struct or union, not 'struct point' [104] */
313390d7b9Srillig 	sink(pt->x);
323390d7b9Srillig 
333390d7b9Srillig 	/* accessing a nonexistent member via the wrong operator */
3419c35874Srillig 	/* expect+1: error: type 'pointer to const struct point' does not have member 'z' [101] */
353390d7b9Srillig 	sink(ptr.z);
3619c35874Srillig 	/* expect+1: error: type 'struct point' does not have member 'z' [101] */
373390d7b9Srillig 	sink(pt->z);
38af03d2a0Srillig }
39