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
This commit is contained in:
parent
c967e28c2f
commit
068d2c9db6
4 changed files with 41 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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.
|
||||
|
|
24
gcc/testsuite/gcc.dg/20030323-1.c
Normal file
24
gcc/testsuite/gcc.dg/20030323-1.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* { 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue