1! RUN: %S/test_errors.sh %s %t %f18
2!Testing data constraints : C876, C877
3module m
4  integer :: first
5  contains
6    subroutine h
7      integer a,b
8      !C876
9      !ERROR: Host-associated object 'first' must not be initialized in a DATA statement
10      DATA first /1/
11    end subroutine
12
13    function g(i)
14      integer ::i
15      g = i *1024
16    end
17
18    function f(i)
19      integer ::i
20      integer ::result
21      integer, allocatable :: a
22      integer :: b(i)
23      character(len=i), pointer:: charPtr
24      character(len=i), allocatable:: charAlloc
25      !C876
26      !ERROR: Dummy argument 'i' must not be initialized in a DATA statement
27      DATA i /1/
28      !C876
29      !ERROR: Function result 'f' must not be initialized in a DATA statement
30      DATA f /1/
31      !C876
32      !ERROR: Procedure 'g' must not be initialized in a DATA statement
33      DATA g /1/
34      !C876
35      !ERROR: Allocatable 'a' must not be initialized in a DATA statement
36      DATA a /1/
37      !C876
38      !ERROR: Automatic variable 'b' must not be initialized in a DATA statement
39      DATA b(0) /1/
40      !C876
41      !Ok: As charPtr is a pointer, it is not an automatic object
42      DATA charPtr / NULL() /
43      !C876
44      !ERROR: Allocatable 'charalloc' must not be initialized in a DATA statement
45      DATA charAlloc / 'abc' /
46      f = i *1024
47    end
48
49    subroutine CheckObject(i)
50      type specialNumbers
51        integer one
52        integer numbers(5)
53        type(specialNumbers), pointer :: headOfTheList
54        integer, pointer, dimension(:) :: ptoarray
55        character, pointer, dimension(:) :: ptochar
56      end type
57      type large
58        integer, allocatable :: allocVal
59        integer, allocatable :: elt(:)
60        integer val
61        type(specialNumbers) numsArray(5)
62      end type
63      type(large) largeNumber
64      type(large), allocatable :: allocatableLarge
65      !ERROR: An automatic variable must not be initialized
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