1 1.5 rillig /* $NetBSD: msg_101.c,v 1.5 2021/06/30 14:02:11 rillig Exp $ */ 2 1.1 rillig # 3 "msg_101.c" 3 1.1 rillig 4 1.4 rillig // Test for message: type '%s' does not have member '%s' [101] 5 1.1 rillig 6 1.2 rillig struct point { 7 1.2 rillig int x, y; 8 1.2 rillig }; 9 1.2 rillig 10 1.5 rillig void sink(int); 11 1.5 rillig 12 1.5 rillig void 13 1.5 rillig test(const struct point *ptr, const struct point pt) 14 1.2 rillig { 15 1.5 rillig /* accessing an existing member */ 16 1.5 rillig sink(ptr->x); 17 1.5 rillig sink(pt.x); 18 1.5 rillig 19 1.5 rillig /* accessing a nonexistent member */ 20 1.5 rillig /* FIXME: "type 'int'" is wrong. */ 21 1.5 rillig /* expect+1: error: type 'int' does not have member 'z' [101] */ 22 1.5 rillig sink(ptr->z); 23 1.5 rillig /* FIXME: "type 'int'" is wrong. */ 24 1.5 rillig /* expect+1: error: type 'int' does not have member 'z' [101] */ 25 1.5 rillig sink(pt.z); 26 1.5 rillig 27 1.5 rillig /* mixed up '.' and '->' */ 28 1.5 rillig /* TODO: mention actual type in the diagnostic */ 29 1.5 rillig /* expect+1: error: left operand of '.' must be struct/union object [103] */ 30 1.5 rillig sink(ptr.x); 31 1.5 rillig /* TODO: put actual type in 'quotes' */ 32 1.5 rillig /* expect+1: error: left operand of '->' must be pointer to struct/union not struct point [104] */ 33 1.5 rillig sink(pt->x); 34 1.5 rillig 35 1.5 rillig /* accessing a nonexistent member via the wrong operator */ 36 1.5 rillig /* FIXME: "type 'int'" is wrong. */ 37 1.5 rillig /* expect+1: error: type 'int' does not have member 'z' [101] */ 38 1.5 rillig sink(ptr.z); 39 1.5 rillig /* FIXME: "type 'int'" is wrong. */ 40 1.5 rillig /* expect+1: error: type 'int' does not have member 'z' [101] */ 41 1.5 rillig sink(pt->z); 42 1.2 rillig } 43