OSDN Git Service

2008-03-27 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Mar 2008 17:09:54 +0000 (17:09 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Mar 2008 17:09:54 +0000 (17:09 +0000)
PR middle-end/35716
* fold-const.c (fold_comparison): Restrict distinct decl
comparison folding to VAR_DECLs and PARM_DECLs.  Do not
solely rely on operand_equal_p.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133647 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c

index 19cb567..529c230 100644 (file)
@@ -1,5 +1,12 @@
 2008-03-27  Richard Guenther  <rguenther@suse.de>
 
+       PR middle-end/35716
+       * fold-const.c (fold_comparison): Restrict distinct decl
+       comparison folding to VAR_DECLs and PARM_DECLs.  Do not
+       solely rely on operand_equal_p.
+
+2008-03-27  Richard Guenther  <rguenther@suse.de>
+
        PR c/32511
        * c-common.c (handle_weak_attribute): Reject combination of
        weak and inline.
index a7dcfc3..fe78e6d 100644 (file)
@@ -8584,14 +8584,18 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
         of local binding decls or constants.  */
       else if (indirect_base0 && indirect_base1
               /* We know that !operand_equal_p (base0, base1, 0)
-                 because the if condition was false.  */
+                 because the if condition was false.  But make
+                 sure two decls are not the same.  */
+              && base0 != base1
               && TREE_CODE (arg0) == ADDR_EXPR
               && TREE_CODE (arg1) == ADDR_EXPR
-              && ((DECL_P (base0)
+              && (((TREE_CODE (base0) == VAR_DECL
+                    || TREE_CODE (base0) == PARM_DECL)
                    && (targetm.binds_local_p (base0)
                        || CONSTANT_CLASS_P (base1)))
                   || CONSTANT_CLASS_P (base0))
-              && ((DECL_P (base1)
+              && (((TREE_CODE (base1) == VAR_DECL
+                    || TREE_CODE (base1) == PARM_DECL)
                    && (targetm.binds_local_p (base1)
                        || CONSTANT_CLASS_P (base0)))
                   || CONSTANT_CLASS_P (base1)))