https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66738

            Bug ID: 66738
           Summary: [5/6 Regression] optimizer bug related to exceptions
                    and static symbols
           Product: gcc
           Version: 5.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: doko at gcc dot gnu.org
  Target Milestone: ---

[forwarded from https://bugs.debian.org/788299]

seen with the gcc-5-branch 20150625 and trunk 20150610 (r224324)

$ g++-5 -g -O2 code.cpp && ./a.out 
Segmentation fault (core dumped)
$ g++-5 -g -O0 code.cpp && ./a.out 
terminate called after throwing an instance of 'MyException'
  what():  MyException: No!
Aborted (core dumped)
$ g++-4.9 -g -O2 code.cpp && ./a.out 
terminate called after throwing an instance of 'MyException'
  what():  MyException: No!
Aborted (core dumped)

$ cat code.cpp
#include <exception>
#include <string>

class MyException : public std::exception
{
protected:
    typedef std::exception Parent;

public:
    MyException(const char* cStr): Parent(), m_reason(cStr) {
        updateMessage();
    }

    virtual ~MyException() throw() {}

    virtual const std::string& exceptionName() const {
        return exceptionNameValue;
    }

    virtual const char* what() const throw() {
        return m_exceptionMessage.c_str();
    }

    inline void updateMessage() {
        m_exceptionMessage = exceptionName() + ": " + m_reason;
    }

private:
    std::string m_reason;
    std::string m_exceptionMessage;
    static const std::string exceptionNameValue;
};

const std::string MyException::exceptionNameValue("MyException");

int main() {
    throw MyException("No!");
    return 0;
}

Reply via email to