aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2021-12-14 07:48:54 -0500
committerPatrick Palka <ppalka@redhat.com>2021-12-14 07:48:54 -0500
commit336dc544ebca867794a8e57c65afe303fd8ecc66 (patch)
treea453169989083cda5fed2280a88c936abe0c1f20 /gcc
parentc5ef950d0bb7d451e8d831f71351a5db4373aa9a (diff)
downloadgcc-336dc544ebca867794a8e57c65afe303fd8ecc66.zip
gcc-336dc544ebca867794a8e57c65afe303fd8ecc66.tar.gz
gcc-336dc544ebca867794a8e57c65afe303fd8ecc66.tar.bz2
c++: don't leak 'arglist' in build_new_op
gcc/cp/ChangeLog: * call.c (build_new_op): Use releasing_vec for arglist. Declare conv in the scope it's used.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/call.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 28bd8e0c..347df5d 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -6461,13 +6461,12 @@ build_new_op (const op_location_t &loc, enum tree_code code, int flags,
tsubst_flags_t complain)
{
struct z_candidate *candidates = 0, *cand;
- vec<tree, va_gc> *arglist;
+ releasing_vec arglist;
tree result = NULL_TREE;
bool result_valid_p = false;
enum tree_code code2 = ERROR_MARK;
enum tree_code code_orig_arg1 = ERROR_MARK;
enum tree_code code_orig_arg2 = ERROR_MARK;
- conversion *conv;
void *p;
bool strict_p;
bool any_viable_p;
@@ -6543,7 +6542,6 @@ build_new_op (const op_location_t &loc, enum tree_code code, int flags,
arg2_type = integer_type_node;
}
- vec_alloc (arglist, 3);
arglist->quick_push (arg1);
if (arg2 != NULL_TREE)
arglist->quick_push (arg2);
@@ -6814,7 +6812,7 @@ build_new_op (const op_location_t &loc, enum tree_code code, int flags,
corresponding parameters of the selected operation function,
except that the second standard conversion sequence of a
user-defined conversion sequence (12.3.3.1.2) is not applied." */
- conv = cand->convs[0];
+ conversion *conv = cand->convs[0];
if (conv->user_conv_p)
{
conv = strip_standard_conversion (conv);