https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71761
--- Comment #2 from Ivan Sorokin <vanyacpp at gmail dot com> --- I compared this with clang. 1) typedef int token; Both GCC and clang optimize this to a single jump. 2) struct token {int a}; clang optimizes this into a single jump. GCC generates: subq $8, %rsp call f() addq $8, %rsp ret 3) struct token as in the issue Both compilers do pushq %rbx movq %rdi, %rbx call f() movq %rbx, %rax popq %rbx ret I don't quite understand why both clang and GCC generate different code all these cases.