| Issue |
75767
|
| Summary |
[Flang][OpenMP] Incorrect execution result of a variable in critical construct in parallel construct with default(firstprivate) clause
|
| Labels |
openmp,
flang
|
| Assignees |
|
| Reporter |
ohno-fj
|
```
Version of flang-new : 18.0.0(76bbbcb41bcf4a1d7a26bb11b78cf97b60ea7d4b)
```
The execution result of a variable in `critical` construct in `parallel` construct with `default(firstprivate)` clause is incorrect.
The execution result is correct if:
- remove `critical` construct, or
- change `default(firstprivate)` to `firstprivate(j)`
The following are the test program, Flang-new, Gfortran and ifort compilation/execution result.
snf_ng_01_1.f90:
```fortran
program main
INTEGER :: j
j=2
!$OMP PARALLEL default(firstprivate)
!$OMP critical
j=200
!$OMP END critical
!$OMP END PARALLEL
if (j.ne.2) print *,'err var j=',j
print *,'pass'
end program main
```
```
$ export OMP_NUM_THREADS=2; flang-new -fopenmp snf_ng_01_1.f90; ./a.out
err var j= 200
pass
$
```
```
$ export OMP_NUM_THREADS=2; gfortran -fopenmp snf_ng_01_1.f90; ./a.out
pass
$
```
```
$ export OMP_NUM_THREADS=2; ifort -qopenmp snf_ng_01_1.f90; ./a.out
pass
$
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs