Commit 87713c6a by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/71828 (ICE on valid C++11 code with constexpr __Complex int variable…

re PR c++/71828 (ICE on valid C++11 code with constexpr __Complex int variable declaration: in operand_equal_p, at fold-const.c:2790)

	PR c++/71828
	* constexpr.c (cxx_eval_constant_expression) <case REALPART_EXPR>:
	For lval don't use cxx_eval_unary_expression and instead recurse
	and if needed rebuild the reference.

	* g++.dg/cpp0x/constexpr-71828.C: New test.

From-SVN: r238442
parent 7a7f16ca
2016-07-18 Jakub Jelinek <jakub@redhat.com>
PR c++/71828
* constexpr.c (cxx_eval_constant_expression) <case REALPART_EXPR>:
For lval don't use cxx_eval_unary_expression and instead recurse
and if needed rebuild the reference.
PR c++/71826
* pt.c (tsubst_baselink): Only set BASELINK_OPTYPE for BASELINK_P.
......
......@@ -3800,6 +3800,19 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
case REALPART_EXPR:
case IMAGPART_EXPR:
if (lval)
{
r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
non_constant_p, overflow_p);
if (r == error_mark_node)
;
else if (r == TREE_OPERAND (t, 0))
r = t;
else
r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), r);
break;
}
/* FALLTHRU */
case CONJ_EXPR:
case FIX_TRUNC_EXPR:
case FLOAT_EXPR:
......
2016-07-18 Jakub Jelinek <jakub@redhat.com>
PR c++/71828
* g++.dg/cpp0x/constexpr-71828.C: New test.
PR c++/71826
* g++.dg/template/pr71826.C: New test.
......
// PR c++/71828
// { dg-do compile { target c++11 } }
constexpr _Complex int a { 1, 2 };
static_assert (& __imag a != &__real a, "");
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment