On 09/27/11 02:11, Alan Modra wrote:
> On Tue, Sep 27, 2011 at 12:39:36AM +0200, Bernd Schmidt wrote:
>> On 09/27/11 00:32, Alan Modra wrote:
>>> On Mon, Sep 26, 2011 at 11:22:54PM +0930, Alan Modra wrote:
>>>> Two regressions appeared due to a problem in the shrink-wrap code.
>>>
>>> These two.
>>> +FAIL: g++.dg/torture/pr46111.C  -O1  (internal compiler error)
>>> +FAIL: gcc.dg/autopar/pr46099.c (internal compiler error)
>>>
>>> Both "internal compiler error: in maybe_record_trace_start, at
>>> dwarf2cfi.c:2243", caused by disjoint blocks in the set of blocks that
>>> needs no prologue.  ie. thread_prologue_and_epilogue_insns gives
>>>
>>> ====
>>> code needing no prologue
>>> ====  <- prologue inserted here
>>> code needing prologue
>>> ====
>>> more no prologue code
>>> ====
>>> more code needing prologue
>>> ====
>>> epilogue
>>>
>>> That second block needing no prologue now wrongly tries to use unwind
>>> info from the prologue.
>>
>> What's the actual CFG structure here?
> 
> Immediately after thread_prologue_and_epilogue_insns
> 
>         bb2 -> simple_ret
>          |
>         bb3
>         /\
>       /    \
>     bb4    bb5
>    (pro)    |
>      |      |<--|
>     bb7     |   |
>    (epi)   bb6--|
>      |      |
>     bb8<-|  |
>   (s ret)|  |
>          |-bb9

That looks perfectly reasonable, and even if it is ordered in the way
shown above, dwarf2cfi still should be able to deal with it if the
prologue and epilogue are annotated correctly.

Again, at the crash site, examine the start insn to find out which basic
block is the problem, and use dump_cfi_row on the two rows it tried to
compare (and found an unexpected difference).


Bernd

Reply via email to