This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libc/17979] inconsistency between uchar.h and stdint.h


https://sourceware.org/bugzilla/show_bug.cgi?id=17979

--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  15081be9938d0b84634e81b7f0e433ff62406430 (commit)
      from  d80441dde6ec7993f11c18f20de7e76d454a209e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=15081be9938d0b84634e81b7f0e433ff62406430

commit 15081be9938d0b84634e81b7f0e433ff62406430
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Wed Feb 7 20:33:55 2018 +0000

    Define char16_t, char32_t consistently with uint_least16_t, uint_least32_t
(bug 17979).

    As noted in bug 17979 (and as I noted earlier in
    <https://sourceware.org/ml/libc-alpha/2012-02/msg00647.html>), uchar.h
    has gratuitously complicated code to determine the types for char16_t
    and char32_t, and to reject including that header for pre-C11
    compilers not defining __CHAR16_TYPE__ and __CHAR32_TYPE__.  Since
    those types are always required to match uint_least16_t and
    uint_least32_t, which glibc knows how to define without reference to
    such predefined macros, it's safe just to define those types the same
    as the *least* types are defined in stdint.h, so allowing the header
    to work with (for example) GCC 4.3.

    This patch implements that.  bits/types.h is made to define
    __int_leastN_t and __uint_leastN_t so the logic for those types can
    stay in a single place, and stdint.h is made to use those __*_t to
    define the public *_t types.  uchar.h is then made to use
    __uint_least16_t and __uint_least32_t to define char16_t and char32_t,
    so simplifying the logic there.  A new test is added that verifies the
    types chosen for char16_t and char32_t do indeed match the types the
    compiler uses for u"" and U"" string literals.

    Tested for x86_64.  (I have not tested with any of the older compilers
    for which this would actually make a difference to whether you can
    include uchar.h.)

        [BZ #17979]
        * posix/bits/types.h (__int_least8_t): New typedef.
        (__uint_least8_t): Likewise.
        (__int_least16_t): Likewise.
        (__uint_least16_t): Likewise.
        (__int_least32_t): Likewise.
        (__uint_least32_t): Likewise.
        (__int_least64_t): Likewise.
        (__uint_least64_t): Likewise.
        * sysdeps/generic/stdint.h (int_least8_t): Define using
        __int_least8_t.
        (int_least16_t): Define using __int_least16_t.
        (int_least32_t): Define using __int_least32_t.
        (int_least64_t): Define using __int_least64_t.
        (uint_least8_t): Define using __uint_least8_t.
        (uint_least16_t): Define using __uint_least16_t.
        (uint_least32_t): Define using __uint_least32_t.
        (uint_least64_t): Define using __uint_least64_t.
        * wcsmbs/uchar.h: Include <bits/types.h>.
        (char16_t): Define using __uint_least16_t conditional only on
        [!__USE_ISOCXX11].
        (char32_t): Define using __uint_least32_t conditional only on
        [!__USE_ISOCXX11].
        * wcsmbs/test-char-types.c: New file.
        * wcsmbs/Makefile (tests): Add test-char-types.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                  |   26 ++++++++++++++++++++++++++
 posix/bits/types.h                         |   10 ++++++++++
 sysdeps/generic/stdint.h                   |   26 ++++++++------------------
 wcsmbs/Makefile                            |    2 +-
 elf/tst-pie2.c => wcsmbs/test-char-types.c |   21 ++++++---------------
 wcsmbs/uchar.h                             |   17 +++++------------
 6 files changed, 56 insertions(+), 46 deletions(-)
 copy elf/tst-pie2.c => wcsmbs/test-char-types.c (78%)

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]