public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Nathan Sidwell <nathan@acm.org>
To: GCC Patches <gcc-patches@gcc.gnu.org>
Subject: [C++ PATCH] OVL_USED dies
Date: Thu, 18 May 2017 15:33:00 -0000	[thread overview]
Message-ID: <f8d3d8e0-5c7e-117f-db21-8608d86b52cc@acm.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 324 bytes --]

While repurposing TREE_USED as OVL_USED to indicate it was found via a 
using declaration is 'cute', it's terribly confusing.  Particularly as I 
now have the need for a 'this overload is being used' flag.

This patch replaces OVL_USED with OVL_USING_P and maps it to one of the 
TREE_LANG flags.

nathan
-- 
Nathan Sidwell

[-- Attachment #2: ovlu.diff --]
[-- Type: text/x-patch, Size: 4644 bytes --]

2017-05-18  Nathan Sidwell  <nathan@acm.org>

	* cp-tree.h (OVL_USED): Replace with ...
	(OVL_USING_P): ... this.
	(ovl_iterator::using_p): Adjust.
	* name-lookup.c (push_overloaded_decl_1,
	do_nonmember_using_decl): Adjust.
	* search.c (lookup_field_r): Adjust.
	* tree.c (ovl_insert, ovl_scope): Adjust.

Index: cp-tree.h
===================================================================
--- cp-tree.h	(revision 248198)
+++ cp-tree.h	(working copy)
@@ -351,6 +351,7 @@ extern GTY(()) tree cp_global_trees[CPTI
       CONSTRUCTOR_NO_IMPLICIT_ZERO (in CONSTRUCTOR)
       TINFO_USED_TEMPLATE_ID (in TEMPLATE_INFO)
       PACK_EXPANSION_SIZEOF_P (in *_PACK_EXPANSION)
+      OVL_USING_P (in OVERLOAD)
    2: IDENTIFIER_OPNAME_P (in IDENTIFIER_NODE)
       ICS_THIS_FLAG (in _CONV)
       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (in VAR_DECL)
@@ -640,14 +641,12 @@ typedef struct ptrmem_cst * ptrmem_cst_t
   ((TREE_CODE (NODE) == OVERLOAD) ? OVL_FUNCTION (NODE) : (NODE))
 #define OVL_NEXT(NODE)		\
   ((TREE_CODE (NODE) == OVERLOAD) ? TREE_CHAIN (NODE) : NULL_TREE)
-/* If set, this was imported in a using declaration.
-   This is not to confuse with being used somewhere, which
-   is not important for this node.  */
-#define OVL_USED(NODE)		TREE_USED (OVERLOAD_CHECK (NODE))
 /* If set, this OVERLOAD was created for argument-dependent lookup
    and can be freed afterward.  */
 #define OVL_ARG_DEPENDENT(NODE) TREE_LANG_FLAG_0 (OVERLOAD_CHECK (NODE))
 
+/* If set, this was imported in a using declaration.   */
+#define OVL_USING_P(NODE)	TREE_LANG_FLAG_1 (OVERLOAD_CHECK (NODE))
 /* If set, this overload contains a nested overload.  */
 #define OVL_NESTED_P(NODE)	TREE_LANG_FLAG_3 (OVERLOAD_CHECK (NODE))
 /* If set, this overload was constructed during lookup.  */
@@ -705,7 +704,7 @@ class ovl_iterator
   /* Whether this overload was introduced by a using decl.  */
   bool using_p () const
   {
-    return TREE_CODE (ovl) == OVERLOAD && OVL_USED (ovl);
+    return TREE_CODE (ovl) == OVERLOAD && OVL_USING_P (ovl);
   }
   tree remove_node (tree head)
   {
Index: name-lookup.c
===================================================================
--- name-lookup.c	(revision 248198)
+++ name-lookup.c	(working copy)
@@ -2920,7 +2920,7 @@ push_overloaded_decl_1 (tree decl, int f
 	      tree fn = OVL_CURRENT (tmp);
 	      tree dup;
 
-	      if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
+	      if (TREE_CODE (tmp) == OVERLOAD && OVL_USING_P (tmp)
 		  && !(flags & PUSH_USING)
 		  && compparms_for_decl_and_using_decl (fn, decl)
 		  && ! decls_match (fn, decl))
@@ -3136,7 +3136,7 @@ do_nonmember_using_decl (tree scope, tre
 		  if (new_fn == old_fn)
 		    /* The function already exists in the current namespace.  */
 		    break;
-		  else if (TREE_CODE (tmp1) == OVERLOAD && OVL_USED (tmp1))
+		  else if (TREE_CODE (tmp1) == OVERLOAD && OVL_USING_P (tmp1))
 		    continue; /* this is a using decl */
 		  else if (compparms_for_decl_and_using_decl (new_fn, old_fn))
 		    {
Index: search.c
===================================================================
--- search.c	(revision 248166)
+++ search.c	(working copy)
@@ -1106,7 +1106,7 @@ lookup_field_r (tree binfo, void *data)
   if (!nval)
     /* Look for a data member or type.  */
     nval = lookup_field_1 (type, lfi->name, lfi->want_type);
-  else if (TREE_CODE (nval) == OVERLOAD && OVL_USED (nval))
+  else if (TREE_CODE (nval) == OVERLOAD && OVL_USING_P (nval))
     {
       /* If we have both dependent and non-dependent using-declarations, return
 	 the dependent one rather than an incomplete list of functions.  */
Index: tree.c
===================================================================
--- tree.c	(revision 248198)
+++ tree.c	(working copy)
@@ -2138,7 +2138,7 @@ ovl_insert (tree fn, tree maybe_ovl, boo
 
   /* Find insertion point.  */
   while (maybe_ovl && TREE_CODE (maybe_ovl) == OVERLOAD
-	 && (weight < OVL_USED (maybe_ovl)))
+	 && (weight < OVL_USING_P (maybe_ovl)))
     {
       if (!result)
 	result = maybe_ovl;
@@ -2151,7 +2151,7 @@ ovl_insert (tree fn, tree maybe_ovl, boo
     {
       trail = ovl_make (fn, maybe_ovl);
       if (using_p)
-	OVL_USED (trail) = true;
+	OVL_USING_P (trail) = true;
     }
 
   if (insert_after)
@@ -2290,7 +2290,7 @@ ovl_scope (tree ovl)
   if (TREE_CODE (ovl) == TEMPLATE_ID_EXPR)
     ovl = TREE_OPERAND (ovl, 0);
   /* Skip using-declarations.  */
-  while (TREE_CODE (ovl) == OVERLOAD && OVL_USED (ovl) && OVL_CHAIN (ovl))
+  while (TREE_CODE (ovl) == OVERLOAD && OVL_USING_P (ovl) && OVL_CHAIN (ovl))
     ovl = OVL_CHAIN (ovl);
   return CP_DECL_CONTEXT (OVL_CURRENT (ovl));
 }

                 reply	other threads:[~2017-05-18 15:22 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f8d3d8e0-5c7e-117f-db21-8608d86b52cc@acm.org \
    --to=nathan@acm.org \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).