aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgexpand.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cfgexpand.c')
-rw-r--r--gcc/cfgexpand.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 6882954..4f317d9 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -2524,6 +2524,9 @@ expand_debug_expr (tree exp)
&mode1, &unsignedp, &volatilep, false);
rtx orig_op0;
+ if (bitsize == 0)
+ return NULL;
+
orig_op0 = op0 = expand_debug_expr (tem);
if (!op0)
@@ -2561,6 +2564,9 @@ expand_debug_expr (tree exp)
if (MEM_P (op0))
{
+ if (mode1 == VOIDmode)
+ /* Bitfield. */
+ mode1 = smallest_mode_for_size (bitsize, MODE_INT);
if (bitpos >= BITS_PER_UNIT)
{
op0 = adjust_address_nv (op0, mode1, bitpos / BITS_PER_UNIT);
@@ -2568,7 +2574,8 @@ expand_debug_expr (tree exp)
}
else if (bitpos < 0)
{
- int units = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
+ HOST_WIDE_INT units
+ = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
op0 = adjust_address_nv (op0, mode1, units);
bitpos += units * BITS_PER_UNIT;
}