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]
Other format: [Raw text]

Re: [patch] Fix PR middle-end/55321


On 11/15/2012 11:34 AM, Eric Botcazou wrote:
> The problem is that get_loop_latch_edges finds no latch edges for a loop 
> because the header of the loop doesn't dominate any of its predecessors.
> The reason is that a new edge is added during RTL expansion, which changes the 
> dominance info.  This edge is from a call to __sync_synchronize to a non-local 
> label generated for a __builtin_setjmp_receiver.
> 
> Fixed by marking the call as "nononlocal", tested on x86_64-suse-linux, OK for 
> the mainline?

While its true that this call is nononlocal, there are plenty of other
builtins that we expand with just emit_library_call (as opposed to
emit_libcall_block) that also need this sort of treatment.

Seems to me that this marking ought to be done in emit_library_call,
for at least most values of LCT_*.  Otherwise you could get the same
ICE for e.g. memcpy.


r~


PS: ARM still uses sjlj exceptions for Ada?  I thought with the obsolescence
of pre-eabi targets that we'd always use unwind tables now.


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