diff options
author | Bin Cheng <bin.cheng@linux.alibaba.com> | 2020-04-10 12:38:53 +0800 |
---|---|---|
committer | Bin Cheng <bin.cheng@linux.alibaba.com> | 2020-04-10 12:53:00 +0800 |
commit | 6c4a05f251ae8a39fa896524defaf4228328c259 (patch) | |
tree | 760eeb443352afc5155a3ab456efb34a1ba2df3c /gcc/cp | |
parent | d79a22eddc694970316992927c669dd801e07557 (diff) | |
download | gcc-6c4a05f251ae8a39fa896524defaf4228328c259.zip gcc-6c4a05f251ae8a39fa896524defaf4228328c259.tar.gz gcc-6c4a05f251ae8a39fa896524defaf4228328c259.tar.bz2 |
Simplify co_await_expander.
gcc/cp
2020-04-10 Bin Cheng <bin.cheng@linux.alibaba.com>
* coroutines.cc (co_await_expander): Simplify.
gcc/testsuite
2020-04-10 Bin Cheng <bin.cheng@linux.alibaba.com>
* g++.dg/coroutines/co-await-syntax-10.C: New test.
* g++.dg/coroutines/co-await-syntax-11.C: New test.
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/coroutines.cc | 25 |
2 files changed, 7 insertions, 22 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 49246e8..38f86cd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2020-04-10 Bin Cheng <bin.cheng@linux.alibaba.com> + + * coroutines.cc (co_await_expander): Simplify. + 2020-04-09 Jason Merrill <jason@redhat.com> PR c++/94523 diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index 936be06..ab06c0a 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -1389,34 +1389,13 @@ co_await_expander (tree *stmt, int * /*do_subtree*/, void *d) return NULL_TREE; coro_aw_data *data = (coro_aw_data *) d; - enum tree_code stmt_code = TREE_CODE (*stmt); tree stripped_stmt = *stmt; - - /* Look inside <(void) (expr)> cleanup */ - if (stmt_code == CLEANUP_POINT_EXPR) - { - stripped_stmt = TREE_OPERAND (*stmt, 0); - stmt_code = TREE_CODE (stripped_stmt); - if (stmt_code == EXPR_STMT - && (TREE_CODE (EXPR_STMT_EXPR (stripped_stmt)) == CONVERT_EXPR - || TREE_CODE (EXPR_STMT_EXPR (stripped_stmt)) == CAST_EXPR) - && VOID_TYPE_P (TREE_TYPE (EXPR_STMT_EXPR (stripped_stmt)))) - { - stripped_stmt = TREE_OPERAND (EXPR_STMT_EXPR (stripped_stmt), 0); - stmt_code = TREE_CODE (stripped_stmt); - } - } - tree *buried_stmt = NULL; tree saved_co_await = NULL_TREE; enum tree_code sub_code = NOP_EXPR; - if (stmt_code == EXPR_STMT - && TREE_CODE (EXPR_STMT_EXPR (stripped_stmt)) == CO_AWAIT_EXPR) - saved_co_await - = EXPR_STMT_EXPR (stripped_stmt); /* hopefully, a void exp. */ - else if (stmt_code == MODIFY_EXPR || stmt_code == INIT_EXPR) + if (stmt_code == MODIFY_EXPR || stmt_code == INIT_EXPR) { sub_code = TREE_CODE (TREE_OPERAND (stripped_stmt, 1)); if (sub_code == CO_AWAIT_EXPR) @@ -1435,6 +1414,8 @@ co_await_expander (tree *stmt, int * /*do_subtree*/, void *d) else if ((stmt_code == CONVERT_EXPR || stmt_code == NOP_EXPR) && TREE_CODE (TREE_OPERAND (stripped_stmt, 0)) == CO_AWAIT_EXPR) saved_co_await = TREE_OPERAND (stripped_stmt, 0); + else if (stmt_code == CO_AWAIT_EXPR) + saved_co_await = stripped_stmt; if (!saved_co_await) return NULL_TREE; |