summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/array_constructor_12.f90
blob: 082e90ecc0d387eb57f693396362254cb41a7919 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
! Like array_constructor_6.f90, but check integer(8) iterators.
! { dg-do run }
program main
  integer (kind = 8) :: i, l8, u8, step8
  integer (kind = 4) :: l4, step4
  integer (kind = 8), parameter :: big = 10000000000_8

  l4 = huge (l4)
  u8 = l4 + 10_8
  step4 = 2
  call test ((/ (i, i = l4, u8, step4) /), l4 + 0_8, u8, step4 + 0_8)

  l8 = big
  u8 = big * 20
  step8 = big
  call test ((/ (i, i = l8, u8, step8) /), l8, u8, step8)

  u8 = big + 100
  l8 = big
  step4 = -20
  call test ((/ (i, i = u8, l8, step4) /), u8, l8, step4 + 0_8)

  u8 = big * 40
  l8 = big * 20
  step8 = -big * 2
  call test ((/ (i, i = u8, l8, step8) /), u8, l8, step8)

  u8 = big
  l4 = big / 100
  step4 = -big / 500
  call test ((/ (i, i = u8, l4, step4) /), u8, l4 + 0_8, step4 + 0_8)

  u8 = big * 40 + 200
  l4 = 200
  step8 = -big
  call test ((/ (i, i = u8, l4, step8) /), u8, l4 + 0_8, step8)
contains
  subroutine test (a, l, u, step)
    integer (kind = 8), dimension (:), intent (in) :: a
    integer (kind = 8), intent (in) :: l, u, step
    integer (kind = 8) :: i
    integer :: j

    j = 1
    do i = l, u, step
      if (a (j) .ne. i) call abort
      j = j + 1
    end do
    if (size (a, 1) .ne. j - 1) call abort
  end subroutine test
end program main