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

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So perhaps:
2021-03-08  Jakub Jelinek  <ja...@redhat.com>

        PR c++/99459
        * coroutines.cc (build_co_await): Look through NOP_EXPRs in
        build_special_member_call return value to find the CALL_EXPR.

--- gcc/cp/coroutines.cc.jj     2021-03-05 21:51:48.671185716 +0100
+++ gcc/cp/coroutines.cc        2021-03-08 10:53:13.187959339 +0100
@@ -868,6 +868,8 @@ build_co_await (location_t loc, tree a,
                = build_special_member_call (a, complete_dtor_identifier,
                                             NULL, a_type, LOOKUP_NORMAL,
                                             tf_none);
+             if (dummy && CONVERT_EXPR_P (dummy))
+               dummy = TREE_OPERAND (dummy, 0);
              dummy = dummy ? TREE_OPERAND (CALL_EXPR_FN (dummy), 0)
                            : NULL_TREE;
              if (dummy && coro_diagnose_throwing_fn (dummy))
@@ -1031,6 +1033,8 @@ build_co_await (location_t loc, tree a,
            = build_special_member_call (e_proxy, complete_dtor_identifier,
                                         NULL, o_type, LOOKUP_NORMAL,
                                         tf_none);
+         if (dummy && CONVERT_EXPR_P (dummy))
+           dummy = TREE_OPERAND (dummy, 0);
          dummy = dummy ? TREE_OPERAND (CALL_EXPR_FN (dummy), 0)
                        : NULL_TREE;
          if (dummy && coro_diagnose_throwing_fn (dummy))

?

Reply via email to