Message ID | 87vb2segc8.fsf@e105548-lin.cambridge.arm.com |
---|---|
State | New |
Headers | show |
On 05/05/2016 04:20 PM, Richard Sandiford wrote: > expand_debug_expr handled negative bit positions using: > > else if (bitpos < 0) > { > HOST_WIDE_INT units > = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT; > op0 = adjust_address_nv (op0, mode1, units); > bitpos += units * BITS_PER_UNIT; > } > > Here "units" is the negative of the (negative) byte offset, so I think > we should be offsetting OP0 by -units instead. E.g. a bitpos of -17 > would give units==3, so this code would move OP0 up by 3 bytes and set > bitpos to 7, giving a total bitpos of 31. > gcc/ > * cfgexpand.c (expand_debug_expr): Fix address offset for negative > bitpos. Ok. Bernd
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 21f21c9..77a1964 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -4473,7 +4473,7 @@ expand_debug_expr (tree exp) { HOST_WIDE_INT units = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT; - op0 = adjust_address_nv (op0, mode1, units); + op0 = adjust_address_nv (op0, mode1, -units); bitpos += units * BITS_PER_UNIT; } else if (bitpos == 0 && bitsize == GET_MODE_BITSIZE (mode))