Blob Blame History Raw
diff --git a/tests/catch/catch.hpp b/tests/catch/catch.hpp
index 32701b2bd7..883b2fc96d 100644
--- a/tests/catch/catch.hpp
+++ b/tests/catch/catch.hpp
@@ -8047,7 +8047,7 @@ namespace Catch {
         static bool isSet;
         static struct sigaction oldSigActions[];
         static stack_t oldSigStack;
-        static char altStackMem[];
+        static char *altStackMem;
 
         static void handleSignal( int sig );
 
@@ -10826,7 +10826,7 @@ namespace Catch {
 
     // 32kb for the alternate stack seems to be sufficient. However, this value
     // is experimentally determined, so that's not guaranteed.
-    static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
+    static std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
 
     static SignalDefs signalDefs[] = {
         { SIGINT,  "SIGINT - Terminal interrupt signal" },
@@ -10851,6 +10851,7 @@ namespace Catch {
     }
 
     FatalConditionHandler::FatalConditionHandler() {
+        altStackMem = new char[sigStackSize];
         isSet = true;
         stack_t sigStack;
         sigStack.ss_sp = altStackMem;
@@ -10868,6 +10869,7 @@ namespace Catch {
 
     FatalConditionHandler::~FatalConditionHandler() {
         reset();
+        delete[] altStackMem;
     }
 
     void FatalConditionHandler::reset() {
@@ -10885,7 +10887,7 @@ namespace Catch {
     bool FatalConditionHandler::isSet = false;
     struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {};
     stack_t FatalConditionHandler::oldSigStack = {};
-    char FatalConditionHandler::altStackMem[sigStackSize] = {};
+    char *FatalConditionHandler::altStackMem;
 
 } // namespace Catch