* pt.c (instantiate_decl): Fix previous change.
authorJason Merrill <jason@yorick.cygnus.com>
Fri, 10 Oct 1997 19:22:04 +0000 (19:22 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 10 Oct 1997 19:22:04 +0000 (15:22 -0400)
From-SVN: r15888

gcc/cp/ChangeLog
gcc/cp/pt.c

index 0f703f19c5819f478411413a5d9676d616cd35ec..d5d187f79db6c4d95dd6c0250471e00e9067c255 100644 (file)
@@ -1,3 +1,7 @@
+Fri Oct 10 12:21:11 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * pt.c (instantiate_decl): Fix previous change.
+
 Thu Oct  9 12:08:21 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (tsubst): Fix thinko.
index 4daf0522032a6a9c312e82a78c34497ff2e4918b..8e1e42c8342a603ca2f0aa3aa5ae5f30d3e78cd8 100644 (file)
@@ -623,8 +623,7 @@ check_explicit_specialization (declarator, decl, template_count, flags)
             member class template of a non-specialized class
             template is itself a template.             
 
-            So, we just leave the template info alone in this case.
-            */
+            So, we just leave the template info alone in this case.  */
          if (!(DECL_TEMPLATE_INFO (decl) && DECL_TI_TEMPLATE (decl)))
            DECL_TEMPLATE_INFO (decl)
              = perm_tree_cons (tmpl, targs, NULL_TREE);
@@ -4411,9 +4410,6 @@ instantiate_decl (d)
   int line = lineno;
   char *file = input_filename;
 
-  if (DECL_TEMPLATE_SPECIALIZATION (d))
-    return d;
-
   for (td = tmpl; DECL_TEMPLATE_INSTANTIATION (td); )
     td = DECL_TI_TEMPLATE (td);
 
@@ -4437,6 +4433,18 @@ instantiate_decl (d)
   if (d_defined)
     return d;
 
+  if (TREE_CODE (d) == FUNCTION_DECL) 
+    {
+      tree specs;
+
+      /* Check to see if there is a matching specialization. */
+      for (specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
+          specs != NULL_TREE;
+          specs = TREE_CHAIN (specs))
+       if (comp_template_args (TREE_PURPOSE (specs), args))
+         return TREE_VALUE (specs);
+    }
+
   /* This needs to happen before any tsubsting.  */
   if (! push_tinst_level (d))
     return d;