[libcxx-commits] [libcxxabi] a9245e4 - [libc++abi] Fix non-constant initialization of default terminate

Eric Fiselier via libcxx-commits libcxx-commits at lists.llvm.org
Wed Dec 11 17:32:45 PST 2019


Author: Eric Fiselier
Date: 2019-12-11T20:32:14-05:00
New Revision: a9245e4f86165ac38a297138fff08cd4eb7255a7

URL: https://github.com/llvm/llvm-project/commit/a9245e4f86165ac38a297138fff08cd4eb7255a7
DIFF: https://github.com/llvm/llvm-project/commit/a9245e4f86165ac38a297138fff08cd4eb7255a7.diff

LOG: [libc++abi] Fix non-constant initialization of default terminate
handlers.

Added: 
    

Modified: 
    libcxxabi/src/cxa_default_handlers.cpp

Removed: 
    


################################################################################
diff  --git a/libcxxabi/src/cxa_default_handlers.cpp b/libcxxabi/src/cxa_default_handlers.cpp
index 573694d4ebef..d2f823d2b778 100644
--- a/libcxxabi/src/cxa_default_handlers.cpp
+++ b/libcxxabi/src/cxa_default_handlers.cpp
@@ -18,6 +18,8 @@
 #include "include/atomic_support.h"
 
 #if !defined(LIBCXXABI_SILENT_TERMINATE)
+
+_LIBCPP_SAFE_STATIC
 static const char* cause = "uncaught";
 
 __attribute__((noreturn))
@@ -82,21 +84,21 @@ static void demangling_unexpected_handler()
     std::terminate();
 }
 
-static std::terminate_handler default_terminate_handler = demangling_terminate_handler;
-static std::terminate_handler default_unexpected_handler = demangling_unexpected_handler;
+static constexpr std::terminate_handler default_terminate_handler = demangling_terminate_handler;
+static constexpr std::terminate_handler default_unexpected_handler = demangling_unexpected_handler;
 #else
-static std::terminate_handler default_terminate_handler = ::abort;
-static std::terminate_handler default_unexpected_handler = std::terminate;
+static constexpr std::terminate_handler default_terminate_handler = ::abort;
+static constexpr std::terminate_handler default_unexpected_handler = std::terminate;
 #endif
 
 //
 // Global variables that hold the pointers to the current handler
 //
 _LIBCXXABI_DATA_VIS
-std::terminate_handler __cxa_terminate_handler = default_terminate_handler;
+_LIBCPP_SAFE_STATIC std::terminate_handler __cxa_terminate_handler = default_terminate_handler;
 
 _LIBCXXABI_DATA_VIS
-std::unexpected_handler __cxa_unexpected_handler = default_unexpected_handler;
+_LIBCPP_SAFE_STATIC std::unexpected_handler __cxa_unexpected_handler = default_unexpected_handler;
 
 namespace std
 {


        


More information about the libcxx-commits mailing list