https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236
--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> --- There's generated assembly: 000000000045faa0 <_ZNK6google8protobuf11MessageLite24SerializePartialAsStringEv>: 45faa0: 53 push %rbx 45faa1: 48 89 fb mov %rdi,%rbx 45faa4: 48 89 f7 mov %rsi,%rdi 45faa7: 48 8d 43 10 lea 0x10(%rbx),%rax 45faab: 48 c7 43 08 00 00 00 movq $0x0,0x8(%rbx) 45fab2: 00 45fab3: c6 43 10 00 movb $0x0,0x10(%rbx) 45fab7: 48 89 de mov %rbx,%rsi 45faba: 48 89 03 mov %rax,(%rbx) 45fabd: e8 0e ff ff ff callq 45f9d0 <_ZNK6google8protobuf11MessageLite21AppendPartialToStringEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE> 45fac2: 84 c0 test %al,%al 45fac4: 75 0e jne 45fad4 <_ZNK6google8protobuf11MessageLite24SerializePartialAsStringEv+0x34> 45fac6: 48 8b 03 mov (%rbx),%rax 45fac9: 48 c7 43 08 00 00 00 movq $0x0,0x8(%rbx) 45fad0: 00 45fad1: c6 00 00 movb $0x0,(%rax) 45fad4: 48 89 d8 mov %rbx,%rax 45fad7: 5b pop %rbx 45fad8: c3 retq 45fad9: 00 00 add %al,(%rax) 45fadb: 00 00 add %al,(%rax) 45fadd: 00 00 add %al,(%rax) ... 000000000045fae0 <_ZNK6google8protobuf11MessageLite17SerializeAsStringEv>: 45fae0: 53 push %rbx 45fae1: 48 89 fb mov %rdi,%rbx 45fae4: 48 83 ec 20 sub $0x20,%rsp 45fae8: 48 89 e7 mov %rsp,%rdi 45faeb: e8 b0 ff ff ff callq 45faa0 <_ZNK6google8protobuf11MessageLite24SerializePartialAsStringEv> 45faf0: 48 8b 04 24 mov (%rsp),%rax (marker) ----------------------------------------------------------------------vvvv 45faf4: 48 89 03 mov %rax,(%rbx) 45faf7: 48 8b 44 24 08 mov 0x8(%rsp),%rax 45fafc: 48 89 43 08 mov %rax,0x8(%rbx) 45fb00: 48 8b 44 24 10 mov 0x10(%rsp),%rax 45fb05: 48 89 43 10 mov %rax,0x10(%rbx) 45fb09: 48 8b 44 24 18 mov 0x18(%rsp),%rax 45fb0e: 48 89 43 18 mov %rax,0x18(%rbx) 45fb12: 48 83 c4 20 add $0x20,%rsp 45fb16: 48 89 d8 mov %rbx,%rax 45fb19: 5b pop %rbx 45fb1a: c3 retq 45fb1b: 00 00 add %al,(%rax) 45fb1d: 00 00 add %al,(%rax) Where I suspect a stack load/store instruction after returning from the call ------^^^^