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: Rework of large "if" in sibcall.c


Hi,


Although it now has a nicer structure it has different semantics: it now
SEGV's ;(

The prevents bootstrap on x86, which is caused by this change:

+   identify_call_return_value (PATTERN (insn), &hardret, &softret);
+   insn = skip_copy_to_return_value (insn, hardret, softret);

where it was originally:

!    || (identify_call_return_value (PATTERN (insn), &hardret, &softret)
!        && end == (temp = skip_copy_to_return_value (insn, hardret,
!                                                     softret)))

Note, that identify_call_return_value() returns an int, and indeed does
return 0, indicating, that hardret and softret are not filled with
something usefull.  With your patch you unconditionally call
skip_copy_to_return_value() which SEGV's if hardret is 0.


Ciao,
Michael.


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