libstdc++/7461: ctype<char>::classic_table() returns offset array on cygwin

Christopher Faylor cgf@redhat.com
Thu Aug 1 20:46:00 GMT 2002


The following reply was made to PR libstdc++/7461; it has been noted by GNATS.

From: Christopher Faylor <cgf@redhat.com>
To: Rick Danos <rdanos@hotmail.com>
Cc: bkoz@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org,
   nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Subject: Re: libstdc++/7461: ctype<char>::classic_table() returns offset array on cygwin
Date: Thu, 1 Aug 2002 23:41:54 -0400

 On Thu, Aug 01, 2002 at 04:31:43PM -0600, Rick Danos wrote:
 >Sorry - I believe that now that the offset is being taken into account in
 >the return from classic_table(), it is *no longer* necessary to also have
 >the offsets in the ctype_inline.h functions that reference the mask array.
 >In other words, I don't believe it is necessary to use (_M_table + 1) in the
 >ctype_inline.h functions, but you should now just use _M_table.
 >
 >I appreciate the rapid addressing of this issue, and your and the entire
 >team's work on this product is amazing.
 
 So, should this patch be reverted?  If not, has it been checked into the
 3.2 branch?  I don't see it...
 
 cgf
 
 >----- Original Message -----
 >From: <bkoz@gcc.gnu.org>
 >To: <bkoz@gcc.gnu.org>; <gcc-bugs@gcc.gnu.org>; <gcc-prs@gcc.gnu.org>;
 ><nobody@gcc.gnu.org>; <rdanos@hotmail.com>
 >Sent: Thursday, August 01, 2002 3:39 PM
 >Subject: Re: libstdc++/7461: ctype<char>::classic_table() returns offset
 >array on Cygwin
 >
 >
 >> Synopsis: ctype<char>::classic_table() returns offset array on Cygwin
 >>
 >> Responsible-Changed-From-To: unassigned->bkoz
 >> Responsible-Changed-By: bkoz
 >> Responsible-Changed-When: Thu Aug  1 14:39:18 2002
 >> Responsible-Changed-Why:
 >>     Mine.
 >> State-Changed-From-To: open->feedback
 >> State-Changed-By: bkoz
 >> State-Changed-When: Thu Aug  1 14:39:18 2002
 >> State-Changed-Why:
 >>     Fixed.
 >>
 >>     2002-08-01  Rick Danos  <rdanos@hotmail.com>
 >>
 >>     PR libstdc++/7461
 >>     * config/os/newlib/ctype_noninline.h (classic_table): Add offset.
 >>     * config/os/newlib/ctype_inline.h (is): Use static_cast.
 >>
 >>     Index: config/os/newlib/ctype_inline.h
 >>     ===================================================================
 >>     RCS file: /cvs/gcc/gcc/libstdc++-v3/config/os/newlib/ctype_inline.h,v
 >>     retrieving revision 1.1
 >>     diff -c -p -r1.1 ctype_inline.h
 >>     *** config/os/newlib/ctype_inline.h 24 Jun 2002 05:49:54 -0000 1.1
 >>     --- config/os/newlib/ctype_inline.h 1 Aug 2002 21:38:07 -0000
 >>     ***************
 >>     *** 1,6 ****
 >>       // Locale support -*- C++ -*-
 >>
 >>     ! // Copyright (C) 2000 Free Software Foundation, Inc.
 >>       //
 >>       // This file is part of the GNU ISO C++ Library.  This library is
 >free
 >>       // software; you can redistribute it and/or modify it under the
 >>     --- 1,6 ----
 >>       // Locale support -*- C++ -*-
 >>
 >>     ! // Copyright (C) 2000, 2002 Free Software Foundation, Inc.
 >>       //
 >>       // This file is part of the GNU ISO C++ Library.  This library is
 >free
 >>       // software; you can redistribute it and/or modify it under the
 >>     ***************
 >>     *** 37,50 ****
 >>         bool
 >>         ctype<char>::
 >>         is(mask __m, char __c) const
 >>     !   { return (_M_table + 1)[(unsigned char)(__c)] & __m; }
 >>
 >>         const char*
 >>         ctype<char>::
 >>         is(const char* __low, const char* __high, mask* __vec) const
 >>         {
 >>           while (__low < __high)
 >>     !       *__vec++ = (_M_table + 1)[(unsigned char) (*__low++)];
 >>           return __high;
 >>         }
 >>
 >>     --- 37,50 ----
 >>         bool
 >>         ctype<char>::
 >>         is(mask __m, char __c) const
 >>     !   { return (_M_table + 1)[static_cast<unsigned char>(__c)] & __m; }
 >>
 >>         const char*
 >>         ctype<char>::
 >>         is(const char* __low, const char* __high, mask* __vec) const
 >>         {
 >>           while (__low < __high)
 >>     !       *__vec++ = (_M_table + 1)[static_cast<unsigned
 >char>(*__low++)];
 >>           return __high;
 >>         }
 >>
 >>     ***************
 >>     *** 52,58 ****
 >>         ctype<char>::
 >>         scan_is(mask __m, const char* __low, const char* __high) const
 >>         {
 >>     !     while (__low < __high && !((_M_table + 1)[(unsigned
 >char)(*__low)] & __m))
 >>             ++__low;
 >>           return __low;
 >>         }
 >>     --- 52,59 ----
 >>         ctype<char>::
 >>         scan_is(mask __m, const char* __low, const char* __high) const
 >>         {
 >>     !     while (__low < __high
 >>     !    && !((_M_table + 1)[static_cast<unsigned char>(*__low)] & __m))
 >>             ++__low;
 >>           return __low;
 >>         }
 >>     ***************
 >>     *** 62,73 ****
 >>         scan_not(mask __m, const char* __low, const char* __high) const
 >>         {
 >>           while (__low < __high
 >>     !    && ((_M_table + 1)[(unsigned char)(*__low)] & __m) != 0)
 >>             ++__low;
 >>           return __low;
 >>         }
 >>     -
 >>     -
 >>     -
 >>     -
 >>     -
 >>     --- 63,69 ----
 >>         scan_not(mask __m, const char* __low, const char* __high) const
 >>         {
 >>           while (__low < __high
 >>     !    && ((_M_table + 1)[static_cast<unsigned char>(*__low)] & __m) !=
 >0)
 >>             ++__low;
 >>           return __low;
 >>         }
 >>     Index: config/os/newlib/ctype_noninline.h
 >>     ===================================================================
 >>     RCS file:
 >/cvs/gcc/gcc/libstdc++-v3/config/os/newlib/ctype_noninline.h,v
 >>     retrieving revision 1.1
 >>     diff -c -p -r1.1 ctype_noninline.h
 >>     *** config/os/newlib/ctype_noninline.h 24 Jun 2002 05:49:54 -0000 1.1
 >>     --- config/os/newlib/ctype_noninline.h 1 Aug 2002 21:38:07 -0000
 >>     ***************
 >>     *** 35,41 ****
 >>
 >>         const ctype_base::mask*
 >>         ctype<char>::classic_table() throw()
 >>     !   { return _ctype_; }
 >>
 >>         ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
 >>            size_t __refs)
 >>     --- 35,41 ----
 >>
 >>         const ctype_base::mask*
 >>         ctype<char>::classic_table() throw()
 >>     !   { return _ctype_ + 1; }
 >>
 >>         ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
 >>            size_t __refs)
 >>
 >>
 >http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&p
 >r=7461
 >>



More information about the Gcc-prs mailing list