1*404b540aSrobert! { dg-do run } 2*404b540aSrobert 3*404b540aSrobert integer :: i 4*404b540aSrobert common /c/ i 5*404b540aSrobert i = -1 6*404b540aSrobert!$omp parallel shared (i) num_threads (4) 7*404b540aSrobert call test1 8*404b540aSrobert!$omp end parallel 9*404b540aSrobertend 10*404b540aSrobertsubroutine test1 11*404b540aSrobert integer :: vari 12*404b540aSrobert call test2 13*404b540aSrobert call test3 14*404b540aSrobertcontains 15*404b540aSrobert subroutine test2 16*404b540aSrobert use omp_lib 17*404b540aSrobert integer :: i 18*404b540aSrobert common /c/ i 19*404b540aSrobert!$omp single 20*404b540aSrobert i = omp_get_thread_num () 21*404b540aSrobert call test4 22*404b540aSrobert!$omp end single copyprivate (vari) 23*404b540aSrobert end subroutine test2 24*404b540aSrobert subroutine test3 25*404b540aSrobert integer :: i 26*404b540aSrobert common /c/ i 27*404b540aSrobert if (i .lt. 0 .or. i .ge. 4) call abort 28*404b540aSrobert if (i + 10 .ne. vari) call abort 29*404b540aSrobert end subroutine test3 30*404b540aSrobert subroutine test4 31*404b540aSrobert use omp_lib 32*404b540aSrobert vari = omp_get_thread_num () + 10 33*404b540aSrobert end subroutine test4 34*404b540aSrobertend subroutine test1 35