This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/47844] Array stride ignored for pointer-valued function results
- From: "pault at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 05 Oct 2011 22:20:13 +0000
- Subject: [Bug fortran/47844] Array stride ignored for pointer-valued function results
- Auto-submitted: auto-generated
- References: <bug-47844-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47844
Paul Thomas <pault at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot |pault at gcc dot gnu.org
|gnu.org |
--- Comment #9 from Paul Thomas <pault at gcc dot gnu.org> 2011-10-05 22:20:13 UTC ---
Created attachment 25425
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25425
a draft patch for the pr
This has been partially regtested and looks OK at 20k tests or so - I had to
head off to bed!
If all is well, I will look for a slightly cleaner place to use the returned
stride; this place might not exist of course!
I will submit tomorrow with the test case below.
Cheers
Paul
! (dg-do run }
! Test the fix for PR47844, in which the stride in the function result
! was ignored. Previously, the result was [1,3] at lines 15 and 16.
!
! Contributed by KePu <Kdx1999@gmail.com>
!
PROGRAM test_pointer_value
IMPLICIT NONE
INTEGER, DIMENSION(10), TARGET :: array= [1,3,5,7,9,11,13,15,17,19]
INTEGER, dimension(2) :: array_fifth
INTEGER, POINTER, DIMENSION(:) :: ptr_array => NULL()
INTEGER, POINTER, DIMENSION(:) :: ptr_array_fifth => NULL()
ptr_array => array
array_fifth = every_fifth (ptr_array)
if (any (array_fifth .ne. [1,11])) call abort
if (any (every_fifth(ptr_array) .ne. [1,11])) call abort
CONTAINS
FUNCTION every_fifth (ptr_array) RESULT (ptr_fifth)
IMPLICIT NONE
INTEGER, POINTER, DIMENSION(:) :: ptr_fifth
INTEGER, POINTER, DIMENSION(:), INTENT(in) :: ptr_array
INTEGER :: low
INTEGER :: high
low = LBOUND (ptr_array, 1)
high = UBOUND (ptr_array, 1)
ptr_fifth => ptr_array (low: high: 5)
END FUNCTION every_fifth
END PROGRAM test_pointer_value