diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-03-10 19:17:10 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-03-10 19:17:10 +0100 |
commit | 23f39b378852d679e5d24bbc204ec4ca8fefbd8c (patch) | |
tree | dacbe9fcddf5ad20226ea333141629bbab53dd47 /gcc/config/i386/i386.c | |
parent | 8bb025f55a97aec05b9aaff2147b2df6009e90ad (diff) | |
download | gcc-23f39b378852d679e5d24bbc204ec4ca8fefbd8c.zip gcc-23f39b378852d679e5d24bbc204ec4ca8fefbd8c.tar.gz gcc-23f39b378852d679e5d24bbc204ec4ca8fefbd8c.tar.bz2 |
re PR debug/43290 (ICE in dwarf2out_frame_debug_expr)
PR debug/43290
* reg-notes.def (REG_CFA_SET_VDRAP): New note.
* dwarf2out.c (dwarf2out_frame_debug_expr): Remove rule 20 - setting
of fde->vdrap_reg.
(dwarf2out_frame_debug): Handle REG_CFA_SET_VDRAP note.
(based_loc_descr): Only express drap or vdrap regno based expressions
using DW_OP_fbreg when not optimizing.
* config/i386/i386.c (ix86_get_drap_rtx): When not optimizing,
make the vDRAP = DRAP assignment RTX_FRAME_RELATED_P and add
REG_CFA_SET_VDRAP note.
PR debug/36728
* gcc.dg/guality/pr36728-1.c: New test.
* gcc.dg/guality/pr36728-2.c: New test.
From-SVN: r157363
Diffstat (limited to 'gcc/config/i386/i386.c')
-rw-r--r-- | gcc/config/i386/i386.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 087c30f..5f560c4 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8382,7 +8382,7 @@ ix86_get_drap_rtx (void) unsigned int regno = find_drap_reg (); rtx drap_vreg; rtx arg_ptr; - rtx seq; + rtx seq, insn; arg_ptr = gen_rtx_REG (Pmode, regno); crtl->drap_reg = arg_ptr; @@ -8391,8 +8391,13 @@ ix86_get_drap_rtx (void) drap_vreg = copy_to_reg (arg_ptr); seq = get_insns (); end_sequence (); - - emit_insn_before (seq, NEXT_INSN (entry_of_function ())); + + insn = emit_insn_before (seq, NEXT_INSN (entry_of_function ())); + if (!optimize) + { + add_reg_note (insn, REG_CFA_SET_VDRAP, drap_vreg); + RTX_FRAME_RELATED_P (insn) = 1; + } return drap_vreg; } else |