From 6115f2433783cd5d09d0f3e562d759d792fa49e2 Mon Sep 17 00:00:00 2001 From: ian Date: Wed, 30 Dec 2009 04:27:55 +0000 Subject: [PATCH] ./: PR middle-end/42099 * expmed.c (expand_divmod): Don't shift HOST_WIDE_INT value more than HOST_BITS_PER_WIDE_INT. testsuite/: PR middle-end/42099 * gcc.c-torture/execute/20091229-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155516 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/expmed.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/execute/20091229-1.c | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/20091229-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a1160cfcb7f..6160bfc3520 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-12-29 Ian Lance Taylor + + PR middle-end/42099 + * expmed.c (expand_divmod): Don't shift HOST_WIDE_INT value more + than HOST_BITS_PER_WIDE_INT. + 2009-12-29 H.J. Lu * config/i386/i386.c (ix86_expand_int_vcond): Reformat. diff --git a/gcc/expmed.c b/gcc/expmed.c index d51b4542677..d1fea0818c2 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -4194,7 +4194,8 @@ expand_divmod (int rem_flag, enum tree_code code, enum machine_mode mode, else if (d == -1) quotient = expand_unop (compute_mode, neg_optab, op0, tquotient, 0); - else if (abs_d == (unsigned HOST_WIDE_INT) 1 << (size - 1)) + else if (HOST_BITS_PER_WIDE_INT >= size + && abs_d == (unsigned HOST_WIDE_INT) 1 << (size - 1)) { /* This case is not handled correctly below. */ quotient = emit_store_flag (tquotient, EQ, op0, op1, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8be8a062c45..9afb291acd5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-12-29 Ian Lance Taylor + + PR middle-end/42099 + * gcc.c-torture/execute/20091229-1.c: New test. + 2009-12-29 Janus Weil PR fortran/42517 diff --git a/gcc/testsuite/gcc.c-torture/execute/20091229-1.c b/gcc/testsuite/gcc.c-torture/execute/20091229-1.c new file mode 100644 index 00000000000..08d952f1b3a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20091229-1.c @@ -0,0 +1,2 @@ +long long foo(long long v) { return v / -0x080000000LL; } +void main() { if (foo(0x080000000LL) != -1) abort(); exit (0); } -- 2.11.0