https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81882
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |documentation Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2017-08-17 Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- I believe the documentation should be changed like so: Index: gcc/doc/extend.texi =================================================================== --- gcc/doc/extend.texi (revision 251156) +++ gcc/doc/extend.texi (working copy) @@ -2783,21 +2783,24 @@ The @code{ifunc} attribute is used to mark a funct function using the STT_GNU_IFUNC symbol type extension to the ELF standard. This allows the resolution of the symbol value to be determined dynamically at load time, and an optimized version of the -routine can be selected for the particular processor or other system +routine to be selected for the particular processor or other system characteristics determined then. To use this attribute, first define the implementation functions available, and a resolver function that returns a pointer to the selected implementation function. The implementation functions' declarations must match the API of the -function being implemented, the resolver's declaration is be a -function returning pointer to void function returning void: +function being implemented. The resolver should be declared to +be a function returning a pointer to a function taking no arguments +and returning a pointer to a function of the same type as the +implementation. For example: @smallexample void *my_memcpy (void *dst, const void *src, size_t len) @{ @dots{} + return dst; @} -static void (*resolve_memcpy (void)) (void) +static void* (*resolve_memcpy (void))(void *, const void *, size_t) @{ return my_memcpy; // we'll just always select this routine @}