+2019-06-14 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline
+ 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.
+
2019-06-14 Jonathan Wakely <jwakely@redhat.com>
Backport from mainline
_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);
}
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
{