re PR fortran/89724 (Fortran diagnostics give wrong line number because of math-vecto...
authorJakub Jelinek <jakub@redhat.com>
Sat, 16 Mar 2019 21:18:49 +0000 (22:18 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sat, 16 Mar 2019 21:18:49 +0000 (22:18 +0100)
PR fortran/89724
* scanner.c (load_line): Remove linenum and current_line static
variables, add warned_tabs automatic variable.  Use current_file->line
instead of current_line and warned_tabs boolean to avoid diagnosing
tabs multiple times on the same line.

* gfortran.dg/continuation_15.f90: New test.
* gfortran.dg/continuation_16.f90: New test.

From-SVN: r269734

gcc/fortran/ChangeLog
gcc/fortran/scanner.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/continuation_15.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/continuation_16.f90 [new file with mode: 0644]

index 614694a241f21be80e2c4cb405072716c44722d4..762da701b001b29fa2b5ca945abc014606e99ce0 100644 (file)
@@ -1,3 +1,11 @@
+2019-03-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/89724
+       * scanner.c (load_line): Remove linenum and current_line static
+       variables, add warned_tabs automatic variable.  Use current_file->line
+       instead of current_line and warned_tabs boolean to avoid diagnosing
+       tabs multiple times on the same line.
+
 2019-03-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/84394
index eeba2ab2ae7141c5436414dcece33e6cbdc4c7ca..e54d483baff1cf92cd9b1996f6e98f947217a36f 100644 (file)
@@ -1738,12 +1738,12 @@ gfc_gobble_whitespace (void)
 static int
 load_line (FILE *input, gfc_char_t **pbuf, int *pbuflen, const int *first_char)
 {
-  static int linenum = 0, current_line = 1;
   int c, maxlen, i, preprocessor_flag, buflen = *pbuflen;
   int trunc_flag = 0, seen_comment = 0;
   int seen_printable = 0, seen_ampersand = 0, quoted = ' ';
   gfc_char_t *buffer;
   bool found_tab = false;
+  bool warned_tabs = false;
 
   /* Determine the maximum allowed line length.  */
   if (gfc_current_form == FORM_FREE)
@@ -1793,10 +1793,10 @@ load_line (FILE *input, gfc_char_t **pbuf, int *pbuflen, const int *first_char)
            {
              if (pedantic)
                gfc_error_now ("%<&%> not allowed by itself in line %d",
-                              current_line);
+                              current_file->line);
              else
                gfc_warning_now (0, "%<&%> not allowed by itself in line %d",
-                                current_line);
+                                current_file->line);
            }
          break;
        }
@@ -1850,12 +1850,12 @@ load_line (FILE *input, gfc_char_t **pbuf, int *pbuflen, const int *first_char)
        {
          found_tab = true;
 
-         if (warn_tabs && seen_comment == 0 && current_line != linenum)
+         if (warn_tabs && seen_comment == 0 && !warned_tabs)
            {
-             linenum = current_line;
+             warned_tabs = true;
              gfc_warning_now (OPT_Wtabs,
                               "Nonconforming tab character in column %d "
-                              "of line %d", i+1, linenum);
+                              "of line %d", i + 1, current_file->line);
            }
 
          while (i < 6)
@@ -1934,7 +1934,6 @@ next_char:
 
   *buffer = '\0';
   *pbuflen = buflen;
-  current_line++;
 
   return trunc_flag;
 }
index d52a64847b2852d8b521943be516615e2bc6a3a2..905791df7cb671e4ed29bb72b71fa873a1f96b2d 100644 (file)
@@ -1,3 +1,9 @@
+2019-03-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/89724
+       * gfortran.dg/continuation_15.f90: New test.
+       * gfortran.dg/continuation_16.f90: New test.
+
 2019-03-16  John David Anglin  <danglin@gcc.gnu.org>
 
        * g++.dg/cpp0x/pr84497.C: Restore dg-require-weak.
diff --git a/gcc/testsuite/gfortran.dg/continuation_15.f90 b/gcc/testsuite/gfortran.dg/continuation_15.f90
new file mode 100644 (file)
index 0000000..ad9dc65
--- /dev/null
@@ -0,0 +1,9 @@
+! PR fortran/89724
+! { dg-do compile }
+! { dg-options "-std=f95" }
+
+include 'continuation_9.f90'
+
+! { dg-warning "not allowed by itself in line 3" "" { target *-*-* } 0 }
+! { dg-warning "not allowed by itself in line 4" "" { target *-*-* } 0 }
+! { dg-warning "not allowed by itself in line 5" "" { target *-*-* } 0 }
diff --git a/gcc/testsuite/gfortran.dg/continuation_16.f90 b/gcc/testsuite/gfortran.dg/continuation_16.f90
new file mode 100644 (file)
index 0000000..56d2bbe
--- /dev/null
@@ -0,0 +1,10 @@
+! PR fortran/89724
+! { dg-do compile }
+! { dg-options "-std=f95 -nostdinc -fpre-include=simd-builtins-1.h" }
+  &  
+&
+ &
+end
+! { dg-warning "not allowed by itself in line 4" "" { target *-*-* } 0 }
+! { dg-warning "not allowed by itself in line 5" "" { target *-*-* } 0 }
+! { dg-warning "not allowed by itself in line 6" "" { target *-*-* } 0 }