https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80053
--- Comment #15 from Alexander Monakov <amonakov at gcc dot gnu.org> --- (In reply to Richard Biener from comment #14) > I think the original asm goto case clearly remains and this is a difficult > to handle case since the label address only appears as regular input and the > goto target is statically represented in the CFG. The testcase is > miscompiled at -O2 already. > > I think asm goto is prone to such miscompilation in general if combined with > label addresses as inputs. I don't think it was supposed to be used in this > way so we might want to simply amend documentation to make such uses > undefined ... in fact one might read > > "The > @var{GotoLabels} section in an @code{asm goto} statement contains > a comma-separated > list of all C labels to which the assembler code may jump." > > that jumps must jump to one of the labels literally (in the way documented > later). I don't see a contradiction? 'lp' holds the address of 'l'; label 'l' is listed in the asm. It doesn't jump to anywhere but 'l'.