It’s a gcc-specific extension, a unary && operator that can be applied to a label name, yielding its address as a void* value.
As part of the extension, goto *ptr; is allowed where ptr is an expression of type void*.
It’s documented here in the gcc manual.
You can get the address of a label defined in the current function (or
a containing function) with the unary operator&&. The value has
typevoid *. This value is a constant and can be used wherever a
constant of that type is valid. For example:void *ptr; /* ... */ ptr = &&foo;To use these values, you need to be able to jump to one. This is done
with the computed goto statement,goto *exp;. For example,goto *ptr;Any expression of type
void *is allowed.
As zwol points out in a comment, gcc uses && rather than the more obvious & because a label and an object with the same name can be visible simultaneously, making &foo potentially ambiguous if & means “address of label”. Label names occupy their own namespace (not in the C++ sense), and can appear only in specific contexts: defined by a labeled-statement, as the target of a goto statement, or, for gcc, as the operand of unary &&.