aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@redhat.com>2003-01-28 22:15:50 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2003-01-28 22:15:50 +0000
commit6d09ef27d4170193aaf12c291b18b8160f2b9bb2 (patch)
tree1dfa2c8546c777952456edd8ef924b98d60849b7 /gcc
parent1e1bd14eb2e457e969b82e4e14e7d4efdc4f3fc8 (diff)
downloadgcc-6d09ef27d4170193aaf12c291b18b8160f2b9bb2.zip
gcc-6d09ef27d4170193aaf12c291b18b8160f2b9bb2.tar.gz
gcc-6d09ef27d4170193aaf12c291b18b8160f2b9bb2.tar.bz2
* combine.c (nonzero_bits): Fix check for negative divide operands.
From-SVN: r62029
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/combine.c5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20030128-1.c10
4 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 60de22d..bc46965 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2003-01-28 Richard Sandiford <rsandifo@redhat.com>
+
+ * combine.c (nonzero_bits): Fix check for negative divide operands.
+
2003-01-28 Richard Henderson <rth@redhat.com>
* config/ia64/ia64.c (ia64_rwreloc_section_type_flags): New.
diff --git a/gcc/combine.c b/gcc/combine.c
index 4f03d00..90c4482 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -8369,14 +8369,15 @@ nonzero_bits (x, mode)
{
unsigned HOST_WIDE_INT nz0 = nonzero_bits (XEXP (x, 0), mode);
unsigned HOST_WIDE_INT nz1 = nonzero_bits (XEXP (x, 1), mode);
+ int sign_index = GET_MODE_BITSIZE (GET_MODE (x)) - 1;
int width0 = floor_log2 (nz0) + 1;
int width1 = floor_log2 (nz1) + 1;
int low0 = floor_log2 (nz0 & -nz0);
int low1 = floor_log2 (nz1 & -nz1);
HOST_WIDE_INT op0_maybe_minusp
- = (nz0 & ((HOST_WIDE_INT) 1 << (mode_width - 1)));
+ = (nz0 & ((HOST_WIDE_INT) 1 << sign_index));
HOST_WIDE_INT op1_maybe_minusp
- = (nz1 & ((HOST_WIDE_INT) 1 << (mode_width - 1)));
+ = (nz1 & ((HOST_WIDE_INT) 1 << sign_index));
unsigned int result_width = mode_width;
int result_low = 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c2f60e6..9e5ea48 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-01-28 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.c-torture/execute/20030128-1.c: New test.
+
2003-01-28 Jeffrey D. Oldham <oldham@codesourcery.com>
* g++.dg/lookup/nested1.C: Test moved from ...
diff --git a/gcc/testsuite/gcc.c-torture/execute/20030128-1.c b/gcc/testsuite/gcc.c-torture/execute/20030128-1.c
new file mode 100644
index 0000000..ceca322
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20030128-1.c
@@ -0,0 +1,10 @@
+unsigned char x = 50;
+volatile short y = -5;
+
+int main ()
+{
+ x /= y;
+ if (x != (unsigned char) -10)
+ abort ();
+ exit (0);
+}