// RUN: %libomptarget-compile-run-and-check-generic #include #include #include void foo(int device) { int X; // clang-format off #pragma omp target teams map(from: X) device(device) thread_limit(2) num_teams(1) #pragma omp parallel // clang-format on { int tid = ompx_thread_id_x(); int bid = ompx_block_id_x(); if (tid == 1 && bid == 0) { X = 42; ompx_sync_block_divergent(3); } else { ompx_sync_block_divergent(1); } if (tid == 0 && bid == 0) X++; ompx_sync_block(ompx_seq_cst); if (tid == 1 && bid == 0) X++; ompx_sync_block_acq_rel(); if (tid == 0 && bid == 0) X++; ompx_sync_block(ompx_release); if (tid == 0 && bid == 0) X++; } // CHECK: X: 46 // CHECK: X: 46 printf("X: %i\n", X); } int main() { foo(omp_get_default_device()); foo(omp_get_initial_device()); }