c++: Consistently expose singleton overloads
This is a patch from my name-lookup overhaul. I noticed the parser and one path in name-lookup looked through an overload of a single known decl. It seems more consistent to do that in both paths through name-lookup, and not in the parser itself. gcc/cp/ * name-lookup.c (lookup_qualified_name): Expose an overload of a singleton with known type. (lookup_name_1): Just check the overload's type to expose it. * parser.c (cp_parser_lookup_name): Do not do that check here.
This commit is contained in:
parent
ede8cfb8a4
commit
4081596e85
2 changed files with 11 additions and 8 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue