diff options
author | Sudakshina Das <sudi.das@arm.com> | 2020-11-02 15:52:22 +0000 |
---|---|---|
committer | Sudakshina Das <sudi.das@arm.com> | 2020-11-02 15:52:22 +0000 |
commit | ce99142c11b8090105cbf2aa853262f6d9abc0d3 (patch) | |
tree | 654b0f5a7c46cd1c799a635b28992fab99cc4a38 /gcc | |
parent | e881774d0dda6d5127eb8f0642f6edc16dc0b1e7 (diff) | |
download | gcc-ce99142c11b8090105cbf2aa853262f6d9abc0d3.zip gcc-ce99142c11b8090105cbf2aa853262f6d9abc0d3.tar.gz gcc-ce99142c11b8090105cbf2aa853262f6d9abc0d3.tar.bz2 |
[PATCH] aarch64: Fix PR97638
Currently the testcase in the patch was failing to produce
a 'bti c' at the beginning of the function. This was because
in aarch64_pac_insn_p, we were wrongly returning at the first
check!
2020-10-30 Sudakshina Das <sudi.das@arm.com>
gcc/ChangeLog:
PR target/97638
* config/aarch64/aarch64-bti-insert.c (aarch64_pac_insn_p): Update
return value on INSN_P check.
gcc/testsuite/ChangeLog:
PR target/97638
* gcc.target/aarch64/pr97638.c: New test.a
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/aarch64/aarch64-bti-insert.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/pr97638.c | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/config/aarch64/aarch64-bti-insert.c b/gcc/config/aarch64/aarch64-bti-insert.c index 57663ee..9802669 100644 --- a/gcc/config/aarch64/aarch64-bti-insert.c +++ b/gcc/config/aarch64/aarch64-bti-insert.c @@ -95,7 +95,7 @@ static bool aarch64_pac_insn_p (rtx x) { if (!INSN_P (x)) - return x; + return false; subrtx_var_iterator::array_type array; FOR_EACH_SUBRTX_VAR (iter, array, PATTERN (x), ALL) diff --git a/gcc/testsuite/gcc.target/aarch64/pr97638.c b/gcc/testsuite/gcc.target/aarch64/pr97638.c new file mode 100644 index 0000000..e5869e8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr97638.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mbranch-protection=bti" } */ + +char *foo (const char *s, const int c) +{ + const char *p = 0; + for (;;) + { + if (*s == c) + p = s; + if (p != 0 || *s++ == 0) + break; + } + return (char *)p; +} + +/* { dg-final { scan-assembler "hint\t34" } } */ |