#include #define ASSIGN_SX(N) \ s##N.a1 = 1; \ s##N.a2 = 2; \ s##N.a3 = 3; \ s##N.a4 = 4; \ s##N.a5 = 5; \ s##N.a6 = 6; \ s##N.a7 = 7; \ s##N.a8 = 8; \ s##N.a9 = 9; \ s##N.a10 = 10; #define ASSERT_SX(N) \ assert (s##N.a1 == 1); \ assert (s##N.a2 == 2); \ assert (s##N.a3 == 3); \ assert (s##N.a4 == 4); \ assert (s##N.a5 == 5); \ assert (s##N.a6 == 6); \ assert (s##N.a7 == 7); \ assert (s##N.a8 == 8); \ assert (s##N.a9 == 9); \ assert (s##N.a10 == 10); struct S1 { unsigned a : 10; unsigned b : 20; }; struct S2 { unsigned a1 : 10; unsigned a2 : 10; unsigned a3 : 10; unsigned a4 : 10; unsigned a5 : 10; unsigned a6 : 10; unsigned a7 : 10; unsigned a8 : 10; unsigned a9 : 10; unsigned a10 : 10; }; struct S3 { unsigned a1 : 10; unsigned a2 : 9; unsigned a3 : 8; unsigned a4 : 7; unsigned a5 : 6; unsigned a6 : 5; unsigned a7 : 6; unsigned a8 : 7; unsigned a9 : 8; unsigned a10 : 9; }; struct S4 { unsigned a1 : 10; int a2 : 9; unsigned a3 : 8; int a4 : 7; unsigned a5 : 6; int a6 : 5; unsigned a7 : 6; int a8 : 7; unsigned a9 : 8; int a10 : 9; }; struct S5 { unsigned a1 : 31; int a2 : 9; unsigned a3 : 17; int a4 : 7; unsigned a5 : 6; int a6 : 5; unsigned long a7 : 55; int a8 : 7; unsigned a9 : 8; int a10 : 9; }; int main () { struct S1 s1; #pragma omp target map(to: s1) { s1.a = 2; s1.b = 3; } assert (s1.a == 2); assert (s1.b == 3); struct S2 s2; #pragma omp target map(to: s2) { ASSIGN_SX (2) } ASSERT_SX (2) struct S3 s3; #pragma omp target map(to: s3) { ASSIGN_SX (3) } ASSERT_SX (3) struct S4 s4; #pragma omp target map(to: s4) { ASSIGN_SX (4) } ASSERT_SX (4) struct S4 s5; s5.a1 = 0; s5.a2 = 1; s5.a3 = 2; s5.a4 = 3; s5.a5 = 4; s5.a6 = 5; s5.a7 = 6; s5.a8 = 7; s5.a9 = 8; s5.a10 = 9; #pragma omp target map(to: s5) { s5.a1++; s5.a2++; s5.a3++; s5.a4++; s5.a5++; s5.a6++; s5.a7++; s5.a8++; s5.a9++; s5.a10++; } ASSERT_SX (5) return 0; }