https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98931
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- And the problem is not something not being multiple of 2, but just out of range jump. The code has: 10: f04e e001 dls lr, lr 14: 9900 ldr r1, [sp, #0] ... 130e: f00f c7ff le lr, 316 <foo+0x316> if I manually move .L2 label so that it doesn't complain anymore, which means it can jump only to -4096 bytes from the end of the le instruction, but it was supposed to jump to foo+0x14, i.e. to 4862 bytes before the end of the le insn at 0x1312. So, either the computation of the instruction sizes is incorrect, or for this kind of branch nothing checks whether the distance is in range.