On 06.01.2020 16:34, Jonathan Wakely wrote: > On 22/12/19 09:36 +1000, Gerald Pfeifer wrote: >> Hi Matthew, >> >> On Mon, 4 Feb 2019, Matthew Bauer wrote: >>> The ctype_base.h file in libstdc++-v3 is out of date for NetBSD. They >>> have changed their ctype.h definition. It was updated in their intree >>> libstdc++-v3 but not in the GCC one. My understanding is this is a >>> straightforward rewrite. I've attached my own patch, but the file can >>> be obtained directly here: >>> >>> http://cvsweb.netbsd.org/bsdweb.cgi/src/external/gpl3/gcc/dist/libstdc%2b%2b-v3/config/os/bsd/netbsd/ctype_base.h >>> >>> >>> With the attached patch, libstdc++-v3 can succesfully be built with >>> NetBSD headers (along with --disable-libcilkrts). >> >> I noticed this has not been applied yet, nor seen a follow-up?, and also >> noticed it went to the gcc-patches list, but not libstd...@gcc.gnu.org. >> >> Let me re-address this to libstd...@gcc.gnu.org in the hope the >> maintainers there will have a look. >> >> Gerald > >> diff --git a/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h >> b/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h >> index ff3ec893974..21eccf9fde1 100644 >> --- a/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h >> +++ b/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h >> @@ -38,40 +38,46 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION >> /// @brief Base class for ctype. >> struct ctype_base >> { >> - // Non-standard typedefs. >> - typedef const unsigned char* __to_type; >> >> // NB: Offsets into ctype<char>::_M_table force a particular size >> // on the mask type. Because of this, we don't use an enum. >> - typedef unsigned char mask; >> >> #ifndef _CTYPE_U >> - static const mask upper = _U; >> - static const mask lower = _L; >> - static const mask alpha = _U | _L; >> - static const mask digit = _N; >> - static const mask xdigit = _N | _X; >> - static const mask space = _S; >> - static const mask print = _P | _U | _L | _N | _B; >> - static const mask graph = _P | _U | _L | _N; >> - static const mask cntrl = _C; >> - static const mask punct = _P; >> - static const mask alnum = _U | _L | _N; >> + // Non-standard typedefs. >> + typedef const unsigned char* __to_type; >> + >> + typedef unsigned char mask; >> + >> + static const mask upper = _U; >> + static const mask lower = _L; >> + static const mask alpha = _U | _L; >> + static const mask digit = _N; >> + static const mask xdigit = _N | _X; >> + static const mask space = _S; >> + static const mask print = _P | _U | _L | _N | _B; >> + static const mask graph = _P | _U | _L | _N; >> + static const mask cntrl = _C; >> + static const mask punct = _P; >> + static const mask alnum = _U | _L | _N; >> #else >> - static const mask upper = _CTYPE_U; >> - static const mask lower = _CTYPE_L; >> - static const mask alpha = _CTYPE_U | _CTYPE_L; >> - static const mask digit = _CTYPE_N; >> - static const mask xdigit = _CTYPE_N | _CTYPE_X; >> - static const mask space = _CTYPE_S; >> - static const mask print = _CTYPE_P | _CTYPE_U | _CTYPE_L | >> _CTYPE_N | _CTYPE_B; >> - static const mask graph = _CTYPE_P | _CTYPE_U | _CTYPE_L | >> _CTYPE_N; >> - static const mask cntrl = _CTYPE_C; >> - static const mask punct = _CTYPE_P; >> - static const mask alnum = _CTYPE_U | _CTYPE_L | _CTYPE_N; >> + typedef const unsigned short* __to_type; >> + >> + typedef unsigned short mask; >> + >> + static const mask upper = _CTYPE_U; >> + static const mask lower = _CTYPE_L; >> + static const mask alpha = _CTYPE_A; >> + static const mask digit = _CTYPE_D; >> + static const mask xdigit = _CTYPE_X; >> + static const mask space = _CTYPE_S; >> + static const mask print = _CTYPE_R; >> + static const mask graph = _CTYPE_G; >> + static const mask cntrl = _CTYPE_C; >> + static const mask punct = _CTYPE_P; >> + static const mask alnum = _CTYPE_A | _CTYPE_D; >> #endif >> #if __cplusplus >= 201103L >> - static const mask blank = space; >> + static const mask blank = space; >> #endif >> }; >> >> diff --git a/libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc >> b/libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc >> index ed3b7cd0d6a..33358e8f5d8 100644 >> --- a/libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc >> +++ b/libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc >> @@ -38,11 +38,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION >> >> // Information as gleaned from /usr/include/ctype.h >> >> - extern "C" const u_int8_t _C_ctype_[]; >> - >> const ctype_base::mask* >> ctype<char>::classic_table() throw() >> - { return _C_ctype_ + 1; } >> + { return _C_ctype_tab_ + 1; } > > The first patch attached to PR 64271 (i.e. > https://gcc.gnu.org/bugzilla/attachment.cgi?id=34254 ) does that > differently. Is it safe to make this change unconditionally? >
This file is NetBSD only (at least in theory) and we likely can do the right think without conditional build here. > Who authored these patches? We don't seem to have a changelog, not > even an author's name and email address, as required for any patch. > > Here was my previous review, where I mentioned the ABI break: > https://gcc.gnu.org/ml/libstdc++/2014-12/msg00069.html > I didn't get a reply. > Adding Maya, who can hopefully shed some light on it.
signature.asc
Description: OpenPGP digital signature