! { dg-do run } ! { dg-options "-fcheck=all" } ! ! PR fortran/71194 ! ! Contributed by T Kondic ! program ice implicit none integer, parameter :: pa=10, pb=20 complex, target :: a(pa*pb) real, pointer:: ptr(:,:) =>null() integer :: i, j, cnt logical :: negative do i = 1, size(a) a(i) = cmplx(i,-i) end do ! Was ICEing before with bounds checks ptr(1:pa*2,1:pb) => conv2real(a) negative = .false. cnt = 1 do i = 1, ubound(ptr,dim=2) do j = 1, ubound(ptr,dim=1) if (negative) then if (-cnt /= ptr(j, i)) STOP 1 cnt = cnt + 1 negative = .false. else if (cnt /= ptr(j, i)) STOP 2 negative = .true. end if end do end do contains function conv2real(carr) use, intrinsic :: iso_c_binding ! returns real pointer to a complex array complex, contiguous, intent(inout), target :: carr(:) real,contiguous,pointer :: conv2real(:) call c_f_pointer(c_loc(carr),conv2real,[size(carr)*2]) end function conv2real end program