From: Chris Moller Date: Thu, 22 Apr 2010 20:12:07 +0000 (+0000) Subject: * cp-valprint.c (cp_print_value_fields): Replaced obstack_base() X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f56dcb8879cd1ef225707588cbf07599fcf7855d;p=binutils-gdb.git * cp-valprint.c (cp_print_value_fields): Replaced obstack_base() method of popping recursion-detection stack with a method based on obstack_object_size(). (Similar to the PR9167 patch below, but for the static array obstack rather than the static member obstack.) --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7d007b96e42..57b29ab2c15 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2010-04-22 Chris Moller + + * cp-valprint.c (cp_print_value_fields): Replaced obstack_base() + method of popping recursion-detection stack with a method based on + obstack_object_size(). (Similar to the PR9167 patch below, but for + the static array obstack rather than the static member obstack.) + 2010-04-22 H.J. Lu * amd64-linux-nat.c (amd64_linux_gregset64_reg_offset): Removed. diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index c865ba41ad6..64aa3e0ef52 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -186,18 +186,18 @@ cp_print_value_fields (struct type *type, struct type *real_type, fprintf_filtered (stream, ""); else { - int obstack_initial_size = 0; - void *stat_array_obstack_top = NULL; + int statmem_obstack_initial_size = 0; + int stat_array_obstack_initial_size = 0; if (dont_print_statmem == 0) { - obstack_initial_size = + statmem_obstack_initial_size = obstack_object_size (&dont_print_statmem_obstack); if (last_set_recurse != recurse) { - stat_array_obstack_top - = obstack_next_free (&dont_print_stat_array_obstack); + stat_array_obstack_initial_size = + obstack_object_size (&dont_print_stat_array_obstack); last_set_recurse = recurse; } } @@ -323,12 +323,12 @@ cp_print_value_fields (struct type *type, struct type *real_type, int obstack_final_size = obstack_object_size (&dont_print_statmem_obstack); - if (obstack_final_size > obstack_initial_size) { + if (obstack_final_size > statmem_obstack_initial_size) { /* In effect, a pop of the printed-statics stack. */ void *free_to_ptr = obstack_next_free (&dont_print_statmem_obstack) - - (obstack_final_size - obstack_initial_size); + (obstack_final_size - statmem_obstack_initial_size); obstack_free (&dont_print_statmem_obstack, free_to_ptr); @@ -336,9 +336,18 @@ cp_print_value_fields (struct type *type, struct type *real_type, if (last_set_recurse != recurse) { - if (obstack_object_size (&dont_print_stat_array_obstack) > 0) - obstack_free (&dont_print_stat_array_obstack, - stat_array_obstack_top); + int obstack_final_size = + obstack_object_size (&dont_print_stat_array_obstack); + + if (obstack_final_size > stat_array_obstack_initial_size) + { + void *free_to_ptr = + obstack_next_free (&dont_print_stat_array_obstack) - + (obstack_final_size - stat_array_obstack_initial_size); + + obstack_free (&dont_print_stat_array_obstack, + free_to_ptr); + } last_set_recurse = -1; } }