diff options
author | Jason Merrill <jason@redhat.com> | 2022-09-30 10:04:22 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2022-10-06 17:43:14 -0400 |
commit | 0143b277c9b17215ab3d4b361e1aef431799e813 (patch) | |
tree | b8b1af7a80fd3c9ee61805b089de2bf6b118ae65 /gcc/cp/cp-gimplify.cc | |
parent | 49b9a8c8cc498b1ed2f566bee858e651e14ba37b (diff) | |
download | gcc-0143b277c9b17215ab3d4b361e1aef431799e813.zip gcc-0143b277c9b17215ab3d4b361e1aef431799e813.tar.gz gcc-0143b277c9b17215ab3d4b361e1aef431799e813.tar.bz2 |
c++: fix broken conversion in coroutines
You can't use CONVERT_EXPR to convert between two class types.
VIEW_CONVERT_EXPR takes liberties with the C++ type system, but is probably
safe in this context. Let's also only use it when the type isn't already
what we want.
gcc/cp/ChangeLog:
* coroutines.cc (expand_one_await_expression): Change conversion
to VIEW_CONVERT_EXPR.
* cp-gimplify.cc (cp_genericize_r) [CONVERT_EXPR]: Add assert.
Diffstat (limited to 'gcc/cp/cp-gimplify.cc')
-rw-r--r-- | gcc/cp/cp-gimplify.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index b4599fc3..5d26e59 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -1589,6 +1589,7 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) break; case CONVERT_EXPR: + gcc_checking_assert (!AGGREGATE_TYPE_P (TREE_TYPE (stmt))); gcc_assert (!CONVERT_EXPR_VBASE_PATH (stmt)); break; |