1 #ifdef __cplusplus
2 extern "C" {
3 #endif
4 int omp_get_thread_num (void);
5 #ifdef __cplusplus
6 }
7 #endif
8 
9 void
f1(int * a)10 f1 (int *a)
11 {
12   int i;
13   #pragma omp loop		/* { dg-error "'bind' clause not specified on a 'loop' construct not nested inside another OpenMP construct" } */
14   for (i = 0; i < 64; i++)
15     a[i] = i;
16 }
17 
18 void
f2(int * a)19 f2 (int *a)
20 {
21   int i, j;
22   #pragma omp parallel num_threads (4)
23   {
24     int j = omp_get_thread_num ();
25     #pragma omp loop private (i) bind(teams)	/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
26     for (i = 0; i < 64; i++)
27       a[j * 64 + i] = i;
28   }
29   #pragma omp critical
30   {
31     #pragma omp loop lastprivate (i) bind(teams)/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
32     for (i = 0; i < 64; i++)
33       a[i] = i;
34   }
35   #pragma omp master
36   {
37     #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
38     for (i = 0; i < 64; i++)
39       a[i] = i;
40   }
41   #pragma omp sections
42   {
43     #pragma omp loop bind(teams) lastprivate(i)	/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
44     for (i = 0; i < 64; i++)
45       a[i] = i;
46   }
47   #pragma omp single
48   {
49     #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
50     for (i = 0; i < 64; i++)
51       a[i] = i;
52   }
53   #pragma omp task
54   {
55     #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
56     for (i = 0; i < 64; i++)
57       a[i] = i;
58   }
59   #pragma omp taskgroup
60   {
61     #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
62     for (i = 0; i < 64; i++)
63       a[i] = i;
64   }
65   #pragma omp teams
66   {
67     #pragma omp distribute
68     for (j = 0; j < 64; ++j)
69       {
70 	#pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
71 	for (i = 0; i < 64; i++)
72 	  a[64 * j + i] = i;
73       }
74   }
75   #pragma omp for
76   for (j = 0; j < 64; ++j)
77     {
78       #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
79       for (i = 0; i < 64; i++)
80 	a[64 * j + i] = i;
81     }
82   #pragma omp parallel
83   #pragma omp loop
84   for (j = 0; j < 64; ++j)
85     {
86       #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
87       for (i = 0; i < 64; i++)
88 	a[64 * j + i] = i;
89     }
90   #pragma omp loop bind(thread)
91   for (j = 0; j < 64; ++j)
92     {
93       #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
94       for (i = 0; i < 64; i++)
95 	a[64 * j + i] = i;
96     }
97   #pragma omp loop bind(parallel)
98   for (j = 0; j < 64; ++j)
99     {
100       #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
101       for (i = 0; i < 64; i++)
102 	a[64 * j + i] = i;
103     }
104   #pragma omp for ordered
105   for (j = 0; j < 64; ++j)
106     {
107       #pragma omp ordered threads
108       #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
109       for (i = 0; i < 64; i++)
110 	a[64 * j + i] = i;
111     }
112   #pragma omp simd
113   for (j = 0; j < 64; ++j)
114     {
115       #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
116       for (i = 0; i < 64; i++)
117 	a[64 * j + i] = i;
118     }
119   #pragma omp taskloop
120   for (j = 0; j < 64; ++j)
121     {
122       #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
123       for (i = 0; i < 64; i++)
124 	a[64 * j + i] = i;
125     }
126   #pragma omp target
127   {
128     #pragma omp loop bind(teams)		/* { dg-error "'bind\\(teams\\)' on a 'loop' region not strictly nested inside of a 'teams' region" } */
129     for (i = 0; i < 64; i++)
130       a[i] = i;
131   }
132 }
133 
134 void
f3(int * a)135 f3 (int *a)
136 {
137   int i, j;
138   #pragma omp simd
139   for (j = 0; j < 64; j++)
140     {
141       #pragma omp loop bind(parallel)		/* { dg-error "'bind\\(parallel\\)' on a 'loop' construct nested inside 'simd' construct" } */
142       for (i = 0; i < 64; i++)
143 	a[64 * j + i] = i;
144     }
145 }
146