[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#181910: libc6: Incorrect fall-back case in byteswap.h for i386



At Fri, 21 Feb 2003 17:21:50 +0100,
Allan Sandfeld Jensen wrote:
> In bits/byteswap.h for both __bswap_16 and __bswap_32 there is the following check:
> #if defined __GNUC__ && __GNUC__ >= 2
> 
> The problem is that in the fall-back #else branch for non-gcc C-compilers it still uses gcc-extensions. The problem does exist also in the official glibc-2.3.1 under the i386-arch, but it is correct in the generic-arch. The attached patch moves the fall-back code from the generic arch to the i386 arch.
> 
> --- byteswap.h.old      2003-01-18 15:19:31.000000000 +0100
> +++ byteswap.h  2003-02-21 17:20:22.000000000 +0100
> @@ -40,11 +40,12 @@
>                     : "0" (__x)                                               \
>                     : "cc");                                                  \
>          __v; }))
> -#else
> -/* This is better than nothing.  */
> -# define __bswap_16(x) \
> -     (__extension__                                                          \
> -      ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); }))
> +#else /* This is better than nothing.  */
> +static __inline unsigned short int
> +__bswap_16 (unsigned short int __bsx)
> +{
> +  return __bswap_contant_16(__bsx);
> +}
>  #endif
> 
> 
> @@ -81,9 +82,11 @@
>          __v; }))
>  # endif
>  #else
> -# define __bswap_32(x) \
> -     (__extension__                                                          \
> -      ({ register unsigned int __x = (x); __bswap_constant_32 (__x); }))
> +static __inline unsigned int
> +__bswap_32 (unsigned int __bsx)
> +{
> +  return __bswap_contant_32(__bsx);
> +}
>  #endif

This bug will be fixed after updating the current cvs or 
the transition to the next glibc version (2.3.2).

Regards,
-- gotom



Reply to: