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

Reply via email to