]> sourceware.org Git - glibc.git/commitdiff
Define __intmax_t, __uintmax_t in bits/types.h.
authorJoseph Myers <joseph@codesourcery.com>
Fri, 30 Dec 2016 13:41:40 +0000 (13:41 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 30 Dec 2016 13:41:40 +0000 (13:41 +0000)
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.

ChangeLog
bits/types.h
sysdeps/generic/stdint.h

index ad20821e7c2895617aa5f99f84c30f6bf0a49561..abb3696b4462f077277c0fa2a83be7d80674ed1a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index 01753bd0dc81af493fc6c2d97fb62ee76d5fd905..8c8fe9fc3f2eb969360b2419866ce352dfc216ab 100644 (file)
@@ -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
index 8e4347c6231dafaa57e5e68d2e1f897c0b0a5a3f..4db6e1ce25dfe927cf0d5fbcecc3b0d1ae43fd68 100644 (file)
@@ -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
This page took 0.1436 seconds and 5 git commands to generate.