Hi Joseph,

> > Oh, I see now what you mean: In ISO C, any function call that takes
> > a 'char *' argument can also take a 'void *' argument. In his definition
> > of __glibc_const_generic, Joseph simulated this behaviour by explicitly
> > allowing 'void *' and 'const void *' arguments, in all const-generic
> > macros. I withdraw the claim it's a glibc bug; this choice makes perfect
> > sense (for backward compatibility with older glibc versions where strchr
> > was a plain function).
> 
> And, in addition, the type-generic macros can take a null pointer constant 
> argument (of any type valid for a null pointer constant - void * or 
> integer type or nullptr_t), as that is also valid for implicit conversion 
> to const char *.  There are explicit footnotes in the standard about this 
> case.  (For many of the functions it's undefined behavior if the call with 
> a null argument gets executed, but it might still appear in the source 
> code through use of macros.)

I would welcome to see this explained in a comment at __glibc_const_generic,
in glibc/misc/sys/cdefs.h. It's highly non-trivial.

Bruno




Reply via email to