* gdbtypes.c (make_pointer_type): Preserve the pointer type chain
authorJoel Brobecker <brobecker@gnat.com>
Thu, 17 May 2007 16:38:25 +0000 (16:38 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Thu, 17 May 2007 16:38:25 +0000 (16:38 +0000)
        and set the length of all the variants of the pointer type.

gdb/ChangeLog
gdb/gdbtypes.c

index ea00205..00656aa 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-17  Joel Brobecker  <brobecker@adacore.com>
+
+       * gdbtypes.c (make_pointer_type): Preserve the pointer type chain
+       and set the length of all the variants of the pointer type.
+
 2007-05-17  Maciej W. Rozycki  <macro@mips.com>
 
        * mips-tdep.c (mips_n32n64_push_dummy_call): Fix and reformat a
index f215558..f43983a 100644 (file)
@@ -276,6 +276,7 @@ make_pointer_type (struct type *type, struct type **typeptr)
 {
   struct type *ntype;  /* New type */
   struct objfile *objfile;
+  struct type *chain;
 
   ntype = TYPE_POINTER_TYPE (type);
 
@@ -301,7 +302,9 @@ make_pointer_type (struct type *type, struct type **typeptr)
     {
       ntype = *typeptr;
       objfile = TYPE_OBJFILE (ntype);
+      chain = TYPE_CHAIN (ntype);
       smash_type (ntype);
+      TYPE_CHAIN (ntype) = chain;
       TYPE_OBJFILE (ntype) = objfile;
     }
 
@@ -321,6 +324,14 @@ make_pointer_type (struct type *type, struct type **typeptr)
   if (!TYPE_POINTER_TYPE (type))       /* Remember it, if don't have one.  */
     TYPE_POINTER_TYPE (type) = ntype;
 
+  /* Update the length of all the other variants of this type.  */
+  chain = TYPE_CHAIN (ntype);
+  while (chain != ntype)
+    {
+      TYPE_LENGTH (chain) = TYPE_LENGTH (ntype);
+      chain = TYPE_CHAIN (chain);
+    }
+
   return ntype;
 }