diff --git a/gcc/config/aarch64/aarch64-bti-insert.c b/gcc/config/aarch64/aarch64-bti-insert.c index 57663ee23b49..98026695fdbb 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 000000000000..e5869e86c449 --- /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" } } */