summaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-18 03:16:21 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-18 03:16:21 +0000
commita5543a83d637b015f04bf9799c7fb33160270ddb (patch)
treee871f3f34d248055c32dd92bd09a939c84f28016 /gcc/fold-const.c
parent82e583964449362559c4f2e66821517345007a7a (diff)
downloadgcc-a5543a83d637b015f04bf9799c7fb33160270ddb.tar.gz
PR middle-end/23522
* 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
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 015930e5ca6..a6aa1df818c 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -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