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

Reply via email to