Home | History | Annotate | Line # | Download | only in lint1
msg_105.c revision 1.3
      1 /*	$NetBSD: msg_105.c,v 1.3 2022/06/15 20:18:31 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 member use: member [102] */
     45 	return t->member;
     46 }
     47