From 51acd4708296de4392232271b3d6c5d067bdffad Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Wed, 27 Jul 2022 10:20:39 +0200 Subject: [PATCH] Disable constinit for MSVC compilers https://developercommunity.visualstudio.com/t/C:-constinit-for-an-optional-fails-if-/1406069 does not only affect constinit thread_local but also constinit in general on MSVC compilers when C++20 is being used. So disable the feature for these compilers in general for now. This commit amends d9531593a248e19f7da7862b2870a6af2f413e75 Fixes: QTBUG-105234 Pick-to: 6.4 Change-Id: I1855f0857d85487895460fc7c56675fb864bfa73 Reviewed-by: Thiago Macieira --- src/corelib/global/qglobal.h | 9 +++------ src/corelib/kernel/qobject.cpp | 2 +- src/corelib/kernel/qproperty.cpp | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 982cb4bf34..d1207498af 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -895,10 +895,11 @@ constexpr std::underlying_type_t qToUnderlying(Enum e) noexcept #endif #ifdef __cpp_constinit -# define Q_CONSTINIT constinit # if defined(Q_CC_MSVC) && !defined(Q_CC_CLANG) // https://developercommunity.visualstudio.com/t/C:-constinit-for-an-optional-fails-if-/1406069 -# define Q_THREAD_LOCAL_CONSTINIT +# define Q_CONSTINIT +# else +# define Q_CONSTINIT constinit # endif #elif defined(__has_cpp_attribute) && __has_cpp_attribute(clang::require_constant_initialization) # define Q_CONSTINIT [[clang::require_constant_initialization]] @@ -908,10 +909,6 @@ constexpr std::underlying_type_t qToUnderlying(Enum e) noexcept # define Q_CONSTINIT #endif -#ifndef Q_THREAD_LOCAL_CONSTINIT -# define Q_THREAD_LOCAL_CONSTINIT Q_CONSTINIT -#endif - template inline T *qGetPtrHelper(T *ptr) noexcept { return ptr; } template inline auto qGetPtrHelper(Ptr &ptr) noexcept -> decltype(ptr.get()) { static_assert(noexcept(ptr.get()), "Smart d pointers for Q_DECLARE_PRIVATE must have noexcept get()"); return ptr.get(); } diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index e07631d001..a7f48b5c59 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -2415,7 +2415,7 @@ public: { return std::find(locations.begin(), locations.end(), method) != locations.end(); } }; -Q_THREAD_LOCAL_CONSTINIT static thread_local FlaggedDebugSignatures flaggedSignatures = {}; +Q_CONSTINIT static thread_local FlaggedDebugSignatures flaggedSignatures = {}; } // unnamed namespace const char *qFlagLocation(const char *method) diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp index f80c22c0d9..a6435830f9 100644 --- a/src/corelib/kernel/qproperty.cpp +++ b/src/corelib/kernel/qproperty.cpp @@ -164,7 +164,7 @@ struct QPropertyDelayedNotifications } }; -Q_THREAD_LOCAL_CONSTINIT static thread_local QBindingStatus bindingStatus; +Q_CONSTINIT static thread_local QBindingStatus bindingStatus; /*! \since 6.2