mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-17 13:10:12 +08:00
PR 9167
* cp-valprint.c (cp_print_value_fields): Replaced obstack_base() method of popping recursion-detection stack with a method based on obstack_object_size(). * gdb.cp/Makefile.in (EXECUTABLES): Added pr9167. * gdb.cp/pr9167.cc: New file. * gdb.cp/pr9167.exp: New file.
This commit is contained in:
parent
34a7d6c6d3
commit
0b66f31738
@ -1,3 +1,10 @@
|
||||
2010-04-21 Chris Moller <cmoller@redhat.com>
|
||||
|
||||
PR 9167
|
||||
* cp-valprint.c (cp_print_value_fields): Replaced obstack_base()
|
||||
method of popping recursion-detection stack with a method based on
|
||||
obstack_object_size().
|
||||
|
||||
2010-04-21 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||
|
||||
PR pascal/11492.
|
||||
@ -3184,7 +3191,7 @@
|
||||
addr_bit. Adjust LOAD_ADDR sign for cross-arch inferiors.
|
||||
|
||||
2010-02-17 Tristan Gingold <gingold@adacore.com>
|
||||
Petr Hluzín <petr.hluzin@gmail.com>
|
||||
Petr Hluzín <petr.hluzin@gmail.com>
|
||||
|
||||
* avr-tdep.c (avr_scan_prologue): Convert an if statement to a
|
||||
gdb_assert. Fix info->size for SIG prologue.
|
||||
|
@ -186,14 +186,13 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
||||
fprintf_filtered (stream, "<No data fields>");
|
||||
else
|
||||
{
|
||||
void *statmem_obstack_top = NULL;
|
||||
int obstack_initial_size = 0;
|
||||
void *stat_array_obstack_top = NULL;
|
||||
|
||||
if (dont_print_statmem == 0)
|
||||
{
|
||||
/* Set the current printed-statics stack top. */
|
||||
statmem_obstack_top
|
||||
= obstack_next_free (&dont_print_statmem_obstack);
|
||||
obstack_initial_size =
|
||||
obstack_object_size (&dont_print_statmem_obstack);
|
||||
|
||||
if (last_set_recurse != recurse)
|
||||
{
|
||||
@ -321,8 +320,19 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
||||
|
||||
if (dont_print_statmem == 0)
|
||||
{
|
||||
if (obstack_object_size (&dont_print_statmem_obstack) > 0)
|
||||
obstack_free (&dont_print_statmem_obstack, statmem_obstack_top);
|
||||
int obstack_final_size =
|
||||
obstack_object_size (&dont_print_statmem_obstack);
|
||||
|
||||
if (obstack_final_size > 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_free (&dont_print_statmem_obstack,
|
||||
free_to_ptr);
|
||||
}
|
||||
|
||||
if (last_set_recurse != recurse)
|
||||
{
|
||||
@ -555,7 +565,6 @@ cp_print_static_field (struct type *type,
|
||||
addr = value_address (val);
|
||||
obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
|
||||
sizeof (CORE_ADDR));
|
||||
|
||||
CHECK_TYPEDEF (type);
|
||||
cp_print_value_fields (type, value_enclosing_type (val),
|
||||
value_contents_all (val),
|
||||
|
@ -1,3 +1,11 @@
|
||||
Wed Apr 21 12:47:26 2010 Chris Moller <cmoller@redhat.com>
|
||||
|
||||
PR 9167
|
||||
* gdb.cp/Makefile.in (EXECUTABLES): Added pr9167.
|
||||
* gdb.cp/pr9167.cc: New file.
|
||||
* gdb.cp/pr9167.exp: New file.
|
||||
|
||||
|
||||
2010-04-21 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||
|
||||
PR pascal/11492.
|
||||
|
@ -5,7 +5,7 @@ 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 pr9067 \
|
||||
pr1072 pr10687
|
||||
pr1072 pr10687 pr9167
|
||||
|
||||
all info install-info dvi install uninstall installcheck check:
|
||||
@echo "Nothing to be done for $@..."
|
||||
|
36
gdb/testsuite/gdb.cp/pr9167.cc
Normal file
36
gdb/testsuite/gdb.cp/pr9167.cc
Normal file
@ -0,0 +1,36 @@
|
||||
#include <iostream>
|
||||
|
||||
template<typename DATA>
|
||||
struct ATB
|
||||
{
|
||||
int data;
|
||||
ATB() : data(0) {}
|
||||
};
|
||||
|
||||
|
||||
template<typename DATA,
|
||||
typename DerivedType >
|
||||
class A : public ATB<DATA>
|
||||
{
|
||||
public:
|
||||
static DerivedType const DEFAULT_INSTANCE;
|
||||
};
|
||||
|
||||
template<typename DATA, typename DerivedType>
|
||||
const DerivedType A<DATA, DerivedType>::DEFAULT_INSTANCE;
|
||||
|
||||
class B : public A<int, B>
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
B b;
|
||||
// If this if-block is removed then GDB shall
|
||||
// not infinitely recurse when trying to print b.
|
||||
|
||||
return 0; // marker
|
||||
}
|
||||
|
||||
|
31
gdb/testsuite/gdb.cp/pr9167.exp
Normal file
31
gdb/testsuite/gdb.cp/pr9167.exp
Normal file
@ -0,0 +1,31 @@
|
||||
#Copyright 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 testfile pr9167
|
||||
set srcfile ${testfile}.cc
|
||||
if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] {
|
||||
return -1
|
||||
}
|
||||
|
||||
if ![runto_main] then {
|
||||
fail "Can't run to main"
|
||||
return
|
||||
}
|
||||
|
||||
gdb_breakpoint [gdb_get_line_number "marker"]
|
||||
gdb_continue_to_breakpoint "marker"
|
||||
|
||||
gdb_test "p b" "{<A<int, B>> = {<ATB<int>> = {data = 0}, static DEFAULT_INSTANCE = <optimized out>}, <No data fields>}"
|
||||
|
Loading…
Reference in New Issue
Block a user