https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103241
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- We'd need preprocessed source + full gcc command line to investigate particular cases, but generally, gcc itself doesn't often know that the range is zero length, it has two labels that mark the start and end of the range. If it is the same labels, obviously it knows it is zero length range and can drop it, but if it is different labels, it is harder or impossible (consider e.g. inline asm in between, the inline asm could expand to zero instructions or zero instructions in the current section (.pushsection, emit something elsewhere, .popsection), or even just asm ("") - gcc intentionally doesn't try to understand what inline asm does.