Don't demangle the exception class name on MSVC
parent
f21025b526
commit
0c670e7699
|
@ -131,7 +131,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
set(RELEASE_CXX_FLAGS "-O2")
|
set(RELEASE_CXX_FLAGS "-O2")
|
||||||
set(DEBUG_CXX_FLAGS "-g -O0")
|
set(DEBUG_CXX_FLAGS "-g -O0")
|
||||||
set(TEST_CXX_FLAGS "-pthread")
|
set(TEST_CXX_FLAGS "-pthread")
|
||||||
add_definitions(-DNOEXCEPT=noexcept)
|
add_definitions(-DNOEXCEPT=noexcept -DHAVE_DEMANGLE)
|
||||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.1)
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.1)
|
||||||
message(FATAL_ERROR "${PROJECT_NAME} requires Clang 3.1 or greater.")
|
message(FATAL_ERROR "${PROJECT_NAME} requires Clang 3.1 or greater.")
|
||||||
|
@ -143,7 +143,7 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
set(RELEASE_CXX_FLAGS "-O2")
|
set(RELEASE_CXX_FLAGS "-O2")
|
||||||
set(DEBUG_CXX_FLAGS "-g -O0")
|
set(DEBUG_CXX_FLAGS "-g -O0")
|
||||||
set(TEST_CXX_FLAGS "-pthread")
|
set(TEST_CXX_FLAGS "-pthread")
|
||||||
add_definitions(-DNOEXCEPT=noexcept)
|
add_definitions(-DNOEXCEPT=noexcept -DHAVE_DEMANGLE)
|
||||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
message(STATUS "Detected MSVC compiler")
|
message(STATUS "Detected MSVC compiler")
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,8 @@ void CSignalHandlers::SignalHandler(int sig)
|
||||||
ReportError(signalStr);
|
ReportError(signalStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: How portable across compilers is this?
|
#if HAVE_DEMANGLE
|
||||||
|
// For gcc and clang
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cxxabi.h>
|
#include <cxxabi.h>
|
||||||
|
@ -67,9 +68,15 @@ std::string demangle(const char* name) {
|
||||||
std::free
|
std::free
|
||||||
};
|
};
|
||||||
|
|
||||||
return result != nullptr ? result.get() : name;
|
return (result != nullptr && status == 0) ? result.get() : name;
|
||||||
}
|
}
|
||||||
// END OF TODO
|
#else
|
||||||
|
// For MSVC and others
|
||||||
|
// In MSVC typeinfo(e).name() should be already demangled
|
||||||
|
std::string demangle(const char* name) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void CSignalHandlers::UnhandledExceptionHandler()
|
void CSignalHandlers::UnhandledExceptionHandler()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue