mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-02 00:43:44 +08:00
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>
|
||||
|
||||
* 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,
|
||||
// but we know that the string member in an exception has not been "leaked"
|
||||
// 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
|
||||
: 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
|
||||
{ _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::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
|
||||
: exception(e), _M_msg(e._M_msg) { }
|
||||
@ -76,10 +87,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
runtime_error::operator=(const runtime_error& e) noexcept
|
||||
{ _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::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:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user