[committed] libstdc++: Add noexcept to some std::promise shared state internals

Message ID 20240619163604.1791831-1-jwakely@redhat.com
State Committed
Commit 5d156a91853a7863d674ed35df87562e3a1eba0e
Headers
Series [committed] libstdc++: Add noexcept to some std::promise shared state internals |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 fail Patch failed to apply

Commit Message

Jonathan Wakely June 19, 2024, 4:35 p.m. UTC
  Tested x86_64-linux. Pushed to trunk.

-- >8 --

Making the state ready for a std::promise<void> only needs to move a
unique_ptr, which cannot throw. Make its call operator noexcept.
Similarly, making the state ready by storing an exception_ptr also can't
throw, so make that call operator noexcept too.

libstdc++-v3/ChangeLog:

	* include/std/future (_State_baseV2::_Setter<R, void>): Add
	noexcept to call operator.
	(_State_baseV2::_Setter<R, __exception_ptr_tag>): Likewise.
---
 libstdc++-v3/include/std/future | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Patch

diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index 9e75ae98b13..d7be205af50 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -532,7 +532,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	{
 	  static_assert(is_void<_Res>::value, "Only used for promise<void>");
 
-	  typename promise<_Res>::_Ptr_type operator()() const
+	  typename promise<_Res>::_Ptr_type operator()() const noexcept
 	  { return std::move(_M_promise->_M_storage); }
 
 	  promise<_Res>*    _M_promise;
@@ -545,7 +545,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
         struct _Setter<_Res, __exception_ptr_tag>
         {
 	  // Used by std::promise to store an exception as the result.
-          typename promise<_Res>::_Ptr_type operator()() const
+          typename promise<_Res>::_Ptr_type operator()() const noexcept
           {
             _M_promise->_M_storage->_M_error = *_M_ex;
             return std::move(_M_promise->_M_storage);