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.