From c54eabfaa80258bf2552f9b6642e61b5d24d716b Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sun, 3 Jan 2010 18:55:32 +0000 Subject: [PATCH] gdb/ * gdbtypes.c (check_typedef): New comment on type length. * value.c (allocate_value_lazy): Remove the unused atype variable. New comment on type length. (value_primitive_field): Keep the original TYPE value, new comment. gdb/testsuite/ * gdb.mi/var-cmd.c (do_bitfield_tests): Change "V.sharable" type to "uint_for_mi_testing". --- gdb/ChangeLog | 8 ++++++++ gdb/gdbtypes.c | 11 ++++++++--- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.mi/var-cmd.c | 2 +- gdb/value.c | 18 ++++++++++++++++-- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 188347f5090..208967f9614 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2010-01-03 Jan Kratochvil + Joel Brobecker + + * gdbtypes.c (check_typedef): New comment on type length. + * value.c (allocate_value_lazy): Remove the unused atype variable. New + comment on type length. + (value_primitive_field): Keep the original TYPE value, new comment. + 2010-01-01 Jan Kratochvil * cli/cli-script.c (process_next_line): Rename p1 as p_end and p2 as diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index e427afc6669..255f04a6056 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1342,12 +1342,17 @@ stub_noname_complaint (void) symbols which contain a full definition for the type. This used to be coded as a macro, but I don't think it is called - often enough to merit such treatment. */ + often enough to merit such treatment. -/* Find the real type of TYPE. This function returns the real type, + Find the real type of TYPE. This function returns the real type, after removing all layers of typedefs and completing opaque or stub types. Completion changes the TYPE argument, but stripping of - typedefs does not. */ + typedefs does not. + + If TYPE is a TYPE_CODE_TYPEDEF, its length is (also) set to the length of + the target type instead of zero. However, in the case of TYPE_CODE_TYPEDEF + check_typedef can still return different type than the original TYPE + pointer. */ struct type * check_typedef (struct type *type) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 08ce031c171..659f9b813d3 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-03 Jan Kratochvil + + * gdb.mi/var-cmd.c (do_bitfield_tests): Change "V.sharable" type to + "uint_for_mi_testing". + 2010-01-01 Joel Brobecker Test indented comment in file being sourced. diff --git a/gdb/testsuite/gdb.mi/var-cmd.c b/gdb/testsuite/gdb.mi/var-cmd.c index 3ef65d4a81f..4f6f160d554 100644 --- a/gdb/testsuite/gdb.mi/var-cmd.c +++ b/gdb/testsuite/gdb.mi/var-cmd.c @@ -494,7 +494,7 @@ void do_bitfield_tests () mi_create_varobj V d "create varobj for Data" mi_list_varobj_children "V" { {"V.alloc" "alloc" "0" "int"} - {"V.sharable" "sharable" "0" "unsigned int"} + {"V.sharable" "sharable" "0" "uint_for_mi_testing"} } "list children of Data" mi_check_varobj_value V.sharable 3 "access bitfield" :*/ diff --git a/gdb/value.c b/gdb/value.c index f4075cf09a3..a462ee49449 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -254,7 +254,14 @@ struct value * allocate_value_lazy (struct type *type) { struct value *val; - struct type *atype = check_typedef (type); + + /* Call check_typedef on our type to make sure that, if TYPE + is a TYPE_CODE_TYPEDEF, its length is set to the length + of the target type instead of zero. However, we do not + replace the typedef type by the target type, because we want + to keep the typedef in order to be able to set the VAL's type + description correctly. */ + check_typedef (type); val = (struct value *) xzalloc (sizeof (struct value)); val->contents = NULL; @@ -1873,7 +1880,14 @@ value_primitive_field (struct value *arg1, int offset, CHECK_TYPEDEF (arg_type); type = TYPE_FIELD_TYPE (arg_type, fieldno); - type = check_typedef (type); + + /* Call check_typedef on our type to make sure that, if TYPE + is a TYPE_CODE_TYPEDEF, its length is set to the length + of the target type instead of zero. However, we do not + replace the typedef type by the target type, because we want + to keep the typedef in order to be able to print the type + description correctly. */ + check_typedef (type); /* Handle packed fields */ -- 2.30.2