307 lines · plain
1! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic2!3! C1120 -- DO variable (and associated expressions) must be INTEGER.4! This is extended by allowing REAL and DOUBLE PRECISION5!6! The standard requires the DO variable and the initial, final, and step7! expressions to be INTEGER. As an extension, we do however allow them to be8! REAL or DOUBLE PRECISION. This test turns on the option for standard9! conformance checking to test that we get portability warnings for these10! cases. We also check that other types, such as CHARACTER and LOGICAL, yield11! errors when used in the DO controls.12 13MODULE share14 INTEGER :: intvarshare15 REAL :: realvarshare16 DOUBLE PRECISION :: dpvarshare17END MODULE share18 19PROGRAM do_issue_45820 USE share21 IMPLICIT NONE22 INTEGER :: ivar23 REAL :: rvar24 DOUBLE PRECISION :: dvar25 LOGICAL :: lvar26 COMPLEX :: cvar27 CHARACTER :: chvar28 INTEGER, DIMENSION(3) :: avar29 TYPE derived30 REAL :: first31 INTEGER :: second32 END TYPE derived33 TYPE(derived) :: devar34 INTEGER, POINTER :: pivar35 REAL, POINTER :: prvar36 DOUBLE PRECISION, POINTER :: pdvar37 LOGICAL, POINTER :: plvar38 INTERFACE39 SUBROUTINE sub()40 END SUBROUTINE sub41 FUNCTION ifunc()42 END FUNCTION ifunc43 END INTERFACE44 PROCEDURE(ifunc), POINTER :: pifunc => NULL()45 46! DO variables47! INTEGER DO variable48 DO ivar = 1, 10, 349 PRINT *, "ivar is: ", ivar50 END DO51 52! REAL DO variable53!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]54 DO rvar = 1, 10, 355 PRINT *, "rvar is: ", rvar56 END DO57 58! DOUBLE PRECISISON DO variable59!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]60 DO dvar = 1, 10, 361 PRINT *, "dvar is: ", dvar62 END DO63 64! Pointer to INTEGER DO variable65 ALLOCATE(pivar)66 DO pivar = 1, 10, 367 PRINT *, "pivar is: ", pivar68 END DO69 70! Pointer to REAL DO variable71 ALLOCATE(prvar)72!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]73 DO prvar = 1, 10, 374 PRINT *, "prvar is: ", prvar75 END DO76 77! Pointer to DOUBLE PRECISION DO variable78 ALLOCATE(pdvar)79!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]80 DO pdvar = 1, 10, 381 PRINT *, "pdvar is: ", pdvar82 END DO83 84! CHARACTER DO variable85!ERROR: DO controls should be INTEGER86 DO chvar = 1, 10, 387 PRINT *, "chvar is: ", chvar88 END DO89 90! LOGICAL DO variable91!ERROR: DO controls should be INTEGER92 DO lvar = 1, 10, 393 PRINT *, "lvar is: ", lvar94 END DO95 96! COMPLEX DO variable97!ERROR: DO controls should be INTEGER98 DO cvar = 1, 10, 399 PRINT *, "cvar is: ", cvar100 END DO101 102! Derived type DO variable103!ERROR: DO controls should be INTEGER104 DO devar = 1, 10, 3105 PRINT *, "devar is: ", devar106 END DO107 108! Pointer to LOGICAL DO variable109 ALLOCATE(plvar)110!ERROR: DO controls should be INTEGER111 DO plvar = 1, 10, 3112 PRINT *, "plvar is: ", plvar113 END DO114 115! SUBROUTINE DO variable116!ERROR: DO control must be an INTEGER variable117 DO sub = 1, 10, 3118 PRINT *, "ivar is: ", ivar119 END DO120 121! FUNCTION DO variable122!ERROR: DO control must be an INTEGER variable123 DO ifunc = 1, 10, 3124 PRINT *, "ivar is: ", ivar125 END DO126 127! POINTER to FUNCTION DO variable128!ERROR: DO control must be an INTEGER variable129 DO pifunc = 1, 10, 3130 PRINT *, "ivar is: ", ivar131 END DO132 133! Array DO variable134!ERROR: Must be a scalar value, but is a rank-1 array135 DO avar = 1, 10, 3136 PRINT *, "plvar is: ", plvar137 END DO138 139! Undeclared DO variable140!ERROR: No explicit type declared for 'undeclared'141 DO undeclared = 1, 10, 3142 PRINT *, "plvar is: ", plvar143 END DO144 145! Shared association INTEGER DO variable146 DO intvarshare = 1, 10, 3147 PRINT *, "ivar is: ", ivar148 END DO149 150! Shared association REAL DO variable151!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]152 DO realvarshare = 1, 10, 3153 PRINT *, "ivar is: ", ivar154 END DO155 156! Shared association DOUBLE PRECISION DO variable157!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]158 DO dpvarshare = 1, 10, 3159 PRINT *, "ivar is: ", ivar160 END DO161 162! Initial expressions163! REAL initial expression164!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]165 DO ivar = rvar, 10, 3166 PRINT *, "ivar is: ", ivar167 END DO168 169! DOUBLE PRECISION initial expression170!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]171 DO ivar = dvar, 10, 3172 PRINT *, "ivar is: ", ivar173 END DO174 175! Pointer to INTEGER initial expression176 DO ivar = pivar, 10, 3177 PRINT *, "ivar is: ", ivar178 END DO179 180! Pointer to REAL initial expression181!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]182 DO ivar = prvar, 10, 3183 PRINT *, "ivar is: ", ivar184 END DO185 186! Pointer to DOUBLE PRECISION initial expression187!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]188 DO ivar = pdvar, 10, 3189 PRINT *, "ivar is: ", ivar190 END DO191 192! LOGICAL initial expression193!ERROR: DO controls should be INTEGER194 DO ivar = lvar, 10, 3195 PRINT *, "ivar is: ", ivar196 END DO197 198! COMPLEX initial expression199!ERROR: DO controls should be INTEGER200 DO ivar = cvar, 10, 3201 PRINT *, "ivar is: ", ivar202 END DO203 204! Derived type initial expression205!ERROR: DO controls should be INTEGER206 DO ivar = devar, 10, 3207 PRINT *, "ivar is: ", ivar208 END DO209 210! Pointer to LOGICAL initial expression211!ERROR: DO controls should be INTEGER212 DO ivar = plvar, 10, 3213 PRINT *, "ivar is: ", ivar214 END DO215 216! Invalid initial expression217!ERROR: Integer literal is too large for INTEGER(KIND=4)218 DO ivar = -2147483649_4, 10, 3219 PRINT *, "ivar is: ", ivar220 END DO221 222! Final expression223! REAL final expression224!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]225 DO ivar = 1, rvar, 3226 PRINT *, "ivar is: ", ivar227 END DO228 229! DOUBLE PRECISION final expression230!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]231 DO ivar = 1, dvar, 3232 PRINT *, "ivar is: ", ivar233 END DO234 235! Pointer to INTEGER final expression236 DO ivar = 1, pivar, 3237 PRINT *, "ivar is: ", ivar238 END DO239 240! Pointer to REAL final expression241!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]242 DO ivar = 1, prvar, 3243 PRINT *, "ivar is: ", ivar244 END DO245 246! Pointer to DOUBLE PRECISION final expression247!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]248 DO ivar = pdvar, 10, 3249 PRINT *, "ivar is: ", ivar250 END DO251 252! COMPLEX final expression253!ERROR: DO controls should be INTEGER254 DO ivar = 1, cvar, 3255 PRINT *, "ivar is: ", ivar256 END DO257 258! Invalid final expression259!ERROR: Integer literal is too large for INTEGER(KIND=4)260 DO ivar = 1, -2147483649_4, 3261 PRINT *, "ivar is: ", ivar262 END DO263 264! Step expression265! REAL step expression266!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]267 DO ivar = 1, 10, rvar268 PRINT *, "ivar is: ", ivar269 END DO270 271! DOUBLE PRECISION step expression272!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]273 DO ivar = 1, 10, dvar274 PRINT *, "ivar is: ", ivar275 END DO276 277! Pointer to INTEGER step expression278 DO ivar = 1, 10, pivar279 PRINT *, "ivar is: ", ivar280 END DO281 282! Pointer to REAL step expression283!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]284 DO ivar = 1, 10, prvar285 PRINT *, "ivar is: ", ivar286 END DO287 288! Pointer to DOUBLE PRECISION step expression289!PORTABILITY: DO controls should be INTEGER [-Wreal-do-controls]290 DO ivar = 1, 10, pdvar291 PRINT *, "ivar is: ", ivar292 END DO293 294! COMPLEX Step expression295!ERROR: DO controls should be INTEGER296 DO ivar = 1, 10, cvar297 PRINT *, "ivar is: ", ivar298 END DO299 300! Invalid step expression301!ERROR: Integer literal is too large for INTEGER(KIND=4)302 DO ivar = 1, 10, -2147483649_4303 PRINT *, "ivar is: ", ivar304 END DO305 306END PROGRAM do_issue_458307