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);
11
12program 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');
28end program main
29
30subroutine 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
39end subroutine mytst
40