aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/f/ChangeLog6
-rw-r--r--gcc/f/target.h3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g77.f-torture/compile/20030326-1.f14
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index 561e2a1..0f82f0e 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -1,3 +1,9 @@
+2003-03-26 Roger Sayle <roger@eyesopen.com>
+
+ PR fortran/9793
+ * target.h (ffetarget_divide_integer1): Perform division by -1
+ using negation to prevent possible overflow trap on the host.
+
2003-03-25 Marcelo Abreu <mmabreu@inf.ufrgs.br>
PR fortran/10204
diff --git a/gcc/f/target.h b/gcc/f/target.h
index 971f866..7c48b79 100644
--- a/gcc/f/target.h
+++ b/gcc/f/target.h
@@ -1154,7 +1154,8 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
FFEBAD; })
#define ffetarget_divide_integer1(res,l,r) \
(((r) == 0) ? (*(res) = 0, FFEBAD_DIV_BY_ZERO) \
- : (*(res) = (l) / (r), FFEBAD))
+ : (((r) == -1) ? (*(res) = -(l), FFEBAD) \
+ : (*(res) = (l) / (r), FFEBAD)))
#define ffetarget_divide_integer2(res,l,r) \
ffetarget_divide_integer1(res,l,r)
#define ffetarget_divide_integer3(res,l,r) \
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 700568b..1c9a119 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-03-26 Roger Sayle <roger@eyesopen.com>
+
+ * g77.f-torture/compile/20030326-1.f: New test case.
+
2003-03-26 Janis Johnson <janis187@us.ibm.com>
* gcc.c-torture/execute/20020227-1.x: Don't XFAIL for powerpc64.
diff --git a/gcc/testsuite/g77.f-torture/compile/20030326-1.f b/gcc/testsuite/g77.f-torture/compile/20030326-1.f
new file mode 100644
index 0000000..bcbc73c
--- /dev/null
+++ b/gcc/testsuite/g77.f-torture/compile/20030326-1.f
@@ -0,0 +1,14 @@
+C PR fortran/9793
+C larson@w6yx.stanford.edu
+C
+ integer a, b, c
+
+ c = -2147483648 / -1
+
+ a = 1
+ b = 0
+ c = a / b
+
+ print *, c
+
+ end