aboutsummaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorSteve Ellcey <sellcey@mips.com>2012-12-10 22:19:16 +0000
committerSteve Ellcey <sje@gcc.gnu.org>2012-12-10 22:19:16 +0000
commit2cd45f0e6826ddcc92216a508104b2802eddece3 (patch)
tree163fb7c1ecdd76bc467cb24ccfc8f7a0280d9fc2 /gcc/dwarf2out.c
parent4d63a95eecca6f1cce4c11a463108d741c630ff5 (diff)
downloadgcc-2cd45f0e6826ddcc92216a508104b2802eddece3.zip
gcc-2cd45f0e6826ddcc92216a508104b2802eddece3.tar.gz
gcc-2cd45f0e6826ddcc92216a508104b2802eddece3.tar.bz2
re PR target/54061 (gcc.c-torture/compile/mipscop-*.c ICEs with -g)
2012-12-10 Steve Ellcey <sellcey@mips.com> PR target/54061 rtl.h (IGNORED_DWARF_REGNUM): New. * dwarf2out.c (reg_loc_descriptor): Check for IGNORED_DWARF_REGNUM. (mem_loc_descriptor): Ditto. * config/mips/mips.h (ALL_COP_REG_FIRST): New. (ALL_COP_REG_LAST): New. (ALL_COP_REG_NUM): Redefine using above macros. * config/mips/mips.c (mips_option_override): Set mips_dbx_regno coprocessor entries to IGNORED_DWARF_REGNUM. From-SVN: r194372
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index f0256ae..c92fa4b 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -10499,7 +10499,12 @@ reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
return multiple_reg_loc_descriptor (rtl, regs, initialized);
else
- return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
+ {
+ unsigned int dbx_regnum = dbx_reg_number (rtl);
+ if (dbx_regnum == IGNORED_DWARF_REGNUM)
+ return 0;
+ return one_reg_loc_descriptor (dbx_regnum, initialized);
+ }
}
/* Return a location descriptor that designates a machine register for
@@ -11926,6 +11931,7 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
))
{
dw_die_ref type_die;
+ unsigned int dbx_regnum;
if (dwarf_strict)
break;
@@ -11935,8 +11941,12 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
GET_MODE_CLASS (mode) == MODE_INT);
if (type_die == NULL)
break;
+
+ dbx_regnum = dbx_reg_number (rtl);
+ if (dbx_regnum == IGNORED_DWARF_REGNUM)
+ break;
mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
- dbx_reg_number (rtl), 0);
+ dbx_regnum, 0);
mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
@@ -12138,9 +12148,13 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
VOIDmode, VAR_INIT_STATUS_INITIALIZED);
else
- op0
- = one_reg_loc_descriptor (dbx_reg_number (ENTRY_VALUE_EXP (rtl)),
- VAR_INIT_STATUS_INITIALIZED);
+ {
+ unsigned int dbx_regnum = dbx_reg_number (ENTRY_VALUE_EXP (rtl));
+ if (dbx_regnum == IGNORED_DWARF_REGNUM)
+ return NULL;
+ op0 = one_reg_loc_descriptor (dbx_regnum,
+ VAR_INIT_STATUS_INITIALIZED);
+ }
}
else if (MEM_P (ENTRY_VALUE_EXP (rtl))
&& REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))