diff options
author | Nathan Sidwell <nathan@gcc.gnu.org> | 2004-08-14 17:54:36 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2004-08-14 17:54:36 +0000 |
commit | af9c6659665205581486c03daf470d17ead42d0f (patch) | |
tree | 665e627512574daadffad1bf4e8ba6e0047c458d /gcc/c-common.c | |
parent | 1f59091c61e63011e34207a98c81d69368a236ea (diff) | |
download | gcc-af9c6659665205581486c03daf470d17ead42d0f.zip gcc-af9c6659665205581486c03daf470d17ead42d0f.tar.gz gcc-af9c6659665205581486c03daf470d17ead42d0f.tar.bz2 |
* c-common.c (shorten_compare): Use force_fit_type directly.
From-SVN: r86004
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r-- | gcc/c-common.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c index 09373dd..1416871 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -1997,10 +1997,14 @@ shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr, if (TREE_TYPE (primop1) != *restype_ptr) { - tree tmp = convert (*restype_ptr, primop1); - TREE_OVERFLOW (tmp) = TREE_OVERFLOW (primop1); - TREE_CONSTANT_OVERFLOW (tmp) = TREE_CONSTANT_OVERFLOW (primop1); - primop1 = tmp; + /* Convert primop1 to target type, but do not introduce + additional overflow. We know primop1 is an int_cst. */ + tree tmp = build_int_2 (TREE_INT_CST_LOW (primop1), + TREE_INT_CST_HIGH (primop1)); + + TREE_TYPE (tmp) = *restype_ptr; + primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1), + TREE_CONSTANT_OVERFLOW (primop1)); } if (type != *restype_ptr) { |