https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89613
--- Comment #2 from Jeff Muizelaar <jmuizelaar at mozilla dot com> --- The generated asm is: 500: 31 c0 xor %eax,%eax 502: e8 29 01 00 00 callq 630 <a> 507: 89 c2 mov %eax,%edx 509: 31 c0 xor %eax,%eax 50b: e8 20 01 00 00 callq 630 <a> 510: 01 d0 add %edx,%eax 512: c3 retq So we're still calling it twice.