aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2023-03-01 12:23:43 -0700
committerTom Tromey <tromey@adacore.com>2023-03-27 08:20:29 -0600
commitd784fa8fb2936fb9bd2ebb8e1854b855ca206d96 (patch)
treec5258684190d55db1c03cae6d60162a6a6f45413
parenteb52a49702abe3d279cf9eba9291e08bc6b2d9dc (diff)
downloadgdb-d784fa8fb2936fb9bd2ebb8e1854b855ca206d96.zip
gdb-d784fa8fb2936fb9bd2ebb8e1854b855ca206d96.tar.gz
gdb-d784fa8fb2936fb9bd2ebb8e1854b855ca206d96.tar.bz2
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.
-rw-r--r--gdb/valarith.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c
index b3321e4..25d72b7 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -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))
{