summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/negative_stride_1.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/negative_stride_1.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/negative_stride_1.f9025
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/negative_stride_1.f90 b/gcc/testsuite/gfortran.dg/negative_stride_1.f90
new file mode 100644
index 00000000000..45da92a223f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/negative_stride_1.f90
@@ -0,0 +1,25 @@
+! { dg-do run }
+!
+! PR fortran/102043
+! The middle-end used to conclude from array indexing that the index
+! should be non-negative and thus that array accesses to reversed arrays
+! (i.e. with negative strides) only access the last element of the array,
+! as the access involves a pointer to array that is initialized to point
+! to the last element in the case of a reversed array.
+
+program main
+ implicit none
+ integer :: a(3, 3)
+ integer :: i
+ a = 0
+ call s(a(3:1:-1,:))
+ if (any(a(:,1) /= (/ 7, 5, 3 /))) stop 1
+ if (any(a(:,2) /= (/ 17, 13, 11 /))) stop 2
+ if (any(a(:,3) /= (/ 29, 23, 19 /))) stop 3
+contains
+ subroutine s(b)
+ implicit none
+ integer, dimension(:,:) :: b
+ b = reshape((/ 3, 5, 7, 11, 13, 17, 19, 23, 29 /), (/ 3, 3 /))
+ end subroutine s
+end program main