diff options
author | Jason Merrill <jason@redhat.com> | 2020-01-08 15:31:25 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2020-01-08 15:31:25 -0500 |
commit | 08f594eb399dab0637b57b0ca4b0a5ce912b8171 (patch) | |
tree | 54c68deda2c7f193404da8f65afd15c6607cf186 /gcc | |
parent | 10d2f801f472931137deae1714d5b690c1862037 (diff) | |
download | gcc-08f594eb399dab0637b57b0ca4b0a5ce912b8171.zip gcc-08f594eb399dab0637b57b0ca4b0a5ce912b8171.tar.gz gcc-08f594eb399dab0637b57b0ca4b0a5ce912b8171.tar.bz2 |
Add TARGET_EXPR_DIRECT_INIT_P sanity check.
* cp-gimplify.c (cp_gimplify_expr) [TARGET_EXPR]: Check
TARGET_EXPR_DIRECT_INIT_P.
* constexpr.c (cxx_eval_constant_expression): Likewise.
From-SVN: r280019
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 1 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 7 |
3 files changed, 14 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7aacbe2..210ab4e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2020-01-08 Jason Merrill <jason@redhat.com> + * cp-gimplify.c (cp_gimplify_expr) [TARGET_EXPR]: Check + TARGET_EXPR_DIRECT_INIT_P. + * constexpr.c (cxx_eval_constant_expression): Likewise. + +2020-01-08 Jason Merrill <jason@redhat.com> + PR c++/91369 - constexpr destructor and member initializer. * constexpr.c (cxx_eval_store_expression): Look through TARGET_EXPR when not preevaluating. diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 5fe6d02..9306a7dc 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -5312,6 +5312,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t, *non_constant_p = true; break; } + gcc_checking_assert (!TARGET_EXPR_DIRECT_INIT_P (t)); /* Avoid evaluating a TARGET_EXPR more than once. */ if (tree *p = ctx->global->values.get (TARGET_EXPR_SLOT (t))) { diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 1d2a77d..827d240 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -925,6 +925,13 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) } break; + case TARGET_EXPR: + /* A TARGET_EXPR that expresses direct-initialization should have been + elided by cp_gimplify_init_expr. */ + gcc_checking_assert (!TARGET_EXPR_DIRECT_INIT_P (*expr_p)); + ret = GS_UNHANDLED; + break; + case RETURN_EXPR: if (TREE_OPERAND (*expr_p, 0) && (TREE_CODE (TREE_OPERAND (*expr_p, 0)) == INIT_EXPR |