[Bug ipa/66738] [5/6 Regression] optimizer bug related to exceptions and static symbols
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jul 2 12:57:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66738
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2015-07-02
CC| |hubicka at gcc dot gnu.org,
| |jamborm at gcc dot gnu.org
Component|tree-optimization |ipa
Target Milestone|--- |5.2
Ever confirmed|0 |1
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed (with the old libstdc++ ABI). -O1 works. We segfault in libgcc:
Program received signal SIGSEGV, Segmentation fault.
_Unwind_Resume (exc=exc@entry=0x0)
at /space/rguenther/tramp3d/trunk/libgcc/unwind.inc:229
229 if (exc->private_1 == 0)
(gdb) bt
#0 _Unwind_Resume (exc=exc@entry=0x0)
at /space/rguenther/tramp3d/trunk/libgcc/unwind.inc:229
#1 0x0000000000400ad0 in main () at t.C:37
We optimize main to
Eh tree:
1 cleanup
3 cleanup land:{2,<L4>}
<bb 2>:
_3 = __cxa_allocate_exception (24);
MEM[(struct MyException *)_3].D.12544._vptr.exception = &MEM[(void
*)&_ZTV11MyException + 16B];
_7 = &MEM[(struct MyException *)_3].m_reason;
std::basic_string<char>::basic_string (_7, "No!", &D.13102);
;; succ: 3 [100.0%] (FALLTHRU,EXECUTABLE)
;; 4 (EH,EXECUTABLE)
<bb 3>:
D.13102 ={v} {CLOBBER};
MEM[(struct _Alloc_hider *)_3 + 16B]._M_p = &MEM[(void
*)&_S_empty_rep_storage + 24B];
__builtin_unreachable ();
<L4>:
D.13102 ={v} {CLOBBER};
_18 = &MEM[(struct MyException *)_3].D.12544;
std::exception::~exception (_18);
__builtin_eh_copy_values (1, 3);
__cxa_free_exception (_3);
_9 = __builtin_eh_pointer (1);
__builtin_unwind_resume (_9);
but the std::string constructor doesn't throw and thus we run into the
__builtin_unreachable ().
t.C.068t.fixup_cfg4: __builtin_unreachable ();
is where that appears. It's from devirtualization:
ipa-prop: Discovered a virtual call to a known target (void
MyException::updateMessage()/143 -> void __builtin_unreachable()/264), for stmt
_8 = OBJ_TYPE_REF(_6;this_2(D)->3) (this_2(D));
t.C:25:37: note: converting indirect call in void MyException::updateMessage()
to direct call to void __builtin_unreachable()
Speculative indirect call void MyException::updateMessage()/143 => virtual
const string& MyException::exceptionName() const/265 has turned out to have
contradicting known target __builtin_unreachable
More information about the Gcc-bugs
mailing list