https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94697
--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-9 branch has been updated by Szabolcs Nagy <n...@gcc.gnu.org>: https://gcc.gnu.org/g:f6e42cdee5de2b3441afc88c8888c1166bdffe57 commit r9-8594-gf6e42cdee5de2b3441afc88c8888c1166bdffe57 Author: Szabolcs Nagy <szabolcs.n...@arm.com> Date: Fri Apr 17 16:54:12 2020 +0100 aarch64: ensure bti c is emitted at function start [PR94697] The bti pass currently first emits bti c at function start if there is no paciasp (which also acts as indirect call landing pad), then bti j is emitted at jump labels, however if there is a label right before paciasp then the function start can end up like foo: label: bti j paciasp ... This patch is a minimal fix that just moves the bti c handling after the bti j handling so we end up with foo: bti c label: bti j paciasp ... This could be improved by emitting bti jc in this case, or by detecting that the label is not in fact an indirect jump target and then this situation would be much less common. Needs to be backported to gcc-9 branch. Backported without the testcase because of missing infrastructure for check-function-bodies. gcc/ChangeLog: Backport from mainline. 2020-04-23 Szabolcs Nagy <szabolcs.n...@arm.com> PR target/94697 * config/aarch64/aarch64-bti-insert.c (rest_of_insert_bti): Swap bti c and bti j handling.