* 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>
|
2005-03-29 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
* arm-linux-nat.c (store_register, store_regs): Handle
|
* 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,
|
c_value_print (struct value *val, struct ui_file *stream, int format,
|
||||||
enum val_prettyprint pretty)
|
enum val_prettyprint pretty)
|
||||||
{
|
{
|
||||||
struct type *type = value_type (val);
|
struct type *type, *real_type;
|
||||||
struct type *real_type;
|
|
||||||
int full, top, using_enc;
|
int full, top, using_enc;
|
||||||
|
|
||||||
/* If it is a pointer, indicate what it points to.
|
/* 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
|
C++: if it is a member pointer, we will take care
|
||||||
of that when we print it. */
|
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
|
/* Hack: remove (char *) for char strings. Their
|
||||||
type is indicated by the quoted string anyway. */
|
type is indicated by the quoted string anyway. */
|
||||||
if (TYPE_CODE (type) == TYPE_CODE_PTR &&
|
if (TYPE_CODE (type) == TYPE_CODE_PTR
|
||||||
TYPE_NAME (type) == NULL &&
|
&& TYPE_NAME (type) == NULL
|
||||||
TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL &&
|
&& TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL
|
||||||
strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
|
&& strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
|
||||||
{
|
{
|
||||||
/* Print nothing */
|
/* Print nothing */
|
||||||
}
|
}
|
||||||
|
@ -556,11 +558,12 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
|
||||||
{
|
{
|
||||||
/* normal case */
|
/* normal case */
|
||||||
fprintf_filtered (stream, "(");
|
fprintf_filtered (stream, "(");
|
||||||
type_print (type, "", stream, -1);
|
type_print (value_type (val), "", stream, -1);
|
||||||
fprintf_filtered (stream, ") ");
|
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 */
|
/* Attempt to determine real type of object */
|
||||||
real_type = value_rtti_type (val, &full, &top, &using_enc);
|
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
|
/* Note: When we look up RTTI entries, we don't get any information on
|
||||||
const or volatile attributes */
|
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 */
|
/* No RTTI information, so let's do our best */
|
||||||
fprintf_filtered (stream, "(%s ?) ",
|
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>
|
2005-03-27 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
* gdb.base/bigcore.c (main): Add missing mode argument in open
|
* 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