https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119314
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Possibly wrong code |Possibly wrong code |generation for branch after |generation for branch after |tail function call |leaf function call --- Comment #12 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note the standard term is not tail function but rather leaf function. That is part of the reason why I was confused before hand. One thing you should look at is the generated code for LUT_GoThroughCache since that seems like it might be the cause rather than inside IsPlayerHandleValid/GetPlayerName. What happens if you add attribute noipa on LUT_GoThroughCache ? Does that help? what about zero_call_used_regs("all") attribute on the definition of LUT_GoThroughCache? Does that help? I am suspecting LUT_GoThroughCache is corrupting registers that it should not be.