1! RUN: %python %S/test_errors.py %s %flang_fc1 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 type(large) :: largeNumberArray(i) 66 type(large) :: largeArray(5) 67 character :: name(i) 68 type small 69 real :: x 70 end type 71 type(small), pointer :: sp 72 !C877 73 !ERROR: Default-initialized 'largenumber' must not be initialized in a DATA statement 74 DATA(largeNumber % numsArray(j) % headOfTheList, j = 1, 10) / 10 * NULL() / 75 !C877 76 !ERROR: Data object must not contain pointer 'headofthelist' as a non-rightmost part 77 DATA(largeNumber % numsArray(j) % headOfTheList % one, j = 1, 10) / 10 * 1 / 78 !C877 79 !ERROR: Rightmost data object pointer 'ptoarray' must not be subscripted 80 DATA(largeNumber % numsArray(j) % ptoarray(1), j = 1, 10) / 10 * 1 / 81 !C877 82 !ERROR: Rightmost data object pointer 'ptochar' must not be subscripted 83 DATA largeNumber % numsArray(0) % ptochar(1:2) / 'ab' / 84 !C876 85 !ERROR: Default-initialized 'largenumber' must not be initialized in a DATA statement 86 DATA(largeNumber % elt(j) , j = 1, 10) / 10 * 1/ 87 !C876 88 !ERROR: Default-initialized 'largearray' must not be initialized in a DATA statement 89 DATA(largeArray(j) % allocVal , j = 1, 10) / 10 * 1/ 90 !C876 91 !ERROR: Allocatable 'allocatablelarge' must not be initialized in a DATA statement 92 DATA allocatableLarge % val / 1 / 93 !C876 94 !ERROR: Automatic variable 'largenumberarray' must not be initialized in a DATA statement 95 DATA(largeNumberArray(j) % val, j = 1, 10) / 10 * NULL() / 96 !C876 97 !ERROR: Automatic variable 'name' must not be initialized in a DATA statement 98 DATA name( : 2) / 'Ancd' / 99 !ERROR: Target of pointer 'sp' must not be initialized in a DATA statement 100 DATA sp%x / 1.0 / 101 end 102 end 103 104 block data foo 105 integer :: a,b 106 common /c/ a,b 107 !C876 108 !OK: Correct use 109 DATA a /1/ 110 end block data 111 112 module m2 113 integer m2_i 114 type newType 115 integer number 116 end type 117 type(newType) m2_number1 118 contains 119 120 subroutine checkDerivedType(m2_number) 121 type(newType) m2_number 122 type(newType) m2_number3 123 !C876 124 !ERROR: Dummy argument 'm2_number' must not be initialized in a DATA statement 125 DATA m2_number%number /1/ 126 !C876 127 !ERROR: Host-associated object 'm2_number1' must not be initialized in a DATA statement 128 DATA m2_number1%number /1/ 129 !C876 130 !OK: m2_number3 is not associated through use association 131 DATA m2_number3%number /1/ 132 end 133 end 134 135 program new 136 use m2 137 integer a 138 real b,c 139 type seqType 140 sequence 141 integer number 142 end type 143 type(SeqType) num 144 COMMON b,a,c,num 145 type(newType) m2_number2 146 !C876 147 !ERROR: Blank COMMON object 'b' must not be initialized in a DATA statement 148 DATA b /1/ 149 !C876 150 !ERROR: USE-associated object 'm2_i' must not be initialized in a DATA statement 151 DATA m2_i /1/ 152 !C876 153 !ERROR: USE-associated object 'm2_number1' must not be initialized in a DATA statement 154 DATA m2_number1%number /1/ 155 !C876 156 !OK: m2_number2 is not associated through use association 157 DATA m2_number2%number /1/ 158 !C876 159 !ERROR: Blank COMMON object 'num' must not be initialized in a DATA statement 160 DATA num%number /1/ 161 end program 162