gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Sun, 3 Jan 2010 18:55:32 +0000 (18:55 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Sun, 3 Jan 2010 18:55:32 +0000 (18:55 +0000)
* 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
gdb/gdbtypes.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.mi/var-cmd.c
gdb/value.c

index 188347f50902d4e9c40f73c7c1336af66d5b4e72..208967f9614353c04b8f97f34113c377040e6170 100644 (file)
@@ -1,3 +1,11 @@
+2010-01-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+           Joel Brobecker  <brobecker@adacore.com>
+
+       * 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  <jan.kratochvil@redhat.com>
 
        * cli/cli-script.c (process_next_line): Rename p1 as p_end and p2 as
index e427afc66696b7d4255114ea9479d88f5e747c0a..255f04a6056150105b13cf3a2e2f67e5eeaa5888 100644 (file)
@@ -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)
index 08ce031c17162c8509f9f5dd16019681042eb0c8..659f9b813d3ed281ca00360b00ea2f7206528864 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.mi/var-cmd.c (do_bitfield_tests): Change "V.sharable" type to
+       "uint_for_mi_testing".
+
 2010-01-01  Joel Brobecker  <brobecker@adacore.com>
 
        Test indented comment in file being sourced.
index 3ef65d4a81f279dcbb1cd89e096f4a12e8fef555..4f6f160d55480d73197cbd6bfd1353bd87c4a7b2 100644 (file)
@@ -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"
     :*/
index f4075cf09a3572172ddb821e0a9e5873b32f9a2e..a462ee494495faa1408796591d1b73c000f536a1 100644 (file)
@@ -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 */