This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug other/28917] New: try/catch block removed. too optimistic optimization?


with fixed PR26208 we can throw exceptions from signal handlers.
catch() works pretty fine with complex call-chain but fails on
simple testcase.

#include <csignal>
void signalHandler( int signalNumber )
{
        throw 0;
}
int main()
{
        signal( SIGSEGV, signalHandler );
        try
        {
                int* p = 0;
                *p = 0;
        }
        catch ( int )
        {
        }
        return 0;
}

$ g++ throw_from_sighandler.cpp -O1 --save-temps && ./a.out
terminate called after throwing an instance of 'int'
zsh: abort      ./a.out

main:
        subq    $8, %rsp
        movl    $_Z13signalHandleri, %esi
        movl    $11, %edi
        call    signal
        movl    $0, 0
        movl    $0, %eax
        addq    $8, %rsp
        ret


-- 
           Summary: try/catch block removed. too optimistic optimization?
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: pluto at agmk dot net
GCC target triplet: x86-64-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28917


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]