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]

[PATCH,committed] PR fortran/82620 -- fix detection of syntax error


I've committed the following patch to fix a problem
where gfortran ICEs after detection of a syntax 
error in an allocate statement.  The patch was
regression tested on x86_64-*-freebsd.

                === gfortran Summary ===

# of expected passes            46027
# of expected failures          97
# of unsupported tests          82
/mnt/sgk/gcc/obj/gcc/gfortran  version 8.0.0 20171028 (experimental) (GCC) 


2017-10-27  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/82620
	* match.c (gfc_match_allocate): Exit early on syntax error.

2017-10-27  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/82620
	* gfortran.dg/allocate_error_7.f90: new test.

-- 
Steve
20170425 https://www.youtube.com/watch?v=VWUpyCsUKR4
20161221 https://www.youtube.com/watch?v=IbCHE-hONow
Index: gcc/fortran/match.c
===================================================================
--- gcc/fortran/match.c	(revision 254192)
+++ gcc/fortran/match.c	(working copy)
@@ -3968,7 +3968,10 @@ gfc_match_allocate (void)
   saw_stat = saw_errmsg = saw_source = saw_mold = saw_deferred = false;
 
   if (gfc_match_char ('(') != MATCH_YES)
-    goto syntax;
+    {
+      gfc_syntax_error (ST_ALLOCATE);
+      return MATCH_ERROR;
+    }
 
   /* Match an optional type-spec.  */
   old_locus = gfc_current_locus;
Index: gcc/testsuite/gfortran.dg/allocate_error_7.f90
===================================================================
--- gcc/testsuite/gfortran.dg/allocate_error_7.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/allocate_error_7.f90	(working copy)
@@ -0,0 +1,12 @@
+! { dg-do compile }
+!
+! Code contributed by Gerhard Steinmetz
+!
+program pr82620
+   type t(a)
+      integer, len :: a
+   end type
+   type(t(:)), allocatable :: x, y
+   allocate(t(4) :: x)
+   allocate)t(7) :: y)     ! { dg-error "Syntax error in ALLOCATE" }
+end program pr82620

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