mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-27 21:44:47 +08:00
fold-const.c (associate_trees): Only optimize NEGATE_EXPR in one of the operands into MINUS_EXPR if...
* fold-const.c (associate_trees): Only optimize NEGATE_EXPR in one of the operands into MINUS_EXPR if code is PLUS_EXPR. * gcc.c-torture/execute/20020805-1.c: New test. From-SVN: r56058
This commit is contained in:
parent
5133ad466a
commit
1bed5ee327
@ -1,3 +1,8 @@
|
||||
2002-08-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* fold-const.c (associate_trees): Only optimize NEGATE_EXPR in one
|
||||
of the operands into MINUS_EXPR if code is PLUS_EXPR.
|
||||
|
||||
2002-08-05 Douglas B Rupp <rupp@gnat.com>
|
||||
|
||||
* config.gcc (i[34567]86-*-interix*): Replace interix.o with winnt.o
|
||||
|
@ -1001,14 +1001,16 @@ associate_trees (t1, t2, code, type)
|
||||
if (TREE_CODE (t1) == code || TREE_CODE (t2) == code
|
||||
|| TREE_CODE (t1) == MINUS_EXPR || TREE_CODE (t2) == MINUS_EXPR)
|
||||
{
|
||||
if (TREE_CODE (t1) == NEGATE_EXPR)
|
||||
return build (MINUS_EXPR, type, convert (type, t2),
|
||||
convert (type, TREE_OPERAND (t1, 0)));
|
||||
else if (TREE_CODE (t2) == NEGATE_EXPR)
|
||||
return build (MINUS_EXPR, type, convert (type, t1),
|
||||
convert (type, TREE_OPERAND (t2, 0)));
|
||||
else
|
||||
return build (code, type, convert (type, t1), convert (type, t2));
|
||||
if (code == PLUS_EXPR)
|
||||
{
|
||||
if (TREE_CODE (t1) == NEGATE_EXPR)
|
||||
return build (MINUS_EXPR, type, convert (type, t2),
|
||||
convert (type, TREE_OPERAND (t1, 0)));
|
||||
else if (TREE_CODE (t2) == NEGATE_EXPR)
|
||||
return build (MINUS_EXPR, type, convert (type, t1),
|
||||
convert (type, TREE_OPERAND (t2, 0)));
|
||||
}
|
||||
return build (code, type, convert (type, t1), convert (type, t2));
|
||||
}
|
||||
|
||||
return fold (build (code, type, convert (type, t1), convert (type, t2)));
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
* consistency.vlad/layout/endian.c: Include string.h.
|
||||
|
||||
* gcc.c-torture/execute/20020805-1.c: New test.
|
||||
|
||||
2002-08-04 Gabriel Dos Reis <gdr@nerim.net>
|
||||
|
||||
* g++.dg/other/conversion1.C: New test.
|
||||
|
21
gcc/testsuite/gcc.c-torture/execute/20020805-1.c
Normal file
21
gcc/testsuite/gcc.c-torture/execute/20020805-1.c
Normal file
@ -0,0 +1,21 @@
|
||||
/* This testcase was miscompiled on IA-32, because fold-const
|
||||
assumed associate_trees is always done on PLUS_EXPR. */
|
||||
|
||||
extern void abort (void);
|
||||
extern void exit (int);
|
||||
|
||||
void check (unsigned int m)
|
||||
{
|
||||
if (m != (unsigned int) -1)
|
||||
abort ();
|
||||
}
|
||||
|
||||
unsigned int n = 1;
|
||||
|
||||
int main (void)
|
||||
{
|
||||
unsigned int m;
|
||||
m = (1 | (2 - n)) | (-n);
|
||||
check (m);
|
||||
exit (0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user