Don't demangle the exception class name on MSVC

master
krzys-h 2015-08-15 18:25:57 +02:00 committed by Piotr Dziwinski
parent f21025b526
commit 0c670e7699
2 changed files with 12 additions and 5 deletions

View File

@ -131,7 +131,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(RELEASE_CXX_FLAGS "-O2")
set(DEBUG_CXX_FLAGS "-g -O0")
set(TEST_CXX_FLAGS "-pthread")
add_definitions(-DNOEXCEPT=noexcept)
add_definitions(-DNOEXCEPT=noexcept -DHAVE_DEMANGLE)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.1)
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(DEBUG_CXX_FLAGS "-g -O0")
set(TEST_CXX_FLAGS "-pthread")
add_definitions(-DNOEXCEPT=noexcept)
add_definitions(-DNOEXCEPT=noexcept -DHAVE_DEMANGLE)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
message(STATUS "Detected MSVC compiler")

View File

@ -56,7 +56,8 @@ void CSignalHandlers::SignalHandler(int sig)
ReportError(signalStr);
}
// TODO: How portable across compilers is this?
#if HAVE_DEMANGLE
// For gcc and clang
#include <cstdlib>
#include <memory>
#include <cxxabi.h>
@ -67,9 +68,15 @@ std::string demangle(const char* name) {
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()
{