c++: preserve BASELINK from lookup [PR91706]
In the earlier patch for PR91706 I fixed the BASELINK built by baselink_for_fns, but since we already had one from lookup, we should keep that one around instead of stripping it. The removed hunk in get_class_binding was a wierdly large amount of code to decide whether to pull out BASELINK_FUNCTIONS. gcc/cp/ChangeLog: PR c++/91706 * name-lookup.c (get_class_binding): Keep a BASELINK. (set_inherited_value_binding_p): Adjust. * lambda.c (is_lambda_ignored_entity): Adjust. * pt.c (lookup_template_function): Copy a BASELINK before modifying it.
This commit is contained in:
parent
f07edb5d7f
commit
1a98f83033
@ -1338,9 +1338,9 @@ is_lambda_ignored_entity (tree val)
|
||||
|
||||
/* None of the lookups that use qualify_lookup want the op() from the
|
||||
lambda; they want the one from the enclosing class. */
|
||||
val = OVL_FIRST (val);
|
||||
if (LAMBDA_FUNCTION_P (val))
|
||||
return true;
|
||||
if (tree fns = maybe_get_fns (val))
|
||||
if (LAMBDA_FUNCTION_P (OVL_FIRST (fns)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -5236,7 +5236,7 @@ set_inherited_value_binding_p (cxx_binding *binding, tree decl,
|
||||
{
|
||||
tree context;
|
||||
|
||||
if (TREE_CODE (decl) == OVERLOAD)
|
||||
if (is_overloaded_fn (decl))
|
||||
context = ovl_scope (decl);
|
||||
else
|
||||
{
|
||||
@ -5338,28 +5338,6 @@ get_class_binding (tree name, cp_binding_level *scope)
|
||||
/*protect=*/2, /*want_type=*/false,
|
||||
tf_warning_or_error);
|
||||
|
||||
if (value_binding
|
||||
&& (TREE_CODE (value_binding) == TYPE_DECL
|
||||
|| DECL_CLASS_TEMPLATE_P (value_binding)
|
||||
|| (TREE_CODE (value_binding) == TREE_LIST
|
||||
&& TREE_TYPE (value_binding) == error_mark_node
|
||||
&& (TREE_CODE (TREE_VALUE (value_binding))
|
||||
== TYPE_DECL))))
|
||||
/* We found a type binding, even when looking for a non-type
|
||||
binding. This means that we already processed this binding
|
||||
above. */
|
||||
;
|
||||
else if (value_binding)
|
||||
{
|
||||
if (TREE_CODE (value_binding) == TREE_LIST
|
||||
&& TREE_TYPE (value_binding) == error_mark_node)
|
||||
/* NAME is ambiguous. */
|
||||
;
|
||||
else if (BASELINK_P (value_binding))
|
||||
/* NAME is some overloaded functions. */
|
||||
value_binding = BASELINK_FUNCTIONS (value_binding);
|
||||
}
|
||||
|
||||
/* If we found either a type binding or a value binding, create a
|
||||
new binding object. */
|
||||
if (type_binding || value_binding)
|
||||
|
@ -9597,6 +9597,7 @@ lookup_template_function (tree fns, tree arglist)
|
||||
|
||||
if (BASELINK_P (fns))
|
||||
{
|
||||
fns = copy_node (fns);
|
||||
BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
|
||||
unknown_type_node,
|
||||
BASELINK_FUNCTIONS (fns),
|
||||
|
Loading…
Reference in New Issue
Block a user