https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63340

--- Comment #3 from Andreas Schwab <sch...@linux-m68k.org> ---
Reduced:

extern void abort (void);
extern void exit (int);

#define TEST_COMPOUND(TYPE, LHSVAL, RHSVAL, OP)                \
  do                                    \
    {                                    \
      static volatile _Atomic (TYPE) a = (TYPE) (LHSVAL);        \
      if ((a OP##= (RHSVAL)) != (TYPE) ((TYPE) (LHSVAL) OP (RHSVAL)))    \
    abort ();                            \
      if (a != (TYPE) ((TYPE) (LHSVAL) OP (RHSVAL)))            \
    abort ();                            \
    }                                    \
  while (0)

#define TEST_COMPOUND_ARITH(LHSVAL, RHSVAL, OP)                \
  do                                    \
    {                                    \
      TEST_COMPOUND (float, (LHSVAL), (RHSVAL), OP);            \
      TEST_COMPOUND (double, (LHSVAL), (RHSVAL), OP);            \
    }                                    \
  while (0)

static void
test_mult (void)
{
  TEST_COMPOUND_ARITH (1, 2, *);
}

int
main (void)
{
  test_mult ();
  exit (0);
}

Reply via email to