[Bug fortran/45186] [4.6 Regression] Gfortran 4.5.0 emits wrong linenumbers

burnus at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Thu Sep 9 19:33:00 GMT 2010



------- Comment #18 from burnus at gcc dot gnu dot org  2010-09-09 19:33 -------
(In reply to comment #0)
> This is pretty widespread. I have attached one example

That's now mostly fixed - though one patch is pending. Now
  gfortran -fdump-tree-original-lineno
generates mostly sensible line numbers.

For the given example, only for the DO loop the line numbers are a bit counter
intuitive, given the line numbers
    14    do i = 1,10
    15       array1(i) = i
    16    end do

the dump of the internal representation (shown in a C-like syntax) is:

  [debug.f90 : 14] i = 1;
  [debug.f90 : 15] if ([debug.f90 : 15] i <= 10)
...
         [debug.f90 : 15] array1[[debug.f90 : 15] (integer(kind=8)) i + -1] =
i;
         L.1:;
         [debug.f90 : 15] D.1577 = [debug.f90 : 15] i == 10;
         [debug.f90 : 15] i = [debug.f90 : 15] i + 1;
         [debug.f90 : 15] if (D.1577) goto L.2;

The "i = 1" is in the expected line - as is the "array1(i) = i" assignment, but
the loop increment and the exit conditions I would expect in line 14 and not in
line 15.

If no one else does, I will have a look after the last "input_location" patch
has been committed. I expect that there are more cases where the annotation is
slightly misplaced.


If one looks at GCC 4.4, one finds:
  [debug.f90 : 14] i = 1;
  [debug.f90 : 14] if (i <= 10)
         [debug.f90 : 15] array1[(integer(kind=8)) i + -1] = i;
         L.1:;
         D.1550 = i == 10;
         i = i + 1;
         if (D.1550) goto L.2;

Thus, the first loop condition is in the proper line (14) while there is no
line number associated with the loop increment and the exit condition.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45186



More information about the Gcc-bugs mailing list