diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr21085.c | 9 |
4 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6c212d..dd19840 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-04-18 James A. Morrison <phython@gcc.gnu.org> + + PR tree-optimization/21085 + * fold-const (fold_binary): Don't change X % -C to X % C if C has + overflowed. + 2005-04-19 Ben Elliston <bje@au.ibm.com> * doc/invoke.texi (Optimize Options): Refer to the correct diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 1e1ecc1..bbd14c0 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -8504,6 +8504,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) if (code == TRUNC_MOD_EXPR && !TYPE_UNSIGNED (type) && TREE_CODE (arg1) == INTEGER_CST + && !TREE_CONSTANT_OVERFLOW (arg1) && TREE_INT_CST_HIGH (arg1) < 0 && !flag_trapv /* Avoid this transformation if C is INT_MIN, i.e. C == -C. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 28dfc14..57dc0fe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-04-18 James A. Morrison <phython@gcc.gnu.org> + + * gcc.dg/pr21085.c: New test. + 2005-04-18 Richard Sandiford <rsandifo@redhat.com> * gcc.target/mips/mips.exp: Minor formatting. Call setup_mips_tests. diff --git a/gcc/testsuite/gcc.dg/pr21085.c b/gcc/testsuite/gcc.dg/pr21085.c new file mode 100644 index 0000000..6a51adb --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr21085.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* This used to cause excessive use, or a stack overflow, depending on which + came first. */ +void foo (void) +{ + int maxstringlen = 1; + int limit = 0, maxblock = 0, maxblockrem = 0; + maxblockrem = (maxstringlen) % (2147483647 + 1); /* { dg-warning "overflow" } */ +} |