From 6078478a9075a3ad3d1370dc540e11425948074c Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 24 Sep 2024 13:47:56 +0200 Subject: [PATCH] [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 --- gdbsupport/scope-exit.h | 3 +++ 1 file changed, 3 insertions(+) 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