From: Alexandre Oliva Date: Fri, 26 Apr 2002 19:35:33 +0000 (+0000) Subject: tree.c (tree_int_cst_lt): Compare constants whose types differ in unsigned-ness corre... X-Git-Tag: releases/gcc-3.3.0~5455 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b13ab42c86156992f0ee15fcf70dfb8cd05fca88;p=thirdparty%2Fgcc.git tree.c (tree_int_cst_lt): Compare constants whose types differ in unsigned-ness correctly. * tree.c (tree_int_cst_lt): Compare constants whose types differ in unsigned-ness correctly. From-SVN: r52802 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c87842e72e51..f23a4a4678b4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-04-26 Alexandre Oliva + + * tree.c (tree_int_cst_lt): Compare constants whose types differ + in unsigned-ness correctly. + 2002-04-26 John David Anglin * pa.h (FUNCTION_OK_FOR_SIBCALL): Don't do sibcalls when using the diff --git a/gcc/tree.c b/gcc/tree.c index 450dd19cc044..4ec4bd04e869 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -3230,7 +3230,20 @@ tree_int_cst_lt (t1, t2) if (t1 == t2) return 0; - if (! TREE_UNSIGNED (TREE_TYPE (t1))) + if (TREE_UNSIGNED (TREE_TYPE (t1)) != TREE_UNSIGNED (TREE_TYPE (t2))) + { + int t1_sgn = tree_int_cst_sgn (t1); + int t2_sgn = tree_int_cst_sgn (t2); + + if (t1_sgn < t2_sgn) + return 1; + else if (t1_sgn > t2_sgn) + return 0; + /* Otherwise, both are non-negative, so we compare them as + unsigned just in case one of them would overflow a signed + type. */ + } + else if (! TREE_UNSIGNED (TREE_TYPE (t1))) return INT_CST_LT (t1, t2); return INT_CST_LT_UNSIGNED (t1, t2);