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
2017-01-11  Nathan Sidwell  <nat...@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;
     }

Reply via email to