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.