fold-const.c (fold_binary): Revert removing of index +p PTR
2007-08-21 Richard Guenther <rguenther@suse.de> * fold-const.c (fold_binary): Revert removing of index +p PTR * folding. * gcc.dg/pointer-arith-10.c: New testcase. From-SVN: r127660
This commit is contained in:
parent
8015455a87
commit
f7d1e0c6cb
4 changed files with 25 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
|||
2007-08-21 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* fold-const.c (fold_binary): Revert removing of index +p PTR folding.
|
||||
|
||||
2007-08-21 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/33122
|
||||
|
|
|
@ -9528,6 +9528,13 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
|
|||
fold_convert (sizetype, arg1),
|
||||
fold_convert (sizetype, arg0)));
|
||||
|
||||
/* index +p PTR -> PTR +p index */
|
||||
if (POINTER_TYPE_P (TREE_TYPE (arg1))
|
||||
&& INTEGRAL_TYPE_P (TREE_TYPE (arg0)))
|
||||
return fold_build2 (POINTER_PLUS_EXPR, type,
|
||||
fold_convert (type, arg1),
|
||||
fold_convert (sizetype, arg0));
|
||||
|
||||
/* (PTR +p B) +p A -> PTR +p (B + A) */
|
||||
if (TREE_CODE (arg0) == POINTER_PLUS_EXPR)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2007-08-21 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* gcc.dg/pointer-arith-10.c: New testcase.
|
||||
|
||||
2007-08-21 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/33122
|
||||
|
|
10
gcc/testsuite/gcc.dg/pointer-arith-10.c
Normal file
10
gcc/testsuite/gcc.dg/pointer-arith-10.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-fdump-tree-original" } */
|
||||
|
||||
char *foo(char *p, __SIZE_TYPE__ i)
|
||||
{
|
||||
return (char *)i + (__SIZE_TYPE__)p;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "p +" "original" } } */
|
||||
/* { dg-final { cleanup-tree-dump "original" } } */
|
Loading…
Add table
Reference in a new issue