On Wed, 16 Nov 2022 at 15:59, Michael Matz <m...@suse.de> wrote: > > Hello, > > On Wed, 16 Nov 2022, Sam James wrote: > > > Unrelated but I was a bit tempted to ask for throwing in > > -Wbuiltin-declaration-mismatch to default -Werror while Clang 16 was at > > it, but I suppose we don't want the world to burn too much, > > :-) It's IMHO a bug in the standard that it misses "if any of its > associated headers are included" in the item for reservation of external > linkage identifiers; it has that for all other items about reserved > identifiers in the Library clause. If that restriction were added you > couldn't justify erroring on the example at hand (because it doesn't > include e.g. <stdio.h> and then printf wouldn't be reserved). A warning > is of course always okay and reasonable. As is, you could justify > erroring out, but I too think that would be overzealous.
I think that's very intentional and not a defect in the standard. If one TU was allowed to define: void printf() { } and have that compiled into the program, then that would cause unexpected behaviour for every other TU which includes <stdio.h> and calls printf. They would get the non-standard rogue printf.