Version of flang-new : 18.0.0(0fe86f9c518fb1296bba8d66ce495f9dfff2c435)
If critical construct exists in parallel construct with default(none) clause, a do-variable has an incorrect value after executing parallel construct.
A do-variable is private according to the specification in Section (2.15.1.1) of OpenMP 4.5, so the values of k1 and k2 are expected to be 1.
Changing critical construct to sections construct has the same result.
The following are the test program, Flang-new, Gfortran and ifort compilation/execution result.
snfm_omp_array_do_011.f90:
program main integer::k1,k2 k1=1; k2=1 !$omp parallel default(none) !$omp critical do k2=1,10 do k1=1,10 end do end do !$omp end critical !$omp endparallel write(6,*) "k1 = ", k1, " k2 = ", k2 end program main
$ export OMP_NUM_THREADS=2; flang-new -fopenmp snfm_omp_shared_13_011.f90; ./a.out k1 = 11 k2 = 11 $
$ export OMP_NUM_THREADS=2; gfortran -fopenmp snfm_omp_array_do_011.f90; ./a.out k1 = 1 k2 = 1 $
$ export OMP_NUM_THREADS=2; ifort -qopenmp snfm_omp_array_do_011.f90; ./a.out k1 = 1 k2 = 1 $