Add error check on return value of build_co_await
authorJunMa <JunMa@linux.alibaba.com>
Tue, 21 Jan 2020 02:29:34 +0000 (10:29 +0800)
committerJunMa <JunMa@linux.alibaba.com>
Wed, 22 Jan 2020 06:36:13 +0000 (14:36 +0800)
gcc/cp/ChangeLog
* coroutines.cc (finish_co_await_expr): Add error check on return
value of build_co_await.
(finish_co_yield_expr): Ditto.

gcc/cp/ChangeLog
gcc/cp/coroutines.cc

index 3f379d0d996e78c1d8101df872ecf9032ffe2a99..4c195c48b030ffa5b107381ee6ce9a39c5f789fa 100644 (file)
@@ -1,3 +1,9 @@
+2020-01-22  Jun Ma <JunMa@linux.alibaba.com>
+
+       * coroutines.cc (finish_co_await_expr): Add error check on return
+       value of build_co_await.
+       (finish_co_yield_expr,): Ditto.
+
 2020-01-22  Jun Ma <JunMa@linux.alibaba.com>
 
        * coroutines.cc (lookup_awaitable_member): Lookup an awaitable member.
index 6381fdc2f11f3ffe92f2aa7f53c39b24393736a2..81fb8c924a773b9ae195f33d0f9769f3fc9ab97f 100644 (file)
@@ -819,8 +819,11 @@ finish_co_await_expr (location_t kw, tree expr)
 
   /* Now we want to build co_await a.  */
   tree op = build_co_await (kw, a, CO_AWAIT_SUSPEND_POINT);
-  TREE_SIDE_EFFECTS (op) = 1;
-  SET_EXPR_LOCATION (op, kw);
+  if (op != error_mark_node)
+    {
+      TREE_SIDE_EFFECTS (op) = 1;
+      SET_EXPR_LOCATION (op, kw);
+    }
 
   return op;
 }
@@ -885,9 +888,11 @@ finish_co_yield_expr (location_t kw, tree expr)
      promise transform_await().  */
 
   tree op = build_co_await (kw, yield_call, CO_YIELD_SUSPEND_POINT);
-
-  op = build2_loc (kw, CO_YIELD_EXPR, TREE_TYPE (op), expr, op);
-  TREE_SIDE_EFFECTS (op) = 1;
+  if (op != error_mark_node)
+    {
+      op = build2_loc (kw, CO_YIELD_EXPR, TREE_TYPE (op), expr, op);
+      TREE_SIDE_EFFECTS (op) = 1;
+    }
 
   return op;
 }