diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6738267ec6f..3385cfac28d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2015-01-30 Simon Marchi + + * varobj.c (varobj_get_path_expr): Set var->path_expr. + * c-varobj.c (c_path_expr_of_child): Set local var instead of + child->path_expr. + (cplus_path_expr_of_child): Same. + 2015-01-30 Simon Marchi * mi-cmd-var.c (print_varobj): Free varobj_get_expression diff --git a/gdb/c-varobj.c b/gdb/c-varobj.c index 1db0957f38c..bd0e5fb9d3b 100644 --- a/gdb/c-varobj.c +++ b/gdb/c-varobj.c @@ -433,9 +433,11 @@ c_name_of_child (struct varobj *parent, int index) static char * c_path_expr_of_child (struct varobj *child) { + char *path_expr; + c_describe_child (child->parent, child->index, NULL, NULL, NULL, - &child->path_expr); - return child->path_expr; + &path_expr); + return path_expr; } static struct value * @@ -906,9 +908,11 @@ cplus_name_of_child (struct varobj *parent, int index) static char * cplus_path_expr_of_child (struct varobj *child) { + char *path_expr; + cplus_describe_child (child->parent, child->index, NULL, NULL, NULL, - &child->path_expr); - return child->path_expr; + &path_expr); + return path_expr; } static struct value * diff --git a/gdb/varobj.c b/gdb/varobj.c index 6c9257ddeba..28d388e7355 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -1034,16 +1034,17 @@ varobj_get_path_expr_parent (struct varobj *var) char * varobj_get_path_expr (struct varobj *var) { - if (var->path_expr != NULL) - return var->path_expr; - else + if (var->path_expr == NULL) { /* For root varobjs, we initialize path_expr when creating varobj, so here it should be child varobj. */ gdb_assert (!is_root_p (var)); - return (*var->root->lang_ops->path_expr_of_child) (var); + + var->path_expr = (*var->root->lang_ops->path_expr_of_child) (var); } + + return var->path_expr; } const struct language_defn *