arm: Fix ICE with -fstack-protector -mpure-code [PR98998]
authorJakub Jelinek <jakub@redhat.com>
Fri, 19 Feb 2021 12:05:47 +0000 (13:05 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 19 Feb 2021 12:05:47 +0000 (13:05 +0100)
commit1a132c4d7cdb22cbab85b8596418daa2c3157812
tree8cb548532a88091b386d0663eb9e9c5a50e860bc
parent37bde2f87267908a93c07856317a28827f8284f7
arm: Fix ICE with -fstack-protector -mpure-code [PR98998]

The vla15.C testcase ICEs with
-mcpu=cortex-m1 -mpure-code -fstack-protector -mthumb
as what force_const_mem returns (a SYMBOL_REF) is not a valid
memory address.
Previously the code was moving the address of the force_const_mem
into a register rather than the content of that MEM, so that instruction
must have been supported and loading from a MEM with a single REG base ought
to be valid too.

2021-02-19  Jakub Jelinek  <jakub@redhat.com>

PR target/98998
* config/arm/arm.md (*stack_protect_combined_set_insn,
*stack_protect_combined_test_insn): If force_const_mem result
is not valid general operand, force its address into the destination
register first.

* gcc.target/arm/pure-code/pr98998.c: New test.
gcc/config/arm/arm.md
gcc/testsuite/gcc.target/arm/pure-code/pr98998.c [new file with mode: 0644]