1 # define __A __attribute__((noderef)) 2 3 struct x { 4 int a; 5 int b; 6 }; 7 8 struct y { 9 int a[2]; 10 }; 11 12 static void h(void) 13 { 14 char __A *p; 15 char __A * * q1; 16 char * __A * q2; 17 struct x __A *xp; 18 struct x __A x; 19 int __A *q; 20 int __A *r; 21 struct y __A *py; 22 23 q1 = &p; 24 q2 = &p; /* This should complain */ 25 26 r = &*q; 27 r = q; 28 r = &*(q+1); /* This should NOT complain */ 29 r = q+1; 30 31 r = &xp->a; /* This should NOT complain */ 32 r = &xp->b; 33 r = &(*xp).a; 34 r = &(*xp).b; 35 36 r = &x.a; 37 r = &x.b; 38 39 r = py->a; 40 r = py->a+1; 41 r = &py->a[0]; 42 } 43 /* 44 * check-name: noderef attribute 45 * 46 * check-error-start 47 noderef.c:24:12: warning: incorrect type in assignment (different modifiers) 48 noderef.c:24:12: expected char *[noderef] *q2 49 noderef.c:24:12: got char [noderef] **<noident> 50 * check-error-end 51 */