[patch] Fix bogus source locations with optimization
Eric Botcazou
ebotcazou@adacore.com
Mon Mar 28 09:08:00 GMT 2011
Hi,
when optimization is enabled, especially -O2 and above, you can have lines in
the assembly file with really bogus source location info. The scenario is as
follows: an optimization pass at the Tree level (typically PRE) creates a new
statement and inserts it at some place in the dominator tree, creating a new
basic block; this statement is (rightfully) given "unknown" location. When
RTL is being expanded, this statement inherits the current source location,
which is the location of the last statement of the previous basic block. Then
basic block reordering kicks in and the statement is moved to another place,
still carrying the inherited source location down to the assembly file.
The proposed fix is to allow RTL statements to have "unknown" location ("zero"
locator) like Tree statements. They of course will be assigned the current
source location but only in the assembly file, thus becoming sort of silent.
Tested on {i586,x86_64}-suse-linux, OK for the mainline?
2011-03-28 Eric Botcazou <ebotcazou@adacore.com>
* cfgexpand.c (expand_gimple_cond): Always set the source location and
block before expanding the statement.
(expand_gimple_stmt_1): Likewise. Set them here...
(expand_gimple_stmt): ...and not here. Tidy.
* cfglayout.c (curr_insn_locator): Return 0 if the current location is
unknown.
--
Eric Botcazou
-------------- next part --------------
A non-text attachment was scrubbed...
Name: p.diff
Type: text/x-diff
Size: 2783 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20110328/93f3e59c/attachment.bin>
More information about the Gcc-patches
mailing list