tree.c (get_fns): Split out from get_first_fn.

* tree.c (get_fns): Split out from get_first_fn.
	* cp-tree.h: Declare it.
	* search.c (shared_member_p): Use it.
	* semantics.c (finish_qualified_id_expr): Simplify.
	(finish_id_expression): Simplify.

From-SVN: r158810
This commit is contained in:
Jason Merrill 2010-04-27 17:35:17 -04:00 committed by Jason Merrill
parent 2defb92647
commit 294e855f96
5 changed files with 19 additions and 12 deletions

View File

@ -1,4 +1,10 @@
2010-04-27 Jason Merrill <jason@redhat.com> 2010-04-24 Jason Merrill <jason@redhat.com>
* tree.c (get_fns): Split out from get_first_fn.
* cp-tree.h: Declare it.
* search.c (shared_member_p): Use it.
* semantics.c (finish_qualified_id_expr): Simplify.
(finish_id_expression): Simplify.
* semantics.c (finish_non_static_data_member): Call maybe_dummy_object * semantics.c (finish_non_static_data_member): Call maybe_dummy_object
whenever object is NULL_TREE. Don't do 'this' capture here. whenever object is NULL_TREE. Don't do 'this' capture here.

View File

@ -5259,6 +5259,7 @@ extern tree hash_tree_cons (tree, tree, tree);
extern tree hash_tree_chain (tree, tree); extern tree hash_tree_chain (tree, tree);
extern tree build_qualified_name (tree, tree, tree, bool); extern tree build_qualified_name (tree, tree, tree, bool);
extern int is_overloaded_fn (tree); extern int is_overloaded_fn (tree);
extern tree get_fns (tree);
extern tree get_first_fn (tree); extern tree get_first_fn (tree);
extern tree ovl_cons (tree, tree); extern tree ovl_cons (tree, tree);
extern tree build_overload (tree, tree); extern tree build_overload (tree, tree);

View File

@ -973,6 +973,7 @@ shared_member_p (tree t)
return 1; return 1;
if (is_overloaded_fn (t)) if (is_overloaded_fn (t))
{ {
t = get_fns (t);
for (; t; t = OVL_NEXT (t)) for (; t; t = OVL_NEXT (t))
{ {
tree fn = OVL_CURRENT (t); tree fn = OVL_CURRENT (t);

View File

@ -1662,15 +1662,11 @@ finish_qualified_id_expr (tree qualifying_class,
} }
else if (BASELINK_P (expr) && !processing_template_decl) else if (BASELINK_P (expr) && !processing_template_decl)
{ {
tree fns;
tree ob; tree ob;
/* See if any of the functions are non-static members. */ /* See if any of the functions are non-static members. */
fns = BASELINK_FUNCTIONS (expr);
if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
fns = TREE_OPERAND (fns, 0);
/* If so, the expression may be relative to 'this'. */ /* If so, the expression may be relative to 'this'. */
if (!shared_member_p (fns) if (!shared_member_p (expr)
&& (ob = maybe_dummy_object (qualifying_class, NULL), && (ob = maybe_dummy_object (qualifying_class, NULL),
!is_dummy_object (ob))) !is_dummy_object (ob)))
expr = (build_class_member_access_expr expr = (build_class_member_access_expr
@ -3124,10 +3120,7 @@ finish_id_expression (tree id_expression,
{ {
tree first_fn; tree first_fn;
first_fn = decl; first_fn = get_first_fn (decl);
if (TREE_CODE (first_fn) == TEMPLATE_ID_EXPR)
first_fn = TREE_OPERAND (first_fn, 0);
first_fn = get_first_fn (first_fn);
if (TREE_CODE (first_fn) == TEMPLATE_DECL) if (TREE_CODE (first_fn) == TEMPLATE_DECL)
first_fn = DECL_TEMPLATE_RESULT (first_fn); first_fn = DECL_TEMPLATE_RESULT (first_fn);

View File

@ -1352,7 +1352,7 @@ really_overloaded_fn (tree x)
} }
tree tree
get_first_fn (tree from) get_fns (tree from)
{ {
gcc_assert (is_overloaded_fn (from)); gcc_assert (is_overloaded_fn (from));
/* A baselink is also considered an overloaded function. */ /* A baselink is also considered an overloaded function. */
@ -1363,7 +1363,13 @@ get_first_fn (tree from)
from = BASELINK_FUNCTIONS (from); from = BASELINK_FUNCTIONS (from);
if (TREE_CODE (from) == TEMPLATE_ID_EXPR) if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
from = TREE_OPERAND (from, 0); from = TREE_OPERAND (from, 0);
return OVL_CURRENT (from); return from;
}
tree
get_first_fn (tree from)
{
return OVL_CURRENT (get_fns (from));
} }
/* Return a new OVL node, concatenating it with the old one. */ /* Return a new OVL node, concatenating it with the old one. */