Hi all, The following patch regression tested on x86-64. The ICE is from an attempt to free a bad expression after a MATCH_ERROR is returned. I have not been able to identify an exact cause, there being numerous matchers involved attempting to match the logical expression.
Regardless, it is an error on invalid so I suggest we commit this patch and close the PR. I dont think its a regression as marked in bugzilla. I see the the internal error as far back as 4.5. If someone has an earlier build and can see where this does not occur, please let me know. (In case I missed something. The results of the patch gives the following: $ gfc s.f s.f:4:9: if ( x(1) < 0 .or. 1 Error: Can not process after the IF statement shown at (1) f951: Error: Unexpected end of file in ‘s.f’ OK for trunk? Regards, Jerry 2016-05-18 Jerry DeLisle <jvdeli...@gcc.gnu.org> PR fortran/66461 * match.c (gfc_match_if): Catch unxpected MATCH_ERROR and issue an error message. diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index f3a4a43..85e6f92 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -1560,7 +1560,16 @@ gfc_match_if (gfc_statement *if_type) if (m == MATCH_ERROR) return MATCH_ERROR; - gfc_match (" if ( %e ) ", &expr); /* Guaranteed to match. */ + m = gfc_match (" if ( %e ) ", &expr); /* Not always guaranteed to match. */ + + if (m == MATCH_ERROR) + { + /* Under some invalid conditions like unexpected end of file, one + can get an error in the match. We bail out here and hope for + the best (the best being an error reported somewhere else). */ + gfc_error ("Can not process after the IF statement shown at %C"); + return MATCH_ERROR; + } m = gfc_match_pointer_assignment (); if (m == MATCH_YES)