re PR fortran/65903 (Line continuation followed by comment character in string fails...
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 16 May 2015 17:44:15 +0000 (17:44 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 16 May 2015 17:44:15 +0000 (17:44 +0000)
2015-05-16  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR fortran/65903
* io.c (format_lex): Change to NONSTRING when checking for
possible doubled quote.
* scanner.c (gfc_next_char_literal): Revert change from 64506
and add a check for quotes and return.

From-SVN: r223248

gcc/fortran/ChangeLog
gcc/fortran/io.c
gcc/fortran/scanner.c

index 002a147ce62f94130fa8fb4edf8bcf4460d2e87c..dcdf95e36c341020a2c125d797a8d5459f19dd4b 100644 (file)
@@ -1,3 +1,11 @@
+2015-05-16  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/65903
+       * io.c (format_lex): Change to NONSTRING when checking for
+       possible doubled quote.
+       * scanner.c (gfc_next_char_literal): Revert change from 64506
+       and add a check for quotes and return.
+
 2015-05-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/66113
index 7ba6b092e983593d17609c93ad3862f59d76b76a..82a0a871fd31ae074d4f2374936369a89fc5cdc2 100644 (file)
@@ -385,7 +385,7 @@ format_lex (void)
 
          if (c == delim)
            {
-             c = next_char (INSTRING_NOWARN);
+             c = next_char (NONSTRING);
 
              if (c == '\0')
                {
index 55b36250cf5a25d9ba5a9cef97ca161a672692b7..e5243457ad008faed7ac8f8be195db23c5f58dac 100644 (file)
@@ -1272,21 +1272,11 @@ restart:
         are still in a string and we are looking for a possible
         doubled quote and we end up here. See PR64506.  */
 
-      if (in_string)
+      if (in_string && c != '\n')
        {
          gfc_current_locus = old_loc;
-
-         if (c == '!')
-           {
-             skip_comment_line ();
-             goto restart;
-           }
-
-         if (c != '\n')
-           {
-             c = '&';
-             goto done;
-           }
+         c = '&';
+         goto done;
        }
 
       if (c != '!' && c != '\n')
@@ -1392,6 +1382,8 @@ restart:
                             "Missing %<&%> in continued character "
                             "constant at %C");
            }
+         else if (!in_string && (c == '\'' || c == '"'))
+             goto done;
          /* Both !$omp and !$ -fopenmp continuation lines have & on the
             continuation line only optionally.  */
          else if (openmp_flag || openacc_flag || openmp_cond_flag)