]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO for TYPE_DECLs.
authorMark Mitchell <mark@markmitchell.com>
Sat, 11 Jul 1998 15:42:37 +0000 (15:42 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Sat, 11 Jul 1998 15:42:37 +0000 (15:42 +0000)
* pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO
for TYPE_DECLs.

From-SVN: r21061

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

index 3849f64c59645b85fb9157df75c351c5424a42be..eac51c99adfeda0723f35fa37ad82f63439284be 100644 (file)
@@ -1,3 +1,8 @@
+1998-07-11  Mark Mitchell  <mark@markmitchell.com>
+
+       * pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO
+       for TYPE_DECLs.
+
 1998-07-08  Vladimir N. Makarov  <vmakarov@cygnus.com>
 
        * cp-tree.h (warn_long_long): Define.
index 32a7715f84c109147a13a858b61fa472ea3f0326..42caf4654d6f98b92d721713e24e3d8a786b1c05 100644 (file)
@@ -1808,8 +1808,18 @@ push_template_decl_real (decl, is_friend)
       if (CLASSTYPE_TEMPLATE_INSTANTIATION (ctx))
        cp_error ("must specialize `%#T' before defining member `%#D'",
                  ctx, decl);
-      if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
-       tmpl = CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl));
+      if (TREE_CODE (decl) == TYPE_DECL)
+       {
+         if (IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
+             && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl))
+             && CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)))
+           tmpl = CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl));
+         else
+           {
+             cp_error ("`%D' does not declare a template type", decl);
+             return decl;
+           }
+       }
       else if (! DECL_TEMPLATE_INFO (decl))
        {
          cp_error ("template definition of non-template `%#D'", decl);