+1998-06-12 Brendan Kehoe <brendan@cygnus.com>
+
+ * pt.c (check_explicit_specialization): If DECLARATOR turned into
+ an error_mark_node from lookup_template_function, return the same.
+ (determine_specialization): Also make sure TEMPLATE_ID isn't an
+ error_mark_node, before we try to read its operands.
+ * decl.c (grokdeclarator): If we got an error_mark_node from
+ check_explicit_specialization, just return it right back.
+
1998-06-12 Mark Mitchell <mark@markmitchell.com>
* class.c (instantiate_type): Don't treat template-ids that don't
if (decl == NULL_TREE)
return NULL_TREE;
+ /* Among other times, could occur from check_explicit_specialization
+ returning an error_mark_node. */
+ if (decl == error_mark_node)
+ return error_mark_node;
+
if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c
&& (! DECL_USE_TEMPLATE (decl) ||
name_mangling_version < 1))
int need_member_template;
int complain;
{
- tree fns = TREE_OPERAND (template_id, 0);
- tree targs_in = TREE_OPERAND (template_id, 1);
+ tree fns, targs_in;
tree templates = NULL_TREE;
tree fn;
int i;
*targs_out = NULL_TREE;
+ if (template_id == error_mark_node)
+ return error_mark_node;
+
+ fns = TREE_OPERAND (template_id, 0);
+ targs_in = TREE_OPERAND (template_id, 1);
+
if (fns == error_mark_node)
return error_mark_node;
lookup_template_function (fns, NULL_TREE);
}
- if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
+ if (declarator == error_mark_node)
+ return error_mark_node;
+
+ if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
{
/* A friend declaration. We can't do much, because we don't
know what this resolves to, yet. */