> But, that is not what the builtin setjmp/longjmp tests have.
Yes, but I don't think that we want to risk breaking a working compiler on
some targets because peculiar tests don't pass on another. I think that
init_eh is OK for x32 so SJLJ exceptions work and the issue is only with the
undocumented builtin setjmp/longjmp.
What happens on Aarch64 -milp32 for example? Would it be OK to save/restore
only 32-bit values? And MIPS n32?
Maybe we can define another builtin, e.g. __builtin_setjmp_size, and let the
compiler compute the size based on the same formula as init_eh or somesuch:
char buf[__builtin_setjmp_size ()];
Btw, the "array of pointers" thing is an interpolation, here's an excerpt of
start_dynamic_handler in GCC 2.8.x:
/* Emit RTL to start a dynamic handler on the EH runtime dynamic
handler stack. This should only be used by expand_eh_region_start
or expand_eh_region_start_tree. */
static void
start_dynamic_handler ()
{
rtx dhc, dcc;
rtx x, arg, buf;
int size;
#ifndef DONT_USE_BUILTIN_SETJMP
/* The number of Pmode words for the setjmp buffer, when using the
builtin setjmp/longjmp, see expand_builtin, case
BUILT_IN_LONGJMP. */
size = 5;
#else
so the tests are incorrect, not the implementation.
--
Eric Botcazou