From a24278e2fafb32582f19e4ff55be596acb690abd Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Thu, 27 Mar 2003 00:09:58 +0000 Subject: [PATCH] re PR fortran/9793 (Internal compiler error in `float_signal', at toplev.c:2442) 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 | 6 ++++++ gcc/f/target.h | 3 ++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g77.f-torture/compile/20030326-1.f | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g77.f-torture/compile/20030326-1.f diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index 561e2a198a8..0f82f0eb96e 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -1,3 +1,9 @@ +2003-03-26 Roger Sayle + + 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 PR fortran/10204 diff --git a/gcc/f/target.h b/gcc/f/target.h index 971f8667ad9..7c48b791d1f 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 700568b3947..1c9a119ed0c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-03-26 Roger Sayle + + * g77.f-torture/compile/20030326-1.f: New test case. + 2003-03-26 Janis Johnson * 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 00000000000..bcbc73c179b --- /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 -- 2.30.2