! { dg-do run } ! { dg-additional-options -Wuninitialized } module m implicit none contains pure subroutine add_ps_routine(a, b, c) implicit none !$acc routine seq integer, intent(in) :: a, b integer, intent(out) :: c integer, parameter :: n = 10 integer :: i do i = 1, n if (i .eq. 5) then c = a + b end if end do end subroutine add_ps_routine elemental impure function add_ef(a, b) result(c) implicit none !$acc routine integer, intent(in) :: a, b integer :: c call add_ps_routine(a, b, c) end function add_ef ! This '-Wmaybe-uninitialized' diagnostic appears for '-O2' only; PR102192. ! { dg-xfail-if PR102192 { *-*-* } { -O2 } } ! There's another instance (again '-O2' only) further down, but as any number ! of 'dg-xfail-if' only apply to the first 'dg-bogus' etc., we have no way to ! XFAIL that other one, so we instead match all of them here (via line '0'): ! { dg-bogus {'c' may be used uninitialized} {} { target *-*-* } 0 } ! { TODO_dg-bogus {'c' may be used uninitialized} {} { target *-*-* } .-7 } end module m program main use m implicit none integer, parameter :: n = 10 integer, dimension(n) :: a_a integer, dimension(n) :: b_a integer, dimension(n) :: c_a integer :: i a_a = [(3 * i, i = 1, n)] b_a = [(-2 * i, i = 1, n)] !$acc parallel copyin(a_a, b_a) copyout(c_a) !$acc loop gang do i = 1, n if (i .eq. 4) then c_a = add_ef(a_a, b_a) ! See above. ! { TODO_dg-xfail-if PR102192 { *-*-* } { -O2 } } ! { TODO_dg-bogus {'c' may be used uninitialized} {} { target *-*-* } .-3 } end if end do !$acc end parallel if (any (c_a /= [(i, i=1, 10)])) stop 1 !print *, a end program main