From: Michael Snyder Date: Fri, 17 Aug 2007 23:12:47 +0000 (+0000) Subject: 2007-08-17 Michael Snyder X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0bd9908d01330dd5369b35e62ea8d8d7ada01e03;p=binutils-gdb.git 2007-08-17 Michael Snyder * gdbtypes.h (virtual_base_list): Remove export decl. * gdbtypes.c (virtual_base_list): Make static. Not called outside. (virtual_base_index): Memory leak. (virtual_base_index_skip_primaries): Ditto. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index db010325518..908a3c8727a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2007-08-17 Michael Snyder + + * gdbtypes.h (virtual_base_list): Remove export decl. + * gdbtypes.c (virtual_base_list): Make static. Not called outside. + (virtual_base_index): Memory leak. + (virtual_base_index_skip_primaries): Ditto. + 2007-08-17 Maxim Grigoriev * xtensa-tdep.c (ARG_NOF, ARG_1ST, PS_WOE, PS_EXC, C0_MAXOPDS) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 672be70fb0b..64964e97d2d 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -2024,7 +2024,7 @@ virtual_base_list_aux (struct type *dclass) This routine merely hands off the argument to virtual_base_list_aux() and then copies the result into an array to save space. */ -struct type ** +static struct type ** virtual_base_list (struct type *dclass) { struct vbase *tmp_vbase; @@ -2112,7 +2112,6 @@ virtual_base_list_length_skip_primaries (struct type *dclass) return i; } - /* Return the index (position) of type BASE, which is a virtual base class of DCLASS, in the latter's virtual base list. A return of -1 indicates "not found" or a problem. */ @@ -2120,27 +2119,24 @@ virtual_base_list_length_skip_primaries (struct type *dclass) int virtual_base_index (struct type *base, struct type *dclass) { - struct type *vbase; + struct type *vbase, **vbase_list; int i; if ((TYPE_CODE (dclass) != TYPE_CODE_CLASS) || (TYPE_CODE (base) != TYPE_CODE_CLASS)) return -1; - i = 0; - vbase = virtual_base_list (dclass)[0]; - while (vbase) - { - if (vbase == base) - break; - vbase = virtual_base_list (dclass)[++i]; - } + vbase_list = virtual_base_list (dclass); + for (i = 0, vbase = vbase_list[0]; + vbase != NULL; + vbase = vbase_list[++i]) + if (vbase == base) + break; + xfree (vbase_list); return vbase ? i : -1; } - - /* Return the index (position) of type BASE, which is a virtual base class of DCLASS, in the latter's virtual base list. Skip over all bases that may appear in the virtual base list of the primary base @@ -2151,7 +2147,7 @@ int virtual_base_index_skip_primaries (struct type *base, struct type *dclass) { - struct type *vbase; + struct type *vbase, **vbase_list; int i, j; struct type *primary; @@ -2161,19 +2157,18 @@ virtual_base_index_skip_primaries (struct type *base, primary = TYPE_RUNTIME_PTR (dclass) ? TYPE_PRIMARY_BASE (dclass) : NULL; - j = -1; - i = 0; - vbase = virtual_base_list (dclass)[0]; - while (vbase) + vbase_list = virtual_base_list (dclass); + for (i = 0, j = -1, vbase = vbase_list[0]; + vbase != NULL; + vbase = vbase_list[++i]) { if (!primary || (virtual_base_index_skip_primaries (vbase, primary) < 0)) j++; if (vbase == base) break; - vbase = virtual_base_list (dclass)[++i]; } - + xfree (vbase_list); return vbase ? j : -1; } diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 8d60894fc41..c397c3204c6 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1346,8 +1346,6 @@ extern int has_vtable (struct type *); extern struct type *primary_base_class (struct type *); -extern struct type **virtual_base_list (struct type *); - extern int virtual_base_list_length (struct type *); extern int virtual_base_list_length_skip_primaries (struct type *);