From 72036b59a0143c61acd2652a832e3903e180d0f9 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sun, 5 Jan 2020 01:49:14 +0100 Subject: re PR c++/93046 (ICE in cp_gimplify_init_expr) PR c++/93046 * cp-gimplify.c (cp_gimplify_init_expr): Don't look through TARGET_EXPR if it has been gimplified already. * g++.dg/ext/cond4.C: New test. From-SVN: r279884 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cp-gimplify.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'gcc/cp') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 421048b..a1fb787 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-01-05 Jakub Jelinek + + PR c++/93046 + * cp-gimplify.c (cp_gimplify_init_expr): Don't look through + TARGET_EXPR if it has been gimplified already. + 2020-01-03 Jason Merrill PR c++/93033 - incorrect tree node sharing with array init. diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index eb55276..1d2a77d 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -523,7 +523,7 @@ cp_gimplify_init_expr (tree *expr_p, gimple_seq *pre_p) think that such code never uses the TARGET_EXPR as an initializer. If I'm wrong, we'll abort because the temp won't have any RTL. In that case, I guess we'll need to replace references somehow. */ - if (TREE_CODE (from) == TARGET_EXPR) + if (TREE_CODE (from) == TARGET_EXPR && TARGET_EXPR_INITIAL (from)) from = TARGET_EXPR_INITIAL (from); /* If we might need to clean up a partially constructed object, break down -- cgit v1.1