]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
call.c (build_new_op): Give better error for syntactically correct...
authorJason Merrill <jason@yorick.cygnus.com>
Wed, 17 Sep 1997 02:23:05 +0000 (02:23 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 17 Sep 1997 02:23:05 +0000 (22:23 -0400)
* call.c (build_new_op): Give better error for syntactically
  correct, but semantically invalid, use of undeclared template.

From-SVN: r15506

gcc/cp/ChangeLog
gcc/cp/call.c

index edfddc97ba7597e9065df818d5be8f2b727f8a41..148691be9c1da5378a147c20b7f2af49c8ab1f76 100644 (file)
@@ -1,5 +1,8 @@
 Tue Sep 16 14:06:56 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
+       * call.c (build_new_op): Give better error for syntactically
+       correct, but semantically invalid, use of undeclared template.
+
        * call.c (compare_qual): Handle pmfs.
 
        * decl.c (store_parm_decls): last_parm_cleanup_insn is the insn
index 6836a6c5cdd7ae3b88e3419e1f7aab6869501bb7..48b5abf47437a5ea2ed1b1c749c86929abf4a09e 100644 (file)
@@ -4421,7 +4421,7 @@ build_user_type_conversion_1 (totype, expr, flags)
     (USER_CONV,
      (DECL_CONSTRUCTOR_P (cand->fn)
       ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
-     NULL_TREE, cand->fn, cand->convs, cand->basetype_path);
+     expr, cand->fn, cand->convs, cand->basetype_path);
   ICS_USER_FLAG (cand->second_conv) = 1;
   if (cand->viable == -1)
     ICS_BAD_FLAG (cand->second_conv) = 1;
@@ -4672,6 +4672,14 @@ build_new_op (code, flags, arg1, arg2, arg3)
       || arg3 == error_mark_node)
     return error_mark_node;
 
+  /* This can happen if a template takes all non-type parameters, e.g.
+     undeclared_template<1, 5, 72>a;  */
+  if (code == LT_EXPR && TREE_CODE (arg1) == TEMPLATE_DECL)
+    {
+      cp_error ("`%D' must be declared before use", arg1);
+      return error_mark_node;
+    }
+
   if (code == MODIFY_EXPR)
     {
       code2 = TREE_CODE (arg3);