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>
|
2010-02-08 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* linux-nat.c (linux_nat_resume): In non-stop, also only tag
|
* 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)
|
struct type **dont_print_vb, int dont_print_statmem)
|
||||||
{
|
{
|
||||||
int i, len, n_baseclasses;
|
int i, len, n_baseclasses;
|
||||||
char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
|
|
||||||
int fields_seen = 0;
|
int fields_seen = 0;
|
||||||
|
|
||||||
CHECK_TYPEDEF (type);
|
CHECK_TYPEDEF (type);
|
||||||
|
|
||||||
|
if (recurse == 0
|
||||||
|
&& obstack_object_size (&dont_print_statmem_obstack) > 0)
|
||||||
|
obstack_free (&dont_print_statmem_obstack, NULL);
|
||||||
|
|
||||||
fprintf_filtered (stream, "{");
|
fprintf_filtered (stream, "{");
|
||||||
len = TYPE_NFIELDS (type);
|
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>");
|
fprintf_filtered (stream, "<No data fields>");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct obstack tmp_obstack = dont_print_statmem_obstack;
|
void *statmem_obstack_top = NULL;
|
||||||
|
|
||||||
if (dont_print_statmem == 0)
|
if (dont_print_statmem == 0)
|
||||||
{
|
{
|
||||||
/* If we're at top level, carve out a completely fresh
|
/* Set the current printed-statics stack top. */
|
||||||
chunk of the obstack and use that until this particular
|
statmem_obstack_top
|
||||||
invocation returns. */
|
= obstack_next_free (&dont_print_statmem_obstack);
|
||||||
obstack_finish (&dont_print_statmem_obstack);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = n_baseclasses; i < len; i++)
|
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)
|
if (dont_print_statmem == 0)
|
||||||
{
|
{
|
||||||
/* Free the space used to deal with the printing
|
/* In effect, a pop of the printed-statics stack. */
|
||||||
of the members from top level. */
|
if (obstack_object_size (&dont_print_statmem_obstack) > 0)
|
||||||
obstack_free (&dont_print_statmem_obstack, last_dont_print);
|
obstack_free (&dont_print_statmem_obstack, statmem_obstack_top);
|
||||||
dont_print_statmem_obstack = tmp_obstack;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options->pretty)
|
if (options->pretty)
|
||||||
|
@ -515,8 +516,8 @@ cp_print_static_field (struct type *type,
|
||||||
|
|
||||||
first_dont_print
|
first_dont_print
|
||||||
= (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
|
= (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
|
||||||
i = (CORE_ADDR *) obstack_next_free (&dont_print_statmem_obstack)
|
i = obstack_object_size (&dont_print_statmem_obstack)
|
||||||
- first_dont_print;
|
/ sizeof (CORE_ADDR);
|
||||||
|
|
||||||
while (--i >= 0)
|
while (--i >= 0)
|
||||||
{
|
{
|
||||||
|
@ -671,8 +672,6 @@ Show printing of object's derived type based on vtable info."), NULL,
|
||||||
show_objectprint,
|
show_objectprint,
|
||||||
&setprintlist, &showprintlist);
|
&setprintlist, &showprintlist);
|
||||||
|
|
||||||
|
obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
|
||||||
obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));
|
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>
|
2010-02-08 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* lib/gdb.exp (gdb_test_timeout): New global variable.
|
* lib/gdb.exp (gdb_test_timeout): New global variable.
|
||||||
|
|
|
@ -4,7 +4,7 @@ srcdir = @srcdir@
|
||||||
EXECUTABLES = ambiguous annota2 anon-union cplusfuncs cttiadd \
|
EXECUTABLES = ambiguous annota2 anon-union cplusfuncs cttiadd \
|
||||||
derivation inherit local member-ptr method misc \
|
derivation inherit local member-ptr method misc \
|
||||||
overload ovldbreak ref-typ ref-typ2 templates userdef virtfunc namespace \
|
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:
|
all info install-info dvi install uninstall installcheck check:
|
||||||
@echo "Nothing to be done for $@..."
|
@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