2017-02-20 Paul Thomas <pault@gcc.gnu.org>
[official-gcc.git] / gcc / testsuite / gfortran.dg / array_assignment_1.F90
blob328107011cb2fa56a97a7cee7955b23ef02f90b7
1 ! { dg-do run }
2 ! { dg-options "-ffree-line-length-none" }
3 ! Test that different array assignments work even when interleaving,
4 ! reversing etc.  Make sure the results from assignment with constants
5 ! as array triples and runtime array triples (where we always create
6 ! a temporary) match.
7 #define TST(b,c,d,e,f,g,r) a=init; a(b:c:d) = a(e:f:g); \
8        write(unit=line ,fmt="(9I1)") a;\
9        if (line /= r) call abort ; \
10        call mytst(b,c,d,e,f,g,r);
12 program main
13   implicit none
14   integer :: i
15   integer, parameter :: n=9
16   integer,  dimension(n) :: a
17   character(len=n) :: line
18   integer, dimension(n), parameter :: init = (/(i,i=1,n)/)
19   TST(2,n,2,1,n-1,2,'113355779')
20   TST(3,9,3,2,6,2,'122454786');
21   TST(1,8,2,3,9,2,'325476989');
22   TST(1,6,1,4,9,1,'456789789');
23   TST(9,5,-1,1,5,1,'123454321');
24   TST(9,5,-2,1,5,2,'123456381');
25   TST(5,9,2,5,1,-2,'123456381');
26   TST(1,6,1,2,7,1,'234567789');
27   TST(2,7,1,1,6,1,'112345689');
28 end program main
30 subroutine mytst(b,c,d,e,f,g,r)
31   integer,intent(in) :: b,c,d,e,f,g
32   character(len=9), intent(in) :: r
33   character(len=9) :: line
34   integer, dimension(9) :: a
35   a = (/(i,i=1,9)/)
36   a(b:c:d) = a(e:f:g)
37   write (unit=line,fmt='(9I1)') a
38   if (line /= r) call abort
39 end subroutine mytst