]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cvt.c (cp_get_callee): New.
authorJason Merrill <jason@redhat.com>
Thu, 28 Apr 2016 19:01:13 +0000 (15:01 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 28 Apr 2016 19:01:13 +0000 (15:01 -0400)
* cvt.c (cp_get_callee): New.

* constexpr.c (get_function_named_in_call): Use it.
* cxx-pretty-print.c (postfix_expression): Use it.
* except.c (check_noexcept_r): Use it.
* method.c (check_nontriv): Use it.
* tree.c (build_aggr_init_expr): Use it.
* cp-tree.h: Declare it.

From-SVN: r235596

gcc/cp/ChangeLog
gcc/cp/constexpr.c
gcc/cp/cp-tree.h
gcc/cp/cvt.c
gcc/cp/cxx-pretty-print.c
gcc/cp/except.c
gcc/cp/method.c
gcc/cp/tree.c

index 1219f82db98c8802f962a4b4b52ba7d87aed204a..ff6d30a00f7377f66a2ebea19053fd7d33889a19 100644 (file)
@@ -1,3 +1,13 @@
+2016-04-28  Jason Merrill  <jason@redhat.com>
+
+       * cvt.c (cp_get_callee): New.
+       * constexpr.c (get_function_named_in_call): Use it.
+       * cxx-pretty-print.c (postfix_expression): Use it.
+       * except.c (check_noexcept_r): Use it.
+       * method.c (check_nontriv): Use it.
+       * tree.c (build_aggr_init_expr): Use it.
+       * cp-tree.h: Declare it.
+
 2015-04-27  Ryan Burn  <contact@rnburn.com>
            Jeff Law  <law@redhat.com>
 
index f0307a3df134876677ac145ba0186260723f04ae..6054d1a9e3f76f8001e588fb8c6618124213919d 100644 (file)
@@ -1044,21 +1044,7 @@ save_fundef_copy (tree fun, tree copy)
 static tree
 get_function_named_in_call (tree t)
 {
-  tree fun = NULL;
-  switch (TREE_CODE (t))
-    {
-    case CALL_EXPR:
-      fun = CALL_EXPR_FN (t);
-      break;
-
-    case AGGR_INIT_EXPR:
-      fun = AGGR_INIT_EXPR_FN (t);
-      break;
-
-    default:
-      gcc_unreachable();
-      break;
-    }
+  tree fun = cp_get_callee (t);
   if (fun && TREE_CODE (fun) == ADDR_EXPR
       && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
     fun = TREE_OPERAND (fun, 0);
index 4c548c9ba969314676df6492482f2a1765af569a..f6ea0b734c2273e68a99f8695a91099c7224cf1b 100644 (file)
@@ -5694,6 +5694,7 @@ extern tree ocp_convert                           (tree, tree, int, int,
 extern tree cp_convert                         (tree, tree, tsubst_flags_t);
 extern tree cp_convert_and_check                (tree, tree, tsubst_flags_t);
 extern tree cp_fold_convert                    (tree, tree);
+extern tree cp_get_callee                      (tree);
 extern tree convert_to_void                    (tree, impl_conv_void,
                                                 tsubst_flags_t);
 extern tree convert_force                      (tree, tree, int,
index 0d1048cd7fe4259cfc4f7a29420ae8f98f833c1c..8c9d78b641c69147f653fa3eca7223f26cf9be58 100644 (file)
@@ -904,6 +904,20 @@ ocp_convert (tree type, tree expr, int convtype, int flags,
   return error_mark_node;
 }
 
+/* If CALL is a call, return the callee; otherwise null.  */
+
+tree
+cp_get_callee (tree call)
+{
+  if (call == NULL_TREE)
+    return call;
+  else if (TREE_CODE (call) == CALL_EXPR)
+    return CALL_EXPR_FN (call);
+  else if (TREE_CODE (call) == AGGR_INIT_EXPR)
+    return AGGR_INIT_EXPR_FN (call);
+  return NULL_TREE;
+}
+
 /* When an expression is used in a void context, its value is discarded and
    no lvalue-rvalue and similar conversions happen [expr.static.cast/4,
    stmt.expr/1, expr.comma/1].  This permits dereferencing an incomplete type
index cc28045eb64ebc5530636f00cf8c976f240493b1..3b52a35a2e581818685e4c0c43cf8a5e62bed9fc 100644 (file)
@@ -490,8 +490,7 @@ cxx_pretty_printer::postfix_expression (tree t)
     case AGGR_INIT_EXPR:
     case CALL_EXPR:
       {
-       tree fun = (code == AGGR_INIT_EXPR ? AGGR_INIT_EXPR_FN (t)
-                                          : CALL_EXPR_FN (t));
+       tree fun = cp_get_callee (t);
        tree saved_scope = enclosing_scope;
        bool skipfirst = false;
        tree arg;
index 53367100de9cfb922ba03328cf9f358879130a52..014df507f227397b4d7ca02f8c61a564f007f41a 100644 (file)
@@ -1158,8 +1158,7 @@ check_noexcept_r (tree *tp, int * /*walk_subtrees*/, void * /*data*/)
         translation unit, creating ODR problems.
 
          We could use TREE_NOTHROW (t) for !TREE_PUBLIC fns, though... */
-      tree fn = (code == AGGR_INIT_EXPR
-                ? AGGR_INIT_EXPR_FN (t) : CALL_EXPR_FN (t));
+      tree fn = cp_get_callee (t);
       tree type = TREE_TYPE (fn);
       gcc_assert (POINTER_TYPE_P (type));
       type = TREE_TYPE (type);
index 862451f249bf1daf625751c30af2625c7e08d5d9..0e501d9045ab7446bef42136e9441516d30f2fc4 100644 (file)
@@ -1002,12 +1002,8 @@ get_inherited_ctor (tree ctor)
 static tree
 check_nontriv (tree *tp, int *, void *)
 {
-  tree fn;
-  if (TREE_CODE (*tp) == CALL_EXPR)
-    fn = CALL_EXPR_FN (*tp);
-  else if (TREE_CODE (*tp) == AGGR_INIT_EXPR)
-    fn = AGGR_INIT_EXPR_FN (*tp);
-  else
+  tree fn = cp_get_callee (*tp);
+  if (fn == NULL_TREE)
     return NULL_TREE;
 
   if (TREE_CODE (fn) == ADDR_EXPR)
index 5b5d5ba48f95dcfbda21f099bcf7b2546678c02d..97601aa1f186e055bbcd35f9f06d19f406db3599 100644 (file)
@@ -470,11 +470,8 @@ build_aggr_init_expr (tree type, tree init)
   if (processing_template_decl)
     return init;
 
-  if (TREE_CODE (init) == CALL_EXPR)
-    fn = CALL_EXPR_FN (init);
-  else if (TREE_CODE (init) == AGGR_INIT_EXPR)
-    fn = AGGR_INIT_EXPR_FN (init);
-  else
+  fn = cp_get_callee (init);
+  if (fn == NULL_TREE)
     return convert (type, init);
 
   is_ctor = (TREE_CODE (fn) == ADDR_EXPR