From e0804c9b5efdf17bbfb692a787df36b86f71af8d Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 10 Jan 2020 13:47:02 -0500 Subject: PR c++/93143 - incorrect tree sharing with constexpr. We don't unshare CONSTRUCTORs as often during constexpr evaluation, so we need to unshare them here. * constexpr.c (cxx_eval_outermost_constant_expr): Don't assume CONSTRUCTORs are already unshared. From-SVN: r280127 --- gcc/cp/constexpr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'gcc/cp/constexpr.c') diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 9306a7dc..3ca3b9e 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -6347,10 +6347,10 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, if (!non_constant_p && overflow_p) non_constant_p = true; - /* Unshare the result unless it's a CONSTRUCTOR in which case it's already - unshared. */ + /* Unshare the result. */ bool should_unshare = true; - if (r == t || TREE_CODE (r) == CONSTRUCTOR) + if (r == t || (TREE_CODE (t) == TARGET_EXPR + && TARGET_EXPR_INITIAL (t) == r)) should_unshare = false; if (non_constant_p && !allow_non_constant) -- cgit v1.1