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