[Bug fortran/42131] Weird translation of DO loops

toon at moene dot org gcc-bugzilla@gcc.gnu.org
Sat Nov 21 17:33:00 GMT 2009



------- Comment #2 from toon at moene dot org  2009-11-21 17:33 -------
Sorry, Steve - my mistake.

The original message should have been:

To illustrate this with a simple example:

DO I = M1, M2, M3
   B(I) = A(I)
ENDDO

would be most easily, and straightforwardly, implemented as follows:

     IF (M3 > 0 .AND. M1 > M2) GOTO 200  ! Loop executed zero times
     IF (M3 < 0 .AND. M1 < M2) GOTO 200  ! Ditto
     ITEMP = (M2 - M1 + M3) / M3         ! Temporary loop counter
     I     = M1
 100 CONTINUE
     B(I)  = A(I)
     ITEMP = ITEMP - 1                   ! Adjust internal loop counter
     I     = I + M3                      ! Adjust DO loop variable
     IF (ITEMP >= 0) GOTO 100
 200 CONTINUE

I hope this makes clear what's weird about the way the Fortran Frontend does it
now.  The example code follows the Standard as close as possible (it only
doesn't check that m3 isn't zero, which isn't allowed), except that I follow
Note 8.7 instead of the reasoning in the "sequence of steps".


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42131



More information about the Gcc-bugs mailing list