diff options
author | Andreas Tobler <a.tobler@schweiz.ch> | 2003-10-12 09:34:30 +0200 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2003-10-12 07:34:30 +0000 |
commit | c411fdaebf75260d7590aa0b11926342ebe0940d (patch) | |
tree | a094d6d2059ec27871b34a4bb53995ec54c60156 /libstdc++-v3/config | |
parent | 33dac2abf58c44a47c72ceb76ecd9b4d510bfe99 (diff) | |
download | gcc-c411fdaebf75260d7590aa0b11926342ebe0940d.zip gcc-c411fdaebf75260d7590aa0b11926342ebe0940d.tar.gz gcc-c411fdaebf75260d7590aa0b11926342ebe0940d.tar.bz2 |
PR libstdc++/11844/11740 (cont)
2003-10-12 Andreas Tobler <a.tobler@schweiz.ch>
Paolo Carlini <pcarlini@unitus.it>
PR libstdc++/11844/11740 (cont)
* config/os/generic/ctype_inline.h (ctype<char>::is):
Generically, use a bitmasksize of 15 (instead of 10);
Fix the logic to actually return (M & m) != 0 as per
22.2.1.1.2.
Co-Authored-By: Paolo Carlini <pcarlini@unitus.it>
From-SVN: r72389
Diffstat (limited to 'libstdc++-v3/config')
-rw-r--r-- | libstdc++-v3/config/os/generic/ctype_inline.h | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/libstdc++-v3/config/os/generic/ctype_inline.h b/libstdc++-v3/config/os/generic/ctype_inline.h index 0da0c7c..5f24fe6 100644 --- a/libstdc++-v3/config/os/generic/ctype_inline.h +++ b/libstdc++-v3/config/os/generic/ctype_inline.h @@ -49,16 +49,14 @@ return _M_table[static_cast<unsigned char>(__c)] & __m; else { - bool __ret = true; - bool __any_match = false; - const size_t __bitmasksize = 10; + bool __ret = false; + const size_t __bitmasksize = 15; size_t __bitcur = 0; // Lowest bitmask in ctype_base == 0 - for (;__ret && __bitcur <= __bitmasksize; ++__bitcur) + for (; __bitcur <= __bitmasksize; ++__bitcur) { - mask __bit = static_cast<mask>(1 << __bitcur); + const mask __bit = static_cast<mask>(1 << __bitcur); if (__m & __bit) { - __any_match = true; bool __testis; switch (__bit) { @@ -99,10 +97,10 @@ __testis = false; break; } - __ret &= __testis; + __ret |= __testis; } } - return __ret & __any_match; + return __ret; } } @@ -116,7 +114,7 @@ else { // Highest bitmask in ctype_base == 10. - const size_t __bitmasksize = 10; + const size_t __bitmasksize = 15; for (;__low < __high; ++__vec, ++__low) { mask __m = 0; @@ -124,7 +122,7 @@ size_t __i = 0; for (;__i <= __bitmasksize; ++__i) { - mask __bit = static_cast<mask>(1 << __i); + const mask __bit = static_cast<mask>(1 << __i); if (this->is(__bit, *__low)) __m |= __bit; } |