summaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2015-01-20 18:29:58 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2015-01-20 18:29:58 +0000
commit01ec5786f61e5404aa009dda193cde74b94d89d4 (patch)
treef0024654ba4929b13177d77f6b91416960580e26 /gcc/dwarf2out.c
parent3e4e446a1d28027a21bd37a2194f097efe661ab8 (diff)
downloadgcc-01ec5786f61e5404aa009dda193cde74b94d89d4.tar.gz
PR debug/64663
* dwarf2out.c (decl_piece_node): Don't put bitsize into mode if bitsize <= 0. (decl_piece_bitsize, adjust_piece_list, add_var_loc_to_decl, dw_sra_loc_expr): Use HOST_WIDE_INT instead of int for bit sizes and positions. * gcc.dg/pr64663.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@219906 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 5190c86697f..1cafd52bf00 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -5062,7 +5062,7 @@ equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
/* Return how many bits covers PIECE EXPR_LIST. */
-static int
+static HOST_WIDE_INT
decl_piece_bitsize (rtx piece)
{
int ret = (int) GET_MODE (piece);
@@ -5090,7 +5090,7 @@ decl_piece_varloc_ptr (rtx piece)
static rtx_expr_list *
decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
{
- if (bitsize <= (int) MAX_MACHINE_MODE)
+ if (bitsize > 0 && bitsize <= (int) MAX_MACHINE_MODE)
return alloc_EXPR_LIST (bitsize, loc_note, next);
else
return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
@@ -5129,7 +5129,7 @@ adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
HOST_WIDE_INT bitsize, rtx loc_note)
{
- int diff;
+ HOST_WIDE_INT diff;
bool copy = inner != NULL;
if (copy)
@@ -5269,7 +5269,7 @@ add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
{
struct var_loc_node *last = temp->last, *unused = NULL;
rtx *piece_loc = NULL, last_loc_note;
- int piece_bitpos = 0;
+ HOST_WIDE_INT piece_bitpos = 0;
if (last->next)
{
last = last->next;
@@ -5280,7 +5280,7 @@ add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
piece_loc = &last->loc;
do
{
- int cur_bitsize = decl_piece_bitsize (*piece_loc);
+ HOST_WIDE_INT cur_bitsize = decl_piece_bitsize (*piece_loc);
if (piece_bitpos + cur_bitsize > bitpos)
break;
piece_bitpos += cur_bitsize;
@@ -13924,7 +13924,7 @@ static dw_loc_descr_ref
dw_sra_loc_expr (tree decl, rtx loc)
{
rtx p;
- unsigned int padsize = 0;
+ unsigned HOST_WIDE_INT padsize = 0;
dw_loc_descr_ref descr, *descr_tail;
unsigned HOST_WIDE_INT decl_size;
rtx varloc;
@@ -13940,11 +13940,11 @@ dw_sra_loc_expr (tree decl, rtx loc)
for (p = loc; p; p = XEXP (p, 1))
{
- unsigned int bitsize = decl_piece_bitsize (p);
+ unsigned HOST_WIDE_INT bitsize = decl_piece_bitsize (p);
rtx loc_note = *decl_piece_varloc_ptr (p);
dw_loc_descr_ref cur_descr;
dw_loc_descr_ref *tail, last = NULL;
- unsigned int opsize = 0;
+ unsigned HOST_WIDE_INT opsize = 0;
if (loc_note == NULL_RTX
|| NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)