re PR middle-end/21709 (ICE on compile-time complex NaN)

PR middle-end/21709
	* fold-const.c (const_binop): Check for division by zero during
	complex division.

	* gcc.dg/pr21709-1.c: New test case.

From-SVN: r100188
This commit is contained in:
Roger Sayle 2005-05-26 05:51:22 +00:00 committed by Roger Sayle
parent 67730e2375
commit c10166c437
4 changed files with 41 additions and 21 deletions

View File

@ -1,3 +1,9 @@
2005-05-25 Roger Sayle <roger@eyesopen.com>
PR middle-end/21709
* fold-const.c (const_binop): Check for division by zero during
complex division.
2005-05-26 Ian Lance Taylor <ian@airs.com>
* reload1.c (verify_initial_elim_offsets): Add braces to avoid

View File

@ -1600,33 +1600,36 @@ const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
case RDIV_EXPR:
{
tree t1, t2, real, imag;
tree magsquared
= const_binop (PLUS_EXPR,
const_binop (MULT_EXPR, r2, r2, notrunc),
const_binop (MULT_EXPR, i2, i2, notrunc),
notrunc);
t = build_complex (type,
const_binop
(INTEGRAL_TYPE_P (TREE_TYPE (r1))
? TRUNC_DIV_EXPR : RDIV_EXPR,
const_binop (PLUS_EXPR,
const_binop (MULT_EXPR, r1, r2,
notrunc),
const_binop (MULT_EXPR, i1, i2,
notrunc),
notrunc),
magsquared, notrunc),
const_binop
(INTEGRAL_TYPE_P (TREE_TYPE (r1))
? TRUNC_DIV_EXPR : RDIV_EXPR,
const_binop (MINUS_EXPR,
const_binop (MULT_EXPR, i1, r2,
notrunc),
const_binop (MULT_EXPR, r1, i2,
notrunc),
notrunc),
magsquared, notrunc));
t1 = const_binop (PLUS_EXPR,
const_binop (MULT_EXPR, r1, r2, notrunc),
const_binop (MULT_EXPR, i1, i2, notrunc),
notrunc);
t2 = const_binop (MINUS_EXPR,
const_binop (MULT_EXPR, i1, r2, notrunc),
const_binop (MULT_EXPR, r1, i2, notrunc),
notrunc);
if (INTEGRAL_TYPE_P (TREE_TYPE (r1)))
{
real = const_binop (TRUNC_DIV_EXPR, t1, magsquared, notrunc);
imag = const_binop (TRUNC_DIV_EXPR, t2, magsquared, notrunc);
}
else
{
real = const_binop (RDIV_EXPR, t1, magsquared, notrunc);
imag = const_binop (RDIV_EXPR, t2, magsquared, notrunc);
if (!real || !imag)
return NULL_TREE;
}
t = build_complex (type, real, imag);
}
break;

View File

@ -1,3 +1,8 @@
2005-05-25 Roger Sayle <roger@eyesopen.com>
PR middle-end/21709
* gcc.dg/pr21709-1.c: New test case.
2005-05-25 Ziemowit Laski <zlaski@apple.com>
Mike Stump <mrs@apple.com>

View File

@ -0,0 +1,6 @@
/* PR middle-end/21709 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
double _Complex f(void) { return 1.0iF / 0.0; }