convert.c (convert_to_integer): Don't do unsigned unless result or both inputs are unsigned.

* convert.c (convert_to_integer): Don't do unsigned unless result or
	both inputs are unsigned.

From-SVN: r40014
This commit is contained in:
Richard Kenner 2001-02-23 21:10:35 +00:00 committed by Richard Kenner
parent ac50176d22
commit 3cc247a81a
2 changed files with 6 additions and 3 deletions

View File

@ -1,5 +1,8 @@
Fri Feb 23 15:28:39 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* convert.c (convert_to_integer): Don't do unsigned unless result or
both inputs are unsigned.
* fold-const.c (fold_convert): Don't call size_int_type_wide if
input overflows.

View File

@ -310,13 +310,13 @@ convert_to_integer (type, expr)
{
/* Don't do unsigned arithmetic where signed was wanted,
or vice versa.
Exception: if either of the original operands were
Exception: if both of the original operands were
unsigned then can safely do the work as unsigned.
And we may need to do it as unsigned
if we truncate to the original size. */
typex = ((TREE_UNSIGNED (TREE_TYPE (expr))
|| TREE_UNSIGNED (TREE_TYPE (arg0))
|| TREE_UNSIGNED (TREE_TYPE (arg1)))
|| (TREE_UNSIGNED (TREE_TYPE (arg0))
&& TREE_UNSIGNED (TREE_TYPE (arg1))))
? unsigned_type (typex) : signed_type (typex));
return convert (type,
fold (build (ex_form, typex,