libstdc++: Do not use facets cached in ios for ATL128 build [PR103387]
For the powerpc64le build with two different long double representations, we cannot use the ios_base::_M_num_put and ios_base::_M_num_get pointers, because they might have been initialized in a translation unit using the other long double type. With the changes to add __try_use_facet to GCC 13 the cache isn't really needed now, we can just access the right facet in the locale directly, without needing RTTI checks. libstdc++-v3/ChangeLog: PR libstdc++/103387 * include/bits/istream.tcc (istream::_M_extract(ValueT&)): Use std::use_facet instead of cached _M_num_get facet. (istream::operator>>(short&)): Likewise. (istream::operator>>(int&)): Likewise. * include/bits/ostream.tcc (ostream::_M_insert(ValueT)): Use std::use_facet instead of cached _M_num_put facet.
This commit is contained in:
parent
b3c5933ee7
commit
ec12639c82
2 changed files with 20 additions and 0 deletions
|
@ -102,7 +102,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
ios_base::iostate __err = ios_base::goodbit;
|
||||
__try
|
||||
{
|
||||
#ifndef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT
|
||||
const __num_get_type& __ng = __check_facet(this->_M_num_get);
|
||||
#else
|
||||
const __num_get_type& __ng
|
||||
= use_facet<__num_get_type>(this->_M_ios_locale);
|
||||
#endif
|
||||
__ng.get(*this, 0, *this, __err, __v);
|
||||
}
|
||||
__catch(__cxxabiv1::__forced_unwind&)
|
||||
|
@ -132,7 +137,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
__try
|
||||
{
|
||||
long __l;
|
||||
#ifndef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT
|
||||
const __num_get_type& __ng = __check_facet(this->_M_num_get);
|
||||
#else
|
||||
const __num_get_type& __ng
|
||||
= use_facet<__num_get_type>(this->_M_ios_locale);
|
||||
#endif
|
||||
__ng.get(*this, 0, *this, __err, __l);
|
||||
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
|
@ -177,7 +187,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
__try
|
||||
{
|
||||
long __l;
|
||||
#ifndef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT
|
||||
const __num_get_type& __ng = __check_facet(this->_M_num_get);
|
||||
#else
|
||||
const __num_get_type& __ng
|
||||
= use_facet<__num_get_type>(this->_M_ios_locale);
|
||||
#endif
|
||||
__ng.get(*this, 0, *this, __err, __l);
|
||||
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
|
|
|
@ -69,7 +69,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
ios_base::iostate __err = ios_base::goodbit;
|
||||
__try
|
||||
{
|
||||
#ifndef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT
|
||||
const __num_put_type& __np = __check_facet(this->_M_num_put);
|
||||
#else
|
||||
const __num_put_type& __np
|
||||
= use_facet<__num_put_type>(this->_M_ios_locale);
|
||||
#endif
|
||||
if (__np.put(*this, *this, this->fill(), __v).failed())
|
||||
__err |= ios_base::badbit;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue