mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 23:01:17 +08:00
re PR debug/64663 (ICE at -O1 and above with -g enabled on x86_64-linux-gnu)
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. From-SVN: r219906
This commit is contained in:
parent
73cb399d51
commit
17cb42833c
@ -1,3 +1,12 @@
|
||||
2015-01-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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-20 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
* config/nios2/nios2.c (nios2_asm_file_end): Implement
|
||||
|
@ -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)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-01-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/64663
|
||||
* gcc.dg/pr64663.c: New test.
|
||||
|
||||
2015-01-20 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/64383
|
||||
|
17
gcc/testsuite/gcc.dg/pr64663.c
Normal file
17
gcc/testsuite/gcc.dg/pr64663.c
Normal file
@ -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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user