From: Joel Brobecker <brobecker@adacore.com>
To: gdb-patches@sourceware.org
Subject: ping: [RFA/testsuite] ptype of structs with anonymous type fields
Date: Fri, 21 Dec 2007 06:52:00 -0000 [thread overview]
Message-ID: <20071221062750.GL6154@adacore.com> (raw)
In-Reply-To: <20070828175128.GC3874@adacore.com>
Hello,
I never received any comments regarding the test addition below.
The idea is to add a test that verifies how GDB handles structs
that have a large nesting level.
Currently, the behavior appears to be as documented (at least in
the code). For the following code:
struct highest
{
int a;
struct
{
int b;
struct { int c; } anonymous_level_2;
} anonymous_level_1;
} the_highest;
GDB currently shows:
(gdb) ptype the_highest
type = struct highest {
int a;
struct {
int b;
struct {...} anonymous_level_2;
} anonymous_level_1;
}
Or in other words, the contents of anonymous_level_2 is eluded,
because of the nesting level.
(gdb) ptype the_highest.anonymous_level_1
type = struct {
int b;
struct {
int c;
} anonymous_level_2;
}
In this case, we're printing one field of our struct, so field
anonymous_level_2 becomes less "deep", and thus gets printed.
Do we agree that this is the expected behavior? If yes, then I think
I can commit the testsuite change, since this part is relatively
straightforward. But I want to make sure that we do have the correct
behavior!
I'm thinking that this would deserve some extra documentation, but
I'm not sure where to put it. Maybe together with the rest of the
"ptype" documentation... Eli?
Thanks!
> In case I made the subject of this message so short that it doesn't make
> any sense anymore, the purpose of this message is to add a new test in
> printing a structure that contains a field whose type is anonymous. More
> particularly, the purpose of this test is to verify what GDB prints for
> a field that is directly inside the structure, and a field that is
> one level deeper.
>
> The test itself is pretty straightforward, but I'm asking for approval
> because I want to make sure that the current behavior is indeed the expected
> behavior.
>
> See http://www.sourceware.org/ml/gdb-patches/2007-08/msg00494.html
> for the inspiration for this new test.
>
> 2007-08-28 Joel Brobecker <brobecker@adacore.com>
>
> * gdb.base/ptype.c (highest): New struct type.
> (the_highest): New variable of that type.
> (main): Add dummy assignment to a field of variable the_highest.
>
> Tested on x86-linux.
> OK to apply?
>
> Thanks,
> --
> Joel
> Index: gdb.base/ptype.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.base/ptype.c,v
> retrieving revision 1.4
> diff -u -p -r1.4 ptype.c
> --- gdb.base/ptype.c 4 Jan 2006 14:46:17 -0000 1.4
> +++ gdb.base/ptype.c 28 Aug 2007 17:43:28 -0000
> @@ -198,6 +198,16 @@ struct outer_struct {
> long outer_long;
> } nested_su;
>
> +struct highest
> +{
> + int a;
> + struct
> + {
> + int b;
> + struct { int c; } anonymous_level_2;
> + } anonymous_level_1;
> +} the_highest;
> +
> /**** Enumerations *******/
>
> enum
> @@ -352,6 +362,8 @@ int main ()
> nested_su.outer_int = 0;
> v_t_struct_p = 0;
>
> + the_highest.a = 0;
> +
> v_boolean = FALSE;
> v_boolean2 = my_false;
> return 0;
> Index: gdb.base/ptype.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.base/ptype.exp,v
> retrieving revision 1.11
> diff -u -p -r1.11 ptype.exp
> --- gdb.base/ptype.exp 23 Aug 2007 18:14:17 -0000 1.11
> +++ gdb.base/ptype.exp 28 Aug 2007 17:43:28 -0000
> @@ -532,6 +532,22 @@ gdb_test "ptype nested_su.inner_struct_i
>
> gdb_test "ptype nested_su.inner_union_instance" "type = union ${outer}inner_union \{.*\[\r\n\] int inner_union_int;.*\[\r\n\] (long|long int|int) inner_union_long;.*\[\r\n\]\}.*" "ptype nested union"
>
> +# Print the type description of variable the_highest, and verify that
> +# the type description for the fields whose type is anonymous are
> +# correctly printed (at nesting level 1 and 2).
> +
> +gdb_test "ptype the_highest" \
> + "type = struct highest \{.*\[\r\n\] *int a;.*\[\r\n\] *struct \{.*\[\r\n\] *int b;.*\[\r\n\] *struct \{\.\.\.\} anonymous_level_2;.*\[\r\n\] *\} anonymous_level_1;.*\[\r\n\]}.*" \
> + "ptype the_highest"
> +
> +# Print the type descrption for one of the fields of variable the_highest.
> +# The purpose is to verify that the type of a field that was printed above
> +# as "struct {...}" is now printed in a more descriptive way (because the
> +# nesting level is now one level less).
> +
> +gdb_test "ptype the_highest.anonymous_level_1" \
> + "type = struct \{.*\[\r\n\] *int b;.*\[\r\n\] *struct \{.*\[\r\n\] *int c;.*\[\r\n\] *\} anonymous_level_2;.*\[\r\n\]}.*" \
> + "ptype the_highest"
>
> get_debug_format
>
--
Joel
next prev parent reply other threads:[~2007-12-21 6:28 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-28 17:51 Joel Brobecker
2007-12-21 6:52 ` Joel Brobecker [this message]
2007-12-21 13:24 ` ping: " Daniel Jacobowitz
2007-12-22 6:02 ` Joel Brobecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071221062750.GL6154@adacore.com \
--to=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox