1 extern "C" void abort ();
2 struct S { int a; };
3 #ifdef __SIZEOF_INT128__
4 typedef __int128 T;
5 #else
6 typedef long long int T;
7 #endif
8
9 void
foo(T a,int b,struct S c)10 foo (T a, int b, struct S c)
11 {
12 int err;
13 #pragma omp target firstprivate (a, b, c) map(from:err)
14 {
15 err = 0;
16 if (a != 131 || b != 276 || c.a != 59)
17 err = 1;
18 a = 936;
19 b = 27;
20 c.a = 98;
21 if (a != 936 || b != 27 || c.a != 98)
22 err = 1;
23 }
24 if (err || a != 131 || b != 276 || c.a != 59)
25 abort ();
26 }
27
28 void
bar(T & a,int & b,struct S & c)29 bar (T &a, int &b, struct S &c)
30 {
31 int err;
32 #pragma omp target firstprivate (a, b, c) map(from:err)
33 {
34 err = 0;
35 if (a != 131 || b != 276 || c.a != 59)
36 err = 1;
37 a = 936;
38 b = 27;
39 c.a = 98;
40 if (a != 936 || b != 27 || c.a != 98)
41 err = 1;
42 }
43 if (err || a != 131 || b != 276 || c.a != 59)
44 abort ();
45 }
46
47 int
main()48 main ()
49 {
50 T a = 131;
51 int b = 276;
52 struct S c;
53 c.a = 59;
54 foo (a, b, c);
55 bar (a, b, c);
56 if (a != 131 || b != 276 || c.a != 59)
57 abort ();
58 }
59