From 0c670e76997115212764115e1e6094447c2cc582 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sat, 15 Aug 2015 18:25:57 +0200 Subject: [PATCH] Don't demangle the exception class name on MSVC --- CMakeLists.txt | 4 ++-- src/app/signal_handlers.cpp | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 16b3e650..7313d919 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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") diff --git a/src/app/signal_handlers.cpp b/src/app/signal_handlers.cpp index 6506daff..cd435ccc 100644 --- a/src/app/signal_handlers.cpp +++ b/src/app/signal_handlers.cpp @@ -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 #include #include @@ -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() {