http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60563

--- Comment #8 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
> Well - when I build the test -O0,O1,Os it passes. 

Confirmed when running the test suite. However the following reduced test

/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin*
*-*-darwin[912]* } } */
/* { dg-require-effective-target sync_long_long_runtime } */
/* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */

/* Verify that the builtin functions are correctly marked as trapping
   when using -fnon-call-exceptions.  */

#include <stdlib.h>
#include <signal.h>

typedef int ditype __attribute__ ((mode (DI)));

#define FN(IDX, RET, CALL)                    \
static RET f ## IDX (void *p) __attribute__ ((noinline));    \
static RET                            \
f ## IDX (void *p)                        \
{                                \
  return CALL;                            \
}                                \
static void                            \
t ## IDX ()                            \
{                                \
  try                                \
    {                                \
      f ## IDX(0);                        \
    }                                \
  catch (...)                            \
    {                                \
      return;                            \
    }                                \
  abort();                            \
}

FN(18, void, (__atomic_clear((ditype*)p, __ATOMIC_SEQ_CST)))

static void
handler(int)
{
  sigset_t clear;

  sigfillset (&clear);
  sigprocmask (SIG_UNBLOCK, &clear, NULL);
  throw 0;
}

int
main ()
{
  signal (SIGSEGV, handler);
  signal (SIGBUS, handler);

  t18();

  exit(0);
}

fails with -O1, but not with -O0 (-m32 and -m64).

Reply via email to