Commit 266bff3a by Jakub Jelinek Committed by Jakub Jelinek

fold-const.c (operand_equal_p): Require equal sign also for FIX_{CEIL,TRUNC,FLOOR,ROUND}_EXPR.

	* fold-const.c (operand_equal_p): Require equal sign also for
	FIX_{CEIL,TRUNC,FLOOR,ROUND}_EXPR.

	* gcc.c-torture/execute/20040831-1.c: New test.

From-SVN: r86906
parent 32078532
2004-09-01 Jakub Jelinek <jakub@redhat.com>
* fold-const.c (operand_equal_p): Require equal sign also for
FIX_{CEIL,TRUNC,FLOOR,ROUND}_EXPR.
2004-09-01 Richard Earnshaw <rearnsha@arm.com> 2004-09-01 Richard Earnshaw <rearnsha@arm.com>
* config.gcc (--with-cpu on ARM): Preserve the canonical cpu name * config.gcc (--with-cpu on ARM): Preserve the canonical cpu name
......
...@@ -2391,10 +2391,21 @@ operand_equal_p (tree arg0, tree arg1, unsigned int flags) ...@@ -2391,10 +2391,21 @@ operand_equal_p (tree arg0, tree arg1, unsigned int flags)
{ {
case '1': case '1':
/* Two conversions are equal only if signedness and modes match. */ /* Two conversions are equal only if signedness and modes match. */
if ((TREE_CODE (arg0) == NOP_EXPR || TREE_CODE (arg0) == CONVERT_EXPR) switch (TREE_CODE (arg0))
&& (TYPE_UNSIGNED (TREE_TYPE (arg0)) {
!= TYPE_UNSIGNED (TREE_TYPE (arg1)))) case NOP_EXPR:
return 0; case CONVERT_EXPR:
case FIX_CEIL_EXPR:
case FIX_TRUNC_EXPR:
case FIX_FLOOR_EXPR:
case FIX_ROUND_EXPR:
if (TYPE_UNSIGNED (TREE_TYPE (arg0))
!= TYPE_UNSIGNED (TREE_TYPE (arg1)))
return 0;
break;
default:
break;
}
return operand_equal_p (TREE_OPERAND (arg0, 0), return operand_equal_p (TREE_OPERAND (arg0, 0),
TREE_OPERAND (arg1, 0), flags); TREE_OPERAND (arg1, 0), flags);
......
2004-09-01 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/execute/20040831-1.c: New test.
2004-09-01 David Billinghurst <David.Billinghurst@riotinto.com> 2004-09-01 David Billinghurst <David.Billinghurst@riotinto.com>
PR fortran/16579 PR fortran/16579
......
/* This testcase was being miscompiled, because operand_equal_p
returned that (unsigned long) d and (long) d are equal. */
extern void abort (void);
extern void exit (int);
int
main (void)
{
double d = -12.0;
long l = (d > 10000) ? (unsigned long) d : (long) d;
if (l != -12)
abort ();
exit (0);
}
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