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