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