From: Joel Brobecker Date: Thu, 17 May 2007 20:15:37 +0000 (+0000) Subject: * gdbtypes.c (make_reference_type): Preserve the type chain X-Git-Tag: binutils-2_18-branchpoint~693 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e98b32608b1bed31081eb942756d314f92c1036;p=thirdparty%2Fbinutils-gdb.git * gdbtypes.c (make_reference_type): Preserve the type chain and set the length of all the variants of the pointer type. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 00656aa991e..884b3373f10 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2007-05-17 Joel Brobecker + + * 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 * gdbtypes.c (make_pointer_type): Preserve the pointer type chain diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index f43983a072a..db4a85ab352 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -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; }