re PR c++/48481 (C++ overloading memory hog)
authorJason Merrill <jason@redhat.com>
Fri, 8 Apr 2011 06:08:21 +0000 (02:08 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 8 Apr 2011 06:08:21 +0000 (02:08 -0400)
PR c++/48481
* tree.c (build_overload): Allow an unwrapped FUNCTION_DECL
at the end of the chain.
* pt.c (dependent_template_p): Use OVL_CURRENT/NEXT.
(iterative_hash_template_arg): Likewise.

From-SVN: r172164

gcc/cp/ChangeLog
gcc/cp/name-lookup.c
gcc/cp/pt.c
gcc/cp/tree.c

index 307272bef42b423ee00a5a87f29af72d575bf0a1..027eac822fe4fe7b0a96d6a9f064918a75ea0f1a 100644 (file)
@@ -1,5 +1,11 @@
 2011-04-07  Jason Merrill  <jason@redhat.com>
 
+       PR c++/48481
+       * tree.c (build_overload): Allow an unwrapped FUNCTION_DECL
+       at the end of the chain.
+       * pt.c (dependent_template_p): Use OVL_CURRENT/NEXT.
+       (iterative_hash_template_arg): Likewise.
+
        PR c++/48481
        * cp-tree.h (OVL_ARG_DEPENDENT): New.
        * name-lookup.c (add_function): Set it.
index 696a8f5fdcbae56f911e17aa40b7db158f606485..2136df62118184e63590fef30e4675e12c73b7ee 100644 (file)
@@ -5139,8 +5139,8 @@ arg_assoc (struct arg_lookup *k, tree n)
     }
   else if (TREE_CODE (n) == OVERLOAD)
     {
-      for (; n; n = OVL_CHAIN (n))
-       if (arg_assoc_type (k, TREE_TYPE (OVL_FUNCTION (n))))
+      for (; n; n = OVL_NEXT (n))
+       if (arg_assoc_type (k, TREE_TYPE (OVL_CURRENT (n))))
          return true;
     }
 
index 4edd4045ca9f0f1df3e062c7b93f7880f1da2118..86274e99731b20505289b34ea8f9414763d329da 100644 (file)
@@ -1516,8 +1516,8 @@ iterative_hash_template_arg (tree arg, hashval_t val)
       return val;
 
     case OVERLOAD:
-      for (; arg; arg = OVL_CHAIN (arg))
-       val = iterative_hash_template_arg (OVL_FUNCTION (arg), val);
+      for (; arg; arg = OVL_NEXT (arg))
+       val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
       return val;
 
     case CONSTRUCTOR:
@@ -18591,9 +18591,9 @@ dependent_template_p (tree tmpl)
     {
       while (tmpl)
        {
-         if (dependent_template_p (OVL_FUNCTION (tmpl)))
+         if (dependent_template_p (OVL_CURRENT (tmpl)))
            return true;
-         tmpl = OVL_CHAIN (tmpl);
+         tmpl = OVL_NEXT (tmpl);
        }
       return false;
     }
index 014986dc3188d014d472b35e689c6b5981a2721a..3594ae42dd5467074a7efbb408acf166f6531c5d 100644 (file)
@@ -1461,8 +1461,6 @@ build_overload (tree decl, tree chain)
 {
   if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
     return decl;
-  if (chain && TREE_CODE (chain) != OVERLOAD)
-    chain = ovl_cons (chain, NULL_TREE);
   return ovl_cons (decl, chain);
 }