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