[Bug rtl-optimization/49994] [4.7 Regression] ICE: in maybe_record_trace_start, at dwarf2cfi.c:2234 with -fsched2-use-superblocks
rth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Aug 11 23:55:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49994
--- Comment #5 from Richard Henderson <rth at gcc dot gnu.org> 2011-08-11 23:54:57 UTC ---
Tricky stuff, this.
The ICE is, for the most part, valid. The transformation that
is being done in -fsched2-use-superblocks is invalid, from the
point of view of the unwind information.
That said, it's all about the presence of a frame pointer being
used in one portion of the function and not used in another portion.
Test #c0 uses non-local goto, which does Really Odd Things with
the frame pointer. The non-local goto itself has totally wrong
unwind info. It's no wonder we're confused there.
Test #c1 forces the use of a frame pointer that's not needed.
Test #c3 forces the use of an otherwise unneeded frame pointer
by using __builtin_return_address with a non-zero argument.
(Which really ought not work at all without -fno-omit-frame-pointer.)
In the near-term, -fsched2-use-superblocks ought to be taught
that an RTX_FRAME_RELATED_P insn has an anti-dependency on a
following branch. That'll prevent the setup of the frame pointer
from "auto-shrink-wrapping" without additional fixups elsewhere.
More information about the Gcc-bugs
mailing list