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

gdb/ChangeLog
gdb/gdbtypes.c

index 00656aa..884b337 100644 (file)
@@ -1,5 +1,10 @@
 2007-05-17  Joel Brobecker  <brobecker@adacore.com>
 
+       * gdbtypes.c (make_reference_type): Preserve the type chain
+       and set the length of all the variants of the pointer type.
+
+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.
 
index f43983a..db4a85a 100644 (file)
@@ -354,6 +354,7 @@ make_reference_type (struct type *type, struct type **typeptr)
 {
   struct type *ntype;  /* New type */
   struct objfile *objfile;
+  struct type *chain;
 
   ntype = TYPE_REFERENCE_TYPE (type);
 
@@ -379,7 +380,9 @@ make_reference_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;
     }
 
@@ -395,6 +398,14 @@ make_reference_type (struct type *type, struct type **typeptr)
   if (!TYPE_REFERENCE_TYPE (type))     /* Remember it, if don't have one.  */
     TYPE_REFERENCE_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;
 }