11f5207b7SJohn Levon # define __A __attribute__((noderef)) 21f5207b7SJohn Levon 31f5207b7SJohn Levon struct x { 41f5207b7SJohn Levon int a; 51f5207b7SJohn Levon int b; 61f5207b7SJohn Levon }; 71f5207b7SJohn Levon 81f5207b7SJohn Levon struct y { 91f5207b7SJohn Levon int a[2]; 101f5207b7SJohn Levon }; 111f5207b7SJohn Levon h(void)121f5207b7SJohn Levonstatic void h(void) 131f5207b7SJohn Levon { 141f5207b7SJohn Levon char __A *p; 151f5207b7SJohn Levon char __A * * q1; 161f5207b7SJohn Levon char * __A * q2; 171f5207b7SJohn Levon struct x __A *xp; 181f5207b7SJohn Levon struct x __A x; 191f5207b7SJohn Levon int __A *q; 201f5207b7SJohn Levon int __A *r; 211f5207b7SJohn Levon struct y __A *py; 221f5207b7SJohn Levon 231f5207b7SJohn Levon q1 = &p; 241f5207b7SJohn Levon q2 = &p; /* This should complain */ 251f5207b7SJohn Levon 261f5207b7SJohn Levon r = &*q; 271f5207b7SJohn Levon r = q; 281f5207b7SJohn Levon r = &*(q+1); /* This should NOT complain */ 291f5207b7SJohn Levon r = q+1; 301f5207b7SJohn Levon 311f5207b7SJohn Levon r = &xp->a; /* This should NOT complain */ 321f5207b7SJohn Levon r = &xp->b; 331f5207b7SJohn Levon r = &(*xp).a; 341f5207b7SJohn Levon r = &(*xp).b; 351f5207b7SJohn Levon 361f5207b7SJohn Levon r = &x.a; 371f5207b7SJohn Levon r = &x.b; 381f5207b7SJohn Levon 391f5207b7SJohn Levon r = py->a; 401f5207b7SJohn Levon r = py->a+1; 411f5207b7SJohn Levon r = &py->a[0]; 421f5207b7SJohn Levon } 431f5207b7SJohn Levon /* 441f5207b7SJohn Levon * check-name: noderef attribute 451f5207b7SJohn Levon * 461f5207b7SJohn Levon * check-error-start 471f5207b7SJohn Levon noderef.c:24:12: warning: incorrect type in assignment (different modifiers) 481f5207b7SJohn Levon noderef.c:24:12: expected char *[noderef] *q2 49*c85f09ccSJohn Levon noderef.c:24:12: got char [noderef] ** 501f5207b7SJohn Levon * check-error-end 511f5207b7SJohn Levon */ 52