OSDN Git Service

2003-10-12 Andreas Tobler <a.tobler@schweiz.ch>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 12 Oct 2003 07:34:30 +0000 (07:34 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 12 Oct 2003 07:34:30 +0000 (07:34 +0000)
    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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72389 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/config/os/generic/ctype_inline.h

index a274c24..6f631d2 100644 (file)
@@ -1,3 +1,12 @@
+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.
+
 2003-10-11  Bernardo Innocenti  <bernie@develer.com>
 
        * crossconfig.m4 (*-uclinux*): New target.
index 0da0c7c..5f24fe6 100644 (file)
       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)
                  {
                    __testis = false;
                    break;
                  }
-               __ret &= __testis;
+               __ret |= __testis;
              }
          }
-       return __ret & __any_match;
+       return __ret;
       }
   }
    
     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;
            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;
              }