Fix __bswap_64 return type in generic bits/byteswap.h
Joseph S. Myers
joseph@codesourcery.com
Mon Nov 19 23:58:00 GMT 2012
To avoid -Wformat warnings building pcprofiledump, __bswap_64 needs to
return __uint64_t not unsigned long long int, on platforms where they
are different. This patch fixes the generic version, similarly to
HJ's 2012-10-12 fix for the x86 version.
Tested that this fixes the warnings seen building for MIPS n64.
Chris, I think the Tile version also needs such a fix to use the
proper type on tilegx64.
2012-11-19 Joseph Myers <joseph@codesourcery.com>
* bits/byteswap.h: Include <bits/types.h>.
(__bswap_64): Use __uint64_t instead of unsigned long long int.
diff --git a/bits/byteswap.h b/bits/byteswap.h
index 3ca0ad6..e19e91a 100644
--- a/bits/byteswap.h
+++ b/bits/byteswap.h
@@ -24,6 +24,7 @@
#define _BITS_BYTESWAP_H 1
#include <features.h>
+#include <bits/types.h>
/* Swap bytes in 16 bit value. */
#define __bswap_constant_16(x) \
@@ -70,15 +71,15 @@ __bswap_32 (unsigned int __bsx)
| (((x) & 0x00000000000000ffull) << 56)))
# if __GNUC_PREREQ (4, 2)
-static __inline unsigned long long int
-__bswap_64 (unsigned long long int __bsx)
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
{
return __builtin_bswap64 (__bsx);
}
# else
# define __bswap_64(x) \
(__extension__ \
- ({ union { __extension__ unsigned long long int __ll; \
+ ({ union { __extension__ __uint64_t __ll; \
unsigned int __l[2]; } __w, __r; \
if (__builtin_constant_p (x)) \
__r.__ll = __bswap_constant_64 (x); \
@@ -101,8 +102,8 @@ __bswap_64 (unsigned long long int __bsx)
| (((x) & 0x000000000000ff00ull) << 40) \
| (((x) & 0x00000000000000ffull) << 56))
-static __inline unsigned long long int
-__bswap_64 (unsigned long long int __bsx)
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
{
return __bswap_constant_64 (__bsx);
}
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list