diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/decl2.c | 18 |
2 files changed, 22 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ab9264e..9857169 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2000-08-11 Nathan Sidwell <nathan@codesourcery.com> + * decl2.c (build_expr_from_tree, case METHOD_CALL_EXPR): Build + explicit TEMPLATE_ID_EXPR args. + (build_expr_from_tree, case CALL_EXPR): Likewise. + +2000-08-11 Nathan Sidwell <nathan@codesourcery.com> + * decl.c (check_tag_decl): Diagnose typename's which don't declare anything. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index cf1feb6..c968bcb 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -4116,10 +4116,17 @@ build_expr_from_tree (t) if (TREE_CODE (TREE_OPERAND (t, 0)) == SCOPE_REF) { tree ref = TREE_OPERAND (t, 0); + tree name = TREE_OPERAND (ref, 1); + + if (TREE_CODE (name) == TEMPLATE_ID_EXPR) + name = build_nt (TEMPLATE_ID_EXPR, + TREE_OPERAND (name, 0), + build_expr_from_tree (TREE_OPERAND (name, 1))); + return build_scoped_method_call (build_expr_from_tree (TREE_OPERAND (t, 1)), build_expr_from_tree (TREE_OPERAND (ref, 0)), - TREE_OPERAND (ref, 1), + name, build_expr_from_tree (TREE_OPERAND (t, 2))); } else @@ -4151,9 +4158,16 @@ build_expr_from_tree (t) if (TREE_CODE (TREE_OPERAND (t, 0)) == SCOPE_REF) { tree ref = TREE_OPERAND (t, 0); + tree name = TREE_OPERAND (ref, 1); + + if (TREE_CODE (name) == TEMPLATE_ID_EXPR) + name = build_nt (TEMPLATE_ID_EXPR, + TREE_OPERAND (name, 0), + build_expr_from_tree (TREE_OPERAND (name, 1))); + return build_member_call (build_expr_from_tree (TREE_OPERAND (ref, 0)), - TREE_OPERAND (ref, 1), + name, build_expr_from_tree (TREE_OPERAND (t, 1))); } else |
