diff options
author | Joseph Myers <joseph@codesourcery.com> | 2016-12-30 13:41:40 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2016-12-30 13:41:40 +0000 |
commit | 769998892d4f39d912fbe147eca9a3e89318cffc (patch) | |
tree | 4a48412811e917204f2eb4002debb612894491fd | |
parent | ef83c83a257226d470a939434c7193e2a1fd4f82 (diff) | |
download | glibc-769998892d4f39d912fbe147eca9a3e89318cffc.tar.gz |
Define __intmax_t, __uintmax_t in bits/types.h.
TS 18661-1 defines *fromfp* functions, which are declared in math.h
and whose return types are intmax_t and uintmax_t, without allowing
math.h to define those typedefs. (This is similar to e.g. ISO C
declaring vprintf in stdio.h without allowing that header to define
va_list.) Thus, math.h needs to access those typedefs under internal
names.
This patch accordingly arranges for bits/types.h (which defines only
internal names, not public *_t typedefs) to define __intmax_t and
__uintmax_t. stdint.h is made to use bits/types.h and define intmax_t
and uintmax_t using __intmax_t and __uintmax_t, to avoid duplication
of information. (It would be reasonable to define more of the types
in stdint.h - and in sys/types.h, where it duplicates such types -
using information already available in bits/types.h.) The idea is
that the subsequent addition of fromfp functions would then make
math.h include bits/types.h and use __intmax_t and __uintmax_t as the
return types of those functions.
Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch).
* bits/types.h (__intmax_t): New typedef.
(__uintmax_t): Likewise.
* sysdeps/generic/stdint.h: Include <bits/types.h>.
(intmax_t): Define using __intmax_t.
(uintmax_t): Define using __uintmax_t.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | bits/types.h | 9 | ||||
-rw-r--r-- | sysdeps/generic/stdint.h | 12 |
3 files changed, 18 insertions, 9 deletions
@@ -1,5 +1,11 @@ 2016-12-30 Joseph Myers <joseph@codesourcery.com> + * bits/types.h (__intmax_t): New typedef. + (__uintmax_t): Likewise. + * sysdeps/generic/stdint.h: Include <bits/types.h>. + (intmax_t): Define using __intmax_t. + (uintmax_t): Define using __uintmax_t. + * support/Makefile (tests-special): Make definition conditional on [$(run-built-tests) = yes]. ($(objpfx)tst-support_record_failure-2.out): Make rule conditional diff --git a/bits/types.h b/bits/types.h index 01753bd0dc..8c8fe9fc3f 100644 --- a/bits/types.h +++ b/bits/types.h @@ -56,6 +56,15 @@ __extension__ typedef long long int __quad_t; __extension__ typedef unsigned long long int __u_quad_t; #endif +/* Largest integral types. */ +#if __WORDSIZE == 64 +typedef long int __intmax_t; +typedef unsigned long int __uintmax_t; +#else +__extension__ typedef long long int __intmax_t; +__extension__ typedef unsigned long long int __uintmax_t; +#endif + /* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE macros for each of the OS types we define below. The definitions diff --git a/sysdeps/generic/stdint.h b/sysdeps/generic/stdint.h index 8e4347c623..4db6e1ce25 100644 --- a/sysdeps/generic/stdint.h +++ b/sysdeps/generic/stdint.h @@ -24,6 +24,7 @@ #define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION #include <bits/libc-header-start.h> +#include <bits/types.h> #include <bits/wchar.h> #include <bits/wordsize.h> @@ -131,15 +132,8 @@ typedef unsigned int uintptr_t; /* Largest integral types. */ -#if __WORDSIZE == 64 -typedef long int intmax_t; -typedef unsigned long int uintmax_t; -#else -__extension__ -typedef long long int intmax_t; -__extension__ -typedef unsigned long long int uintmax_t; -#endif +typedef __intmax_t intmax_t; +typedef __uintmax_t uintmax_t; # if __WORDSIZE == 64 |