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