https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101023
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Last reconfirmed| |2021-06-11
Status|UNCONFIRMED |WAITING
--- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to Zdenek Sojka from comment #0)
> Created attachment 50981 [details]
> auto-reduced testcase (from OpenTTD sources)
>
> Compiler output:
> $ x86_64-pc-linux-gnu-g++ -O2 -mtune=opteron -mstackrealign
> --param=hot-bb-frequency-fraction=1 testcase.C -S
>
> The offending code is:
> .L8:
> pushq %rbp
> .cfi_def_cfa_offset 16
> .cfi_offset 6, -16
> movq %rsp, %rbp
> .cfi_def_cfa_register 6
> movq %r12, -8(%rbp)
> pushq %rax
>
> the "push" overwrites r12 stored just one instruction above; when returning:
> movq -8(%rbp), %r12
> xorl %eax, %eax
> leave
> .cfi_def_cfa 7, 8
> ret
>
> the wrong data is restored to r12
>
> I wasn't able yet to generate an executable testcase, but I can try to if
> needed. (it shouldn't be that hard, just r12 needs to be used by the caller
> during the call)
Please create a run-time testcase.