diff options
author | Tom de Vries <tdevries@suse.de> | 2024-09-24 13:47:56 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2024-09-24 13:47:56 +0200 |
commit | 6078478a9075a3ad3d1370dc540e11425948074c (patch) | |
tree | 6973a77602e1485fa16178a37389276097aafd5f | |
parent | b3926d6ad14413ca64e7828c98823c52d7e74307 (diff) | |
download | binutils-6078478a9075a3ad3d1370dc540e11425948074c.zip binutils-6078478a9075a3ad3d1370dc540e11425948074c.tar.gz binutils-6078478a9075a3ad3d1370dc540e11425948074c.tar.bz2 |
[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
-rw-r--r-- | gdbsupport/scope-exit.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/gdbsupport/scope-exit.h b/gdbsupport/scope-exit.h index 86b2969..2871a59 100644 --- a/gdbsupport/scope-exit.h +++ b/gdbsupport/scope-exit.h @@ -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, |