1! Test cshift0 for character arrays.
2! { dg-do run }
3program main
4  implicit none
5  integer, parameter :: n1 = 2, n2 = 3, n3 = 4, slen = 3
6  character (len = slen), dimension (n1, n2, n3) :: a
7  integer (kind = 1) :: shift1 = 3
8  integer (kind = 2) :: shift2 = 4
9  integer (kind = 4) :: shift3 = 5
10  integer (kind = 8) :: shift4 = 6
11  integer :: i1, i2, i3
12
13  do i3 = 1, n3
14    do i2 = 1, n2
15      do i1 = 1, n1
16        a (i1, i2, i3) = 'ab'(i1:i1) // 'cde'(i2:i2) // 'fghi'(i3:i3)
17      end do
18    end do
19  end do
20
21  call test (cshift (a, shift1, 1), int (shift1), 0, 0)
22  call test (cshift (a, shift2, 2), 0, int (shift2), 0)
23  call test (cshift (a, shift3, 3), 0, 0, int (shift3))
24  call test (cshift (a, shift4, 3), 0, 0, int (shift4))
25contains
26  subroutine test (b, d1, d2, d3)
27    character (len = slen), dimension (n1, n2, n3) :: b
28    integer :: d1, d2, d3
29
30    do i3 = 1, n3
31      do i2 = 1, n2
32        do i1 = 1, n1
33          if (b (i1, i2, i3) .ne. a (mod (d1 + i1 - 1, n1) + 1, &
34                                     mod (d2 + i2 - 1, n2) + 1, &
35                                     mod (d3 + i3 - 1, n3) + 1)) call abort
36        end do
37      end do
38    end do
39  end subroutine test
40end program main
41