https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96956
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Your testcase is invalid. https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/Labels-as-Values.html#Labels-as-Values "You may not use this mechanism to jump to code in a different function. If you do that, totally unpredictable things happen." GCC has a different extension, described in the Local labels chapter, non-local labels, but in that case the goto needs to be direct to the non-local label, not using a computed goto. What you see is the result of the compiler not adding any edges in the cfg from the nested function to the label with address taken, the compiler only does that for non-local labels, or between computed gotos in the current function and the labels whose address is taken.