Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2019-12-12 04:32:14 +0300
committerEric Fiselier <eric@efcs.ca>2019-12-12 04:32:14 +0300
commita9245e4f86165ac38a297138fff08cd4eb7255a7 (patch)
tree141f4efd260d200d01197d4960c1a8f6fdbb5c66 /libcxxabi/src/cxa_default_handlers.cpp
parent72b41e6e2d560aee6f52b2f1db385972053bc7d1 (diff)
[libc++abi] Fix non-constant initialization of default terminate
handlers.
Diffstat (limited to 'libcxxabi/src/cxa_default_handlers.cpp')
-rw-r--r--libcxxabi/src/cxa_default_handlers.cpp14
1 files changed, 8 insertions, 6 deletions
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
{