[Flang][OpenMP] Incorrect execution result of using statement function in task construct (original) (raw)

Version of flang-new : 18.0.0(770dc47659d41a5ca7b7daf5b3134c900ca8c33d)

When statement function is used within task construct, such as in an attached program, the value of the variable (iaa) used in statement function does not look like firstprivate after task construct ends.
If a function is used directly instead of statement function, the value of the variable is correct.

The following are the test program, Flang-new, Gfortran and ifort compilation/execution result.

:

program main integer prv if(i)=ifun(iaa) prv=1; iaa=1; ii=1 !$omp parallel shared(prv) !$omp task default(firstprivate) prv = prv + 1 ii=if(ii) ! ii=ifun(iaa) ! OK if not statement function !$omp end task write(6,) "prv = ", prv, " iaa = ", iaa if (iaa.ne.1) write(6,) "NG : iaa = ", iaa !$omp end parallel end program main

function ifun(j) j=100; ifun=1 end function ifun

$ export OMP_NUM_THREADS=2; flang-new -fopenmp snf_emski_omp_01_2.f90; ./a.out
 prv =  1  iaa =  1
 prv =  1  iaa =  100
 NG : iaa =  100
$
$ export OMP_NUM_THREADS=2; gfortran -fopenmp snf_emski_omp_01_2.f90; ./a.out
 prv =            1  iaa =            1
 prv =            1  iaa =            1
$
$ export OMP_NUM_THREADS=2; ifort -qopenmp snf_emski_omp_01_2.f90; ./a.out
 prv =            1  iaa =            1
 prv =            1  iaa =            1
$