[Bug target/95361] Segfault when generating an epilogue for a partly-shrinked-wrapped SVE frame

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu May 28 18:03:57 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95361

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Richard Sandiford
<rsandifo@gcc.gnu.org>:

https://gcc.gnu.org/g:c082cb8a2523d8c5afe5710e265bc72dd71aa60b

commit r10-8201-gc082cb8a2523d8c5afe5710e265bc72dd71aa60b
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Thu May 28 19:03:46 2020 +0100

    aarch64: Fix segfault in aarch64_expand_epilogue [PR95361]

    The stack frame for the function in the testcase consisted of two
    SVE save slots.  Both saves had been shrink-wrapped, but for different
    blocks, meaning that the stack allocation and deallocation were
    separate from the saves themselves.  Before emitting the deallocation,
    we tried to attach a REG_CFA_DEF_CFA note to the preceding instruction,
    to redefine the CFA in terms of the stack pointer.  But in this case
    there was no preceding instruction.

    This in practice only happens for SVE because:

    (a) We don't try to shrink-wrap wb_candidate* registers even when
        we've decided to treat them as normal saves and restores.
        I have a fix for that.

    (b) Even with (a) fixed, we're (almost?) guaranteed to emit
        a stack tie for frames that are 64k or larger, so we end
        up hanging the REG_CFA_DEF_CFA note on that instead.

    We should only need to redefine the CFA if it was previously
    defined in terms of the frame pointer.  In other cases the CFA
    should already be defined in terms of the stack pointer,
    so redefining it is unnecessary but usually harmless.

    2020-05-28  Richard Sandiford  <richard.sandiford@arm.com>

    gcc/
            PR testsuite/95361
            * config/aarch64/aarch64.c (aarch64_expand_epilogue): Only
            redefine the CFA if we have CFI operations.

    gcc/testsuite/
            PR testsuite/95361
            * gcc.target/aarch64/sve/pr95361.c: New test.


More information about the Gcc-bugs mailing list