Commit 068d2c9d by Mark Mitchell

re PR c/8224 (Incorrect joining of signed and unsigned division)

	PR c/8224
	* fold-const.c (extract_muldiv_1): Don't pass through type conversions
	when signedness changes for division or modulus.

	PR c/8224
	* gcc.dg/20030323-1.c: New test.

From-SVN: r64760
parent c967e28c
2003-03-23 Glen Nakamura <glen@imodulo.com>
PR c/8224
* fold-const.c (extract_muldiv_1): Don't pass through type conversions
when signedness changes for division or modulus.
2003-03-24 Alan Modra <amodra@bigpond.net.au>
* config/rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Remove unnecessary
......
......@@ -4170,7 +4170,12 @@ extract_muldiv_1 (t, c, code, wide_type)
/* ... or its type is larger than ctype,
then we cannot pass through this truncation. */
|| (GET_MODE_SIZE (TYPE_MODE (ctype))
< GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0))))))
< GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0))))
/* ... or signedness changes for division or modulus,
then we cannot pass through this conversion. */
|| (code != MULT_EXPR
&& (TREE_UNSIGNED (ctype)
!= TREE_UNSIGNED (TREE_TYPE (op0))))))
break;
/* Pass the constant down and see if we can make a simplification. If
......
2003-03-23 Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
PR c/8224
* gcc.dg/20030323-1.c: New test.
2003-03-23 Roger Sayle <roger@eyesopen.com>
* gcc.c-torture/compile/20030323-1.c: New test case.
......
/* { dg-do run } */
/* PR c/8224 */
/* Contributed by Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz> */
extern void abort (void);
unsigned f (int x)
{
return (unsigned) (x / 2) / 2;
}
unsigned f1 (int x)
{
unsigned xx = x / 2;
return xx / 2;
}
int main ()
{
if (f1 (-5) != f (-5))
abort ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment