re PR middle-end/42099 (Error in 64-bit division for 32-bit target)

./:	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.

From-SVN: r155516
This commit is contained in:
Ian Lance Taylor 2009-12-30 04:27:55 +00:00 committed by Ian Lance Taylor
parent 53bc54ecc0
commit f6c1336cbe
4 changed files with 15 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2009-12-29 Ian Lance Taylor <iant@google.com>
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 <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_expand_int_vcond): Reformat.

View File

@ -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,

View File

@ -1,3 +1,8 @@
2009-12-29 Ian Lance Taylor <iant@google.com>
PR middle-end/42099
* gcc.c-torture/execute/20091229-1.c: New test.
2009-12-29 Janus Weil <janus@gcc.gnu.org>
PR fortran/42517

View File

@ -0,0 +1,2 @@
long long foo(long long v) { return v / -0x080000000LL; }
void main() { if (foo(0x080000000LL) != -1) abort(); exit (0); }