From d784fa8fb2936fb9bd2ebb8e1854b855ca206d96 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 1 Mar 2023 12:23:43 -0700 Subject: [PATCH] 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. --- gdb/valarith.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gdb/valarith.c b/gdb/valarith.c index b3321e4ff75..25d72b7f38c 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)) { -- 2.30.2