re PR fortran/66039 (ICE on incomplete parentheses at rewind, flush, endfile, backspace)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Mon, 18 May 2015 21:04:33 +0000 (21:04 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Mon, 18 May 2015 21:04:33 +0000 (21:04 +0000)
2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/66039
* io.c (match_filepos): Check for incomplete/mangled REWIND, FLUSH,
BACKSPACE, and ENDFILE statements

2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/66039
* gfortran.dg/filepos1.f90: New test

From-SVN: r223315

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

index 6913d881b0941e57745b2523f0f09958baa09f6f..a5d4d22df5d7adb1a55eecc9034e2e1d4a68a339 100644 (file)
@@ -1,3 +1,9 @@
+2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/66039
+       * io.c (match_filepos): Check for incomplete/mangled REWIND, FLUSH,
+       BACKSPACE, and ENDFILE statements
+
 2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/64925
index 82a0a871fd31ae074d4f2374936369a89fc5cdc2..0ac4f4a03adb6cb565649fc787d17b3d2bd452af 100644 (file)
@@ -2382,9 +2382,7 @@ match_filepos (gfc_statement st, gfc_exec_op op)
   if (m == MATCH_NO)
     {
       m = gfc_match_expr (&fp->unit);
-      if (m == MATCH_ERROR)
-       goto done;
-      if (m == MATCH_NO)
+      if (m == MATCH_ERROR || m == MATCH_NO)
        goto syntax;
     }
 
index 593427cdbf085b0ee84cdeb5084d84449b7e1150..3dd2d94ececa2e45d4e2385dbf008a75fdf29b8a 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/66039
+       * gfortran.dg/filepos1.f90: New test
+
 2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/64925
diff --git a/gcc/testsuite/gfortran.dg/filepos1.f90 b/gcc/testsuite/gfortran.dg/filepos1.f90
new file mode 100644 (file)
index 0000000..d34902a
--- /dev/null
@@ -0,0 +1,25 @@
+! { dg-do compile }
+! PR fortran/66039
+!
+! Original code from Gerhard Steinmetz
+! <gerhard dot steinmetz dot fortran at t-online dot de>
+subroutine p1
+   rewind ((     ! { dg-error "Syntax error in REWIND" }
+   rewind (-     ! { dg-error "Syntax error in REWIND" }
+end subroutine p1
+
+subroutine p2
+   flush ((      ! { dg-error "Syntax error in FLUSH" }
+   flush (-      ! { dg-error "Syntax error in FLUSH" }
+end subroutine p2
+
+subroutine p4
+   backspace ((   ! { dg-error "Syntax error in BACKSPACE" }
+   backspace (-   ! { dg-error "Syntax error in BACKSPACE" }
+end subroutine p4
+
+subroutine p3
+   endfile ((     ! { dg-error "Expecting END SUBROUTINE" }
+   endfile (-     ! { dg-error "Expecting END SUBROUTINE" }
+end subroutine p3
+