]> gcc.gnu.org Git - gcc.git/commitdiff
re PR fortran/17708 (gfortran problem with goto inside loop)
authorTobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>
Mon, 4 Oct 2004 21:05:07 +0000 (23:05 +0200)
committerTobias Schlüter <tobi@gcc.gnu.org>
Mon, 4 Oct 2004 21:05:07 +0000 (23:05 +0200)
fortran/
PR fortran/17708
* parse.c (accept_statement): Don't treat END DO like END IF and
END SELECT.
(parse_do_block): Generate possible END DO label inside END DO
block.

also, added ChangeLog entry for previous commit.

testsuite/
PR fortran/17708
* gfortran.dg/pr17708.f90: New test.

From-SVN: r88529

gcc/fortran/ChangeLog
gcc/fortran/parse.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr17708.f90 [new file with mode: 0644]

index c0b6d151a327e5f76e3083de93100b5400755257..249e1129b3d054cc4a379e5db0673356ff68bbf3 100644 (file)
        * iresolve.c (gfc_resolve_mvbits): New function.
        (gfc_resolve_random_number): Remove empty line at end of function.
 
+       * trans-const.c (gfc_build_cstring_const): New function.
+       (gfc_init_cst): Use new function.
+       * trans-const.h (gfc_build_cstring_const): Add prototype.
+       * trans-io.c (set_string, set_error_locus): Use new function.
+       * trans-stmt.c (gfc_trans_goto): Use new function.
+       
+       PR fortran/17708
+       * parse.c (accept_statement): Don't treat END DO like END IF and
+       END SELECT.
+       (parse_do_block): Generate possible END DO label inside END DO
+       block.
+
+       
 2004-10-04  Erik Schnetter  <schnetter@aei.mpg.de>
 
        * scanner.c (preprocessor_line): Accept preprocessor lines without
index cfcbee901f777d0b942399e1f9ba33b186279fcf..6f88aba18a3e1c4b6cf2dcd1e6d71d21d251e7d6 100644 (file)
@@ -1033,7 +1033,6 @@ accept_statement (gfc_statement st)
          construct.  */
 
     case ST_ENDIF:
-    case ST_ENDDO:
     case ST_END_SELECT:
       if (gfc_statement_label != NULL)
        {
@@ -2003,7 +2002,13 @@ loop:
          && s.ext.end_do_label != gfc_statement_label)
        gfc_error_now
          ("Statement label in ENDDO at %C doesn't match DO label");
-      /* Fall through */
+
+      if (gfc_statement_label != NULL)
+       {
+         new_st.op = EXEC_NOP;
+         add_statement ();
+       }
+      break;
 
     case ST_IMPLIED_ENDDO:
       break;
index 6bb5309db71f16dcc92dd392bb7cdf380bd42ab9..a4575e94d3ab1794d1c7697e13c769a6307c67f5 100644 (file)
@@ -6,6 +6,9 @@
        PR fortran/17631
        * gfortran.fortran-torture/execute/intrinsic_mvbits.f90: New test.
 
+       PR fortran/17708
+       * gfortran.dg/pr17708.f90: New test.
+       
 2004-10-04  Chao-ying Fu  <fu@mips.com>
 
        * gcc.dg/vect/pr16105.c: Enable for mipsisa64*-*-*.
diff --git a/gcc/testsuite/gfortran.dg/pr17708.f90 b/gcc/testsuite/gfortran.dg/pr17708.f90
new file mode 100644 (file)
index 0000000..7485da8
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do run }
+      program test
+        j = 0
+        do 10 i=1,3
+           if(i == 2) goto 10 ! { dg-warning "" "" }
+           j = j+1
+10      enddo
+        if (j/=2) call abort
+      end
This page took 0.094796 seconds and 5 git commands to generate.