1! { dg-additional-sources my-usleep.c } 2! { dg-prune-output "command-line option '-fintrinsic-modules-path=.*' is valid for Fortran but not for C" } 3program main 4 implicit none 5 interface 6 subroutine usleep(t) bind(C, name="my_usleep") 7 use iso_c_binding 8 integer(c_int), value :: t 9 end subroutine 10 end interface 11 12 integer :: a(128) 13 integer :: i 14 15 !$omp teams num_teams(5) 16 !$omp loop bind(teams) 17 do i = 1, 128 18 a(i) = i 19 if (i == 1) then 20 call usleep (20) 21 else if (i == 17) then 22 call usleep (40) 23 end if 24 end do 25 !$omp loop bind(teams) 26 do i = 1, 128 27 a(i) = a(i) + i 28 end do 29 !$omp end teams 30 do i = 1, 128 31 if (a(i) /= 2 * i) & 32 stop 1 33 end do 34 !$omp teams num_teams(5) 35 !$omp loop bind(teams) order(concurrent) 36 do i = 1, 128 37 a(i) = a(i) * 2 38 if (i == 1) then 39 call usleep (20) 40 else if (i == 13) then 41 call usleep (40) 42 end if 43 end do 44 !$omp loop bind(teams) order(concurrent) 45 do i = 1, 128 46 a(i) = a(i) + i 47 end do 48 !$omp end teams 49 do i = 1, 128 50 if (a(i) /= 5 * i) & 51 stop 2 52 end do 53 !$omp teams num_teams(5) 54 !$omp loop bind(teams) order(reproducible:concurrent) 55 do i = 1, 128 56 a(i) = a(i) * 2 57 if (i == 3) then 58 call usleep (20) 59 else if (i == 106) then 60 call usleep (40) 61 end if 62 end do 63 !$omp loop bind(teams) order(reproducible:concurrent) 64 do i = 1, 128 65 a(i) = a(i) + i 66 end do 67 !$omp end teams 68 do i = 1, 128 69 if (a(i) /= 11 * i) & 70 stop 3 71 end do 72end program main 73