https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81693
--- Comment #17 from Dominique d'Humieres <dominiq at lps dot ens.fr> --- > I updated it again. If it still doesn't work, please show me what > you applied. The test now pass in 64 bit mode, but not in 32 bit one: % /opt/gcc/gcc8w/bin/gcc /opt/gcc/work/gcc/testsuite/gcc.dg/torture/pr25967-1.c % ./a.out % /opt/gcc/gcc8w/bin/gcc /opt/gcc/work/gcc/testsuite/gcc.dg/torture/pr25967-1.c -m32 % ./a.out Segmentation fault Note that the guality tests are not run on darwin. Patched with --- ../_clean/gcc/testsuite/gcc.dg/torture/pr25967-1.c 2017-08-02 13:33:42.000000000 +0200 +++ gcc/testsuite/gcc.dg/torture/pr25967-1.c 2017-09-03 20:28:09.000000000 +0200 @@ -17,6 +17,12 @@ typedef unsigned int uword_t __attribute #define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname) #define ASMNAME2(prefix, cname) XSTRING (prefix) cname +#if __LP64__ +# define STACK_POINTER "rsp" +#else +# define STACK_POINTER "esp" +#endif + struct interrupt_frame { uword_t ip; @@ -52,7 +58,9 @@ fn (void) int main () { - asm ("push $" STRING (SS) "; \ + /* Align exception handler stack to 16 bytes. */ + asm ("and $-16, %" STACK_POINTER "; \ + push $" STRING (SS) "; \ push $" STRING (SP) "; \ push $" STRING (FLAGS) "; \ push $" STRING (CS) "; \