1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
3 /* { dg-additional-options "-std=c99" { target c } } */
4
5 int g;
6 int a[1024];
7
8 __attribute__((noinline, noclone)) int
9 f1 (int x)
10 {
11 #pragma omp taskloop firstprivate (x) lastprivate (x)
12 for (int i = 0; i < 64; i++)
13 {
14 if (x != 74)
15 __builtin_abort ();
16 if (i == 63)
17 x = i + 4;
18 }
19 return x;
20 }
21
22 __attribute__((noinline, noclone)) void
23 f2 (void)
24 {
25 #pragma omp taskloop firstprivate (g) lastprivate (g) nogroup
26 for (int i = 0; i < 64; i++)
27 {
28 if (g != 77)
29 __builtin_abort ();
30 if (i == 63)
31 g = i + 9;
32 }
33 }
34
35 __attribute__((noinline, noclone)) long long
36 f3 (long long a, long long b, long long c)
37 {
38 long long i;
39 int l;
40 #pragma omp taskloop default (none) lastprivate (i, l)
41 for (i = a; i < b; i += c)
42 l = i;
43 return l * 7 + i;
44 }
45
46 __attribute__((noinline, noclone)) long long
47 f4 (long long a, long long b, long long c, long long d,
48 long long e, long long f, int k)
49 {
50 long long i, j;
51 int l;
52 #pragma omp taskloop default (none) collapse(2) \
53 firstprivate (k) lastprivate (i, j, k, l)
54 for (i = a; i < b; i += e)
55 for (j = c; j < d; j += f)
56 {
57 if (k != 73)
58 __builtin_abort ();
59 if (i == 31 && j == 46)
60 k = i;
61 l = j;
62 }
63 return i + 5 * j + 11 * k + 17 * l;
64 }
65
66 int
67 main ()
68 {
69 #pragma omp parallel
70 #pragma omp single
71 {
72 if (f1 (74) != 63 + 4)
73 __builtin_abort ();
74 g = 77;
75 f2 ();
76 #pragma omp taskwait
77 if (g != 63 + 9)
78 __builtin_abort ();
79 if (f3 (7, 12, 2) != 11 * 7 + 13)
80 __builtin_abort ();
81 if (f4 (0, 32, 16, 48, 1, 2, 73) != 32 + 5 * 48 + 11 * 31 + 17 * 46)
82 __builtin_abort ();
83 }
84 return 0;
85 }