commit 407cb192dcac2602aebaa7e262419adb580ecca6 Author: cmoller Date: Thu Apr 22 20:12:06 2010 +0000 * 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.) ### 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. --- 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; } }