diff --git a/src/plugins/platforms/ios/qioseventdispatcher.mm b/src/plugins/platforms/ios/qioseventdispatcher.mm index 675e647bb09..5e4b074c56b 100644 --- a/src/plugins/platforms/ios/qioseventdispatcher.mm +++ b/src/plugins/platforms/ios/qioseventdispatcher.mm @@ -188,16 +188,23 @@ extern "C" int qt_main_wrapper(int argc, char *argv[]) s_isQtApplication = true; @autoreleasepool { - constexpr size_t defaultStackSize = 512 * kBytesPerKiloByte; // Same as secondary threads + size_t defaultStackSize = 512 * kBytesPerKiloByte; // Same as secondary threads uint requestedStackSize = qMax(0, infoPlistValue(@"QtRunLoopIntegrationStackSize", defaultStackSize)); if (infoPlistValue(@"QtRunLoopIntegrationDisableSeparateStack", false)) requestedStackSize = 0; - QVarLengthArray reservedStack(Stack::computeSize(requestedStackSize)); - if (reservedStack.size() > 0) { - userMainStack.adopt(reservedStack.data(), reservedStack.size()); + QT_WARNING_PUSH + QT_WARNING_DISABLE_CLANG("-Wunknown-warning-option") + QT_WARNING_DISABLE_CLANG("-Wvla-cxx-extension") + // The user-main stack _must_ live on the stack, so that the stack pointer + // during user-main is within pthread_get_stackaddr_np/pthread_get_stacksize_np. + char reservedStack[Stack::computeSize(requestedStackSize)]; + QT_WARNING_POP + + if (sizeof(reservedStack) > 0) { + userMainStack.adopt(reservedStack, sizeof(reservedStack)); if (infoPlistValue(@"QtRunLoopIntegrationDebugStackUsage", false)) { debugStackUsage = true;