OSDN Git Service

* tree.c (get_fns): Split out from get_first_fn.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 27 Apr 2010 21:35:17 +0000 (21:35 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 04:53:04 +0000 (13:53 +0900)
* cp-tree.h: Declare it.
* search.c (shared_member_p): Use it.
* semantics.c (finish_qualified_id_expr): Simplify.
(finish_id_expression): Simplify.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158810 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/semantics.c
gcc/cp/tree.c

index f19d06f..08746ba 100644 (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
        whenever object is NULL_TREE.  Don't do 'this' capture here.
index 62e92cc..cbb1ac6 100644 (file)
@@ -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);
index 73fed15..d4ce014 100644 (file)
@@ -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);
 
index f8b2c40..4d25cac 100644 (file)
@@ -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.  */