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