libcpp: Add support for gnu::offset #embed/__has_embed parameter
[official-gcc.git] / gcc / testsuite / g++.dg / gomp / attrs-6.C
blobaf8b9731da96969ae0d3a5459e9bbc6792f25ca6
1 // { dg-do compile { target c++11 } }
3 void
4 foo ()
6   int a[10] = {};
7   #pragma omp parallel sections
8   {
9     #pragma omp section
10     a[0]++;
11     [[omp::directive (section)]] {
12     a[1]++;
13     } [[omp::directive (section)]]
14     a[2]++;
15     #pragma omp section
16     { a[3]++; }
17   }
18   [[omp::directive (parallel sections)]]
19   {
20     #pragma omp section
21     a[0]++;
22     [[omp::directive (section)]] {
23     a[1]++;
24     } [[omp::directive (section)]]
25     a[2]++;
26     #pragma omp section
27     { a[3]++; }
28   }
29   #pragma omp parallel sections
30   {
31     #pragma omp section
32     a[0]++;
33     a[4]++;
34     l1: a[5]++;
35     if (a[5] == 42) goto l1;
36     [[omp::directive (section)]] {
37     a[1]++;
38     a[6]++;
39     } [[omp::directive (section)]]
40     a[2]++;
41     a[7]++;
42     #pragma omp section
43     { a[3]++; }
44     a[8]++;
45   }
46   [[omp::directive (parallel sections)]]
47   {
48     #pragma omp section
49     a[0]++;
50     a[4]++;
51     [[omp::directive (section)]] {
52     a[1]++;
53     a[5]++;
54     } [[omp::directive (section)]]
55     a[2]++;
56     l2: a[6]++;
57     if (a[6] == 42)
58       goto l2;
59     a[7]++;
60     #pragma omp section
61     a[8]++;
62     { a[3]++; }
63   }
66 int
67 bar (int a, int *c, int *d, int *e, int *f)
69   int i;
70   #pragma omp simd reduction (inscan, +: a)
71   for (i = 0; i < 64; i++)
72     {
73       d[i] = a;
74       [[omp::directive (scan, exclusive (a))]]
75       a += c[i];
76     }
77   [[omp::directive (simd reduction (inscan, +: a))]]
78   for (i = 0; i < 64; i++)
79     {
80       a += c[i];
81       #pragma omp scan inclusive (a)
82       d[i] = a;
83     }
84   #pragma omp simd reduction (inscan, +: a)
85   for (i = 0; i < 64; i++)
86     {
87       int t = a;
88       d[i] = t;
89       [[omp::directive (scan, exclusive (a))]]
90       int u = c[i];
91       a += u;
92     }
93   [[omp::directive (simd reduction (inscan, +: a))]]
94   for (i = 0; i < 64; i++)
95     {
96       int t = c[i];
97       a += t;
98       #pragma omp scan inclusive (a)
99       int u = a;
100       d[i] = u;
101     }
102   return a;