diff mbox

[C++] OVL_USED dies

Message ID f8d3d8e0-5c7e-117f-db21-8608d86b52cc@acm.org
State New
Headers show

Commit Message

Nathan Sidwell May 18, 2017, 3:22 p.m. UTC
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
diff mbox

Patch

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));
 }