Re: compiler bug turning up in cmake package?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Matthew Woehlke wrote:
. CC'ing gcc-help one last time so those folk know it's resolved, but
I imagine we can drop them from any future correspondence.
Maybe gcc-help should get a bit more of a comment on the small "almost a
bug" that caused the fault on line 888 to be misreported as line 787.
In general in optimized code there is no way to correctly match machine
instructions to source lines. But in this particular case, a bit more
book keeping in GCC could have matched it.
The optimizer has almost fully merged the this->Internal->GetFileType()
calls on lines 787, 887 and 888.
The machine instruction at _ZN5cmELF8GetRPathEv+15 is actually all three
of those and thus cannot be correctly tied to its source line.
But the machine instruction at _ZN5cmELF8GetRPathEv+80 (the one that
faulted) represents only line 888 (and in fact only when 888 is reached
without executing 887). That instruction could be attributed correctly
to source line 888 rather than incorrectly to 787.
I assume (without digging into the relevant gcc source code) that in the
process of merging the this->Internal->GetFileType() on line 888 with
the one on 787 and then unmerging the two paths into line 888, gcc has
lost track of the fact that one path into 888 is not actually merged
with 787.
While it is impossible to consistently attribute such faults to the
correct source line, it is always nicer to correctly attribute the ones
that could be correctly attributed.
Also, where the optimizer has done enough data flow analysis (as it must
have to rearrange this way) to know for certain that a particular
machine instruction will always be dereferencing null, maybe there ought
to be some warning or other special behavior. (Line 888 doesn't always
dereference null, but once the two paths to 888 have been split, there
is machine code generated that the optimizer should know must fault).
[Index of Archives]
[Linux C Programming]
[Linux Kernel]
[eCos]
[Fedora Development]
[Fedora Announce]
[Autoconf]
[The DWARVES Debugging Tools]
[Yosemite Campsites]
[Yosemite News]
[Linux GCC]