From: Simon Marchi Date: Mon, 10 Mar 2025 15:10:47 +0000 (-0400) Subject: gdb: clear internalvar on destruction X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bab86877e484f978ebbd1bfd5cdf15773b36ceee;p=thirdparty%2Fbinutils-gdb.git gdb: clear internalvar on destruction The data associated to an internalvar is destroyed when changing the kind of the internalvar, but not when it is destroyed. Fix that by calling clear_internalvar in ~internalvar. A move constructor becomes needed to avoid freeing things multiple times when internalvars are moved (and if we forget it, clang helpfully gives us a -Wdeprecated-copy-with-user-provided-dtor warning). Change-Id: I427718569208fd955ea25e94d341dde356725033 Reviewed-By: Guinevere Larsen --- diff --git a/gdb/value.c b/gdb/value.c index 18c9f749467..8b8b5c8f4de 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -1872,6 +1872,19 @@ struct internalvar : name (std::move (name)) {} + internalvar (internalvar &&other) + : name (std::move(other.name)), + kind (other.kind), + u (other.u) + { + other.kind = INTERNALVAR_VOID; + } + + ~internalvar () + { + clear_internalvar (this); + } + std::string name; /* We support various different kinds of content of an internal variable.