With reference to Dimitry Andric's Thu Mar 26 14:41:43 UTC 2015 note ...

> On 26 Mar 2015, at 14:20, Tijl Coosemans <tijl at freebsd.org> wrote:
> > 
> > On Thu, 26 Mar 2015 17:37:53 +1100 (EST) Bruce Evans <brde at 
> > optusnet.com.au> wrote:
> >> On Wed, 25 Mar 2015, Pedro Giffuni wrote:
> ...
> >>> The reason why I had to revert the change is actually a systematic
> >>> bug in gcc: during it's build process gcc generates a new cdefs.h
> >>> from our headers. Attempting to use an older gcc from ports
> >>> that was build with the broken mono-parameter __nonnull() ended
> >>> up causing breakage in any code using signal.h or pthreads.h.
> >> 
> >> I see.  gcc's "fixed" headers cause lots of problems.
> > 
> > I've complained about this multiple times in the past.  The gcc ports
> > should not install these "fixed" headers.
> 
> Indeed.  See also this recent discussion on -current:
> 
> https://lists.freebsd.org/pipermail/freebsd-current/2015-March/055111.html
> 
> where a "fixed" stdio.h (from a gcc port) causes trouble.
> 
> -Dimitry
> 

Preface: I do not want to be taken as indicating that GCC manipulation of 
headers to make alternates is a good thing: it is not. I expect that such 
creates lots of problems, as has been indicated.



But I also maintain that the code sighted in 
https://lists.freebsd.org/pipermail/freebsd-current/2015-March/055111.html also 
has a problem relative to the C language standards (various vintages), 
independent of any gcc header manipulation of the C standard headers or FreeBSD 
headers.

Setting up the context for the point: The code references the type name va_list 
from a #include'd header (<printf.h>) that is not from a C standard in order to 
declare a function that is not from a C standard (__xvprintf).

The point: That code does so before any #include <stdarg.h> happens in the 
#include sequence. Under the C standards one must include a standard header 
before one's own code can validly refer to anything that the standard header 
officially defines or declares.

For the C standard headers themselves (various C standard vintages):

<stdio.h> is supposed to declare the likes of vfprintf, vprintf, and vsprintf 
but not the public name va_list, just using a private-named/anonymous synonym 
for the type to declare the functions. Also <stdio.h> is not supposed to 
include <stdargs.h>. The standard headers have mutual independence (so 
include-order-independence) and idempotent status (include-repeatability) only 
relative to each other, not relative to  one's own code that references the 
standard header content.

<stdarg.h> is the only C standard header that is supposed to define the public 
name va_list (and so the one publicly available synonym for the type in 
question).


Where I get this from: Much of my background information for this and the 
terminology that I use for the C library is from The Standard C Library by P. 
J. Plauger, Copyright 1992. But I've not noticed any later ANSI/ISO/IEC 
material indicating that the above material has changed status in more recent 
vintages of the standard. I could be wrong since I've not tried to be 
comprehensive about analyzing all the changes. I have a copy of BS ISO/IEC 
9899:1999 (with Technical Corrigendum 1 incorporated and with the Revision 5.10 
C Rationale) but not of the C11 vintage of the standard.


I'll shut-up on this point after this note (unless I get a question/request) 
and I'll leave it to official FreeBSD folks for any further consideration of 
what to do about the code sighted in 
https://lists.freebsd.org/pipermail/freebsd-current/2015-March/055111.html . 
Attempting to present my claim a 3rd time seems enough, likely overkill already.

I sent this note to freebsd-toolchain as it seemed more relevant than 
freebsd-current for the issue involved.

===
Mark Millard
markmi at dsl-only.net

_______________________________________________
freebsd-toolchain@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"

Reply via email to