1 /* { dg-do compile } */
2 /* { dg-options "-fopenmp" } */
3 
4 extern int a[][10], a2[][10];
5 int b[10], c[10][2], d[10], e[10], f[10];
6 int b2[10], c2[10][2], d2[10], e2[10], f2[10];
7 int k[10], l[10], m[10], n[10], o;
8 int *p;
9 void bar (void);
10 int t[10];
11 #pragma omp threadprivate (t)
12 
13 void
foo(int g[3][10],int h[4][8],int i[2][10],int j[][9],int g2[3][10],int h2[4][8],int i2[2][10],int j2[][9])14 foo (int g[3][10], int h[4][8], int i[2][10], int j[][9],
15      int g2[3][10], int h2[4][8], int i2[2][10], int j2[][9])
16 {
17   #pragma omp task affinity( bar[2:5]) /* { dg-error "is not a variable" } */
18     ;
19   #pragma omp task affinity( t[2:5])
20     ;
21   #pragma omp task affinity( k[0.5:]) /* { dg-error "low bound \[^\n\r]* of array section does not have integral type" } */
22     ;
23   #pragma omp task affinity( l[:7.5f]) /* { dg-error "length \[^\n\r]* of array section does not have integral type" } */
24     ;
25   #pragma omp task affinity( m[p:]) /* { dg-error "low bound \[^\n\r]* of array section does not have integral type" } */
26     ;
27   #pragma omp task affinity( n[:p]) /* { dg-error "length \[^\n\r]* of array section does not have integral type" } */
28     ;
29   #pragma omp task affinity( o[2:5]) /* { dg-error "does not have pointer or array type" } */
30     ;
31   #pragma omp task affinity( a[:][2:4]) /* { dg-error "array type length expression must be specified" } */
32     ;
33   #pragma omp task affinity( b[-1:]) /* { dg-error "negative low bound in array section" } */
34     ;
35   #pragma omp task affinity( c[:-3][1:1]) /* { dg-error "negative length in array section" } */
36     ;
37   #pragma omp task affinity( d[11:]) /* { dg-error "low bound \[^\n\r]* above array section size" } */
38     ;
39   #pragma omp task affinity( e[:11]) /* { dg-error "length \[^\n\r]* above array section size" } */
40     ;
41   #pragma omp task affinity( f[1:10]) /* { dg-error "high bound \[^\n\r]* above array section size" } */
42     ;
43   #pragma omp task affinity( g[:][2:4]) /* { dg-error "for array function parameter length expression must be specified" } */
44     ;
45   #pragma omp task affinity( h[2:2][-1:]) /* { dg-error "negative low bound in array section" } */
46     ;
47   #pragma omp task affinity( h[:1][:-3]) /* { dg-error "negative length in array section" } */
48     ;
49   #pragma omp task affinity( i[:1][11:]) /* { dg-error "low bound \[^\n\r]* above array section size" } */
50     ;
51   #pragma omp task affinity( j[3:4][:10]) /* { dg-error "length \[^\n\r]* above array section size" } */
52     ;
53   #pragma omp task affinity( j[30:10][5:5]) /* { dg-error "high bound \[^\n\r]* above array section size" } */
54     ;
55   #pragma omp task affinity( a2[:3][2:4])
56     ;
57   #pragma omp task affinity( b2[0:])
58     ;
59   #pragma omp task affinity( c2[:3][1:1])
60     ;
61   #pragma omp task affinity( d2[9:])
62     ;
63   #pragma omp task affinity( e2[:10])
64     ;
65   #pragma omp task affinity( f2[1:9])
66     ;
67   #pragma omp task affinity( g2[:2][2:4])
68     ;
69   #pragma omp task affinity( h2[2:2][0:])
70     ;
71   #pragma omp task affinity( h2[:1][:3])
72     ;
73   #pragma omp task affinity( i2[:1][9:])
74     ;
75   #pragma omp task affinity( j2[3:4][:9])
76     ;
77   #pragma omp task affinity( j2[30:10][5:4])
78     ;
79 }
80 
81 void bar2 (int a[10][10][10]);
82 
83 void
foo2(int a[10][10][10],int ** b)84 foo2 (int a[10][10][10], int **b)
85 {
86   int c[10][10][10];
87   #pragma omp task affinity( a[2:4][3:][:7], b[1:7][2:8])
88     bar2 (a);
89   int i = 1, j = 3, k = 2, l = 6;
90   #pragma omp task affinity( a[++i:++j][++k:][:++l])
91     bar2 (a);
92   #pragma omp task affinity( a[7:2][:][:], c[5:2][:][:])
93   {
94     bar2 (c);
95     bar2 (a);
96   }
97 }
98 
99 void
foo3(int a[10][10][10],int ** b,int x)100 foo3 (int a[10][10][10], int **b, int x)
101 {
102   int c[10][10][10];
103   #pragma omp task affinity( a[2:4][3:0][:7])	/* { dg-error "zero length array section" } */
104     bar2 (a);
105   #pragma omp task affinity( b[:7][0:0][:0]) /* { dg-error "zero length array section" } */
106     bar2 (a);
107   #pragma omp task affinity( c[:][:][10:])	/* { dg-error "zero length array section" } */
108     bar2 (c);
109   #pragma omp task affinity( a[2:4][3:0][:x])	/* { dg-error "zero length array section" } */
110     bar2 (a);
111   #pragma omp task affinity( b[:x][0:0][:0]) /* { dg-error "zero length array section" } */
112     bar2 (a);
113   #pragma omp task affinity( c[:][x-2:x][10:])	/* { dg-error "zero length array section" } */
114     bar2 (c);
115 }
116 
117 void
foo4(int * p,int (* q)[10],int r[10],int s[10][10])118 foo4 (int *p, int (*q)[10], int r[10], int s[10][10])
119 {
120   int a[10], b[10][10];
121   #pragma omp task affinity ( p[-1:2])
122   ;
123   #pragma omp task affinity ( q[-1:2][2:4])
124   ;
125   #pragma omp task affinity ( q[-1:2][-2:4]) /* { dg-error "negative low bound in array section in" } */
126   ;
127   #pragma omp task affinity ( r[-1:2])
128   ;
129   #pragma omp task affinity ( s[-1:2][2:4])
130   ;
131   #pragma omp task affinity ( s[-1:2][-2:4]) /* { dg-error "negative low bound in array section in" } */
132   ;
133   #pragma omp task affinity ( a[-1:2])	 /* { dg-error "negative low bound in array section in" } */
134   ;
135   #pragma omp task affinity ( b[-1:2][2:4])	 /* { dg-error "negative low bound in array section in" } */
136   ;
137   #pragma omp task affinity ( b[1:2][-2:4])	 /* { dg-error "negative low bound in array section in" } */
138   ;
139   #pragma omp task affinity ( p[2:-3])	 /* { dg-error "negative length in array section in" } */
140   ;
141   #pragma omp task affinity ( q[2:-3][:])	 /* { dg-error "negative length in array section in" } */
142   ;
143   #pragma omp task affinity ( q[2:3][0:-1])	 /* { dg-error "negative length in array section in" } */
144   ;
145   #pragma omp task affinity ( r[2:-5])	 /* { dg-error "negative length in array section in" } */
146   ;
147   #pragma omp task affinity ( s[2:-5][:])	 /* { dg-error "negative length in array section in" } */
148   ;
149   #pragma omp task affinity ( s[2:5][0:-4])	 /* { dg-error "negative length in array section in" } */
150   ;
151   #pragma omp task affinity ( a[2:-5])	 /* { dg-error "negative length in array section in" } */
152   ;
153   #pragma omp task affinity ( b[2:-5][0:10]) /* { dg-error "negative length in array section in" } */
154   ;
155   #pragma omp task affinity ( b[2:5][0:-4]) /* { dg-error "negative length in array section in" } */
156   ;
157 }
158 
159 struct T { int c[3]; };
160 struct S { int a; struct T *b; struct T g; };
161 struct S sd[10];
162 struct S *se[10];
163 struct S *sf;
164 struct S sh;
165 struct U { int a : 5; };
166 struct U si;
167 
168 
169 void
foo5(void)170 foo5 (void)
171 {
172   #pragma omp task affinity( sd)
173   ;
174   #pragma omp task affinity( sd[2])
175   ;
176   #pragma omp task affinity( sd[:])
177   ;
178   #pragma omp task affinity( sd[2:2])
179   ;
180   #pragma omp task affinity( sd[:2])
181   ;
182   #pragma omp task affinity( sd[1].b->c[2])
183   ;
184   #pragma omp task affinity( sd[0].a)
185   ;
186   #pragma omp task affinity( se[3]->a)
187   ;
188   #pragma omp task affinity( se[2]->b->c)
189   ;
190   #pragma omp task affinity( se[1]->b->c[2])
191   ;
192   #pragma omp task affinity( (*sf).a)
193   ;
194   #pragma omp task affinity( sf->b->c[0])
195   ;
196   #pragma omp task affinity( sf)
197   ;
198   #pragma omp task affinity( *sf)
199   ;
200   #pragma omp task affinity( sf[0])
201   ;
202   #pragma omp task affinity( sf[0].a)
203   ;
204   #pragma omp task affinity( sh.g.c[2])
205   ;
206 }
207 
208 void
foo6(void)209 foo6 (void)
210 {
211   #pragma omp task affinity( sd[:2].b->c[2])	/* { dg-error "expected" } */
212   ;
213   #pragma omp task affinity( sd[1:].b->c[2])	/* { dg-error "expected" } */
214   ;
215   #pragma omp task affinity( sd[0:1].a)	/* { dg-error "expected" } */
216   ;
217   #pragma omp task affinity( se[3:2]->a)	/* { dg-error "expected" } */
218   ;
219   #pragma omp task affinity( se[2:2]->b->c)	/* { dg-error "expected" } */
220   ;
221   #pragma omp task affinity( se[1]->b->c[2:1])	/* { dg-error "expected" } */
222   ;
223   #pragma omp task affinity( sf + 0)		/* { dg-error "'sf' is not lvalue expression nor array section in 'affinity' clause" } */
224   ;
225   #pragma omp task affinity( sf[0:1].a)	/* { dg-error "expected" } */
226   ;
227   #pragma omp task affinity( sh.g.c[2:1])	/* { dg-error "expected" } */
228   ;
229   #pragma omp task affinity( si.a)		/* { dg-error "bit-field 'si\\..*a' in 'affinity' clause" } */
230   ;
231 }
232 /* { dg-additional-options "-Wno-volatile" { target c++ } } */
233