This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] [RFC] python: gdb.Type: strip typedefs past pointers too


On Mon, 20 Sep 2010 12:47:16 +0200, Paul Bolle wrote:
> On Mon, 2010-09-20 at 12:04 +0200, Jan Kratochvil wrote:
> > On Fri, 17 Sep 2010 21:55:56 +0200, Paul Bolle wrote:
> > > (gdb) ptype wchar_t
> > > type = long int
> > > (gdb) ptype wchar_t *
> > > type = long int *

I can confirm it here:

(gdb) ptype wchar_t *
type = int *


> Daniel explained that this seems to be a bug in the ptype command.

I also thought so, therefore tried the fix below but it regresses on:

 (gdb) ptype foop
-type = struct foo {
-    int a;
-    int b;
-} *
-PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (statically)
+type = struct foo *
+FAIL: gdb.base/opaque.exp: ptype on opaque struct pointer (statically)

Still if `a' or `b' are typedefs they are preserved undereferenced.

I would generally prefer to use always whatis; but that does not work for:
(gdb) whatis struct foo
type = struct foo

This is a longterm issue that `ptype' is too much aggreesive while `whatis' is
too little aggresive.


> Do you mean that the current text is ambiguous?

Yes.

> In the commit message of my draft patch I noted that strip_typedefs()
> "doesn't really behave as advertised (well, as I understand the
> advertisement)". I understood that text to mean that behavior similar to
> that of the ptype command was intended.

I understood it as the intended behavior was that of check_typedef.
This is also how the function is implemented.

BTW I am +1 for AndrÃ's suggested Python wrapper (or even +0.5 for the Phil's
suggested new parameter.)


Thanks,
Jan


--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -723,7 +723,7 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
     case TYPE_CODE_FUNC:
     case TYPE_CODE_METHOD:
     case TYPE_CODE_METHODPTR:
-      c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
+      c_type_print_base (TYPE_TARGET_TYPE (type), stream, show - 1, level);
       break;
 
     case TYPE_CODE_STRUCT:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]