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)153390d7b9Srilligtest(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