! { dg-do compile }
      SUBROUTINE WORK(N)
        INTEGER N
      END SUBROUTINE WORK
      SUBROUTINE SUB3(N)
      INTEGER N
        CALL WORK(N)
!$OMP BARRIER
        CALL WORK(N)
      END SUBROUTINE SUB3
      SUBROUTINE SUB2(K)
      INTEGER K
!$OMP PARALLEL SHARED(K)
          CALL SUB3(K)
!$OMP END PARALLEL
      END SUBROUTINE SUB2
      SUBROUTINE SUB1(N)
      INTEGER N
        INTEGER I
!$OMP PARALLEL PRIVATE(I) SHARED(N)
!$OMP DO
          DO I = 1, N
             CALL SUB2(I)
          END DO
!$OMP END PARALLEL
      END SUBROUTINE SUB1
      PROGRAM A15
        CALL SUB1(2)
        CALL SUB2(2)
        CALL SUB3(2)
      END PROGRAM A15
