]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/9793 (Internal compiler error in `float_signal', at toplev.c:2442)
authorRoger Sayle <roger@eyesopen.com>
Thu, 27 Mar 2003 00:09:58 +0000 (00:09 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Thu, 27 Mar 2003 00:09:58 +0000 (00:09 +0000)
PR fortran/9793
* target.h (ffetarget_divide_integer1): Perform division by -1
using negation to prevent possible overflow trap on the host.

* g77.f-torture/compile/20030326.f: New test case.

From-SVN: r64909

gcc/f/ChangeLog
gcc/f/target.h
gcc/testsuite/ChangeLog
gcc/testsuite/g77.f-torture/compile/20030326-1.f [new file with mode: 0644]

index 561e2a198a8ff7188a59a291414dea11cadfd8c7..0f82f0eb96eda3ed40ad12c0877f64e4e0aec129 100644 (file)
@@ -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
index 971f8667ad944813716defe4b3013285dd4ebc74..7c48b791d1f2a7f454b3da8066303eed94b88388 100644 (file)
@@ -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) \
index 700568b39475713bd9be831b7d53ea05a65c70c3..1c9a119ed0c6d75793a16ee0bcef668a06548361 100644 (file)
@@ -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 (file)
index 0000000..bcbc73c
--- /dev/null
@@ -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