https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118623
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Sam James from comment #2)
> Changing it to:
> ```
> int a, b;
>
> int c(int f, int g) {
> for (int d = 0; d <= 4; d++) {
> int e = 1 << f;
> if (g & e)
> return d;
> }
> return 5;
> }
>
> int h(int f, int g) {
> if ((c(g - 50, g) + g + g) & 1);
> else if (f)
> a = 1;
> return a;
> }
>
> int main() {
> if (h(b + 5, b + 63) != 0)
> __builtin_abort();
> return 0;
> }
> ```
>
> it works at -O3.
Just mark h as noinline.