From: Richard Kenner Date: Sat, 2 Aug 1997 22:50:39 +0000 (-0400) Subject: (int_fits_type_p): Negative ints never fit unsigned types, and X-Git-Tag: misc/cutover-egcs-0~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ae0a3dfbf49c9bcd36520a722c544f30f19b441b;p=thirdparty%2Fgcc.git (int_fits_type_p): Negative ints never fit unsigned types, and unsigned ints with top-bit-set never fit signed types. From-SVN: r14637 --- diff --git a/gcc/tree.c b/gcc/tree.c index f756d05faa7d..658c05f86840 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -4346,12 +4346,18 @@ int_fits_type_p (c, type) return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c)) && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST - && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type)))); + && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type))) + /* Negative ints never fit unsigned types. */ + && ! (TREE_INT_CST_HIGH (c) < 0 + && ! TREE_UNSIGNED (TREE_TYPE (c)))); else return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST && INT_CST_LT (TYPE_MAX_VALUE (type), c)) && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST - && INT_CST_LT (c, TYPE_MIN_VALUE (type)))); + && INT_CST_LT (c, TYPE_MIN_VALUE (type))) + /* Unsigned ints with top bit set never fit signed types. */ + && ! (TREE_INT_CST_HIGH (c) < 0 + && TREE_UNSIGNED (TREE_TYPE (c)))); } /* Return the innermost context enclosing DECL that is