LLVM OpenMP
20.0.0git
Toggle main menu visibility
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
c
d
e
g
h
i
m
n
p
r
s
t
u
Functions
c
d
e
g
i
m
n
p
r
s
u
Variables
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
z
~
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
w
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
Typedefs
Enumerations
Enumerator
Related Functions
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
Typedefs
_
a
b
c
d
e
i
k
l
m
n
o
p
r
t
u
Enumerations
_
b
c
d
f
k
l
n
o
s
t
Enumerator
_
a
b
c
d
e
f
k
l
n
o
p
r
s
t
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
tools
archer
tests
races
task-taskwait-nested.c
Go to the documentation of this file.
1
/*
2
* task-taskwait-nested.c -- Archer testcase
3
*/
4
//===----------------------------------------------------------------------===//
5
//
6
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
7
//
8
// See tools/archer/LICENSE.txt for details.
9
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
10
//
11
//===----------------------------------------------------------------------===//
12
13
// RUN: %libarcher-compile-and-run-race | FileCheck %s
14
// RUN: %libarcher-compile-and-run-race-noserial | FileCheck %s
15
// REQUIRES: tsan
16
#include "ompt/ompt-signal.h"
17
#include <omp.h>
18
#include <stdio.h>
19
#include <unistd.h>
20
21
int
main
(
int
argc,
char
*argv[]) {
22
int
var = 0,
a
= 0;
23
24
#pragma omp parallel num_threads(8) shared(var, a)
25
#pragma omp master
26
{
27
#pragma omp task shared(var, a)
28
{
29
#pragma omp task shared(var, a)
30
{
31
// wait for master to pass the taskwait
32
OMPT_SIGNAL
(
a
);
33
OMPT_WAIT
(
a
, 2);
34
var++;
35
}
36
}
37
38
// Give other thread time to steal the task and execute its child.
39
OMPT_WAIT
(
a
, 1);
40
41
// Only directly generated children are guaranteed to be executed.
42
#pragma omp taskwait
43
OMPT_SIGNAL
(
a
);
44
var++;
45
}
46
47
int
error = (var != 2);
48
fprintf(stderr,
"DONE\n"
);
49
return
error;
50
}
51
52
// CHECK: WARNING: ThreadSanitizer: data race
53
// CHECK-NEXT: {{(Write|Read)}} of size 4
54
// CHECK-NEXT: #0 {{.*}}task-taskwait-nested.c:34
55
// CHECK: Previous write of size 4
56
// CHECK-NEXT: #0 {{.*}}task-taskwait-nested.c:44
57
// CHECK: DONE
58
// CHECK: ThreadSanitizer: reported 1 warnings
a
int a
Definition:
llvm-issue-80664.c:20
OMPT_WAIT
#define OMPT_WAIT(s, v)
Definition:
ompt-signal.h:20
OMPT_SIGNAL
#define OMPT_SIGNAL(s)
Definition:
ompt-signal.h:12
main
int main()
Definition:
test-touch.c:21
Generated on Fri Jun 6 2025 23:29:18 for LLVM OpenMP by
1.9.6