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:
+2
-4
@@ -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))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user