* c-valprint.c (c_value_print): Fix up some formatting. Use
check_typedef. testsuite/ * gdb.base/ptr-typedef.exp, gdb.base/ptr-typedef.c: New files.
This commit is contained in:
parent
15b6c49f14
commit
8875030493
5 changed files with 108 additions and 11 deletions
|
@ -1,3 +1,8 @@
|
|||
2005-03-29 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* c-valprint.c (c_value_print): Fix up some formatting. Use
|
||||
check_typedef.
|
||||
|
||||
2005-03-29 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* arm-linux-nat.c (store_register, store_regs): Handle
|
||||
|
|
|
@ -491,8 +491,7 @@ int
|
|||
c_value_print (struct value *val, struct ui_file *stream, int format,
|
||||
enum val_prettyprint pretty)
|
||||
{
|
||||
struct type *type = value_type (val);
|
||||
struct type *real_type;
|
||||
struct type *type, *real_type;
|
||||
int full, top, using_enc;
|
||||
|
||||
/* If it is a pointer, indicate what it points to.
|
||||
|
@ -501,15 +500,18 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
|
|||
|
||||
C++: if it is a member pointer, we will take care
|
||||
of that when we print it. */
|
||||
if (TYPE_CODE (type) == TYPE_CODE_PTR ||
|
||||
TYPE_CODE (type) == TYPE_CODE_REF)
|
||||
|
||||
type = check_typedef (value_type (val));
|
||||
|
||||
if (TYPE_CODE (type) == TYPE_CODE_PTR
|
||||
|| TYPE_CODE (type) == TYPE_CODE_REF)
|
||||
{
|
||||
/* Hack: remove (char *) for char strings. Their
|
||||
type is indicated by the quoted string anyway. */
|
||||
if (TYPE_CODE (type) == TYPE_CODE_PTR &&
|
||||
TYPE_NAME (type) == NULL &&
|
||||
TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL &&
|
||||
strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
|
||||
if (TYPE_CODE (type) == TYPE_CODE_PTR
|
||||
&& TYPE_NAME (type) == NULL
|
||||
&& TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL
|
||||
&& strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
|
||||
{
|
||||
/* Print nothing */
|
||||
}
|
||||
|
@ -556,11 +558,12 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
|
|||
{
|
||||
/* normal case */
|
||||
fprintf_filtered (stream, "(");
|
||||
type_print (type, "", stream, -1);
|
||||
type_print (value_type (val), "", stream, -1);
|
||||
fprintf_filtered (stream, ") ");
|
||||
}
|
||||
}
|
||||
if (objectprint && (TYPE_CODE (value_type (val)) == TYPE_CODE_CLASS))
|
||||
|
||||
if (objectprint && (TYPE_CODE (type) == TYPE_CODE_CLASS))
|
||||
{
|
||||
/* Attempt to determine real type of object */
|
||||
real_type = value_rtti_type (val, &full, &top, &using_enc);
|
||||
|
@ -578,7 +581,7 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
|
|||
/* Note: When we look up RTTI entries, we don't get any information on
|
||||
const or volatile attributes */
|
||||
}
|
||||
else if (type != value_enclosing_type (val))
|
||||
else if (type != check_typedef (value_enclosing_type (val)))
|
||||
{
|
||||
/* No RTTI information, so let's do our best */
|
||||
fprintf_filtered (stream, "(%s ?) ",
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2005-03-29 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* gdb.base/ptr-typedef.exp, gdb.base/ptr-typedef.c: New files.
|
||||
|
||||
2005-03-27 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* gdb.base/bigcore.c (main): Add missing mode argument in open
|
||||
|
|
44
gdb/testsuite/gdb.base/ptr-typedef.c
Normal file
44
gdb/testsuite/gdb.base/ptr-typedef.c
Normal file
|
@ -0,0 +1,44 @@
|
|||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2005
|
||||
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 2 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, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
struct foo {
|
||||
int x;
|
||||
};
|
||||
|
||||
typedef struct foo *foz;
|
||||
|
||||
struct foo *foo_ptr;
|
||||
foz foz_ptr;
|
||||
|
||||
int
|
||||
marker1 (void)
|
||||
{
|
||||
return foo_ptr == foz_ptr;
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
struct foo the_foo;
|
||||
foo_ptr = &the_foo;
|
||||
foz_ptr = &the_foo;
|
||||
|
||||
return marker1 ();
|
||||
}
|
41
gdb/testsuite/gdb.base/ptr-typedef.exp
Normal file
41
gdb/testsuite/gdb.base/ptr-typedef.exp
Normal file
|
@ -0,0 +1,41 @@
|
|||
# Copyright 2005 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
if $tracelevel then {
|
||||
strace $tracelevel
|
||||
}
|
||||
|
||||
set testfile ptr-typedef
|
||||
set srcfile ${testfile}.c
|
||||
set binfile ${objdir}/${subdir}/${testfile}
|
||||
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
||||
untested "Couldn't compile test program"
|
||||
return -1
|
||||
}
|
||||
|
||||
# Get things started.
|
||||
|
||||
gdb_exit
|
||||
gdb_start
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
if ![runto marker1] {
|
||||
untested "Couldn't run to marker1"
|
||||
}
|
||||
|
||||
gdb_test "print foo_ptr" "\\\$$decimal = \\\(struct foo \\\*\\\) $hex"
|
||||
gdb_test "print foz_ptr" "\\\$$decimal = \\\(foz\\\) $hex"
|
Loading…
Reference in a new issue