From: François Dumont Date: Thu, 18 Jul 2019 21:52:35 +0000 (+0000) Subject: stl_tempbuf.h (__detail::__return_temporary_buffer): New. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f48d9d19dd30bea216dd54d6875c7b3e04d0b945;p=gcc.git stl_tempbuf.h (__detail::__return_temporary_buffer): New. 2019-07-18 François Dumont * include/bits/stl_tempbuf.h (__detail::__return_temporary_buffer): New. (~_Temporary_buffer()): Use latter. (_Temporary_buffer(_FIterator, size_type)): Likewise. From-SVN: r273586 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 16fc84407c7..b3c2f7d1b08 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2019-07-18 François Dumont + + * include/bits/stl_tempbuf.h (__detail::__return_temporary_buffer): New. + (~_Temporary_buffer()): Use latter. + (_Temporary_buffer(_FIterator, size_type)): Likewise. + 2019-07-17 Andreas Schwab * config/abi/post/ia64-linux-gnu/baseline_symbols.txt: Update. diff --git a/libstdc++-v3/include/bits/stl_tempbuf.h b/libstdc++-v3/include/bits/stl_tempbuf.h index fa78ee53eb4..d746945a8f5 100644 --- a/libstdc++-v3/include/bits/stl_tempbuf.h +++ b/libstdc++-v3/include/bits/stl_tempbuf.h @@ -63,6 +63,21 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION + namespace __detail + { + template + inline void + __return_temporary_buffer(_Tp* __p, + size_t __len __attribute__((__unused__))) + { +#if __cpp_sized_deallocation + ::operator delete(__p, __len); +#else + ::operator delete(__p); +#endif + } + } + /** * @brief Allocates a temporary buffer. * @param __len The number of objects of type Tp. @@ -112,7 +127,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return_temporary_buffer(_Tp* __p) { ::operator delete(__p); } - /** * This class is used in two places: stl_algo.h and ext/memory, * where it is wrapped as the temporary_buffer class. See @@ -165,7 +179,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ~_Temporary_buffer() { std::_Destroy(_M_buffer, _M_buffer + _M_len); - std::return_temporary_buffer(_M_buffer); + std::__detail::__return_temporary_buffer(_M_buffer, _M_len); } private: @@ -185,7 +199,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __ucr(_Pointer __first, _Pointer __last, _ForwardIterator __seed) { - if(__first == __last) + if (__first == __last) return; _Pointer __cur = __first; @@ -244,22 +258,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Temporary_buffer(_ForwardIterator __seed, size_type __original_len) : _M_original_len(__original_len), _M_len(0), _M_buffer(0) { - __try - { - std::pair __p(std::get_temporary_buffer< - value_type>(_M_original_len)); - _M_buffer = __p.first; - _M_len = __p.second; - if (_M_buffer) - std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len, - __seed); - } - __catch(...) + std::pair __p( + std::get_temporary_buffer(_M_original_len)); + + if (__p.first) { - std::return_temporary_buffer(_M_buffer); - _M_buffer = 0; - _M_len = 0; - __throw_exception_again; + __try + { + std::__uninitialized_construct_buf(__p.first, __p.first + __p.second, + __seed); + _M_buffer = __p.first; + _M_len = __p.second; + } + __catch(...) + { + std::__detail::__return_temporary_buffer(__p.first, __p.second); + __throw_exception_again; + } } }