OSDN Git Service

2008-09-10 Paolo Carlini <paolo.carlini@oracle.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Sep 2008 16:48:47 +0000 (16:48 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Sep 2008 16:48:47 +0000 (16:48 +0000)
PR libstdc++/37455
* include/bits/locale_facets.h (ctype<char>::_M_narrow_init,
ctype<char>::_M_widen_init): Don't define inline.
* config/locale/darwin/ctype_members.cc: ... define here.
* config/locale/gnu/ctype_members.cc: ... likewise.
* config/locale/generic/ctype_members.cc: ... likewise.
* config/abi/pre/gnu.ver: Export.

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

libstdc++-v3/ChangeLog
libstdc++-v3/config/abi/pre/gnu.ver
libstdc++-v3/config/locale/darwin/ctype_members.cc
libstdc++-v3/config/locale/generic/ctype_members.cc
libstdc++-v3/config/locale/gnu/ctype_members.cc
libstdc++-v3/include/bits/locale_facets.h

index 4175d69..b3ef9c0 100644 (file)
@@ -1,3 +1,13 @@
+2008-09-10  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR libstdc++/37455
+       * include/bits/locale_facets.h (ctype<char>::_M_narrow_init,
+       ctype<char>::_M_widen_init): Don't define inline.
+       * config/locale/darwin/ctype_members.cc: ... define here.
+       * config/locale/gnu/ctype_members.cc: ... likewise.
+       * config/locale/generic/ctype_members.cc: ... likewise.
+       * config/abi/pre/gnu.ver: Export.
+
 2008-09-09  Benjamin Kosnik  <bkoz@redhat.com>
 
        * doc/xml/manual/abi.xml: Update for new releases.
index 2603401..a3529ba 100644 (file)
@@ -950,6 +950,10 @@ GLIBCXX_3.4.11 {
     _ZNSbIwSt11char_traitsIwESaIwEEaSESt16initializer_listIwE;
     _ZNSbIwSt11char_traitsIwESaIwEEpLESt16initializer_listIwE;
 
+    # ctype<char>::_M_narrow_init and _M_widen_init
+    _ZNKSt5ctypeIcE14_M_narrow_initEv;
+    _ZNKSt5ctypeIcE13_M_widen_initEv;
+
 } GLIBCXX_3.4.10;
 
 # Symbols in the support library (libsupc++) have their own tag.
index 63a422c..f839971 100644 (file)
 
 namespace std
 {
+  // Fill in the narrowing cache and flag whether all values are
+  // valid or not.  _M_narrow_ok is set to 2 if memcpy can't
+  // be used.
+  void
+  ctype<char>::
+  _M_narrow_init() const
+  {
+    char __tmp[sizeof(_M_narrow)];
+    for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i)
+      __tmp[__i] = __i;
+    do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
+    
+    _M_narrow_ok = 1;
+    if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
+      _M_narrow_ok = 2;
+    else
+      {
+       // Deal with the special case of zero: renarrow with a
+       // different default and compare.
+       char __c;
+       do_narrow(__tmp, __tmp + 1, 1, &__c);
+       if (__c == 1)
+         _M_narrow_ok = 2;
+      }
+  }
+
+  void
+  ctype<char>::
+  _M_widen_init() const
+  {
+    char __tmp[sizeof(_M_widen)];
+    for (size_t __i = 0; __i < sizeof(_M_widen); ++__i)
+      __tmp[__i] = __i;
+    do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
+    
+    _M_widen_ok = 1;
+    // Set _M_widen_ok to 2 if memcpy can't be used.
+    if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
+      _M_widen_ok = 2;
+  }
+
   // NB: The other ctype<char> specializations are in src/locale.cc and
   // various /config/os/* files.
 
index 6b4fbd7..036f685 100644 (file)
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
+  // Fill in the narrowing cache and flag whether all values are
+  // valid or not.  _M_narrow_ok is set to 2 if memcpy can't
+  // be used.
+  void
+  ctype<char>::
+  _M_narrow_init() const
+  {
+    char __tmp[sizeof(_M_narrow)];
+    for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i)
+      __tmp[__i] = __i;
+    do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
+    
+    _M_narrow_ok = 1;
+    if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
+      _M_narrow_ok = 2;
+    else
+      {
+       // Deal with the special case of zero: renarrow with a
+       // different default and compare.
+       char __c;
+       do_narrow(__tmp, __tmp + 1, 1, &__c);
+       if (__c == 1)
+         _M_narrow_ok = 2;
+      }
+  }
+
+  void
+  ctype<char>::
+  _M_widen_init() const
+  {
+    char __tmp[sizeof(_M_widen)];
+    for (size_t __i = 0; __i < sizeof(_M_widen); ++__i)
+      __tmp[__i] = __i;
+    do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
+    
+    _M_widen_ok = 1;
+    // Set _M_widen_ok to 2 if memcpy can't be used.
+    if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
+      _M_widen_ok = 2;
+  }
+
   // NB: The other ctype<char> specializations are in src/locale.cc and
   // various /config/os/* files.
   ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
