This is the mail archive of the gcc-patches@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]

Re: Patch to fix incorrect hard register life information



  In message <Pine.GSO.4.02A.9809021459580.21122-100000@matula.informatik.rwth-aachen.de>you write:
  > The real problem is that flow makes edges in the cfg from the basic blocks
  > that contain REG_LABEL notes for the eh_stub labels, but those labels are
  > in fact reached from the last basic block.
If that's the case, then the solution is to fix the cfg we product.  An
inaccurate cfg leads to all kinds of problems.

So let's make sure I understand the problem.  There is one weird function
in libgcc2 where the last block needs an edge to a magic label?

By last block do we really mean the epilogue?

And presumably there's no way to identify this magic label other than
by having except.c keep track of it for us when it expands __builtin_eh_sub?
(either by marking the label specially or keeping a pointer to it which
we can check in flow)

Jason -- is there any other place where __builtin_eh_stub could be
expanded?  Is that particular builtin ever something a user can/should
use?

Normally I don't think you can assume the last block reaches the
epilogue -- consider function which don't have an epilogue because
they never return or unconditionally calls a nonreturning function.
But I think in this case we are probably safe.

jeff



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