https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101079
Bug ID: 101079 Summary: [OPENMP] The value of list-item in linear clause in loop construct is not calculated on each iteration Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: xiao....@compiler-dev.com Target Milestone: --- The testcase is, program p use omp_lib integer :: i, j j = 0 !$omp parallel num_threads(2) !$omp do linear(j:1) schedule(static, 4) do i= 1, 10 print *, i, j, omp_get_thread_num() end do !$omp end parallel print *, "final j: ", j end program The result is, 1 0 0 2 0 0 3 0 0 4 0 0 9 8 0 10 8 0 5 4 1 6 4 1 7 4 1 8 4 1 final j: 8 It looks like that the calculation for list-item 'j' is invoked after task dispatching not on each iteration. See OpenMP 4.5 specification, 2.15.3.7 "When a linear clause is specified on a construct, the value of the new list item on each iteration of the associated loop(s) corresponds to the value of the original list item before entering the construct plus the logical number of the iteration times linear-step. The value corresponding to the sequentially last iteration of the associated loop(s) is assigned to the original list item." The expected result seems to be that 'j' always equals (i-1), and final j equals 9.