index 9e51760..f124339 100644 (file)
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
+  // Fill in the narrowing cache and flag whether all values are
+  // valid or not.  _M_narrow_ok is set to 2 if memcpy can't
+  // be used.
+  void
+  ctype<char>::
+  _M_narrow_init() const
+  {
+    char __tmp[sizeof(_M_narrow)];
+    for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i)
+      __tmp[__i] = __i;
+    do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
+    
+    _M_narrow_ok = 1;
+    if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
+      _M_narrow_ok = 2;
+    else
+      {
+       // Deal with the special case of zero: renarrow with a
+       // different default and compare.
+       char __c;
+       do_narrow(__tmp, __tmp + 1, 1, &__c);
+       if (__c == 1)
+         _M_narrow_ok = 2;
+      }
+  }
+
+  void
+  ctype<char>::
+  _M_widen_init() const
+  {
+    char __tmp[sizeof(_M_widen)];
+    for (size_t __i = 0; __i < sizeof(_M_widen); ++__i)
+      __tmp[__i] = __i;
+    do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
+    
+    _M_widen_ok = 1;
+    // Set _M_widen_ok to 2 if memcpy can't be used.
+    if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
+      _M_widen_ok = 2;
+  }
+
   // NB: The other ctype<char> specializations are in src/locale.cc and
   // various /config/os/* files.
   ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
index cb9c021..340d21d 100644 (file)
@@ -1,7 +1,7 @@
 // Locale support -*- C++ -*-
 
 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007
+// 2006, 2007, 2008
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -1161,43 +1161,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       }
 
     private:
-
-      void _M_widen_init() const
-      {
-       char __tmp[sizeof(_M_widen)];
-       for (size_t __i = 0; __i < sizeof(_M_widen); ++__i)
-         __tmp[__i] = __i;
-       do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
-
-       _M_widen_ok = 1;
-       // Set _M_widen_ok to 2 if memcpy can't be used.
-       if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
-         _M_widen_ok = 2;
-      }
-
-      // Fill in the narrowing cache and flag whether all values are
-      // valid or not.  _M_narrow_ok is set to 2 if memcpy can't
-      // be used.
-      void _M_narrow_init() const
-      {
-       char __tmp[sizeof(_M_narrow)];
-       for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i)
-         __tmp[__i] = __i;
-       do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
-
-       _M_narrow_ok = 1;
-       if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
-         _M_narrow_ok = 2;
-       else
-         {
-           // Deal with the special case of zero: renarrow with a
-           // different default and compare.
-           char __c;
-           do_narrow(__tmp, __tmp + 1, 1, &__c);
-           if (__c == 1)
-             _M_narrow_ok = 2;
-         }
-      }
+      void _M_narrow_init() const;
+      void _M_widen_init() const;
     };
 
   template<>