mirror of git://gcc.gnu.org/git/gcc.git
Fix bootstrap with --enable-fully-dynamic-string
PR libstdc++/86447 * src/c++11/cow-stdexcept.cc [_GLIBCXX_FULLY_DYNAMIC_STRING] (logic_error::logic_error(logic_error&&)) (logic_error::operator=(logic_error&&)) (runtime_error::runtime_error(runtime_error&&)) (runtime_error::operator=(runtime_error&&)): Copy strings instead of moving, to avoid allocating empty reps for moved-from strings. From-SVN: r263590
This commit is contained in:
parent
3f6677f418
commit
891b1d6872
|
|
@ -1,3 +1,13 @@
|
||||||
|
2018-08-16 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
|
PR libstdc++/86447
|
||||||
|
* src/c++11/cow-stdexcept.cc [_GLIBCXX_FULLY_DYNAMIC_STRING]
|
||||||
|
(logic_error::logic_error(logic_error&&))
|
||||||
|
(logic_error::operator=(logic_error&&))
|
||||||
|
(runtime_error::runtime_error(runtime_error&&))
|
||||||
|
(runtime_error::operator=(runtime_error&&)): Copy strings instead of
|
||||||
|
moving, to avoid allocating empty reps for moved-from strings.
|
||||||
|
|
||||||
2018-08-15 Jonathan Wakely <jwakely@redhat.com>
|
2018-08-15 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
* include/experimental/regex: Remove begin/end macros for namespace.
|
* include/experimental/regex: Remove begin/end macros for namespace.
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
// These operations are noexcept even though copying a COW string is not,
|
// These operations are noexcept even though copying a COW string is not,
|
||||||
// but we know that the string member in an exception has not been "leaked"
|
// but we know that the string member in an exception has not been "leaked"
|
||||||
// so copying is a simple reference count increment.
|
// so copying is a simple reference count increment.
|
||||||
|
// For the fully dynamic string moves are not noexcept (due to needing to
|
||||||
|
// allocate an empty string) so we just define the moves as copies here.
|
||||||
|
|
||||||
logic_error::logic_error(const logic_error& e) noexcept
|
logic_error::logic_error(const logic_error& e) noexcept
|
||||||
: exception(e), _M_msg(e._M_msg) { }
|
: exception(e), _M_msg(e._M_msg) { }
|
||||||
|
|
@ -64,10 +66,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
logic_error& logic_error::operator=(const logic_error& e) noexcept
|
logic_error& logic_error::operator=(const logic_error& e) noexcept
|
||||||
{ _M_msg = e._M_msg; return *this; }
|
{ _M_msg = e._M_msg; return *this; }
|
||||||
|
|
||||||
|
#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
|
||||||
logic_error::logic_error(logic_error&& e) noexcept = default;
|
logic_error::logic_error(logic_error&& e) noexcept = default;
|
||||||
|
|
||||||
logic_error&
|
logic_error&
|
||||||
logic_error::operator=(logic_error&& e) noexcept = default;
|
logic_error::operator=(logic_error&& e) noexcept = default;
|
||||||
|
#else
|
||||||
|
logic_error::logic_error(logic_error&& e) noexcept
|
||||||
|
: exception(e), _M_msg(e._M_msg) { }
|
||||||
|
|
||||||
|
logic_error&
|
||||||
|
logic_error::operator=(logic_error&& e) noexcept
|
||||||
|
{ _M_msg = e._M_msg; return *this; }
|
||||||
|
#endif
|
||||||
|
|
||||||
runtime_error::runtime_error(const runtime_error& e) noexcept
|
runtime_error::runtime_error(const runtime_error& e) noexcept
|
||||||
: exception(e), _M_msg(e._M_msg) { }
|
: exception(e), _M_msg(e._M_msg) { }
|
||||||
|
|
@ -76,10 +87,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
runtime_error::operator=(const runtime_error& e) noexcept
|
runtime_error::operator=(const runtime_error& e) noexcept
|
||||||
{ _M_msg = e._M_msg; return *this; }
|
{ _M_msg = e._M_msg; return *this; }
|
||||||
|
|
||||||
|
#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
|
||||||
runtime_error::runtime_error(runtime_error&& e) noexcept = default;
|
runtime_error::runtime_error(runtime_error&& e) noexcept = default;
|
||||||
|
|
||||||
runtime_error&
|
runtime_error&
|
||||||
runtime_error::operator=(runtime_error&& e) noexcept = default;
|
runtime_error::operator=(runtime_error&& e) noexcept = default;
|
||||||
|
#else
|
||||||
|
runtime_error::runtime_error(runtime_error&& e) noexcept
|
||||||
|
: exception(e), _M_msg(e._M_msg) { }
|
||||||
|
|
||||||
|
runtime_error&
|
||||||
|
runtime_error::operator=(runtime_error&& e) noexcept
|
||||||
|
{ _M_msg = e._M_msg; return *this; }
|
||||||
|
#endif
|
||||||
|
|
||||||
// New C++11 constructors:
|
// New C++11 constructors:
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue