aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/init.c18
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);
}