diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a52ccf076a1..5232c728859 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +1999-08-03 Jason Merrill + + * lex.c (yyprint): Handle PFUNCNAME. + + * decl2.c (build_expr_from_tree, case METHOD_CALL_EXPR): Only + build_expr_from_tree on the args of a TEMPLATE_ID_EXPR. + 1999-08-03 Mumit Khan * decl.c (start_decl): Set attributes before duplicate_decls call. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index f9288a43541..9cdfc75c881 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4146,7 +4146,7 @@ build_new_method_call (instance, name, args, basetype_path, flags) name = TREE_OPERAND (name, 0); if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd') name = DECL_NAME (name); - else + else { if (TREE_CODE (name) == COMPONENT_REF) name = TREE_OPERAND (name, 1); diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index cbc6c23eb9d..a841319d233 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -3996,7 +3996,7 @@ build_expr_from_tree (t) else { tree fn = TREE_OPERAND (t, 0); - + /* We can get a TEMPLATE_ID_EXPR here on code like: x->f<2>(); @@ -4007,7 +4007,9 @@ build_expr_from_tree (t) build_expr_from_tree. So, just use build_expr_from_tree when we really need it. */ if (TREE_CODE (fn) == TEMPLATE_ID_EXPR) - fn = build_expr_from_tree (fn); + fn = lookup_template_function + (TREE_OPERAND (fn, 0), + build_expr_from_tree (TREE_OPERAND (fn, 1))); return build_method_call (build_expr_from_tree (TREE_OPERAND (t, 1)), diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index f9fc681c05b..1bcb667b092 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -908,6 +908,7 @@ yyprint (file, yychar, yylval) case TYPENAME: case TYPESPEC: case PTYPENAME: + case PFUNCNAME: case IDENTIFIER_DEFN: case TYPENAME_DEFN: case PTYPENAME_DEFN: