! { 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