Fortran] PR91253 fix continuation-line handling with -pre_include
authorTobias Burnus <tobias@codesourcery.com>
Fri, 8 Nov 2019 08:14:40 +0000 (09:14 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Fri, 8 Nov 2019 08:14:40 +0000 (09:14 +0100)
        PR fortran/91253
        * scanner.c (skip_fixed_comments): Move comment
        lines to next if block.
        (gfc_next_char_literal): Fix continue_line setting.
        (get_file): Remove bogus ATTRIBUTE_UNUSED.

From-SVN: r277948

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

index 5023949d528a6cd2a9cc88c7642500cebb69521b..f13444f00117b9a361fd224de8449d8e10ff9a41 100644 (file)
@@ -1,3 +1,11 @@
+2019-11-08  Tobias Burnus  <tobias@codesourcery.com
+
+       PR fortran/91253
+       * scanner.c (skip_fixed_comments): Move comment
+       lines to next if block.
+       (gfc_next_char_literal): Fix continue_line setting.
+       (get_file): Remove bogus ATTRIBUTE_UNUSED.
+
 2019-11-06  Jerry DeLisle  <jvdelisle@gcc.ngu.org>
 
        PR fortran/90374
index e54d483baff1cf92cd9b1996f6e98f947217a36f..40c06b6b67432091c8db9c322b8685a89d99643e 100644 (file)
@@ -1050,6 +1050,10 @@ skip_fixed_comments (void)
              return;
            }
 
+         if (gfc_current_locus.lb != NULL
+             && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb))
+           continue_line = gfc_linebuf_linenum (gfc_current_locus.lb);
+
          /* If -fopenmp/-fopenacc, we need to handle here 2 things:
             1) don't treat !$omp/!$acc|c$omp/c$acc|*$omp / *$acc as comments, 
                but directives
@@ -1057,10 +1061,6 @@ skip_fixed_comments (void)
                !$|c$|*$ should be treated as 2 spaces if the characters
                in columns 3 to 6 are valid fixed form label columns
                characters.  */
-         if (gfc_current_locus.lb != NULL
-             && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb))
-           continue_line = gfc_linebuf_linenum (gfc_current_locus.lb);
-
          if ((flag_openmp || flag_openmp_simd) && !flag_openacc)
            {
              if (next_char () == '$')
@@ -1313,6 +1313,14 @@ restart:
       if (flag_openacc)
        prev_openacc_flag = openacc_flag;
 
+      /* This can happen if the input file changed or via cpp's #line
+        without getting reset (e.g. via input_stmt). It also happens
+        when pre-including files via -fpre-include=.  */
+      if (continue_count == 0
+         && gfc_current_locus.lb
+         && continue_line > gfc_linebuf_linenum (gfc_current_locus.lb) + 1)
+       continue_line = gfc_linebuf_linenum (gfc_current_locus.lb) + 1;
+
       continue_flag = 1;
       if (c == '!')
        skip_comment_line ();
@@ -1475,6 +1483,14 @@ restart:
       if (flag_openacc)
        prev_openacc_flag = openacc_flag;
 
+      /* This can happen if the input file changed or via cpp's #line
+        without getting reset (e.g. via input_stmt). It also happens
+        when pre-including files via -fpre-include=.  */
+      if (continue_count == 0
+         && gfc_current_locus.lb
+         && continue_line > gfc_linebuf_linenum (gfc_current_locus.lb) + 1)
+       continue_line = gfc_linebuf_linenum (gfc_current_locus.lb) + 1;
+
       continue_flag = 1;
       old_loc = gfc_current_locus;
 
@@ -1943,7 +1959,7 @@ next_char:
    the file stack.  */
 
 static gfc_file *
-get_file (const char *name, enum lc_reason reason ATTRIBUTE_UNUSED)
+get_file (const char *name, enum lc_reason reason)
 {
   gfc_file *f;