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); }