aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-01-08 15:31:25 -0500
committerJason Merrill <jason@gcc.gnu.org>2020-01-08 15:31:25 -0500
commit08f594eb399dab0637b57b0ca4b0a5ce912b8171 (patch)
tree54c68deda2c7f193404da8f65afd15c6607cf186 /gcc
parent10d2f801f472931137deae1714d5b690c1862037 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/constexpr.c1
-rw-r--r--gcc/cp/cp-gimplify.c7
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