diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2005-08-11 13:45:40 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2005-08-11 13:45:40 +0000 |
commit | 0d059fcaa4840fdd24f0664318dc3d36218242e1 (patch) | |
tree | 12d2aa83418de0961f2e312397468549aa009faa /gdb/valarith.c | |
parent | 5477e8a096ecc65c9e4c4cbbfaa13c3b3ad2ad82 (diff) | |
download | gdb-0d059fcaa4840fdd24f0664318dc3d36218242e1.zip gdb-0d059fcaa4840fdd24f0664318dc3d36218242e1.tar.gz gdb-0d059fcaa4840fdd24f0664318dc3d36218242e1.tar.bz2 |
PR exp/1978
* valarith.c (value_binop): Fix result type for the shift
operators.
Diffstat (limited to 'gdb/valarith.c')
-rw-r--r-- | gdb/valarith.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c index ef03fb9..2e1471c 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -883,7 +883,14 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op) Use the signedness of the operand with the greater length. If both operands are of equal length, use unsigned operation if one of the operands is unsigned. */ - if (promoted_len1 > promoted_len2) + if (op == BINOP_RSH || op == BINOP_LSH) + { + /* In case of the shift operators the type of the result only + depends on the type of the left operand. */ + unsigned_operation = is_unsigned1; + result_len = promoted_len1; + } + else if (promoted_len1 > promoted_len2) { unsigned_operation = is_unsigned1; result_len = promoted_len1; |