diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 5 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 94725d9..a008d0d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-03-30 Richard Guenther <rguenther@suse.de> + + PR middle-end/31023 + * fold-const.c (fold_sign_changed_comparison): Do leave + conversions to base-types alone. + 2008-03-29 Andrew Pinski <andrew_pinski@playstation.sony.com> * config/rs6000/rs6000.c (rs6000_stack_info): Don't force saving of diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 5d5d7cf..c420b79 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -6807,6 +6807,11 @@ fold_sign_changed_comparison (enum tree_code code, tree type, if (TYPE_PRECISION (inner_type) != TYPE_PRECISION (outer_type)) return NULL_TREE; + /* If the conversion is from an integral subtype to its basetype + leave it alone. */ + if (TREE_TYPE (inner_type) == outer_type) + return NULL_TREE; + if (TREE_CODE (arg1) != INTEGER_CST && !((TREE_CODE (arg1) == NOP_EXPR || TREE_CODE (arg1) == CONVERT_EXPR) |