1 /* $NetBSD: msg_105.c,v 1.4 2022/06/19 12:14:34 rillig Exp $ */ 2 # 3 "msg_105.c" 3 4 /* Test for message: non-unique member requires struct/union %s [105] */ 5 6 /* lint1-flags: -tw */ 7 8 /* 9 * In traditional C, the expression 'x->y' did not only allow struct or union 10 * pointers for 'x', but in fact any scalar expression, which would then be 11 * dereferenced as if it were a struct or union. 12 * 13 * This led to ambiguities if several structs had a member of the same name 14 * but with different offsets. In such a case, that member name could only 15 * be used with one of its actual struct types. 16 */ 17 18 struct one { 19 int member; 20 }; 21 22 struct two { 23 int before_member; /* make the offset of 'member' different */ 24 int member; 25 }; 26 27 struct three { 28 int x; 29 int y; 30 }; 31 32 int 33 example(x) 34 int *x; 35 { 36 /* expect+1: error: non-unique member requires struct/union pointer [105] */ 37 return x->member; 38 } 39 40 int 41 member_of_wrong_struct(t) 42 struct three *t; 43 { 44 /* expect+1: error: illegal use of member 'member' [102] */ 45 return t->member; 46 } 47