http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47401
Summary: Support for must-not-throw regions with SJLJ exceptions broken Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassig...@gcc.gnu.org ReportedBy: uweig...@gcc.gnu.org Target: spu-elf A couple of exception related tests are failing on SPU: FAIL: g++.dg/cpp0x/noexcept04.C execution test FAIL: g++.dg/cpp0x/noexcept05.C scan-assembler LSDA FAIL: g++.dg/eh/spec10.C execution test FAIL: g++.dg/eh/spec11.C scan-assembler LSDA These are related to must-not-throw regions. To implement those, we may have to register a personality function with empty LSDA. This has been implemented for DWARF CFI exception handling, but apparently not (fully?) for SJLJ exception handling. For example, the test case for noexcept05.C: struct A { ~A(); }; void g(); void f() noexcept { A var; g(); } compiles on the SPU to: .global _Z1fv .type _Z1fv, @function _Z1fv: stqd $lr,16($sp) stqd $sp,-48($sp) ai $sp,$sp,-48 brsl $lr,_Z1gv ai $2,$sp,32 ori $3,$2,0 brsl $lr,_ZN1AD1Ev ai $sp,$sp,48 lqd $lr,16($sp) bi $lr .size _Z1fv, .-_Z1fv Note the absence of any call to _Unwind_SJLJ_Register.