https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125571
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
More reduced, the important part is that the conditional argument to bar() is
gimplified to if-then-else and not if-converted.
#include <setjmp.h>
void bar (int c);
jmp_buf buf;
int foo(unsigned char S_3_1, unsigned char S_6_5)
{
#define X \
if (setjmp (buf) == 0) \
bar (S_3_1 == S_6_5 ? 49 : 48);
#define Y X X X X X X X X X X
#define Z Y Y Y Y Y Y Y Y Y Y
#define W Z Z Z Z Z Z Z Z Z Z
#define R W W W W W W W W W W
R
}