From 0d6fc9638b39460b22ada23ab8f07d873ccf6212 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Fri, 13 Feb 2015 16:57:28 +0000 Subject: [PATCH] re PR fortran/64506 (FORMAT Parse Error with Continuation Line) 2015-02-13 Jerry DeLisle PR fortran/64506 * scanner.c (gfc_next_char_literal): For free form source, check for '!' and if found, clear the comment and go back and get the next character. For fixed form source, skip the rest of the line. From-SVN: r220687 --- gcc/fortran/ChangeLog | 8 ++++++++ gcc/fortran/scanner.c | 22 +++++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index bff0cb6454a..b6dd48089e9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2015-02-13 Jerry DeLisle + + PR fortran/64506 + * scanner.c (gfc_next_char_literal): For free form source, + check for '!' and if found, clear the comment and go back + and get the next character. For fixed form source, skip the + rest of the line. + 2015-02-12 Paul Thomas PR fortran/64932 diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index 4389880b3b7..f0e6404c625 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -1268,13 +1268,25 @@ restart: c = next_char (); /* Character constants to be continued cannot have commentary - after the '&'. */ + after the '&'. However, there are cases where we may think we + are still in a string and we are looking for a possible + doubled quote and we end up here. See PR64506. */ - if (in_string && c != '\n') + if (in_string) { gfc_current_locus = old_loc; - c = '&'; - goto done; + + if (c == '!') + { + skip_comment_line (); + goto restart; + } + + if (c != '\n') + { + c = '&'; + goto done; + } } if (c != '!' && c != '\n') @@ -1395,7 +1407,7 @@ restart: else /* Fixed form. */ { /* Fixed form continuation. */ - if (!in_string && c == '!') + if (in_string != INSTRING_WARN && c == '!') { /* Skip comment at end of line. */ do -- 2.30.2