1! RUN: %S/test_errors.sh %s %t %f18 -Mstandard -Werror 2 3! Issue 458 -- semantic checks for a normal DO loop. The DO variable 4! and the initial, final, and step expressions must be INTEGER if the 5! options for standard conformance and turning warnings into errors 6! are both in effect. This test turns on the options for standards 7! conformance and turning warnings into errors. This produces error 8! messages for the cases where REAL and DOUBLE PRECISION variables 9! and expressions are used in the DO controls. 10 11! C1120 -- DO variable (and associated expressions) must be INTEGER. 12! This is extended by allowing REAL and DOUBLE PRECISION 13 14MODULE share 15 INTEGER :: intvarshare 16 REAL :: realvarshare 17 DOUBLE PRECISION :: dpvarshare 18END MODULE share 19 20PROGRAM do_issue_458 21 USE share 22 IMPLICIT NONE 23 INTEGER :: ivar 24 REAL :: rvar 25 DOUBLE PRECISION :: dvar 26 LOGICAL :: lvar 27 COMPLEX :: cvar 28 CHARACTER :: chvar 29 INTEGER, DIMENSION(3) :: avar 30 TYPE derived 31 REAL :: first 32 INTEGER :: second 33 END TYPE derived 34 TYPE(derived) :: devar 35 INTEGER, POINTER :: pivar 36 REAL, POINTER :: prvar 37 DOUBLE PRECISION, POINTER :: pdvar 38 LOGICAL, POINTER :: plvar 39 INTERFACE 40 SUBROUTINE sub() 41 END SUBROUTINE sub 42 FUNCTION ifunc() 43 END FUNCTION ifunc 44 END INTERFACE 45 PROCEDURE(ifunc), POINTER :: pifunc => NULL() 46 47! DO variables 48! INTEGER DO variable 49 DO ivar = 1, 10, 3 50 PRINT *, "ivar is: ", ivar 51 END DO 52 53! REAL DO variable 54 DO rvar = 1, 10, 3 55 PRINT *, "rvar is: ", rvar 56 END DO 57 58! DOUBLE PRECISISON DO variable 59 DO dvar = 1, 10, 3 60 PRINT *, "dvar is: ", dvar 61 END DO 62 63! Pointer to INTEGER DO variable 64 ALLOCATE(pivar) 65 DO pivar = 1, 10, 3 66 PRINT *, "pivar is: ", pivar 67 END DO 68 69! Pointer to REAL DO variable 70 ALLOCATE(prvar) 71 DO prvar = 1, 10, 3 72 PRINT *, "prvar is: ", prvar 73 END DO 74 75! Pointer to DOUBLE PRECISION DO variable 76 ALLOCATE(pdvar) 77 DO pdvar = 1, 10, 3 78 PRINT *, "pdvar is: ", pdvar 79 END DO 80 81! CHARACTER DO variable 82!ERROR: DO controls should be INTEGER 83 DO chvar = 1, 10, 3 84 PRINT *, "chvar is: ", chvar 85 END DO 86 87! LOGICAL DO variable 88!ERROR: DO controls should be INTEGER 89 DO lvar = 1, 10, 3 90 PRINT *, "lvar is: ", lvar 91 END DO 92 93! COMPLEX DO variable 94!ERROR: DO controls should be INTEGER 95 DO cvar = 1, 10, 3 96 PRINT *, "cvar is: ", cvar 97 END DO 98 99! Derived type DO variable 100!ERROR: DO controls should be INTEGER 101 DO devar = 1, 10, 3 102 PRINT *, "devar is: ", devar 103 END DO 104 105! Pointer to LOGICAL DO variable 106 ALLOCATE(plvar) 107!ERROR: DO controls should be INTEGER 108 DO plvar = 1, 10, 3 109 PRINT *, "plvar is: ", plvar 110 END DO 111 112! SUBROUTINE DO variable 113!ERROR: DO control must be an INTEGER variable 114 DO sub = 1, 10, 3 115 PRINT *, "ivar is: ", ivar 116 END DO 117 118! FUNCTION DO variable 119!ERROR: DO control must be an INTEGER variable 120 DO ifunc = 1, 10, 3 121 PRINT *, "ivar is: ", ivar 122 END DO 123 124! POINTER to FUNCTION DO variable 125!ERROR: DO control must be an INTEGER variable 126 DO pifunc = 1, 10, 3 127 PRINT *, "ivar is: ", ivar 128 END DO 129 130! Array DO variable 131!ERROR: Must be a scalar value, but is a rank-1 array 132 DO avar = 1, 10, 3 133 PRINT *, "plvar is: ", plvar 134 END DO 135 136! Undeclared DO variable 137!ERROR: No explicit type declared for 'undeclared' 138 DO undeclared = 1, 10, 3 139 PRINT *, "plvar is: ", plvar 140 END DO 141 142! Shared association INTEGER DO variable 143 DO intvarshare = 1, 10, 3 144 PRINT *, "ivar is: ", ivar 145 END DO 146 147! Shared association REAL DO variable 148 DO realvarshare = 1, 10, 3 149 PRINT *, "ivar is: ", ivar 150 END DO 151 152! Shared association DOUBLE PRECISION DO variable 153 DO dpvarshare = 1, 10, 3 154 PRINT *, "ivar is: ", ivar 155 END DO 156 157! Initial expressions 158! REAL initial expression 159 DO ivar = rvar, 10, 3 160 PRINT *, "ivar is: ", ivar 161 END DO 162 163! DOUBLE PRECISION initial expression 164 DO ivar = dvar, 10, 3 165 PRINT *, "ivar is: ", ivar 166 END DO 167 168! Pointer to INTEGER initial expression 169 DO ivar = pivar, 10, 3 170 PRINT *, "ivar is: ", ivar 171 END DO 172 173! Pointer to REAL initial expression 174 DO ivar = prvar, 10, 3 175 PRINT *, "ivar is: ", ivar 176 END DO 177 178! Pointer to DOUBLE PRECISION initial expression 179 DO ivar = pdvar, 10, 3 180 PRINT *, "ivar is: ", ivar 181 END DO 182 183! LOGICAL initial expression 184!ERROR: DO controls should be INTEGER 185 DO ivar = lvar, 10, 3 186 PRINT *, "ivar is: ", ivar 187 END DO 188 189! COMPLEX initial expression 190!ERROR: DO controls should be INTEGER 191 DO ivar = cvar, 10, 3 192 PRINT *, "ivar is: ", ivar 193 END DO 194 195! Derived type initial expression 196!ERROR: DO controls should be INTEGER 197 DO ivar = devar, 10, 3 198 PRINT *, "ivar is: ", ivar 199 END DO 200 201! Pointer to LOGICAL initial expression 202!ERROR: DO controls should be INTEGER 203 DO ivar = plvar, 10, 3 204 PRINT *, "ivar is: ", ivar 205 END DO 206 207! Invalid initial expression 208!ERROR: Integer literal is too large for INTEGER(KIND=4) 209 DO ivar = -2147483648_4, 10, 3 210 PRINT *, "ivar is: ", ivar 211 END DO 212 213! Final expression 214! REAL final expression 215 DO ivar = 1, rvar, 3 216 PRINT *, "ivar is: ", ivar 217 END DO 218 219! DOUBLE PRECISION final expression 220 DO ivar = 1, dvar, 3 221 PRINT *, "ivar is: ", ivar 222 END DO 223 224! Pointer to INTEGER final expression 225 DO ivar = 1, pivar, 3 226 PRINT *, "ivar is: ", ivar 227 END DO 228 229! Pointer to REAL final expression 230 DO ivar = 1, prvar, 3 231 PRINT *, "ivar is: ", ivar 232 END DO 233 234! Pointer to DOUBLE PRECISION final expression 235 DO ivar = pdvar, 10, 3 236 PRINT *, "ivar is: ", ivar 237 END DO 238 239! COMPLEX final expression 240!ERROR: DO controls should be INTEGER 241 DO ivar = 1, cvar, 3 242 PRINT *, "ivar is: ", ivar 243 END DO 244 245! Invalid final expression 246!ERROR: Integer literal is too large for INTEGER(KIND=4) 247 DO ivar = 1, -2147483648_4, 3 248 PRINT *, "ivar is: ", ivar 249 END DO 250 251! Step expression 252! REAL step expression 253 DO ivar = 1, 10, rvar 254 PRINT *, "ivar is: ", ivar 255 END DO 256 257! DOUBLE PRECISION step expression 258 DO ivar = 1, 10, dvar 259 PRINT *, "ivar is: ", ivar 260 END DO 261 262! Pointer to INTEGER step expression 263 DO ivar = 1, 10, pivar 264 PRINT *, "ivar is: ", ivar 265 END DO 266 267! Pointer to REAL step expression 268 DO ivar = 1, 10, prvar 269 PRINT *, "ivar is: ", ivar 270 END DO 271 272! Pointer to DOUBLE PRECISION step expression 273 DO ivar = 1, 10, pdvar 274 PRINT *, "ivar is: ", ivar 275 END DO 276 277! COMPLEX Step expression 278!ERROR: DO controls should be INTEGER 279 DO ivar = 1, 10, cvar 280 PRINT *, "ivar is: ", ivar 281 END DO 282 283! Invalid step expression 284!ERROR: Integer literal is too large for INTEGER(KIND=4) 285 DO ivar = 1, 10, -2147483648_4 286 PRINT *, "ivar is: ", ivar 287 END DO 288 289END PROGRAM do_issue_458 290