From: Tom de Vries Date: Tue, 24 Sep 2024 11:47:56 +0000 (+0200) Subject: [gdb] Make scope_exit constructor throw X-Git-Tag: gdb-16-branchpoint~831 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6078478a9075a3ad3d1370dc540e11425948074c;p=thirdparty%2Fbinutils-gdb.git [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::value && std::is_nothrow_constructible::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 [1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0052r5.pdf --- diff --git a/gdbsupport/scope-exit.h b/gdbsupport/scope-exit.h index 86b2969f817..2871a59c002 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