OSDN Git Service

PR middle-end/23522
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 18 Oct 2005 03:16:21 +0000 (03:16 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 18 Oct 2005 03:16:21 +0000 (03:16 +0000)
* fold-const.c (fold_widened_comparison): Do not allow range based
constant folding when right operand cannot be unwidened.

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

gcc/ChangeLog
gcc/fold-const.c

index 91973cd..439ea31 100644 (file)
@@ -1,3 +1,10 @@
+2005-10-17  Alexey Starovoytov  <alexey.starovoytov@sun.com>
+            Ian Lance Taylor <ian@airs.com>
+
+       PR middle-end/23522
+       * fold-const.c (fold_widened_comparison): Do not allow range based
+       constant folding when right operand cannot be unwidened.
+
 2005-10-17  Richard Henderson  <rth@redhat.com>
 
        * builtins.c (expand_builtin_synchronize): Build a new-style asm
index 015930e..a6aa1df 100644 (file)
@@ -6250,8 +6250,6 @@ fold_widened_comparison (enum tree_code code, tree type, tree arg0, tree arg1)
     return NULL_TREE;
 
   arg1_unw = get_unwidened (arg1, shorter_type);
-  if (!arg1_unw)
-    return NULL_TREE;
 
   /* If possible, express the comparison in the shorter mode.  */
   if ((code == EQ_EXPR || code == NE_EXPR
@@ -6264,7 +6262,9 @@ fold_widened_comparison (enum tree_code code, tree type, tree arg0, tree arg1)
     return fold_build2 (code, type, arg0_unw,
                       fold_convert (shorter_type, arg1_unw));
 
-  if (TREE_CODE (arg1_unw) != INTEGER_CST)
+  if (TREE_CODE (arg1_unw) != INTEGER_CST
+      || TREE_CODE (shorter_type) != INTEGER_TYPE
+      || !int_fits_type_p (arg1_unw, shorter_type))
     return NULL_TREE;
 
   /* If we are comparing with the integer that does not fit into the range