diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2025-03-10 11:10:47 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2025-03-19 15:15:28 -0400 |
commit | bab86877e484f978ebbd1bfd5cdf15773b36ceee (patch) | |
tree | 3f992bff4025a5441102a5c9786bc51150c19e79 /gdb | |
parent | a7f139db2216d73fb40ab6ac43377e716589f6be (diff) | |
download | binutils-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.c | 13 |
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. |