1! RUN: %S/test_errors.sh %s %t %flang_fc1
2! REQUIRES: shell
3!Testing data constraints : C874 - C875, C878 - C881
4module m
5    integer, target :: modarray(1)
6  contains
7    function f(i)
8      integer, intent(in) :: i
9      integer, pointer :: f
10      f => modarray(i)
11    end
12    subroutine CheckObject
13      type specialNumbers
14        integer one
15        integer numbers(5)
16      end type
17      type large
18        integer elt(10)
19        integer val
20        type(specialNumbers) nums
21        type(specialNumbers) numsArray(5)
22      end type
23      type(specialNumbers), parameter ::newNums = &
24              specialNumbers(1, (/ 1, 2, 3, 4, 5 /))
25      type(specialNumbers), parameter ::newNumsArray(2) = &
26              (/ SpecialNumbers(1, (/ 1, 2, 3, 4, 5 /)), &
27              SpecialNumbers(1, (/ 1, 2, 3,4, 5 /)) /)
28      type(specialNumbers) nums
29      type(large) largeArray(5)
30      type(large) largeNumber
31      real :: a[*]
32      real :: b(5)
33      integer :: x
34      real, parameter:: c(5) = (/ 1, 2, 3, 4, 5 /)
35      integer :: d(10, 10)
36      character :: name(12)
37      integer :: ind = 2
38      !C874
39      !ERROR: Data object must not be a coindexed variable
40      DATA a[1] / 1 /
41      !C874
42      !ERROR: Data object must not be a coindexed variable
43      DATA(a[i], i = 1, 5) / 5 * 1 /
44      !C875
45      !ERROR: Data object variable must not be a function reference
46      DATA f(1) / 1 /
47      !C875
48      !ERROR: Data object must have constant subscripts
49      DATA b(ind) / 1 /
50      !C875
51      !ERROR: Data object must have constant subscripts
52      DATA name( : ind) / 'Ancd' /
53      !C875
54      !ERROR: Data object must have constant subscripts
55      DATA name(ind:) / 'Ancd' /
56      !C878
57      !ERROR: Data implied do object must be a variable
58      DATA(c(i), i = 1, 5) / 5 * 1 /
59      !C878
60      !ERROR: Data implied do object must be a variable
61      DATA(newNumsArray(i), i = 1, 2) &
62              / specialNumbers(1, 2 * (/ 1, 2, 3, 4, 5 /)) /
63      !C880
64      !ERROR: Data implied do structure component must be subscripted
65      DATA(nums % one, i = 1, 5) / 5 * 1 /
66      !C879
67      !ERROR: Data implied do object must be a variable
68      DATA(newNums % numbers(i), i = 1, 5) / 5 * 1 /
69      !C879
70      !ERROR: Data implied do object must be a variable
71      DATA(newNumsArray(i) % one, i = 1, 5) / 5 * 1 /
72      !C880
73      !OK: Correct use
74      DATA(largeArray(j) % nums % one, j = 1, 5) / 5 * 1 /
75      !C880
76      !OK: Correct use
77      DATA(largeNumber % numsArray(j) % one, j = 1, 5) / 5 * 1 /
78      !C881
79      !ERROR: Data object must have constant subscripts
80      DATA(b(x), i = 1, 5) / 5 * 1 /
81      !C881
82      !OK: Correct use
83      DATA(nums % numbers(i), i = 1, 5) / 5 * 1 /
84      !C881
85      !OK: Correct use
86      DATA((d(i, j), i = 1, 10), j = 1, 10) / 100 * 1 /
87      !C881
88      !OK: Correct use
89      DATA(d(i, 1), i = 1, 10) / 10 * 1 /
90    end
91  end
92