re PR libstdc++/37455 (Code bloat for ostream.widen('\n'))
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. From-SVN: r140238
This commit is contained in:
parent
b554826c78
commit
6c43852a18
6 changed files with 140 additions and 38 deletions
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -42,6 +42,47 @@
|
|||
|
||||
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.
|
||||
|
||||
|
|
|
@ -41,6 +41,47 @@
|
|||
|
||||
_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)
|
||||
|
|
|
@ -40,6 +40,47 @@
|
|||
|
||||
_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)
|
||||
|
|
|
@ -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<>
|
||||
|
|
Loading…
Add table
Reference in a new issue