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