stdint.h
Jeff Johnston
jjohnstn@redhat.com
Tue Sep 27 22:24:00 GMT 2005
Patch checked in. Thanks.
-- Jeff J.
Ralf Corsepius wrote:
> On Tue, 2005-09-20 at 17:29 -0400, Jeff Johnston wrote:
>
>>Ralf Corsepius wrote:
>>
>>>On Tue, 2005-09-20 at 12:23 +0200, Corinna Vinschen wrote:
>
>
>
>>>>- The condition, when to include limits.h and when not to include it,
>>>> seems not to be foolproof.
>>>
>>>Yes, gcc-4 is not correctly taken into account, which (bogusly) causes
>>>the compiler to fall back to the non-gcc-3 rules.
>>>
>>
>>Still needs looking at.
>
>
> See patch below.
>
> Background:
>
> Modern GCCs ( According to what I coded, GCC > 3.2 ) implicitly define
> the defines this file tries to exploit. Including limits.h is meant to
> be used as fall back for non-GNUC compilers and for old GCCs not having
> these implicit defines.
>
> This all is aimed at avoiding to include <limits.h> from inside of
> stdint.h for several reasons:
> * In the past, limits.h handling had been fragile during bootstrapping
> GCC.
> * In the past, limits.h also had tended to contain bogus values.
> * Including limits.h in stdint.h would pollute the "name space of
> defines being used."
> * Speed. Inclusion of limits.h is comparatively expensive.
> * My original plan was to include this file into GCC where it can fully
> exploit GCC's internals. Meanwhile, though I still am not convinced
> newlib (or more general: libc) is the appropriate place for
> stdint.h/inttypes.h I have more or less abandoned this plan.
>
>
> In other words, if portability and simplicity is the primary objective,
> we can drop this magic and the __STDINT_EXP macro and try to
> unconditionally include <limits.h>, instead.
>
> Ralf
>
>
>
> ------------------------------------------------------------------------
>
> 2005-09-21 Ralf Corsepius <ralf.corsepius@rtems.org>
>
> * libc/include/stdint.h: Correct __STDINT_EXP macro incorrectly
> handling GCC >= 4.
>
> Index: newlib/libc/include/stdint.h
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/include/stdint.h,v
> retrieving revision 1.3
> diff -u -r1.3 stdint.h
> --- newlib/libc/include/stdint.h 20 Sep 2005 21:21:51 -0000 1.3
> +++ newlib/libc/include/stdint.h 21 Sep 2005 09:42:42 -0000
> @@ -18,8 +18,10 @@
> extern "C" {
> #endif
>
> -#if defined(__GNUC__) && (__GNUC__ >= 3 ) \
> - && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2 )
> +#if defined(__GNUC__) && \
> + ( (__GNUC__ >= 4) || \
> + ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2) ) )
> +/* gcc > 3.2 implicitly defines the values we are interested */
> #define __STDINT_EXP(x) __##x##__
> #else
> #define __STDINT_EXP(x) x
More information about the Newlib
mailing list