C99 testsuite readiness: Compile more tests with -std=gnu89
[official-gcc.git] / gcc / testsuite / g++.dg / gomp / depobj-1.C
blobcb091a1da2cb7b2129232f5ba75a69ec82d9fcd7
1 typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
2   char __omp_depend_t__[2 * sizeof (void *)];
3 } omp_depend_t;
5 omp_depend_t bar (void);
6 extern const omp_depend_t cdepobj;
7 extern omp_depend_t depobj, depobj4;
8 extern omp_depend_t depobja[4];
9 extern omp_depend_t *pdepobj;
10 int a, b, i, j;
12 template <int N>
13 void
14 f1 (bool x)
16   #pragma omp depobj(x ? depobj : depobj4) depend(in : x ? a : b)
17   #pragma omp depobj(x ? depobj : depobj4) update(inout)
18   #pragma omp task depend (depobj:depobj)
19   ;
20   #pragma omp depobj(depobj) destroy
21   #pragma omp task depend (iterator (i=1:3) , depobj: *(depobja + i))
22   ;
23   #pragma omp depobj(pdepobj[0]) depend(mutexinoutset:a)
24   #pragma omp depobj(*pdepobj) destroy
27 template <typename T, typename T2>
28 void
29 f2 (T &depobj2, T2 depobj3, T *pdepobj)
31   T depobj1;
32   T depobja[4];
33   #pragma omp depobj(depobj1) depend(in : --a)
34   #pragma omp depobj(depobj1) update(inout)
35   #pragma omp task depend (depobj: depobj1)
36   ;
37   #pragma omp depobj(depobj1) destroy
38   #pragma omp depobj(depobj2) depend(in : a)
39   #pragma omp depobj(depobj2) update(inout)
40   #pragma omp task depend (depobj :depobj2)
41   ;
42   #pragma omp depobj(depobj2) destroy
43   #pragma omp depobj(depobj3) depend(in : a)
44   #pragma omp depobj(depobj3) update(inout)
45   #pragma omp task depend (depobj  :  depobj3)
46   ;
47   #pragma omp depobj(depobj3) destroy
48   for (int q = 1; q < 3; q++)
49     {
50       #pragma omp depobj(depobja[q]) depend (in:a)
51     }
52   #pragma omp task depend (iterator (i=1:3) , depobj : *(depobja + i))
53   ;
54   for (int q = 1; q < 3; q++)
55     {
56       #pragma omp depobj(depobja[q]) destroy
57     }
58   #pragma omp depobj(pdepobj[0]) depend(mutexinoutset:a)
59   #pragma omp depobj(*pdepobj) destroy
62 void
63 f3 (bool x)
65   omp_depend_t depobjx, depobjy;
66   f1 <0> (x);
67   f2 <omp_depend_t, omp_depend_t &> (depobjx, depobjy, pdepobj);
70 template <int N>
71 void
72 f4 (void)
74   omp_depend_t depobjb[4];
75   #pragma omp depobj                                    // { dg-error "expected" }
76   #pragma omp depobj destroy                            // { dg-error "expected" }
77   #pragma omp depobj (depobj)                           // { dg-error "expected 'depend', 'destroy' or 'update' clause" }
78   #pragma omp depobj (depobj) foobar                    // { dg-error "expected 'depend', 'destroy' or 'update' clause" }
79   #pragma omp depobj(bar ()) update(inout)              // { dg-error "'depobj' expression is not lvalue expression" }
80   #pragma omp depobj (cdepobj) update(in)               // { dg-error "'const' qualified 'depobj' expression" }
81   #pragma omp depobj (depobjb) depend(in: a)            // { dg-error "type of 'depobj' expression is not 'omp_depend_t'" }
82   #pragma omp depobj (pdepobj) depend(in: a)            // { dg-error "type of 'depobj' expression is not 'omp_depend_t'" }
83   #pragma omp depobj (a) destroy                        // { dg-error "type of 'depobj' expression is not 'omp_depend_t'" }
84   #pragma omp depobj (depobj) depend(depobj:a)          // { dg-error "does not have 'omp_depend_t' type in 'depend' clause with 'depobj' dependence type" }
85   #pragma omp depobj (depobj) depend(depobj:*depobjb)   // { dg-error "'depobj' dependence type specified in 'depend' clause on 'depobj' construct" }
86   #pragma omp depobj (depobj) update(foobar)            // { dg-error "expected 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset'" }
87   #pragma omp depobj (depobj) depend(in: *depobja)      // { dg-error "should not have 'omp_depend_t' type in 'depend' clause with dependence type" }
88   #pragma omp depobj (depobj) depend(in: a) depend(in: b)       // { dg-error "expected" }
89   #pragma omp depobj (depobj) depend(in: a) update(out) // { dg-error "expected" }
90   #pragma omp depobj (depobj) depend(in: a, b)          // { dg-error "more than one locator in 'depend' clause on 'depobj' construct" }
91   #pragma omp depobj (depobj) depend(source)            // { dg-error "'depend\\(source\\)' is only allowed in 'omp ordered'" }
92   #pragma omp depobj (depobj) depend(sink: i + 1, j - 1)        // { dg-error "'depend\\(sink\\)' is only allowed in 'omp ordered'" }
93   #pragma omp depobj (depobj) depend(iterator (i = 0:2) , in : a)       // { dg-error "'iterator' modifier may not be specified on 'depobj' construct" }
94   if (0)
95     #pragma omp depobj (depobj) destroy                 // { dg-error "'#pragma omp depobj' may only be used in compound statements" }
96     ;
99 template <int N>
100 void
101 f5 (void)
103   #pragma omp task depend (depobj:depobja[1:2])         // { dg-error "'depend' clause with 'depobj' dependence type on array section" }
104   ;
105   #pragma omp task depend (depobj : a)                  // { dg-error "'a' does not have 'omp_depend_t' type in 'depend' clause with 'depobj' dependence type" }
106   ;
107   #pragma omp task depend (in: depobj)                  // { dg-error "'depobj' should not have 'omp_depend_t' type in 'depend' clause with dependence type" }
108   ;
111 void
112 f6 (omp_depend_t &x)
114   f4 <0> ();
115   f5 <0> ();
116   #pragma omp depobj (x) depend(in: a)
117   #pragma omp depobj (depobj) depend(in: x)             // { dg-error "should not have 'omp_depend_t' type in 'depend' clause with dependence type" }