This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/49994] [4.7 Regression] ICE: in maybe_record_trace_start, at dwarf2cfi.c:2234 with -fsched2-use-superblocks
- From: "rth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 11 Aug 2011 23:54:57 +0000
- Subject: [Bug rtl-optimization/49994] [4.7 Regression] ICE: in maybe_record_trace_start, at dwarf2cfi.c:2234 with -fsched2-use-superblocks
- Auto-submitted: auto-generated
- References: <bug-49994-4@http.gcc.gnu.org/bugzilla/>
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.