diff options
author | JunMa <JunMa@linux.alibaba.com> | 2020-01-21 10:29:34 +0800 |
---|---|---|
committer | JunMa <JunMa@linux.alibaba.com> | 2020-01-22 14:36:13 +0800 |
commit | 6ac6529e155c9baa0aaaed7aca06bd38ebda5b43 (patch) | |
tree | 4f813f9a0540842ff6f7ed8a498cad12f31a0d2d | |
parent | c75199b716ed54638ce8949d0f1f4ef71c0b31a5 (diff) | |
download | gcc-6ac6529e155c9baa0aaaed7aca06bd38ebda5b43.zip gcc-6ac6529e155c9baa0aaaed7aca06bd38ebda5b43.tar.gz gcc-6ac6529e155c9baa0aaaed7aca06bd38ebda5b43.tar.bz2 |
Add error check on return value of build_co_await
gcc/cp/ChangeLog
* coroutines.cc (finish_co_await_expr): Add error check on return
value of build_co_await.
(finish_co_yield_expr): Ditto.
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/coroutines.cc | 15 |
2 files changed, 16 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3f379d0..4c195c4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 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. (lookup_promise_method): Emit diagnostic when get NULL_TREE back only. (build_co_await): Use lookup_awaitable_member instead of lookup_member. diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index 6381fdc..81fb8c9 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -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; } |