https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80460
--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> --- But even that is not enough for switch (i) { case 0: goto X; if (0) // nowarn X: nop (); else die (); case 1:; i++; } because we need to remember whether the then branch contained any labels.