[C++] Overload pushing cleanup

Message ID 5adc918d-6100-9d4a-0c67-14795d08ab4e@acm.org
State New
Headers show

Commit Message

Nathan Sidwell Jan. 11, 2017, 8:13 p.m.
In fixing 77812, a name lookup bug, I got confused by the overload 
creation code, which seemed a bit complex.  This simplifies it by 
clearly separating the optional wrapping of a single decl from the 
subsequent prepending of the new decl.

applied to trunk

nathan
-- 
Nathan Sidwell

Patch hide | download patch | download mbox

2017-01-11  Nathan Sidwell  <nathan@acm.org>

	* name-lookup.c (push_overloaded_decl_1): Refactor OVERLOAD creation.

Index: cp/name-lookup.c
===================================================================
--- cp/name-lookup.c	(revision 244314)
+++ cp/name-lookup.c	(working copy)
@@ -2454,9 +2454,11 @@  push_overloaded_decl_1 (tree decl, int f
       || (flags & PUSH_USING))
     {
       if (old && TREE_CODE (old) != OVERLOAD)
-	new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
+	/* Wrap the existing single decl in an overload.  */
+	new_binding = ovl_cons (old, NULL_TREE);
       else
-	new_binding = ovl_cons (decl, old);
+	new_binding = old;
+      new_binding = ovl_cons (decl, new_binding);
       if (flags & PUSH_USING)
 	OVL_USED (new_binding) = 1;
     }