fortran: Factor the evaluation of MINLOC/MAXLOC's BACK argument
[official-gcc.git] / libgomp / testsuite / libgomp.c / target-39.c
blob4442f43c8efecd596f20b01550d424087e1b233a
1 /* { dg-do run } */
2 /* { dg-options "-O0" } */
4 extern void abort (void);
5 volatile int v;
6 #pragma omp declare target to (v)
7 typedef void (*fnp1) (void);
8 typedef fnp1 (*fnp2) (void);
9 void f1 (void) { v++; }
10 void f2 (void) { v += 4; }
11 void f3 (void) { v += 16; f1 (); }
12 fnp1 f4 (void) { v += 64; return f2; }
13 int a = 1;
14 int *b = &a;
15 int **c = &b;
16 fnp2 f5 (void) { f3 (); return f4; }
17 #pragma omp declare target to (c, f5)
19 int
20 main ()
22 int err = 0;
23 #pragma omp target map(from:err)
25 volatile int xa;
26 int *volatile xb;
27 int **volatile xc;
28 fnp2 xd;
29 fnp1 xe;
30 err = 0;
31 xa = a;
32 err |= xa != 1;
33 xb = b;
34 err |= xb != &a;
35 xc = c;
36 err |= xc != &b;
37 xd = f5 ();
38 err |= v != 17;
39 xe = xd ();
40 err |= v != 81;
41 xe ();
42 err |= v != 85;
44 if (err)
45 abort ();
46 return 0;