diff options
Diffstat (limited to 'gcc/cp/init.c')
-rw-r--r-- | gcc/cp/init.c | 18 |
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); } |