From: Jason Merrill Date: Tue, 27 Apr 2010 21:35:17 +0000 (-0400) Subject: tree.c (get_fns): Split out from get_first_fn. X-Git-Tag: upstream/12.2.0~93461 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=294e855f96883c225bb8961eb456d8f770bdf41a;p=platform%2Fupstream%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f19d06f..08746ba 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,4 +1,10 @@ -2010-04-27 Jason Merrill +2010-04-24 Jason Merrill + + * 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 whenever object is NULL_TREE. Don't do 'this' capture here. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 62e92cc..cbb1ac6 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -5259,6 +5259,7 @@ extern tree hash_tree_cons (tree, tree, tree); extern tree hash_tree_chain (tree, tree); extern tree build_qualified_name (tree, tree, tree, bool); extern int is_overloaded_fn (tree); +extern tree get_fns (tree); extern tree get_first_fn (tree); extern tree ovl_cons (tree, tree); extern tree build_overload (tree, tree); diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 772ae3b..11011e7 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -973,6 +973,7 @@ shared_member_p (tree t) return 1; if (is_overloaded_fn (t)) { + t = get_fns (t); for (; t; t = OVL_NEXT (t)) { tree fn = OVL_CURRENT (t); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 73fed15..d4ce014 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1662,15 +1662,11 @@ finish_qualified_id_expr (tree qualifying_class, } else if (BASELINK_P (expr) && !processing_template_decl) { - tree fns; tree ob; /* 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 (!shared_member_p (fns) + if (!shared_member_p (expr) && (ob = maybe_dummy_object (qualifying_class, NULL), !is_dummy_object (ob))) expr = (build_class_member_access_expr @@ -3124,10 +3120,7 @@ finish_id_expression (tree id_expression, { tree first_fn; - 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); + first_fn = get_first_fn (decl); if (TREE_CODE (first_fn) == TEMPLATE_DECL) first_fn = DECL_TEMPLATE_RESULT (first_fn); diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index f8b2c40..4d25cac 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1352,7 +1352,7 @@ really_overloaded_fn (tree x) } tree -get_first_fn (tree from) +get_fns (tree from) { gcc_assert (is_overloaded_fn (from)); /* A baselink is also considered an overloaded function. */ @@ -1363,7 +1363,13 @@ get_first_fn (tree from) from = BASELINK_FUNCTIONS (from); if (TREE_CODE (from) == TEMPLATE_ID_EXPR) 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. */