Mail Archives: cygwin/2012/02/08/09:07:49
On Feb 8 06:33, Eric Blake wrote:
> STC showing that sysmacros doesn't work when included indirectly in C99
> mode:
>
> $ cat foo.c
> #include <sys/types.h>
> int main() { return makedev(0,0); }
> $ gcc -o foo foo.c
> $ gcc -o foo foo.c --std=c99
> /tmp/ccT40f0H.o:foo.c:(.text+0x1e): undefined reference to
> `_gnu_dev_makedev'
> collect2: ld returned 1 exit status
And why is that so?
Here's the definition of _ELIDABLE_INLINE in _ansi.h:
/* The traditional meaning of 'extern inline' for GCC is not
to emit the function body unless the address is explicitly
taken. However this behaviour is changing to match the C99
standard, which uses 'extern inline' to indicate that the
function body *must* be emitted. If we are using GCC, but do
not have the new behaviour, we need to use extern inline; if
we are using a new GCC with the C99-compatible behaviour, or
a non-GCC compiler (which we will have to hope is C99, since
there is no other way to achieve the effect of omitting the
function if it isn't referenced) we just use plain 'inline',
which c99 defines to mean more-or-less the same as the Gnu C
'extern inline'. */
#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
/* We're using GCC, but without the new C99-compatible behaviour. */
#define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__))
#else
/* We're using GCC in C99 mode, or an unknown compiler which
we just have to hope obeys the C99 semantics of inline. */
#define _ELIDABLE_INLINE __inline__
#endif
I really don't care for strict compiler modes, but shouldn't that
have taken care of the problem? If not, PTC.
> Another STC showing that sysmacros is broken as a standalone header:
>
> $ cat bar.c
> #include <sys/sysmacros.h>
> int main() { return makedev(0,0); }
> $ gcc -o foo foo.c
> In file include from foo.c:1:0:
> /usr/include/sys/sysmacros.h:14:18: error: expected `=', `,', `;',
> `asm', or `__attribute__' before `int'
This one's easy. We just have to include sys/types.h. I apply a
patch.
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
- Raw text -