summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorfalk <falk@138bc75d-0d04-0410-961f-82ee72b054a4>2004-05-19 23:43:20 +0000
committerfalk <falk@138bc75d-0d04-0410-961f-82ee72b054a4>2004-05-19 23:43:20 +0000
commit0cf3a1b4a5ebad749c1c8af0291a315fa26e6ae2 (patch)
treed28c06eae10c078a6f4d7fc45d0fc1a6a827772f /gcc
parent61e2434b18b7d19c1fafe3fe454205b4d9615d0d (diff)
downloadgcc-0cf3a1b4a5ebad749c1c8af0291a315fa26e6ae2.tar.gz
PR other/15526
* libgcc2.c (__mulvsi3): Fix overflow test. * gcc.dg/ftrapv-1.c: New test case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82042 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/libgcc2.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/ftrapv-1.c25
4 files changed, 36 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 54e328a560e..6cc921fc091 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-05-20 Falk Hueffner <falk@debian.org>
+
+ PR other/15526
+ * libgcc2.c (__mulvsi3): Fix overflow test.
+
2004-05-19 Andrew Pinski <pinskia@physics.uc.edu>
PR c/14171
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 34171ad9002..8a953ea8b76 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -130,9 +130,7 @@ __mulvsi3 (Wtype a, Wtype b)
{
const DWtype w = (DWtype) a * (DWtype) b;
- if (((a >= 0) == (b >= 0))
- ? (UDWtype) w > (UDWtype) (((DWtype) 1 << (WORD_SIZE - 1)) - 1)
- : (UDWtype) w < (UDWtype) ((DWtype) -1 << (WORD_SIZE - 1)))
+ if ((Wtype) (w >> WORD_SIZE) != (Wtype) w >> (WORD_SIZE - 1))
abort ();
return w;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 92437ffdcc2..c716a323162 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-05-20 Falk Hueffner <falk@debian.org>
+
+ PR other/15526
+ * gcc.dg/ftrapv-1.c: New test case.
+
2004-05-18 Feng Wang <fengwang@nudt.edu.cn>
* gfortran.fortran-torture/execute/power.f90: Test constant integers.
diff --git a/gcc/testsuite/gcc.dg/ftrapv-1.c b/gcc/testsuite/gcc.dg/ftrapv-1.c
new file mode 100644
index 00000000000..44eb176b50d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ftrapv-1.c
@@ -0,0 +1,25 @@
+/* Copyright (C) 2004 Free Software Foundation.
+
+ PR other/15526
+ Verify correct overflow checking with -ftrapv.
+
+ Written by Falk Hueffner, 20th May 2004. */
+
+/* { dg-do run } */
+/* { dg-options "-ftrapv" } */
+
+__attribute__((noinline)) int
+mulv(int a, int b)
+{
+ return a * b;
+}
+
+int
+main()
+{
+ mulv( 0, 0);
+ mulv( 0, -1);
+ mulv(-1, 0);
+ mulv(-1, -1);
+ return 0;
+}