From: Jason Merrill Date: Fri, 8 Apr 2011 06:08:04 +0000 (-0400) Subject: re PR c++/48481 (C++ overloading memory hog) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c9b558895e7c82d5973c8682c766dedb95bb4d32;p=gcc.git re PR c++/48481 (C++ overloading memory hog) PR c++/48481 * call.c (build_user_type_conversion_1): Use lookup_fnfields_slot. Release unused vector. From-SVN: r172162 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fcb5232af72..2cb394f00e6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-04-07 Jason Merrill + PR c++/48481 + * call.c (build_user_type_conversion_1): Use lookup_fnfields_slot. + Release unused vector. + PR c++/48451 * pt.c (fn_type_unification): Don't clear incomplete pack flag. (type_unification_real): Clear it here instead. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index f283bd11660..096fbbc3d9c 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3249,7 +3249,9 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags) || !DERIVED_FROM_P (totype, fromtype)); if (MAYBE_CLASS_TYPE_P (totype)) - ctors = lookup_fnfields (totype, complete_ctor_identifier, 0); + /* Use lookup_fnfields_slot instead of lookup_fnfields to avoid + creating a garbage BASELINK; constructors can't be inherited. */ + ctors = lookup_fnfields_slot (totype, complete_ctor_identifier); if (MAYBE_CLASS_TYPE_P (fromtype)) { @@ -3281,7 +3283,6 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags) if (ctors) { int ctorflags = flags; - ctors = BASELINK_FUNCTIONS (ctors); first_arg = build_int_cst (build_pointer_type (totype), 0); @@ -3389,7 +3390,11 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags) candidates = splice_viable (candidates, pedantic, &any_viable_p); if (!any_viable_p) - return NULL; + { + if (args) + release_tree_vector (args); + return NULL; + } cand = tourney (candidates); if (cand == 0)