summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/reshape-alloc.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/reshape-alloc.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/reshape-alloc.f9032
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/reshape-alloc.f90 b/gcc/testsuite/gfortran.dg/reshape-alloc.f90
new file mode 100644
index 000000000..c4c7a0e2a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/reshape-alloc.f90
@@ -0,0 +1,32 @@
+! { dg-do run }
+! PR 20074: This used to segfault at runtime.
+! Test case contributed by "Alfredo Buttari" <pitagoras@tin.it>
+
+program tryreshape
+
+ integer,allocatable :: vect1(:),resh1(:,:)
+ integer,pointer :: vect(:),resh(:,:)
+ integer :: vect2(2*4), resh2(2,4)
+ integer :: r, s(2)
+
+ r=2; nb=4
+
+ s(:)=(/r,nb/)
+
+ allocate(vect(nb*r),vect1(nb*r))
+ allocate(resh(r,nb),resh1(r,nb))
+
+ vect =1
+ vect1=1
+ vect2=1
+
+ resh2 = reshape(vect2,s)
+ if (resh2(1,1) /= 1.0) call abort
+
+ resh1 = reshape(vect1,s)
+ if (resh1(1,1) /= 1.0) call abort
+
+ resh = reshape(vect,s)
+ if (resh(1,1) /= 1.0) call abort
+
+end program tryreshape