https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91974

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-10-02
                 CC|                            |jakub at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I think we need something like:
--- gcc/cp/cp-gimplify.c.jj     2019-09-27 22:13:18.365903348 +0200
+++ gcc/cp/cp-gimplify.c        2019-10-02 22:42:41.878588998 +0200
@@ -818,6 +818,20 @@ cp_gimplify_expr (tree *expr_p, gimple_s

     case CALL_EXPR:
       ret = GS_OK;
+      if (flag_strong_eval_order == 2
+         && CALL_EXPR_FN (*expr_p)
+         && cp_get_callee_fndecl_nofold (*expr_p) == NULL_TREE)
+       {
+         enum gimplify_status t
+           = gimplify_expr (&CALL_EXPR_FN (*expr_p), pre_p, NULL,
+                            is_gimple_call_addr, fb_rvalue);
+         if (t == GS_ERROR)
+           ret = GS_ERROR;
+         else if (TREE_CODE (CALL_EXPR_FN (*expr_p)) != SSA_NAME)
+           CALL_EXPR_FN (*expr_p)
+             = get_initialized_tmp_var (CALL_EXPR_FN (*expr_p), pre_p,
+                                        NULL);
+       }
       if (!CALL_EXPR_FN (*expr_p))
        /* Internal function call.  */;
       else if (CALL_EXPR_REVERSE_ARGS (*expr_p))

Reply via email to