Patchwork Deal with (T *)p + CST in comparison folding

login
register
mail settings
Submitter Richard Guenther
Date Aug. 17, 2010, 9:49 a.m.
Message ID <alpine.LNX.2.00.1008171148180.28912@zhemvz.fhfr.qr>
Download mbox | patch
Permalink /patch/61874/
State New
Headers show

Comments

Richard Guenther - Aug. 17, 2010, 9:49 a.m.
We fold (T *)(p + CST) to ((T *)p) + CST, so the comparison folding
code needs adjustment to handle (T*)p + 4 > (T*)p.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2010-08-16  Richard Guenther  <rguenther@suse.de>

	* fold-const.c (fold_comparison): Strip nops inside
	POINTER_PLUS_EXPR.

Patch

Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c	(revision 163278)
+++ gcc/fold-const.c	(working copy)
@@ -8683,6 +8683,7 @@  fold_comparison (location_t loc, enum tr
       else if (TREE_CODE (arg0) == POINTER_PLUS_EXPR)
 	{
 	  base0 = TREE_OPERAND (arg0, 0);
+	  STRIP_SIGN_NOPS (base0);
 	  if (TREE_CODE (base0) == ADDR_EXPR)
 	    {
 	      base0 = TREE_OPERAND (base0, 0);
@@ -8705,6 +8706,7 @@  fold_comparison (location_t loc, enum tr
       else if (TREE_CODE (arg1) == POINTER_PLUS_EXPR)
 	{
 	  base1 = TREE_OPERAND (arg1, 0);
+	  STRIP_SIGN_NOPS (base1);
 	  if (TREE_CODE (base1) == ADDR_EXPR)
 	    {
 	      base1 = TREE_OPERAND (base1, 0);