diff options
-rw-r--r-- | libstdc++-v3/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/config/abi/pre/gnu.ver | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/fs_path.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/locale_conv.h | 10 |
4 files changed, 19 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index d2f8ed4..61841e8 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,13 @@ 2019-04-26 Jonathan Wakely <jwakely@redhat.com> + * config/abi/pre/gnu.ver (GLIBCXX_3.4): Replace wildcard that matches + wstring::_M_replace_dispatch with more specific patterns. + * include/bits/fs_path.h (path::_S_convert_loc<_InputIterator>): + Create const std::string to avoid redundant call to _S_convert_loc + with non-const pointers. + * include/bits/locale_conv.h (__do_str_codecvt): Use if-constexpr to + avoid unnecessary basic_string::assign instantiations. + * include/std/memory (__uses_alloc_args): Add string-literal to static_assert, to match the one in __uses_alloc. [__cpp_concepts] (_Std_pair): Use C++2a syntax for concept. diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index e8cf6f0..7eff4e9 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -299,7 +299,8 @@ GLIBCXX_3.4 { _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructE[jmy]wRKS1_; _ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv; _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_chars*; - _ZNSbIwSt11char_traitsIwESaIwEE[0-9][0-9]_M_replace*; + _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_aux*; + _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safe*; _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroy*; _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_dispose*; _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEv; diff --git a/libstdc++-v3/include/bits/fs_path.h b/libstdc++-v3/include/bits/fs_path.h index 3674b43..28878c6 100644 --- a/libstdc++-v3/include/bits/fs_path.h +++ b/libstdc++-v3/include/bits/fs_path.h @@ -539,7 +539,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 _S_convert_loc(_InputIterator __src, __null_terminated, const std::locale& __loc) { - std::string __s = _S_string_from_iter(__src); + const std::string __s = _S_string_from_iter(__src); return _S_convert_loc(__s.data(), __s.data() + __s.size(), __loc); } diff --git a/libstdc++-v3/include/bits/locale_conv.h b/libstdc++-v3/include/bits/locale_conv.h index d7510df..4cb9c39 100644 --- a/libstdc++-v3/include/bits/locale_conv.h +++ b/libstdc++-v3/include/bits/locale_conv.h @@ -88,8 +88,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__result == codecvt_base::noconv) { - __outstr.assign(__first, __last); - __count = __last - __first; + // The codecvt facet will only return noconv when the types are + // the same, so avoid instantiating basic_string::assign otherwise + if _GLIBCXX17_CONSTEXPR (is_same<typename _Codecvt::intern_type, + typename _Codecvt::extern_type>()) + { + __outstr.assign(__first, __last); + __count = __last - __first; + } } else { |