aboutsummaryrefslogtreecommitdiff
path: root/gdb/valarith.c
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2005-08-11 13:45:40 +0000
committerAndreas Schwab <schwab@linux-m68k.org>2005-08-11 13:45:40 +0000
commit0d059fcaa4840fdd24f0664318dc3d36218242e1 (patch)
tree12d2aa83418de0961f2e312397468549aa009faa /gdb/valarith.c
parent5477e8a096ecc65c9e4c4cbbfaa13c3b3ad2ad82 (diff)
downloadfsf-binutils-gdb-0d059fcaa4840fdd24f0664318dc3d36218242e1.zip
fsf-binutils-gdb-0d059fcaa4840fdd24f0664318dc3d36218242e1.tar.gz
fsf-binutils-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.c9
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;