https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106892
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I would clean it even more:
int a, b, c, d, e;
int f[8];
int g() {
while (a)
a >>= 4;
return 0;
}
int h(int i) {
if (i >= '0')
return i - '0';
//__builtin_unreachable ();
}
void j(int i) {
for (b = 2; g() <= 7; b++)
if (i) {
for (; e <= 7; e++)
for (c = 1; c <= 7; c++) {
d = h(b + '0');
f[-d + 4] ^= 3;
}
return;
}
}
int main() {
j(1);
if (f[2] != 0)
__builtin_abort ();
}
so that a) it isn't ASCII specific and misbehaves for EBCDIC etc., and b)
undoes what creduce/cvise likes to do, moving expressions from for init
expression before the loop