PR gdb/9067
* cp-valprint.c (cp_print_value_fields) Fix use of obstacks. cp_print_static_field) Fix use of obstacks. * gdb.cp/pr9067.exp: New * gdb.cp/pr9067.cc: New * gdb.cp/Makefile.in (EXECUTABLES): Add pr9067
This commit is contained in:
parent
e3e9f5a291
commit
99903ae39e
6 changed files with 92 additions and 17 deletions
|
@ -1,3 +1,9 @@
|
|||
2010-02-08 Chris Moller <cmoller@redhat.com>
|
||||
|
||||
PR gdb/9067
|
||||
* cp-valprint.c (cp_print_value_fields) Fix use of obstacks.
|
||||
cp_print_static_field) Fix use of obstacks.
|
||||
|
||||
2010-02-08 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* linux-nat.c (linux_nat_resume): In non-stop, also only tag
|
||||
|
|
|
@ -154,10 +154,13 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
|||
struct type **dont_print_vb, int dont_print_statmem)
|
||||
{
|
||||
int i, len, n_baseclasses;
|
||||
char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
|
||||
int fields_seen = 0;
|
||||
|
||||
CHECK_TYPEDEF (type);
|
||||
|
||||
if (recurse == 0
|
||||
&& obstack_object_size (&dont_print_statmem_obstack) > 0)
|
||||
obstack_free (&dont_print_statmem_obstack, NULL);
|
||||
|
||||
fprintf_filtered (stream, "{");
|
||||
len = TYPE_NFIELDS (type);
|
||||
|
@ -177,14 +180,13 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
|||
fprintf_filtered (stream, "<No data fields>");
|
||||
else
|
||||
{
|
||||
struct obstack tmp_obstack = dont_print_statmem_obstack;
|
||||
|
||||
void *statmem_obstack_top = NULL;
|
||||
|
||||
if (dont_print_statmem == 0)
|
||||
{
|
||||
/* If we're at top level, carve out a completely fresh
|
||||
chunk of the obstack and use that until this particular
|
||||
invocation returns. */
|
||||
obstack_finish (&dont_print_statmem_obstack);
|
||||
/* Set the current printed-statics stack top. */
|
||||
statmem_obstack_top
|
||||
= obstack_next_free (&dont_print_statmem_obstack);
|
||||
}
|
||||
|
||||
for (i = n_baseclasses; i < len; i++)
|
||||
|
@ -305,10 +307,9 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
|||
|
||||
if (dont_print_statmem == 0)
|
||||
{
|
||||
/* Free the space used to deal with the printing
|
||||
of the members from top level. */
|
||||
obstack_free (&dont_print_statmem_obstack, last_dont_print);
|
||||
dont_print_statmem_obstack = tmp_obstack;
|
||||
/* In effect, a pop of the printed-statics stack. */
|
||||
if (obstack_object_size (&dont_print_statmem_obstack) > 0)
|
||||
obstack_free (&dont_print_statmem_obstack, statmem_obstack_top);
|
||||
}
|
||||
|
||||
if (options->pretty)
|
||||
|
@ -515,8 +516,8 @@ cp_print_static_field (struct type *type,
|
|||
|
||||
first_dont_print
|
||||
= (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
|
||||
i = (CORE_ADDR *) obstack_next_free (&dont_print_statmem_obstack)
|
||||
- first_dont_print;
|
||||
i = obstack_object_size (&dont_print_statmem_obstack)
|
||||
/ sizeof (CORE_ADDR);
|
||||
|
||||
while (--i >= 0)
|
||||
{
|
||||
|
@ -671,8 +672,6 @@ Show printing of object's derived type based on vtable info."), NULL,
|
|||
show_objectprint,
|
||||
&setprintlist, &showprintlist);
|
||||
|
||||
obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
|
||||
obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));
|
||||
obstack_specify_allocation (&dont_print_statmem_obstack,
|
||||
32 * sizeof (CORE_ADDR), sizeof (CORE_ADDR),
|
||||
xmalloc, xfree);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
Mon Feb 8 12:54:54 2010 Chris Moller <moller@mollerware.com>
|
||||
|
||||
PR gdb/9067
|
||||
* gdb.cp/pr9067.exp: New
|
||||
* gdb.cp/pr9067.cc: New
|
||||
* gdb.cp/Makefile.in (EXECUTABLES): Add pr9067
|
||||
|
||||
2010-02-08 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* lib/gdb.exp (gdb_test_timeout): New global variable.
|
||||
|
|
|
@ -4,7 +4,7 @@ srcdir = @srcdir@
|
|||
EXECUTABLES = ambiguous annota2 anon-union cplusfuncs cttiadd \
|
||||
derivation inherit local member-ptr method misc \
|
||||
overload ovldbreak ref-typ ref-typ2 templates userdef virtfunc namespace \
|
||||
ref-types ref-params method2 pr9594 gdb2495 virtfunc2
|
||||
ref-types ref-params method2 pr9594 gdb2495 virtfunc2 pr9067
|
||||
|
||||
all info install-info dvi install uninstall installcheck check:
|
||||
@echo "Nothing to be done for $@..."
|
||||
|
|
17
gdb/testsuite/gdb.cp/pr9067.cc
Normal file
17
gdb/testsuite/gdb.cp/pr9067.cc
Normal file
|
@ -0,0 +1,17 @@
|
|||
struct B;
|
||||
|
||||
struct A {
|
||||
static B b;
|
||||
};
|
||||
|
||||
struct B {
|
||||
A a;
|
||||
};
|
||||
|
||||
B A::b;
|
||||
B b;
|
||||
|
||||
int main(int,char **)
|
||||
{
|
||||
return 0;
|
||||
}
|
46
gdb/testsuite/gdb.cp/pr9067.exp
Normal file
46
gdb/testsuite/gdb.cp/pr9067.exp
Normal file
|
@ -0,0 +1,46 @@
|
|||
# Copyright 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
set nl "\[\r\n\]+"
|
||||
|
||||
if { [skip_cplus_tests] } { continue }
|
||||
|
||||
load_lib "cp-support.exp"
|
||||
|
||||
set testfile "pr9067"
|
||||
set srcfile ${testfile}.cc
|
||||
set binfile ${objdir}/${subdir}/${testfile}
|
||||
|
||||
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {c++ debug}] != "" } {
|
||||
untested pr9067.exp
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_exit
|
||||
gdb_start
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
if ![runto_main] then {
|
||||
perror "couldn't run to breakpoint"
|
||||
continue
|
||||
}
|
||||
|
||||
gdb_test "print b" ".*same as static member.*"
|
||||
|
||||
|
||||
gdb_exit
|
||||
return 0
|
||||
|
Loading…
Reference in a new issue