diff options
author | phython <phython@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-02 05:08:40 +0000 |
---|---|---|
committer | phython <phython@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-02 05:08:40 +0000 |
commit | 1b5523b595b44751831e4030bb1dab07cf3eced8 (patch) | |
tree | 16b6683d313862b82824f5eafd47f482809349c4 /gcc | |
parent | fb6fd6908bc5e75a2546b1a803ba78bcf025689e (diff) | |
download | ppe42-gcc-1b5523b595b44751831e4030bb1dab07cf3eced8.tar.gz ppe42-gcc-1b5523b595b44751831e4030bb1dab07cf3eced8.zip |
2005-08-02 James A. Morrison <phython@gcc.gnu.org>
PR tree-optimization/23129
* tree-vrp.c (extract_range_from_binary_expr): Set value range to
varying for divisions with anti-ranges.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102653 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/vrp-4.c | 20 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 3 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3be4e2192db..430e47441b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-08-02 James A. Morrison <phython@gcc.gnu.org> + + PR tree-optimization/23129 + * tree-vrp.c (extract_range_from_binary_expr): Set value range to + varying for divisions with anti-ranges. + 2005-08-02 Jan Hubicka <jh@suse.cz> * tree-ssa-dom.c (thread_across_edge): Remove updating here. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2efa49912e4..0060ae66307 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-08-02 James A. Morrison <phython@gcc.gnu.org> + + * gcc.c-torture/execute/vrp-4.c: New test. + 2005-08-02 Jan Hubicka <jh@suse.cz> * update-threading.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/execute/vrp-4.c b/gcc/testsuite/gcc.c-torture/execute/vrp-4.c new file mode 100644 index 00000000000..23f29220c8a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/vrp-4.c @@ -0,0 +1,20 @@ +extern void exit (int); +extern void abort (); + +void test(int x, int y) +{ + int c; + + if (x == 1) abort(); + if (y == 1) abort(); + + c = x / y; + + if (c != 1) abort(); +} + +int main() +{ + test(2, 2); + exit (0); +} diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 68960e547f6..68bcb1e6a8f 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -1136,7 +1136,8 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr) the new range. */ /* Divisions by zero result in a VARYING value. */ - if (code != MULT_EXPR && range_includes_zero_p (&vr1)) + if (code != MULT_EXPR + && (vr0.type == VR_ANTI_RANGE || range_includes_zero_p (&vr1))) { set_value_range_to_varying (vr); return; |