https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109214
--- Comment #1 from rouca <rouca at debian dot org> ---
According to my C standard:
6.3.2.3 Pointers
1 A pointer to void may be converted to or from a pointer to any incomplete
or object
type. A pointer to any incomplete or object type may be converted to a
pointer to void
and back again; the result shall compare equal to the original pointer.
[...]
8. A pointer to a function of one type may be converted to a pointer to a
function of another
type and back again; the result shall compare equal to the original
pointer. If a converted
pointer is used to call a function whose type is not compatible with the
pointed-to type,
the behavior is undefined
Note that I work due to implementation of J - Portability issues, §J.5.7
Function pointer cast (informative)
J.5.7 Function pointer casts
1 A pointer to an object or to void may be cast to a pointer to a function,
allowing data to
be invoked as a function (6.5.4).
2 A pointer to a function may be cast to a pointer to an object or to void,
allowing a
function to be inspected or modified (for example, by a debugger) (6.5.4).