[gdb] Make scope_exit constructor throw

While reviewing "catch (...)" uses I came across:
...
  scope_exit (EFP &&f)
    try : m_exit_function ((!std::is_lvalue_reference<EFP>::value
			    && std::is_nothrow_constructible<EF, EFP>::value)
			   ? std::move (f)
			   : f)
  {
  }
  catch (...)
    {
      /* "If the initialization of exit_function throws an exception,
	 calls f()."  */
      f ();
    }

...
and while looking up the origin of the comment here [1] I saw right after:
...
throws: Nothing, unless the initialization of exit_function throws
...

I think that means that the exception should be rethrown, so fix this by doing
so.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>

[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0052r5.pdf
This commit is contained in:
Tom de Vries 2024-09-24 13:47:56 +02:00
parent b3926d6ad1
commit 6078478a90

View File

@ -109,6 +109,9 @@ public:
/* "If the initialization of exit_function throws an exception,
calls f()." */
f ();
/* "throws: Nothing, unless the initialization of exit_function
throws." */
throw;
}
template<typename EFP,