On 07/12/2011 19:14, Christian Joensson wrote:
> I am trying to build gcc trunk on cygwin (with the snapshot of
> 20111207) and get this:
>   /usr/local/src/trunk/gcc/gcc/ada/adaint.c -o ada/adaint.o
> In file included from /usr/local/src/trunk/gcc/gcc/system.h:346:0,
>                  from /usr/local/src/trunk/gcc/gcc/ada/adaint.c:107:
> /usr/include/sys/wait.h: In function 'int __wait_status_to_int(const wait&)':
> /usr/include/sys/wait.h:77:61: error: declaration of C function 'int
> __wait_status_to_int(const wait&)' conflicts with
> /usr/include/sys/wait.h:75:12: error: previous declaration 'int
> __wait_status_to_int(int)' here

> make[3]: *** [ada/adaint.o] Error 1

> Does this symptom ring a bell for anyone?

  Ah, I didn't see it because I'm not using the snapshot (and I haven't been
testing C++ builds recently either).

> #ifdef __cplusplus
> 
> inline int __wait_status_to_int (int __status)
>   { return __status; }
> inline int __wait_status_to_int (const union wait & __status)
>   { return __status.w_status; }

  I can see why it happens: when adaint.c #includes sys/wait.h, it's already
one level deep inside extern "C" { ... } nesting.  So those new overloads in
sys/wait.h (snapshot version) can't be name-mangled.

  Any lurking standards lawyers out there?  Is it valid to #include a C
standard header inside an extern "C" block?  Should the Cygwin header use
extern "C++" on those declarations even though they're inside #ifdef
__cplusplus, or should adaint.c not #include things inside extern "C"?

    cheers,
      DaveK

Reply via email to