From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/gfortran.dg/pointer_assign_4.f90 | 66 ++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pointer_assign_4.f90 (limited to 'gcc/testsuite/gfortran.dg/pointer_assign_4.f90') diff --git a/gcc/testsuite/gfortran.dg/pointer_assign_4.f90 b/gcc/testsuite/gfortran.dg/pointer_assign_4.f90 new file mode 100644 index 000000000..faf7c776c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pointer_assign_4.f90 @@ -0,0 +1,66 @@ +! { dg-do run } +! +! Verify that the bounds are correctly set when assigning pointers. +! +! PR fortran/33139 +! +program prog + implicit none + real, target :: a(-10:10) + real, pointer :: p(:),p2(:) + integer :: i + do i = -10, 10 + a(i) = real(i) + end do + p => a + p2 => p + if((lbound(p, dim=1) /= -10) .or. (ubound(p, dim=1) /= 10)) & + call abort() + if((lbound(p2,dim=1) /= -10) .or. (ubound(p2,dim=1) /= 10)) & + call abort() + do i = -10, 10 + if(p(i) /= real(i)) call abort() + if(p2(i) /= real(i)) call abort() + end do + p => a(:) + p2 => p + if((lbound(p, dim=1) /= 1) .or. (ubound(p, dim=1) /= 21)) & + call abort() + if((lbound(p2,dim=1) /= 1) .or. (ubound(p2,dim=1) /= 21)) & + call abort() + p2 => p(:) + if((lbound(p2,dim=1) /= 1) .or. (ubound(p2,dim=1) /= 21)) & + call abort() + call multdim() +contains + subroutine multdim() + real, target, allocatable :: b(:,:,:) + real, pointer :: ptr(:,:,:) + integer :: i, j, k + allocate(b(-5:5,10:20,0:3)) + do i = 0, 3 + do j = 10, 20 + do k = -5, 5 + b(k,j,i) = real(i+10*j+100*k) + end do + end do + end do + ptr => b + if((lbound(ptr,dim=1) /= -5) .or. (ubound(ptr,dim=1) /= 5) .or. & + (lbound(ptr,dim=2) /= 10) .or. (ubound(ptr,dim=2) /= 20) .or. & + (lbound(ptr,dim=3) /= 0) .or. (ubound(ptr,dim=3) /= 3)) & + call abort() + do i = 0, 3 + do j = 10, 20 + do k = -5, 5 + if(ptr(k,j,i) /= real(i+10*j+100*k)) call abort() + end do + end do + end do + ptr => b(:,:,:) + if((lbound(ptr,dim=1) /= 1) .or. (ubound(ptr,dim=1) /= 11) .or. & + (lbound(ptr,dim=2) /= 1) .or. (ubound(ptr,dim=2) /= 11) .or. & + (lbound(ptr,dim=3) /= 1) .or. (ubound(ptr,dim=3) /= 4)) & + call abort() + end subroutine multdim +end program prog -- cgit v1.2.3