aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2025-03-10 11:10:47 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2025-03-19 15:15:28 -0400
commitbab86877e484f978ebbd1bfd5cdf15773b36ceee (patch)
tree3f992bff4025a5441102a5c9786bc51150c19e79 /gdb
parenta7f139db2216d73fb40ab6ac43377e716589f6be (diff)
downloadbinutils-bab86877e484f978ebbd1bfd5cdf15773b36ceee.zip
binutils-bab86877e484f978ebbd1bfd5cdf15773b36ceee.tar.gz
binutils-bab86877e484f978ebbd1bfd5cdf15773b36ceee.tar.bz2
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 <guinevere@redhat.com>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/value.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gdb/value.c b/gdb/value.c
index 18c9f74..8b8b5c8 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.