https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98931
--- Comment #4 from Andrea Corallo <andrea.corallo at arm dot com> --- "jakub at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> writes: > 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. I think this (the second) is the case.