diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-03-09 19:48:43 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-03-09 19:48:43 +0100 |
commit | 4398467a10ce7c25357bf3dce287b2dd4c59302d (patch) | |
tree | 664a758f9ec94f7a71fd3e7a825f752304737b27 | |
parent | 8302950ddcbe2adc34237d8367a06ba08c3f8069 (diff) | |
download | gcc-4398467a10ce7c25357bf3dce287b2dd4c59302d.zip gcc-4398467a10ce7c25357bf3dce287b2dd4c59302d.tar.gz gcc-4398467a10ce7c25357bf3dce287b2dd4c59302d.tar.bz2 |
re PR debug/43290 (ICE in dwarf2out_frame_debug_expr)
PR debug/43290
* config/i386/i386.c (ix86_get_drap_rtx): Don't set
RTX_FRAME_RELATED_P.
* g++.dg/eh/unwind2.C: New test.
From-SVN: r157313
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/eh/unwind2.C | 94 |
4 files changed, 108 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cba2031..20a1e87 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-03-09 Jakub Jelinek <jakub@redhat.com> + + PR debug/43290 + * config/i386/i386.c (ix86_get_drap_rtx): Don't set + RTX_FRAME_RELATED_P. + 2010-03-09 Jie Zhang <jie@codesourcery.com> * config/arm/arm.md (thumb_mulsi3_v6): Remove trailing diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3a3b2ac..ab242a6 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8319,7 +8319,7 @@ ix86_get_drap_rtx (void) unsigned int regno = find_drap_reg (); rtx drap_vreg; rtx arg_ptr; - rtx seq, insn; + rtx seq; arg_ptr = gen_rtx_REG (Pmode, regno); crtl->drap_reg = arg_ptr; @@ -8328,9 +8328,8 @@ ix86_get_drap_rtx (void) drap_vreg = copy_to_reg (arg_ptr); seq = get_insns (); end_sequence (); - - insn = emit_insn_before (seq, NEXT_INSN (entry_of_function ())); - RTX_FRAME_RELATED_P (insn) = 1; + + emit_insn_before (seq, NEXT_INSN (entry_of_function ())); return drap_vreg; } else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b9ade14..a874977 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-03-09 Jakub Jelinek <jakub@redhat.com> + + PR debug/43290 + * g++.dg/eh/unwind2.C: New test. + 2010-03-05 Sebastian Pop <sebastian.pop@amd.com> Reza Yazdani <reza.yazdani@amd.com> diff --git a/gcc/testsuite/g++.dg/eh/unwind2.C b/gcc/testsuite/g++.dg/eh/unwind2.C new file mode 100644 index 0000000..d6181c8 --- /dev/null +++ b/gcc/testsuite/g++.dg/eh/unwind2.C @@ -0,0 +1,94 @@ +// PR debug/43290 +// { dg-do compile } +// { dg-options "-O2" } +// { dg-options "-O3 -mavx -fPIC -mtune=core2" { target { { i?86-*-* x86_64-*-* } && { ilp32 && fpic } } } } + +namespace std +{ + template <class> struct char_traits; +} +typedef struct { union { char __wchb[4]; }; } mbstate_t; +namespace std +{ + template <typename _StateT> struct fpos + { + long long _M_off; + _StateT _M_state; + fpos (long long):_M_off (), _M_state () { } + _StateT state () { return _M_state; } + }; + typedef fpos <mbstate_t> streampos; +} +namespace std +{ + template <> struct char_traits <char> + { + typedef streampos pos_type; + typedef long long off_type; + typedef mbstate_t state_type; + }; +} +struct pthread_mutex_t; +namespace +{ + enum _Ios_Openmode { _S_in = 3, _S_out }; + enum _Ios_Seekdir { _S_beg }; + struct ios_base + { + typedef _Ios_Openmode openmode; + static const openmode in = _S_in; + static const openmode out = _S_out; + typedef _Ios_Seekdir seekdir; + static const seekdir beg = _S_beg; + }; + template < typename _CharT, typename > struct basic_streambuf + { + typedef _CharT char_type; + char_type * _M_in_beg; + char_type *eback () { return _M_in_beg; } + char_type *gptr () {} + }; +} +namespace std +{ + typedef struct pthread_mutex_t __c_lock; + template <typename> class __basic_file; + template <> struct __basic_file <char> + { + __basic_file (__c_lock * = 0); + bool is_open (); + }; + template <typename _CharT, typename _Traits> struct basic_filebuf : public basic_streambuf <_CharT, _Traits> + { + typedef _CharT char_type; + typedef _Traits traits_type; + typedef typename traits_type::pos_type pos_type; + typedef typename traits_type::off_type off_type; + typedef __basic_file < char >__file_type; + typedef typename traits_type::state_type __state_type; + __file_type _M_file; + char_type *_M_pback_cur_save; + bool _M_pback_init; + void _M_destroy_pback () throw () + { + _M_pback_cur_save += this->gptr () != this->eback (); + _M_pback_init = false; + } + bool is_open () throw () { return _M_file.is_open (); } + pos_type seekpos (pos_type, ios_base::openmode = ios_base::in | ios_base::out); + pos_type _M_seek (off_type, ios_base::seekdir, __state_type); + }; + template <typename _CharT, typename _Traits> + typename basic_filebuf <_CharT, _Traits>::pos_type + basic_filebuf <_CharT, _Traits>::seekpos (pos_type __pos, ios_base::openmode) + { + pos_type __ret = (off_type ()); + if (this->is_open ()) + { + _M_destroy_pback (); + __ret = _M_seek (off_type (), ios_base::beg, __pos.state ()); + } + return __ret; + } + template class basic_filebuf <char, char_traits <char> >; +} |