Commit 5a578671 by Joseph Myers Committed by Joseph Myers

Fix ICE on conditional expression between DFP and non-DFP float (PR c/71601).

A conditional expression between DFP and non-DFP floating-point
produces an ICE.  This patch fixes this by making
build_conditional_expr return early when c_common_type produces an
error.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

	PR c/71601
gcc/c:
	* c-typeck.c (build_conditional_expr): Return error_mark_node if
	c_common_type returns error_mark_node.

gcc/testsuite:
	* gcc.dg/dfp/usual-arith-conv-bad-3.c: New test.

From-SVN: r237622
parent 50aa64d5
2016-06-20 Joseph Myers <joseph@codesourcery.com>
PR c/71601
* c-typeck.c (build_conditional_expr): Return error_mark_node if
c_common_type returns error_mark_node.
2016-06-19 Martin Sebor <msebor@redhat.com>
PR c/69507
......
......@@ -4846,6 +4846,8 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
|| code2 == COMPLEX_TYPE))
{
result_type = c_common_type (type1, type2);
if (result_type == error_mark_node)
return error_mark_node;
do_warn_double_promotion (result_type, type1, type2,
"implicit conversion from %qT to %qT to "
"match other result of conditional",
......
2016-06-20 Joseph Myers <joseph@codesourcery.com>
PR c/71601
* gcc.dg/dfp/usual-arith-conv-bad-3.c: New test.
2016-06-20 Jakub Jelinek <jakub@redhat.com>
PR middle-end/71581
......
/* Test error for conditional expression between DFP and other
floating operand. */
/* { dg-do compile } */
_Decimal32 a;
float b;
int i;
void
f (void)
{
(void) (i ? a : b); /* { dg-error "mix operands" } */
}
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