aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp/init.c')
-rw-r--r--gcc/cp/init.c18
1 files changed, 15 insertions, 3 deletions
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);
}