diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c | 6 |
4 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33b5cfd..843b221 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-12-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/38359 + * fold-const.c (fold_binary): Fold -1 >> x to -1 only for + non-negative x. + 2008-12-02 Martin Jambor <mjambor@suse.cz> PR middle-end/37861 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 8dddca1..93415d8 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -11457,7 +11457,8 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) case RSHIFT_EXPR: /* Optimize -1 >> x for arithmetic right shifts. */ - if (integer_all_onesp (arg0) && !TYPE_UNSIGNED (type)) + if (integer_all_onesp (arg0) && !TYPE_UNSIGNED (type) + && tree_expr_nonnegative_p (arg1)) return omit_one_operand (type, arg0, arg1); /* ... fall through ... */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f64db4d..33d0f86 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-12-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/38359 + * gcc.c-torture/compile/pr38359.c: New testcase. + * gcc.c-torture/execute/shiftopt-1.c: Adjust. + 2008-12-02 Janus Weil <janus@gcc.gnu.org> PR fortran/36704 diff --git a/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c b/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c index fa9517a..8c855b8 100644 --- a/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c +++ b/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c @@ -43,12 +43,6 @@ stest (int x) if (0 >> x != 0) link_error (); - - if (-1 >> x != -1) - link_error (); - - if (~0 >> x != ~0) - link_error (); } int |