aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTheodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>2000-03-20 18:44:24 +0100
committerJason Merrill <jason@gcc.gnu.org>2000-03-20 12:44:24 -0500
commitc65a922c68fcaafce36473e2e940cd5c9d12d7fe (patch)
tree5334d77697cdecd9cd7e949ae0763832053d3d43 /gcc
parent949d707dcf9b774b3fd402d92db829cd9d47ee05 (diff)
downloadgcc-c65a922c68fcaafce36473e2e940cd5c9d12d7fe.zip
gcc-c65a922c68fcaafce36473e2e940cd5c9d12d7fe.tar.gz
gcc-c65a922c68fcaafce36473e2e940cd5c9d12d7fe.tar.bz2
init.c (build_offset_ref): Handle the case of a templated member function.
* init.c (build_offset_ref): Handle the case of a templated member function. From-SVN: r32649
Diffstat (limited to 'gcc')
-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);
}