https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90045
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- So the assembler error is for code trying to handle /* Do relax(). */ { ... /* Most horrible, but gcc may give us some exception data that is impossible to assemble, of the form .align 4 .byte 0, 0 .uleb128 end - start start: .space 128*128 - 1 .align 4 end: If the leb128 is two bytes in size, then end-start is 128*128, which requires a three byte leb128. If the leb128 is three bytes in size, then end-start is 128*128-1, which requires a two byte leb128. We work around this dilemma by inserting an extra 4 bytes of alignment just after the .align. This works because the data after the align is accessed relative to the end label. This counter is used in a tiny state machine to detect whether a leb128 followed by an align is impossible to relax. */ ... /* Until nothing further to relax. */ while (stretched && -- max_iterations); if (stretched) as_fatal (_("Infinite loop encountered whilst attempting to compute the addresses of symbols in section %s"), segment_name (segment)); so it does look like an error on the compiler side. Though maybe impossible to avoid. I'll try to attach a reproducer.