Use value_true in value_equal and value_less

Both value_equal and value_less use value_as_long to check a
presumably boolean result of calling value_binop.  However,
value_binop in this case actually returns an int as wide as its
arguments, and this approach can then fail for integers wider than
LONGEST.  Instead, rewrite this in a form that works for any size
integer.
This commit is contained in:
Tom Tromey
2023-03-01 12:23:43 -07:00
parent eb52a49702
commit d784fa8fb2
+2 -4
View File
@@ -1745,8 +1745,7 @@ value_equal (struct value *arg1, struct value *arg2)
is_int2 = is_integral_type (type2);
if (is_int1 && is_int2)
return longest_to_int (value_as_long (value_binop (arg1, arg2,
BINOP_EQUAL)));
return value_true (value_binop (arg1, arg2, BINOP_EQUAL));
else if ((is_floating_value (arg1) || is_int1)
&& (is_floating_value (arg2) || is_int2))
{
@@ -1833,8 +1832,7 @@ value_less (struct value *arg1, struct value *arg2)
if ((is_int1 && is_int2)
|| (is_fixed_point_type (type1) && is_fixed_point_type (type2)))
return longest_to_int (value_as_long (value_binop (arg1, arg2,
BINOP_LESS)));
return value_true (value_binop (arg1, arg2, BINOP_LESS));
else if ((is_floating_value (arg1) || is_int1)
&& (is_floating_value (arg2) || is_int2))
{