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 (); }