Commit 5b8e011c by Jason Merrill Committed by Jason Merrill

re PR c++/8660 (template overloading ICE in tsubst_expr, at cp/pt.c:7644)

        PR c++/8660
        * decl2.c (check_classfn): A member template only matches a
        member template.

From-SVN: r64166
parent b772d2f5
2003-03-11 Jason Merrill <jason@redhat.com>
PR c++/8660
* decl2.c (check_classfn): A member template only matches a
member template.
2003-03-11 Neil Booth <neil@daikokuya.co.uk> 2003-03-11 Neil Booth <neil@daikokuya.co.uk>
* Make-lang.in (CXX_C_OBJS): Update. * Make-lang.in (CXX_C_OBJS): Update.
......
...@@ -655,6 +655,7 @@ tree ...@@ -655,6 +655,7 @@ tree
check_classfn (tree ctype, tree function) check_classfn (tree ctype, tree function)
{ {
int ix; int ix;
int is_template;
if (DECL_USE_TEMPLATE (function) if (DECL_USE_TEMPLATE (function)
&& !(TREE_CODE (function) == TEMPLATE_DECL && !(TREE_CODE (function) == TEMPLATE_DECL
...@@ -672,6 +673,10 @@ check_classfn (tree ctype, tree function) ...@@ -672,6 +673,10 @@ check_classfn (tree ctype, tree function)
find the method, but we don't complain. */ find the method, but we don't complain. */
return NULL_TREE; return NULL_TREE;
/* OK, is this a definition of a member template? */
is_template = (TREE_CODE (function) == TEMPLATE_DECL
|| (processing_template_decl - template_class_depth (ctype)));
ix = lookup_fnfields_1 (complete_type (ctype), ix = lookup_fnfields_1 (complete_type (ctype),
DECL_CONSTRUCTOR_P (function) ? ctor_identifier : DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
DECL_DESTRUCTOR_P (function) ? dtor_identifier : DECL_DESTRUCTOR_P (function) ? dtor_identifier :
...@@ -704,6 +709,11 @@ check_classfn (tree ctype, tree function) ...@@ -704,6 +709,11 @@ check_classfn (tree ctype, tree function)
if (DECL_STATIC_FUNCTION_P (fndecl) if (DECL_STATIC_FUNCTION_P (fndecl)
&& TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE) && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
p1 = TREE_CHAIN (p1); p1 = TREE_CHAIN (p1);
/* A member template definition only matches a member template
declaration. */
if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
continue;
if (same_type_p (TREE_TYPE (TREE_TYPE (function)), if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
TREE_TYPE (TREE_TYPE (fndecl))) TREE_TYPE (TREE_TYPE (fndecl)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment