1# define __A	__attribute__((noderef))
2
3struct x {
4	int a;
5	int b;
6};
7
8struct y {
9	int a[2];
10};
11
12static 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
47noderef.c:24:12: warning: incorrect type in assignment (different modifiers)
48noderef.c:24:12:    expected char *[noderef] *q2
49noderef.c:24:12:    got char [noderef] **
50 * check-error-end
51 */
52