diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/name-lookup.c | 14 | ||||
-rw-r--r-- | gcc/cp/parser.c | 5 |
2 files changed, 11 insertions, 8 deletions
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 5bda4c2..16efd16 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -5885,7 +5885,14 @@ lookup_qualified_name (tree scope, tree name, LOOK_want want, bool complain) name_lookup lookup (name, want); if (qualified_namespace_lookup (scope, &lookup)) - t = lookup.value; + { + t = lookup.value; + + /* If we have a known type overload, pull it out. This can happen + for using decls. */ + if (TREE_CODE (t) == OVERLOAD && TREE_TYPE (t) != unknown_type_node) + t = OVL_FUNCTION (t); + } } else if (cxx_dialect != cxx98 && TREE_CODE (scope) == ENUMERAL_TYPE) t = lookup_enumerator (scope, name); @@ -6515,8 +6522,9 @@ lookup_name_1 (tree name, LOOK_where where, LOOK_want want) found:; - /* If we have a single function from a using decl, pull it out. */ - if (val && TREE_CODE (val) == OVERLOAD && !really_overloaded_fn (val)) + /* If we have a known type overload, pull it out. This can happen + for both using decls and unhidden functions. */ + if (val && TREE_CODE (val) == OVERLOAD && TREE_TYPE (val) != unknown_type_node) val = OVL_FUNCTION (val); return val; diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 323d742..bbf157e 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -28633,11 +28633,6 @@ cp_parser_lookup_name (cp_parser *parser, tree name, prefer_type_arg (tag_type), /*complain=*/true); - /* If we have a single function from a using decl, pull it out. */ - if (TREE_CODE (decl) == OVERLOAD - && !really_overloaded_fn (decl)) - decl = OVL_FUNCTION (decl); - if (pushed_scope) pop_scope (pushed_scope); } |