PR middle-end/77674
[official-gcc.git] / gcc / testsuite / gfortran.dg / char_eoshift_1.f90
blobba51fa13193891f121acde34e6ace149f4ef5254
1 ! Test eoshift0 for character arrays.
2 ! { dg-do run }
3 program main
4 implicit none
5 integer, parameter :: n1 = 6, n2 = 5, n3 = 4, slen = 3
6 character (len = slen), dimension (n1, n2, n3) :: a
7 character (len = slen) :: filler
8 integer (kind = 1) :: shift1 = 4
9 integer (kind = 2) :: shift2 = 2
10 integer (kind = 4) :: shift3 = 3
11 integer (kind = 8) :: shift4 = 1
12 integer :: i1, i2, i3
14 do i3 = 1, n3
15 do i2 = 1, n2
16 do i1 = 1, n1
17 a (i1, i2, i3) = 'abcdef'(i1:i1) // 'ghijk'(i2:i2) // 'lmno'(i3:i3)
18 end do
19 end do
20 end do
22 call test (eoshift (a, shift1, 'foo', 1), int (shift1), 0, 0, 'foo')
23 call test (eoshift (a, shift2, 'foo', 2), 0, int (shift2), 0, 'foo')
24 call test (eoshift (a, shift3, 'foo', 2), 0, int (shift3), 0, 'foo')
25 call test (eoshift (a, shift4, 'foo', 3), 0, 0, int (shift4), 'foo')
27 filler = ''
28 call test (eoshift (a, shift1, dim = 1), int (shift1), 0, 0, filler)
29 call test (eoshift (a, shift2, dim = 2), 0, int (shift2), 0, filler)
30 call test (eoshift (a, shift3, dim = 2), 0, int (shift3), 0, filler)
31 call test (eoshift (a, shift4, dim = 3), 0, 0, int (shift4), filler)
32 contains
33 subroutine test (b, d1, d2, d3, filler)
34 character (len = slen), dimension (n1, n2, n3) :: b
35 character (len = slen) :: filler
36 integer :: d1, d2, d3
38 do i3 = 1, n3
39 do i2 = 1, n2
40 do i1 = 1, n1
41 if (i1 + d1 .gt. n1 .or. i2 + d2 .gt. n2 .or. i3 + d3 .gt. n3) then
42 if (b (i1, i2, i3) .ne. filler) call abort
43 else
44 if (b (i1, i2, i3) .ne. a (i1 + d1, i2 + d2, i3 + d3)) call abort
45 end if
46 end do
47 end do
48 end do
49 end subroutine test
50 end program main