diff options
Diffstat (limited to 'openmp/tools/archer/tests/task/task-taskwait.c')
-rw-r--r-- | openmp/tools/archer/tests/task/task-taskwait.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/openmp/tools/archer/tests/task/task-taskwait.c b/openmp/tools/archer/tests/task/task-taskwait.c new file mode 100644 index 00000000000..e217021e940 --- /dev/null +++ b/openmp/tools/archer/tests/task/task-taskwait.c @@ -0,0 +1,49 @@ +/* + * task-taskwait.c -- Archer testcase + */ + +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// +// See tools/archer/LICENSE.txt for details. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + + +// RUN: %libarcher-compile-and-run | FileCheck %s +#include <omp.h> +#include <stdio.h> +#include <unistd.h> +#include "ompt/ompt-signal.h" + +int main(int argc, char *argv[]) { + int var = 0, a = 0; + +#pragma omp parallel num_threads(2) shared(var, a) +#pragma omp master + { +#pragma omp task shared(var, a) + { + OMPT_SIGNAL(a); + OMPT_WAIT(a, 2); + delay(100); + var++; + } + + // Give other thread time to steal the task. + OMPT_WAIT(a, 1); + OMPT_SIGNAL(a); +#pragma omp taskwait + var++; + } + + fprintf(stderr, "DONE\n"); + int error = (var != 2); + return error; +} + +// CHECK-NOT: ThreadSanitizer: data race +// CHECK-NOT: ThreadSanitizer: reported +// CHECK: DONE |