]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/54945 (Too strong non-aliasing analysis?)
authorMarek Polacek <polacek@redhat.com>
Fri, 19 Oct 2012 17:03:07 +0000 (17:03 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Fri, 19 Oct 2012 17:03:07 +0000 (17:03 +0000)
PR54945

From-SVN: r192619

gcc/ChangeLog
gcc/fold-const.c

index 5e83d0f38f73cf16db4f9ff364ee6abf2f3ecf96..e4ec7ab5ef2776d0b3c0e4455add00180cffb3c3 100644 (file)
@@ -1,3 +1,12 @@
+2012-10-19  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2012-10-19  Marek Polacek  <polacek@redhat.com>
+
+       PR middle-end/54945
+       * fold-const.c (fold_sign_changed_comparison):  Punt if folding
+       pointer/non-pointer comparison.
+
 2012-10-19  Alan Modra  <amodra@gmail.com>
 
        * configure.ac (HAVE_LD_NO_DOT_SYMS): Set if using gold.
index 4bf10de8af8dd08bd8c662a3c07bb8ddd7902863..5b4fc1fed45b4a0f3e2e00b96928f7cea9d859c8 100644 (file)
@@ -6771,12 +6771,14 @@ fold_sign_changed_comparison (location_t loc, enum tree_code code, tree type,
           && TREE_TYPE (TREE_OPERAND (arg1, 0)) == inner_type))
     return NULL_TREE;
 
-  if ((TYPE_UNSIGNED (inner_type) != TYPE_UNSIGNED (outer_type)
-       || POINTER_TYPE_P (inner_type) != POINTER_TYPE_P (outer_type))
+  if (TYPE_UNSIGNED (inner_type) != TYPE_UNSIGNED (outer_type)
       && code != NE_EXPR
       && code != EQ_EXPR)
     return NULL_TREE;
 
+  if (POINTER_TYPE_P (inner_type) != POINTER_TYPE_P (outer_type))
+    return NULL_TREE;
+
   if (TREE_CODE (arg1) == INTEGER_CST)
     arg1 = force_fit_type_double (inner_type, tree_to_double_int (arg1),
                                  0, TREE_OVERFLOW (arg1));