parser.c (cp_parser_template_argument): Don't call make_unbound_class_template directly.
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
Sat, 3 Jan 2004 08:25:38 +0000 (08:25 +0000)
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>
Sat, 3 Jan 2004 08:25:38 +0000 (08:25 +0000)
* parser.c (cp_parser_template_argument): Don't call
make_unbound_class_template directly.
(cp_parser_lookup_name): Don't extract TEMPLATE_DECL from
UNBOUND_CLASS_TEMPLATE tree node.

From-SVN: r75356

gcc/cp/ChangeLog
gcc/cp/parser.c

index b2ab218..897f846 100644 (file)
@@ -1,3 +1,11 @@
+2004-01-03  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+       PR c++/13094
+       * parser.c (cp_parser_template_argument): Don't call
+       make_unbound_class_template directly.
+       (cp_parser_lookup_name): Don't extract TEMPLATE_DECL from
+       UNBOUND_CLASS_TEMPLATE tree node.
+
 2004-01-02  Richard Sandiford  <rsandifo@redhat.com>
 
        PR target/12729
index f66a0a8..e62288c 100644 (file)
@@ -8169,12 +8169,13 @@ cp_parser_template_argument (cp_parser* parser)
   if (!cp_parser_error_occurred (parser))
     {
       /* Figure out what is being referred to.  */
-      argument = cp_parser_lookup_name_simple (parser, argument);
-      if (template_p)
-       argument = make_unbound_class_template (TREE_OPERAND (argument, 0),
-                                               TREE_OPERAND (argument, 1),
-                                               tf_error);
-      else if (TREE_CODE (argument) != TEMPLATE_DECL)
+      argument = cp_parser_lookup_name (parser, argument,
+                                       /*is_type=*/false,
+                                       /*is_template=*/template_p,
+                                       /*is_namespace=*/false,
+                                       /*check_dependency=*/true);
+      if (TREE_CODE (argument) != TEMPLATE_DECL
+         && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
        cp_parser_error (parser, "expected template-name");
     }
   if (cp_parser_parse_definitely (parser))
@@ -13347,9 +13348,9 @@ cp_parser_lookup_name (cp_parser *parser, tree name,
                                                  name,
                                                  /*complain=*/1));
          else if (is_template)
-           decl = TYPE_NAME (make_unbound_class_template (parser->scope,
-                                                          name,
-                                                          /*complain=*/1));
+           decl = make_unbound_class_template (parser->scope,
+                                               name,
+                                               /*complain=*/1);
          else
            decl = build_nt (SCOPE_REF, parser->scope, name);
        }
@@ -13428,6 +13429,7 @@ cp_parser_lookup_name (cp_parser *parser, tree name,
   my_friendly_assert (DECL_P (decl) 
                      || TREE_CODE (decl) == OVERLOAD
                      || TREE_CODE (decl) == SCOPE_REF
+                     || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
                      || BASELINK_P (decl),
                      20000619);