mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 00:21:03 +08:00
re PR middle-end/36172 (ice for legal code with -O3)
2008-05-08 Richard Guenther <rguenther@suse.de> PR middle-end/36172 * fold-const.c (operand_equal_p): Two objects which types differ in pointerness are not equal. * gcc.c-torture/compile/pr36172.c: New testcase. From-SVN: r135070
This commit is contained in:
parent
81464b2cd8
commit
b13e7b6cfc
@ -1,3 +1,9 @@
|
||||
2008-05-08 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/36172
|
||||
* fold-const.c (operand_equal_p): Two objects which types
|
||||
differ in pointerness are not equal.
|
||||
|
||||
2008-05-08 Kai Tietz <kai,tietz@onevision.com>
|
||||
|
||||
* calls.c (compute_argument_block_size): Add argument tree fndecl.
|
||||
|
@ -3033,8 +3033,11 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
|
||||
|
||||
/* If both types don't have the same signedness, then we can't consider
|
||||
them equal. We must check this before the STRIP_NOPS calls
|
||||
because they may change the signedness of the arguments. */
|
||||
if (TYPE_UNSIGNED (TREE_TYPE (arg0)) != TYPE_UNSIGNED (TREE_TYPE (arg1)))
|
||||
because they may change the signedness of the arguments. As pointers
|
||||
strictly don't have a signedness, require either two pointers or
|
||||
two non-pointers as well. */
|
||||
if (TYPE_UNSIGNED (TREE_TYPE (arg0)) != TYPE_UNSIGNED (TREE_TYPE (arg1))
|
||||
|| POINTER_TYPE_P (TREE_TYPE (arg0)) != POINTER_TYPE_P (TREE_TYPE (arg1)))
|
||||
return 0;
|
||||
|
||||
/* If both types don't have the same precision, then it is not safe
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-05-08 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/36172
|
||||
* gcc.c-torture/compile/pr36172.c: New testcase.
|
||||
|
||||
2008-05-08 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/35714
|
||||
|
17
gcc/testsuite/gcc.c-torture/compile/pr36172.c
Normal file
17
gcc/testsuite/gcc.c-torture/compile/pr36172.c
Normal file
@ -0,0 +1,17 @@
|
||||
int f(float * );
|
||||
unsigned long FcCharSetFreeze (int *fcs, int b)
|
||||
{
|
||||
int i;
|
||||
int a = 0;
|
||||
for (i = 0; i < *fcs; i++)
|
||||
{
|
||||
float *leaf = (float *)fcs;
|
||||
int hash = f (leaf);
|
||||
if (hash)
|
||||
a = b;
|
||||
if (!a)
|
||||
return;
|
||||
}
|
||||
return (unsigned long) fcs;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user