https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106080
--- Comment #7 from Marek Polacek <mpolacek at gcc dot gnu.org> --- I know you can't jump into a statement expression but that's not what's happening here. The kernel uses this trick to get the current address for error messages: #define __this_address ({ __label__ __here; __here: barrier(); &&__here; }) and they will have to disable the warning completely because of it. The manual for -Wdangling-pointer also talks about pointers to *objects* and labels aren't objects.