This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PR14066 Allow infinite loops with label-do-stmt



This is a followup to the first patch I ever submitted to g95 4 years ago. Unfortunately I missed the necessity of allowing infinite loops with a label, e.g.
do 10
10 end do


This patch fixes this. Patch & compile testcase below. Bootstrapped and regtested on i686-pc-linux-gnu. This also passed Steve Kargl's testsuite without introducing new failures.

- Tobi

2004-05-08 Tobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>

	PR fortran/14066
	* match.c (gfc_match_do): Allow infinite loops with
	label-do-stmt.

! test various forms of the DO statement
! inspired by PR14066
LOGICAL L
DO i=1,10
END DO
DO 10 i=1,20
   DO 20 j=1,10,2
20 CONTINUE
10 END DO
L = .TRUE.
DO WHILE(L)
   L = .FALSE.
END DO
DO 50 WHILE(.NOT.L)
   L = .TRUE.
50 CONTINUE
DO
   DO 30
      DO 40
40    CONTINUE
30 END DO
END DO
outer: DO i=1,20
   inner: DO j=i,30
      IF (j.EQ.2*i) CYCLE outer
   END DO inner
END DO outer
END


Index: match.c =================================================================== RCS file: /cvsroot/gcc/gcc/gcc/fortran/Attic/match.c,v retrieving revision 1.1.2.8 diff -u -p -r1.1.2.8 match.c --- match.c 11 Jan 2004 15:21:50 -0000 1.1.2.8 +++ match.c 8 May 2004 11:47:51 -0000 @@ -1202,6 +1210,10 @@ gfc_match_do (void) if (gfc_match (" do") != MATCH_YES) return MATCH_NO;

+  m = gfc_match_st_label (&label, 0);
+  if (m == MATCH_ERROR)
+    goto cleanup;
+
 /* Match an infinite DO, make it like a DO WHILE(.TRUE.) */

   if (gfc_match_eos () == MATCH_YES)
@@ -1211,10 +1223,6 @@ gfc_match_do (void)
       goto done;
     }

-  m = gfc_match_st_label (&label, 0);
-  if (m == MATCH_ERROR)
-    goto cleanup;
-
   gfc_match_char (',');

if (gfc_match ("% ") != MATCH_YES)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]