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;