summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/reshape.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/reshape.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/reshape.f9033
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/reshape.f90 b/gcc/testsuite/gfortran.dg/reshape.f90
new file mode 100644
index 000000000..3dba09892
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/reshape.f90
@@ -0,0 +1,33 @@
+! { dg-do run }
+! This tests a few reshape PRs.
+program resh
+ implicit none
+ real, dimension (2,3) :: a,c
+ real, dimension (12) :: b
+ type foo
+ real :: r
+ end type foo
+ type(foo), dimension (2,3) :: ar
+ type(foo), dimension (12) :: br
+
+ character (len=80) line1, line2, line3
+ integer :: i
+
+ ! PR 21108: This used to give undefined results.
+ b = (/(i,i=1,12)/)
+ a = reshape(b(1:12:2),shape(a),order=(/2,1/))
+ c = reshape(b(1:12:2),shape(a),order=(/2,1/))
+ if (any (a /= c)) call abort
+
+ ! Test generic reshape
+ br%r = b
+ ar = reshape(br(1:12:2),shape(a),order=(/2,1/))
+ if (any (ar%r /= a)) call abort
+
+ ! Test callee-allocated memory with a write statement
+ write (line1,'(6F8.3)') reshape(b(1:12:2),shape(a),order=(/2,1/))
+ write (line2,'(6F8.3)') a
+ if (line1 /= line2 ) call abort
+ write (line3,'(6F8.3)') reshape(br(1:12:2),shape(ar),order=(/2,1/))
+ if (line1 /= line3 ) call abort
+end