https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118140
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Try this: d |= ({ int h = f[g - 1] ? 2 : 0; #if 0 int i = f[g - 1] ? f_3 : 0; #else _Bool t; if (f[g - 1]) t = f_3; else t = 0; //_Bool t = (f[g - 1] & f_3); int i = t; #endif h > i; });