https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101031

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Simpler IL:

int a;
char b, e;
static char *c = &b;
static long d;
void f(void);
void __attribute__((noipa)) h() {
  int g = 0;
  for (; g < 2; ++g) {
    d = *c;
    *c = 1;
    b = 0;
  }
  f();
}
void __attribute__((noipa)) f() {
  if (d++)
    c = &e;
  for (; a;)
    ;
}
int main() {
  h();
  if (b != 0)
    __builtin_abort ();
  return 0;
}

we end up with

void h ()
{
  char * c.0_14;
  char _24;
  long int _25;

  <bb 2> [local count: 357878152]:
  c.0_14 = c;
  *c.0_14 = 1;
  b = 0;
  _24 = *c.0_14;
  _25 = (long int) _24;
  d = _25;
  *c.0_14 = 1;
  f (); [tail call]
  return;

Reply via email to