aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/scanner.c
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2015-02-13 16:57:28 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2015-02-13 16:57:28 +0000
commit0d6fc9638b39460b22ada23ab8f07d873ccf6212 (patch)
treeac9e6643f4a6e2e3205743e8c92ba2fc2d5db2bf /gcc/fortran/scanner.c
parent1f261e64a380c3200c811cf385928d135a8f77e5 (diff)
downloadgcc-0d6fc9638b39460b22ada23ab8f07d873ccf6212.zip
gcc-0d6fc9638b39460b22ada23ab8f07d873ccf6212.tar.gz
gcc-0d6fc9638b39460b22ada23ab8f07d873ccf6212.tar.bz2
re PR fortran/64506 (FORMAT Parse Error with Continuation Line)
2015-02-13 Jerry DeLisle <jvdelisle@gcc.gnu.org> 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
Diffstat (limited to 'gcc/fortran/scanner.c')
-rw-r--r--gcc/fortran/scanner.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index 4389880..f0e6404 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