1! RUN: %S/test_errors.sh %s %t %flang_fc1
2! REQUIRES: shell
3!Testing data constraints : C876, C877
4module m
5  integer :: first
6  contains
7    subroutine h
8      integer a,b
9      !C876
10      !ERROR: Host-associated object 'first' must not be initialized in a DATA statement
11      DATA first /1/
12    end subroutine
13
14    function g(i)
15      integer ::i
16      g = i *1024
17    end
18
19    function f(i)
20      integer ::i
21      integer ::result
22      integer, allocatable :: a
23      integer :: b(i)
24      character(len=i), pointer:: charPtr
25      character(len=i), allocatable:: charAlloc
26      !C876
27      !ERROR: Dummy argument 'i' must not be initialized in a DATA statement
28      DATA i /1/
29      !C876
30      !ERROR: Function result 'f' must not be initialized in a DATA statement
31      DATA f /1/
32      !C876
33      !ERROR: Procedure 'g' must not be initialized in a DATA statement
34      DATA g /1/
35      !C876
36      !ERROR: Allocatable 'a' must not be initialized in a DATA statement
37      DATA a /1/
38      !C876
39      !ERROR: Automatic variable 'b' must not be initialized in a DATA statement
40      DATA b(0) /1/
41      !C876
42      !Ok: As charPtr is a pointer, it is not an automatic object
43      DATA charPtr / NULL() /
44      !C876
45      !ERROR: Allocatable 'charalloc' must not be initialized in a DATA statement
46      DATA charAlloc / 'abc' /
47      f = i *1024
48    end
49
50    subroutine CheckObject(i)
51      type specialNumbers
52        integer one
53        integer numbers(5)
54        type(specialNumbers), pointer :: headOfTheList
55        integer, pointer, dimension(:) :: ptoarray
56        character, pointer, dimension(:) :: ptochar
57      end type
58      type large
59        integer, allocatable :: allocVal
60        integer, allocatable :: elt(:)
61        integer val
62        type(specialNumbers) numsArray(5)
63      end type
64      type(large) largeNumber
65      type(large), allocatable :: allocatableLarge
66      type(large) :: largeNumberArray(i)
67      type(large) :: largeArray(5)
68      character :: name(i)
69      !C877
70      !ERROR: Default-initialized 'largenumber' must not be initialized in a DATA statement
71      DATA(largeNumber % numsArray(j) % headOfTheList, j = 1, 10) / 10 * NULL() /
72      !C877
73      !ERROR: Data object must not contain pointer 'headofthelist' as a non-rightmost part
74      DATA(largeNumber % numsArray(j) % headOfTheList % one, j = 1, 10) / 10 * 1 /
75      !C877
76      !ERROR: Rightmost data object pointer 'ptoarray' must not be subscripted
77      DATA(largeNumber % numsArray(j) % ptoarray(1), j = 1, 10) / 10 * 1 /
78      !C877
79      !ERROR: Rightmost data object pointer 'ptochar' must not be subscripted
80      DATA largeNumber % numsArray(0) % ptochar(1:2) / 'ab' /
81      !C876
82      !ERROR: Default-initialized 'largenumber' must not be initialized in a DATA statement
83      DATA(largeNumber % elt(j) , j = 1, 10) / 10 * 1/
84      !C876
85      !ERROR: Default-initialized 'largearray' must not be initialized in a DATA statement
86      DATA(largeArray(j) % allocVal , j = 1, 10) / 10 * 1/
87      !C876
88      !ERROR: Allocatable 'allocatablelarge' must not be initialized in a DATA statement
89      DATA allocatableLarge % val / 1 /
90      !C876
91      !ERROR: Automatic variable 'largenumberarray' must not be initialized in a DATA statement
92      DATA(largeNumberArray(j) % val, j = 1, 10) / 10 * NULL() /
93      !C876
94      !ERROR: Automatic variable 'name' must not be initialized in a DATA statement
95      DATA name( : 2) / 'Ancd' /
96    end
97  end
98
99  block data foo
100          integer :: a,b
101          common /c/ a,b
102          !C876
103          !OK: Correct use
104          DATA a /1/
105  end block data
106
107  module m2
108    integer m2_i
109    type newType
110      integer number
111    end type
112    type(newType) m2_number1
113    contains
114
115    subroutine checkDerivedType(m2_number)
116      type(newType) m2_number
117      type(newType) m2_number3
118      !C876
119      !ERROR: Dummy argument 'm2_number' must not be initialized in a DATA statement
120      DATA m2_number%number /1/
121      !C876
122      !ERROR: Host-associated object 'm2_number1' must not be initialized in a DATA statement
123      DATA m2_number1%number /1/
124      !C876
125      !OK: m2_number3 is not associated through use association
126      DATA m2_number3%number /1/
127    end
128  end
129
130  program new
131    use m2
132    integer a
133    real    b,c
134    type seqType
135      sequence
136      integer number
137    end type
138    type(SeqType) num
139    COMMON b,a,c,num
140    type(newType) m2_number2
141    !C876
142    !ERROR: Blank COMMON object 'b' must not be initialized in a DATA statement
143    DATA b /1/
144    !C876
145    !ERROR: USE-associated object 'm2_i' must not be initialized in a DATA statement
146    DATA m2_i /1/
147    !C876
148    !ERROR: USE-associated object 'm2_number1' must not be initialized in a DATA statement
149    DATA m2_number1%number /1/
150    !C876
151    !OK: m2_number2 is not associated through use association
152    DATA m2_number2%number /1/
153    !C876
154    !ERROR: Blank COMMON object 'num' must not be initialized in a DATA statement
155    DATA num%number /1/
156  end program
157