From eb4b05bffca3e582bffc3d4e949d2b4e54ba87dc Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sun, 1 Feb 2015 17:31:48 +0000 Subject: Backported from mainline 2015-01-20 Jakub Jelinek 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: https://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@220321 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 12 ++++++++++++ gcc/dwarf2out.c | 16 ++++++++-------- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/pr64663.c | 17 +++++++++++++++++ 4 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr64663.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c2c1d025af6..ca6b745fc64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2015-02-01 Jakub Jelinek + + Backported from mainline + 2015-01-20 Jakub Jelinek + + 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. + 2015-01-29 Ilya Tocar * config/i386/avx2intrin.h (_mm256_bslli_epi128, diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index d48895cde6e..23319d0d17d 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -4930,7 +4930,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); @@ -4958,7 +4958,7 @@ decl_piece_varloc_ptr (rtx piece) static rtx 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, @@ -4997,7 +4997,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) @@ -5137,7 +5137,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; @@ -5148,7 +5148,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; @@ -13573,7 +13573,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; @@ -13589,11 +13589,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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c0122c32e37..d063440f014 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2015-02-01 Jakub Jelinek + + Backported from mainline + 2015-01-20 Jakub Jelinek + + PR debug/64663 + * gcc.dg/pr64663.c: New test. + 2015-01-29 Ilya Tocar * gcc.target/i386/sse-14.c: Test new intrinsic. diff --git a/gcc/testsuite/gcc.dg/pr64663.c b/gcc/testsuite/gcc.dg/pr64663.c new file mode 100644 index 00000000000..9a0bf0d2330 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr64663.c @@ -0,0 +1,17 @@ +/* PR debug/64663 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -g -w" } */ + +void +foo (void) +{ + int a[9]; + a[-8] = 0; +} + +void +bar (void) +{ + int a[9]; + a[-9] = 0; +} -- cgit v1.2.3