public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-1273] c++: preserve BASELINK from lookup [PR91706]
@ 2021-06-08  3:56 Jason Merrill
  0 siblings, 0 replies; only message in thread
From: Jason Merrill @ 2021-06-08  3:56 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:1a98f830332e5a623278aaeea39c2a88177b2a9a

commit r12-1273-g1a98f830332e5a623278aaeea39c2a88177b2a9a
Author: Jason Merrill <jason@redhat.com>
Date:   Fri Apr 16 13:52:02 2021 -0400

    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.

Diff:
---
 gcc/cp/lambda.c      |  6 +++---
 gcc/cp/name-lookup.c | 24 +-----------------------
 gcc/cp/pt.c          |  1 +
 3 files changed, 5 insertions(+), 26 deletions(-)

diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c
index 4a1e090ead4..2e9d38bbe83 100644
--- a/gcc/cp/lambda.c
+++ b/gcc/cp/lambda.c
@@ -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;
 }
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 241ad2b9c32..1be5f3da6d5 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -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)
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 2ae886d3a39..b0155a9c370 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -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),


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-06-08  3:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-08  3:56 [gcc r12-1273] c++: preserve BASELINK from lookup [PR91706] Jason Merrill

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).