re PR fortran/82620 ([PDT] ICE: free_expr0(): Bad expr type (at fortran/expr.c:497))
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 28 Oct 2017 01:06:18 +0000 (01:06 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 28 Oct 2017 01:06:18 +0000 (01:06 +0000)
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.

From-SVN: r254193

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

index 295704adc6eb05f791336da47f70e1fadbe43cc9..a871fc28a4f6b938db1ad11f59ad680868bbe2e6 100644 (file)
@@ -1,3 +1,8 @@
+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  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/56342
index 624fdf55db1d84ac28a8d582fbbac208c9bbbdc3..dcabe269e61aa36f43482bd012d1d9c13c23bd4e 100644 (file)
@@ -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 7a90a8d5af349890083ac3acd437ad269ce2df09..e4e6ee181e46035226cfd7af75a0867523e6390d 100644 (file)
@@ -1,3 +1,8 @@
+2017-10-27  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/82620
+       * gfortran.dg/allocate_error_7.f90: new test.
+
 2017-10-27  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/82218
diff --git a/gcc/testsuite/gfortran.dg/allocate_error_7.f90 b/gcc/testsuite/gfortran.dg/allocate_error_7.f90
new file mode 100644 (file)
index 0000000..f1c8bc3
--- /dev/null
@@ -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