aboutsummaryrefslogtreecommitdiff
path: root/gdb/value.h
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2016-11-21 21:04:59 -0700
committerTom Tromey <tom@tromey.com>2017-01-10 19:14:13 -0700
commit0cf082277804ba3747be70a4013019f68b92bb84 (patch)
tree4277ab15a1d85e67962e4c39229a94c705886c14 /gdb/value.h
parenteb115069323087e15210c09e3b581be0f6fb5852 (diff)
Use scoped_value_mark in dwarf2_evaluate_loc_desc_full
This changes dwarf2_evaluate_loc_desc_full to use scoped_value_mark. Note that this function previously called do_cleanup using the same cleanup multiple times. I had thought this was buggy, but re-reading make_my_cleanup2 indicates that it is not. Nevertheless it is surprising, and at least one of the calls (the one that is completely removed in this patch) seems to have been done under the assumption that it would still have some effect. 2017-01-10 Tom Tromey <tom@tromey.com> * value.h (scoped_value_mark::~scoped_value_mark): Call free_to_mark. (scoped_value_mark::free_to_mark): New method. * dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use scoped_value_mark.
Diffstat (limited to 'gdb/value.h')
-rw-r--r--gdb/value.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/gdb/value.h b/gdb/value.h
index 0c5ab284b3..c57ea7979e 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -728,7 +728,17 @@ class scoped_value_mark
~scoped_value_mark ()
{
- value_free_to_mark (m_value);
+ free_to_mark ();
+ }
+
+ /* Free the values currently on the value stack. */
+ void free_to_mark ()
+ {
+ if (m_value != NULL)
+ {
+ value_free_to_mark (m_value);
+ m_value = NULL;
+ }
}
private: