| extern "C" void abort (); |
| struct S { int a; }; |
| #ifdef __SIZEOF_INT128__ |
| typedef __int128 T; |
| #else |
| typedef long long int T; |
| #endif |
| |
| void |
| foo (T a, int b, struct S c) |
| { |
| int err; |
| #pragma omp target firstprivate (a, b, c) map(from:err) |
| { |
| err = 0; |
| if (a != 131 || b != 276 || c.a != 59) |
| err = 1; |
| a = 936; |
| b = 27; |
| c.a = 98; |
| if (a != 936 || b != 27 || c.a != 98) |
| err = 1; |
| } |
| if (err || a != 131 || b != 276 || c.a != 59) |
| abort (); |
| } |
| |
| void |
| bar (T &a, int &b, struct S &c) |
| { |
| int err; |
| #pragma omp target firstprivate (a, b, c) map(from:err) |
| { |
| err = 0; |
| if (a != 131 || b != 276 || c.a != 59) |
| err = 1; |
| a = 936; |
| b = 27; |
| c.a = 98; |
| if (a != 936 || b != 27 || c.a != 98) |
| err = 1; |
| } |
| if (err || a != 131 || b != 276 || c.a != 59) |
| abort (); |
| } |
| |
| int |
| main () |
| { |
| T a = 131; |
| int b = 276; |
| struct S c; |
| c.a = 59; |
| foo (a, b, c); |
| bar (a, b, c); |
| if (a != 131 || b != 276 || c.a != 59) |
| abort (); |
| } |