--- gcc-6.4.0/libstdc++-v3/config/os/generic/ctype_base.h.old 2016-01-04 08:30:50.652828000 -0600 +++ gcc-6.4.0/libstdc++-v3/config/os/generic/ctype_base.h 2017-10-16 07:51:26.226276759 -0500 @@ -40,19 +40,27 @@ // 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 int mask; - static const mask upper = 1 << 0; - static const mask lower = 1 << 1; - static const mask alpha = 1 << 2; - static const mask digit = 1 << 3; - static const mask xdigit = 1 << 4; - static const mask space = 1 << 5; - static const mask print = 1 << 6; - static const mask graph = (1 << 2) | (1 << 3) | (1 << 9); // alnum|punct - static const mask cntrl = 1 << 8; - static const mask punct = 1 << 9; - static const mask alnum = (1 << 2) | (1 << 3); // alpha|digit - static const mask blank = 1 << 10; + typedef unsigned short int mask; +/* horrible ugly code from glibc */ +#ifndef _ISbit +# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +# define _ISbit(i) (1 << (i)) +# else +# define _ISbit(i) (i < 8 ? (1 << i << 8) : (1 << i >> 8)) +# endif +#endif + static const mask upper = _ISbit(0); + static const mask lower = _ISbit(1); + static const mask alpha = _ISbit(2); + static const mask digit = _ISbit(3); + static const mask xdigit = _ISbit(4); + static const mask space = _ISbit(5); + static const mask print = _ISbit(6); + static const mask graph = _ISbit(7); + static const mask cntrl = _ISbit(9); + static const mask punct = _ISbit(10); + static const mask alnum = _ISbit(11); + static const mask blank = _ISbit(8); }; _GLIBCXX_END_NAMESPACE_VERSION --- gcc-6.4.0/libstdc++-v3/config/os/generic/ctype_configure_char.cc.old 2016-01-04 08:30:50.652828000 -0600 +++ gcc-6.4.0/libstdc++-v3/config/os/generic/ctype_configure_char.cc 2017-10-16 08:37:57.986260218 -0500 @@ -40,7 +40,105 @@ const ctype_base::mask* ctype<char>::classic_table() throw() - { return 0; } + { + static ctype_base::mask mask[256] = { + cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, + cntrl, cntrl | blank | space, cntrl | space, cntrl | space, + cntrl | space, cntrl | space, cntrl, cntrl, + cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, + cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, + print | space | blank, + print | punct, print | punct, + print | punct, print | punct, + print | punct, print | punct, + print | punct, print | punct, + print | punct, print | punct, + print | punct, print | punct, + print | punct, print | punct, + print | punct, + print | alnum | digit | xdigit, print | alnum | digit | xdigit, + print | alnum | digit | xdigit, print | alnum | digit | xdigit, + print | alnum | digit | xdigit, print | alnum | digit | xdigit, + print | alnum | digit | xdigit, print | alnum | digit | xdigit, + print | alnum | digit | xdigit, print | alnum | digit | xdigit, + print | punct, print | punct, + print, print, print, + print | punct, print, + print | alnum | xdigit | alpha | upper, + print | alnum | xdigit | alpha | upper, + print | alnum | xdigit | alpha | upper, + print | alnum | xdigit | alpha | upper, + print | alnum | xdigit | alpha | upper, + print | alnum | xdigit | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | alnum | alpha | upper, + print | punct, print | punct, print | punct, + print | punct, print | punct, print | punct, + print | alnum | xdigit | alpha | lower, + print | alnum | xdigit | alpha | lower, + print | alnum | xdigit | alpha | lower, + print | alnum | xdigit | alpha | lower, + print | alnum | xdigit | alpha | lower, + print | alnum | xdigit | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | alnum | alpha | lower, + print | punct, print | punct, print | punct, print | punct, + cntrl, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }; + return mask; + } ctype<char>::ctype(__c_locale, const mask* __table, bool __del, size_t __refs)