https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127447
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Cleaned up testcase:
#include <stdint.h>
int idx = 0;
void __attribute__((noinline)) marker_32(void) { idx++; }
static uint8_t safe_mod_func_uint8_t_u_u(uint8_t ui1, uint8_t ui2) {
return (ui2 == 0) ? ui1 : (ui1 % ui2);
}
int32_t a;
static void b(int16_t e) {
if (644 <= safe_mod_func_uint8_t_u_u(~0, e) != e)
;
else
marker_32();
}
void __attribute__((noipa)) bar ()
{
int32_t k = -8;
a ^= k;
b(a);
}
int main(int argc, char *argv[]) {
a = -0x8;
bar ();
if (idx != 1)
__builtin_abort ();
return 0;
}