diff options
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/init.c | 18 |
2 files changed, 20 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 83cec30..f1a2f8a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-03-20 Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr> + + * init.c (build_offset_ref): Handle the case of a templated member + function. + 2000-03-19 Martin v. Löwis <loewis@informatik.hu-berlin.de> * except.c (expand_exception_blocks): Clear catch_clauses_last. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 8994f60..f2aba2c 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1577,9 +1577,21 @@ build_offset_ref (type, name) the template-id that was used. */ name = TREE_OPERAND (orig_name, 0); - if (TREE_CODE (name) == LOOKUP_EXPR) - /* This can happen during tsubst'ing. */ - name = TREE_OPERAND (name, 0); + if (DECL_P (name)) + name = DECL_NAME (name); + else + { + if (TREE_CODE (name) == LOOKUP_EXPR) + /* This can happen during tsubst'ing. */ + name = TREE_OPERAND (name, 0); + else + { + if (TREE_CODE (name) == COMPONENT_REF) + name = TREE_OPERAND (name, 1); + if (TREE_CODE (name) == OVERLOAD) + name = DECL_NAME (OVL_CURRENT (name)); + } + } my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 0); } |