http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57036
--- Comment #2 from Richard Biener 2013-04-23
11:06:50 UTC ---
Reduced testcase:
extern void g (void);
extern __inline __attribute__ ((__always_inline__,__leaf__))
f ()
{
g ();
}
struct __jmp_buf_tag *b;
int jpgDecode_convert (unsigned i)
{
if (i != 0)
f ();
read_buf_open ();
return _setjmp (b);
}
marking 'g' leaf as well fixes the ICE.
The inliner doesn't handle new abnormal edges appearing this way from
a 'leaf' function which isn't considered as possibly causing abnormal
goto edges.
I suppose all these setjmp ICEs are latent with carefully constructed
non-local goto testcases.