From: Sudakshina Das Date: Mon, 2 Nov 2020 15:52:22 +0000 (+0000) Subject: [PATCH] aarch64: Fix PR97638 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ce99142c11b8090105cbf2aa853262f6d9abc0d3;p=gcc.git [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 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 --- diff --git a/gcc/config/aarch64/aarch64-bti-insert.c b/gcc/config/aarch64/aarch64-bti-insert.c index 57663ee23b4..98026695fdb 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 00000000000..e5869e86c44 --- /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" } } */