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 <ka...@gcc.gnu.org> PR fortran/82620 * match.c (gfc_match_allocate): Exit early on syntax error. 2017-10-27 Steven G. Kargl <ka...@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