From af89bd042ddf9fff34ad79c16123a4cbf814b003 Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Fri, 19 Oct 2012 16:53:39 +0000 Subject: [PATCH] re PR middle-end/54945 (Too strong non-aliasing analysis?) PR54945 From-SVN: r192617 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f599d1e9ebb..6e87fadae85 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-10-19 Marek Polacek + + PR middle-end/54945 + * fold-const.c (fold_sign_changed_comparison): Punt if folding + pointer/non-pointer comparison. + 2012-10-19 Greta Yorsh * doc/sourcebuild.texi (Effective-Target Keywords): Document diff --git a/gcc/fold-const.c b/gcc/fold-const.c index b1d811d3548..053b3f524c5 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -6731,12 +6731,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)); -- 2.11.4.GIT