This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/49994] [4.7 Regression] ICE: in maybe_record_trace_start, at dwarf2cfi.c:2234 with -fsched2-use-superblocks


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]