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 Levon static 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