On 06.01.2020 16:24, 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; > > I seem to recall looking at this previously and noting that the change > to ctype_base::mask is an ABI break. It means that code compiled with > old versions of GCC or on old versions of NetBSD will not be ABI > compatible with code compiled by a new GCC on a new version of NetBSD. > > If the NetBSD maintainers are OK with that, then we can go ahead and > change it. > >
We are fine with ABI breaks as we bump libstdc++ major on each upgrade in base.
signature.asc
Description: OpenPGP digital signature