diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/varobj.c | 12 |
2 files changed, 14 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b2dd5f4..1d40c30 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2006-05-03 Vladimir Prus <ghost@cs.msu.su> + + * varobj.c (c_value_of_variable): Ignore top-level references. + (Committed by Jim Blandy.) + 2006-04-30 Mark Kettenis <kettenis@gnu.org> * breakpoint.c (insert_single_step_breakpoint): Make a failure to diff --git a/gdb/varobj.c b/gdb/varobj.c index c16e088..c664bfd 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -2054,10 +2054,16 @@ c_variable_editable (struct varobj *var) static char * c_value_of_variable (struct varobj *var) { - /* BOGUS: if val_print sees a struct/class, it will print out its - children instead of "{...}" */ + /* BOGUS: if val_print sees a struct/class, or a reference to one, + it will print out its children instead of "{...}". So we need to + catch that case explicitly. */ + struct type *type = get_type (var); - switch (TYPE_CODE (get_type (var))) + /* Strip top-level references. */ + while (TYPE_CODE (type) == TYPE_CODE_REF) + type = check_typedef (TYPE_TARGET_TYPE (type)); + + switch (TYPE_CODE (type)) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: |