diff options
author | Pedro Alves <palves@redhat.com> | 2018-11-21 11:55:14 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2018-11-21 12:06:51 +0000 |
commit | 82ceee50146563a61ed19f4ad585d39636a6dfa8 (patch) | |
tree | d9d048333a3fe7357d97a79ed4b6cb0f93a9b053 /gdb/gdbtypes.h | |
parent | 0891c3cc132495ad7b323896efae4f91eca87c6c (diff) | |
download | binutils-gdb-82ceee50146563a61ed19f4ad585d39636a6dfa8.tar.gz |
C++ify badness_vector, fix leaks
badness_vector is currently an open coded vector. This reimplements
it as a std::vector.
This fixes a few leaks as well:
- find_oload_champ is leaking every badness vector calculated bar the
one returned.
- bv->rank is always leaked, since callers of rank_function only
xfree the badness_vector pointer, not bv->rank.
gdb/ChangeLog:
2018-11-21 Pedro Alves <palves@redhat.com>
* gdbtypes.c (compare_badness): Change type of parameters to const
reference. Adjust to badness_vector being a std::vector now.
(rank_function): Adjust to badness_vector being a std::vector now.
* gdbtypes.h (badness_vector): Now a typedef to std::vector.
(LENGTH_MATCH): Delete.
(compare_badness): Change type of parameters to const reference.
(rank_function): Return a badness_vector by value now.
(find_overload_match): Adjust to badness_vector being a
std::vector now. Remove cleanups.
(find_oload_champ_namespace): 'oload_champ_bv' parameter now a
badness_vector pointer.
(find_oload_champ_namespace_loop): 'oload_champ_bv' parameter now
a badness_vector pointer. Adjust to badness_vector being a
std::vector now. Remove cleanups.
(find_oload_champ): 'oload_champ_bv' parameter now
a badness_vector pointer. Adjust to badness_vector being a
std::vector now. Remove cleanups.
Diffstat (limited to 'gdb/gdbtypes.h')
-rw-r--r-- | gdb/gdbtypes.h | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 731b18d0823..f0adec7a208 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1095,13 +1095,9 @@ struct rank short subrank; }; -/* * Struct used for ranking a function for overload resolution. */ +/* * Used for ranking a function for overload resolution. */ -struct badness_vector - { - int length; - struct rank *rank; - }; +typedef std::vector<rank> badness_vector; /* * GNAT Ada-specific information for various Ada types. */ @@ -1983,8 +1979,6 @@ extern int is_unique_ancestor (struct type *, struct value *); /* Overload resolution */ -#define LENGTH_MATCH(bv) ((bv)->rank[0]) - /* * Badness if parameter list length doesn't match arg list length. */ extern const struct rank LENGTH_MISMATCH_BADNESS; @@ -2043,10 +2037,11 @@ extern const struct rank NS_INTEGER_POINTER_CONVERSION_BADNESS; extern struct rank sum_ranks (struct rank a, struct rank b); extern int compare_ranks (struct rank a, struct rank b); -extern int compare_badness (struct badness_vector *, struct badness_vector *); +extern int compare_badness (const badness_vector &, + const badness_vector &); -extern struct badness_vector *rank_function (gdb::array_view<type *> parms, - gdb::array_view<value *> args); +extern badness_vector rank_function (gdb::array_view<type *> parms, + gdb::array_view<value *> args); extern struct rank rank_one_type (struct type *, struct type *, struct value *); |