diff --git a/packages/react-native/Libraries/Image/RCTImageLoader.mm b/packages/react-native/Libraries/Image/RCTImageLoader.mm index 75362da2dd43..e7e1260240da 100644 --- a/packages/react-native/Libraries/Image/RCTImageLoader.mm +++ b/packages/react-native/Libraries/Image/RCTImageLoader.mm @@ -32,7 +32,7 @@ static NSInteger RCTImageBytesForImage(UIImage *image) return image.images ? image.images.count * singleImageBytes : singleImageBytes; } -static auto currentRequestCount = std::atomic(0); +static constinit auto currentRequestCount = std::atomic(0); static NSError *addResponseHeadersToError(NSError *originalError, NSHTTPURLResponse *response) { diff --git a/packages/react-native/Libraries/Network/RCTNetworkTask.mm b/packages/react-native/Libraries/Network/RCTNetworkTask.mm index e397936d31ba..99c9e237a989 100644 --- a/packages/react-native/Libraries/Network/RCTNetworkTask.mm +++ b/packages/react-native/Libraries/Network/RCTNetworkTask.mm @@ -21,7 +21,7 @@ @implementation RCTNetworkTask { RCTNetworkTask *_selfReference; } -static auto currentRequestId = std::atomic(0); +static constinit auto currentRequestId = std::atomic(0); - (instancetype)initWithRequest:(NSURLRequest *)request handler:(id)handler diff --git a/packages/react-native/React/Base/RCTUtils.mm b/packages/react-native/React/Base/RCTUtils.mm index 21ddfb6ff1f2..57949ad56f88 100644 --- a/packages/react-native/React/Base/RCTUtils.mm +++ b/packages/react-native/React/Base/RCTUtils.mm @@ -386,7 +386,7 @@ UIDeviceOrientation RCTDeviceOrientation(void) CGSize RCTScreenSize(void) { - static std::atomic cachedSize; + static constinit std::atomic cachedSize; __block CGSize size = cachedSize.load(std::memory_order_relaxed); if (CGSizeEqualToSize(size, CGSizeZero)) { diff --git a/packages/react-native/React/CoreModules/RCTDevSettings.mm b/packages/react-native/React/CoreModules/RCTDevSettings.mm index 89a7b0c793e6..0c8eb0cc091c 100644 --- a/packages/react-native/React/CoreModules/RCTDevSettings.mm +++ b/packages/react-native/React/CoreModules/RCTDevSettings.mm @@ -127,7 +127,7 @@ - (void)_reloadWithDefaults:(NSDictionary *)defaultValues #if RCT_DEV_SETTINGS_ENABLE_PACKAGER_CONNECTION static RCTHandlerToken reloadToken; static RCTHandlerToken devMenuToken; -static std::atomic numInitializedModules{0}; +static constinit std::atomic numInitializedModules{0}; #endif @interface RCTDevSettings () { diff --git a/packages/react-native/ReactAndroid/src/main/jni/first-party/fbgloginit/glog_init.cpp b/packages/react-native/ReactAndroid/src/main/jni/first-party/fbgloginit/glog_init.cpp index c7174b832275..34df76e08dc9 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/first-party/fbgloginit/glog_init.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/first-party/fbgloginit/glog_init.cpp @@ -112,7 +112,7 @@ lastResort(const char* tag, const char* msg, const char* arg = nullptr) { namespace facebook::gloginit { void initialize(const char* tag) { - static std::once_flag flag{}; + static constinit std::once_flag flag{}; static auto failed = false; std::call_once(flag, [tag] { diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/hermes/reactexecutor/OnLoad.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/hermes/reactexecutor/OnLoad.cpp index 53d76082651d..fb890992dd87 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/hermes/reactexecutor/OnLoad.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/hermes/reactexecutor/OnLoad.cpp @@ -25,7 +25,7 @@ static void hermesFatalHandler(const std::string& reason) { __android_log_assert(nullptr, "Hermes", "%s", reason.c_str()); } -static std::once_flag flag; +static constinit std::once_flag flag; static ::hermes::vm::RuntimeConfig makeRuntimeConfig(jlong heapSizeMB) { namespace vm = ::hermes::vm; diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/JReactMarker.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/JReactMarker.cpp index 0b3e7442a04f..ee710f0d0c8c 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/JReactMarker.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/JReactMarker.cpp @@ -18,7 +18,7 @@ const int kInstanceKey = 1; } void JReactMarker::setLogPerfMarkerIfNeeded() { - static std::once_flag flag{}; + static constinit std::once_flag flag{}; std::call_once(flag, []() { ReactMarker::logTaggedMarkerImpl = JReactMarker::logPerfMarker; }); diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/SafeReleaseJniRef.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/SafeReleaseJniRef.cpp index 7eb5f504d77c..f8f571570e23 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/SafeReleaseJniRef.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/SafeReleaseJniRef.cpp @@ -20,7 +20,7 @@ void ensureThreadDurationJNIEnvAttached() { // > exits, and call DetachCurrentThread() from there. // https://github.com/facebookincubator/fbjni/blob/7b7efda0d49b956acf1d3307510e3c73fc55b404/cxx/fbjni/detail/Environment.h#L101 // https://developer.android.com/training/articles/perf-jni#threads - static thread_local std::optional threadScope; + static constinit thread_local std::optional threadScope; if (jni::detail::currentOrNull() == nullptr) { threadScope.emplace(); diff --git a/packages/react-native/ReactCommon/cxxreact/TraceSection.h b/packages/react-native/ReactCommon/cxxreact/TraceSection.h index 2c9ff9ddb5f4..7f956ac699c2 100644 --- a/packages/react-native/ReactCommon/cxxreact/TraceSection.h +++ b/packages/react-native/ReactCommon/cxxreact/TraceSection.h @@ -168,7 +168,7 @@ inline os_log_t instrumentsLogHandle = nullptr; static inline os_log_t getOrCreateInstrumentsLogHandle() { - static std::once_flag flag{}; + static constinit std::once_flag flag{}; std::call_once(flag, []() { if (!instrumentsLogHandle) { instrumentsLogHandle = os_log_create("dev.reactnative.instruments", OS_LOG_CATEGORY_DYNAMIC_TRACING); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 2c9722282942..090f096db3b5 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<3acecfdec6d182a74c4616d6c8690e72>> + * @generated SignedSource<> */ /** @@ -23,7 +23,7 @@ namespace facebook::react { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wglobal-constructors" -std::unique_ptr accessor_; +constinit std::unique_ptr accessor_; #pragma GCC diagnostic pop bool ReactNativeFeatureFlags::commonTestFlag() { diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm index 83cfe2308b63..7006bf65e226 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm @@ -42,7 +42,7 @@ namespace { int32_t getUniqueId() { - static std::atomic counter{0}; + static constinit std::atomic counter{0}; return counter++; } diff --git a/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp b/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp index b21524aed354..5c4d70b1ef5f 100644 --- a/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp @@ -39,7 +39,7 @@ namespace facebook::react { // Global function pointer for getting current time. Current time // can be injected for testing purposes. -static TimePointFunction g_now = &std::chrono::steady_clock::now; +static constinit TimePointFunction g_now = &std::chrono::steady_clock::now; void g_setNativeAnimatedNowTimestampFunction(TimePointFunction nowFunction) { g_now = nowFunction; } @@ -91,7 +91,8 @@ void mergeObjects(folly::dynamic& out, const folly::dynamic& objectToMerge) { } // namespace -thread_local bool NativeAnimatedNodesManager::isOnRenderThread_{false}; +constinit thread_local bool NativeAnimatedNodesManager::isOnRenderThread_{ + false}; NativeAnimatedNodesManager::NativeAnimatedNodesManager( DirectManipulationCallback&& directManipulationCallback, diff --git a/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h b/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h index fc42b1c11a3f..ff630b31209f 100644 --- a/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +++ b/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h @@ -236,7 +236,7 @@ class NativeAnimatedNodesManager : public std::enable_shared_from_this animatedNode(Tag tag, const folly::dynamic &config) noexcept; - static thread_local bool isOnRenderThread_; + static constinit thread_local bool isOnRenderThread_; std::mutex animatedNodesCreatedAsyncMutex_; std::unordered_map> animatedNodesCreatedAsync_; diff --git a/packages/react-native/ReactCommon/react/renderer/components/text/BaseParagraphProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/text/BaseParagraphProps.cpp index 6175bf755ea5..a3f401079f59 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/text/BaseParagraphProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/text/BaseParagraphProps.cpp @@ -64,7 +64,7 @@ void BaseParagraphProps::setProp( // of these fields together, and because there are some collisions between // propnames parsed here and outside of ParagraphAttributes. // This code is also duplicated in AndroidTextInput. - static auto paDefaults = ParagraphAttributes{}; + static constinit auto paDefaults = ParagraphAttributes{}; switch (hash) { REBUILD_FIELD_SWITCH_CASE( paDefaults, diff --git a/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.cpp index 5ce5172499bd..c85f11971acc 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.cpp @@ -151,7 +151,7 @@ void BaseTextInputProps::setProp( // propnames parsed here and outside of ParagraphAttributes. For example, // textBreakStrategy is duplicated. // This code is also duplicated in ParagraphProps. - static auto paDefaults = ParagraphAttributes{}; + static constinit auto paDefaults = ParagraphAttributes{}; switch (hash) { REBUILD_FIELD_SWITCH_CASE( paDefaults, diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp index fb7c6e4ffe87..1a36bd02d4eb 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp @@ -62,7 +62,7 @@ static int FabricDefaultYogaLog( return size_s; } -thread_local LayoutContext threadLocalLayoutContext; +constinit thread_local LayoutContext threadLocalLayoutContext; YogaLayoutableShadowNode::YogaLayoutableShadowNode( const ShadowNodeFragment& fragment, diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp index 73a20cedd883..2047c5b303b4 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp @@ -118,7 +118,7 @@ void YogaStylableProps::setProp( RawPropsPropNameHash hash, const char* propName, const RawValue& value) { - static const auto ygDefaults = yoga::Style{}; + static constinit const auto ygDefaults = yoga::Style{}; static const auto defaults = YogaStylableProps{}; Props::setProp(context, hash, propName, value); diff --git a/packages/react-native/ReactCommon/react/renderer/core/ReactRootViewTagGenerator.cpp b/packages/react-native/ReactCommon/react/renderer/core/ReactRootViewTagGenerator.cpp index 8ae8d1e3d7ad..90b7e3f804dc 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ReactRootViewTagGenerator.cpp +++ b/packages/react-native/ReactCommon/react/renderer/core/ReactRootViewTagGenerator.cpp @@ -15,7 +15,7 @@ constexpr SurfaceId ROOT_VIEW_TAG_INCREMENT = 10; SurfaceId getNextRootViewTag() noexcept { // Numbering of these tags goes from 11, 21, 31, ..., 100501, ... - static std::atomic nextRootViewTag = 1; + static constinit std::atomic nextRootViewTag = 1; return nextRootViewTag += ROOT_VIEW_TAG_INCREMENT; } diff --git a/packages/react-native/ReactCommon/react/renderer/core/ShadowNode.cpp b/packages/react-native/ReactCommon/react/renderer/core/ShadowNode.cpp index 5ed77b7b1e81..4ff280cf23ee 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ShadowNode.cpp +++ b/packages/react-native/ReactCommon/react/renderer/core/ShadowNode.cpp @@ -25,7 +25,8 @@ namespace facebook::react { * tree simultaneously. This thread_local flag allows enabling the updates for * chosen threads. */ -thread_local bool useRuntimeShadowNodeReferenceUpdateOnThread{false}; // NOLINT +constinit thread_local bool useRuntimeShadowNodeReferenceUpdateOnThread{ + false}; // NOLINT /* static */ void ShadowNode::setUseRuntimeShadowNodeReferenceUpdateOnThread( bool isEnabled) { diff --git a/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFragment.cpp b/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFragment.cpp index 186de7a87b90..1534c4971b8e 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFragment.cpp +++ b/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFragment.cpp @@ -16,20 +16,20 @@ namespace facebook::react { #endif const Props::Shared& ShadowNodeFragment::propsPlaceholder() { - NO_DESTROY static Props::Shared instance; + NO_DESTROY static constinit Props::Shared instance; return instance; } const std::shared_ptr>>& ShadowNodeFragment::childrenPlaceholder() { - NO_DESTROY static std::shared_ptr< + NO_DESTROY static constinit std::shared_ptr< const std::vector>> instance; return instance; } const State::Shared& ShadowNodeFragment::statePlaceholder() { - NO_DESTROY static State::Shared instance; + NO_DESTROY static constinit State::Shared instance; return instance; } diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.cpp b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.cpp index 5e82135e65b1..68f962ff320f 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.cpp +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.cpp @@ -69,12 +69,12 @@ SharedColor parsePlatformColor( if (!resourcePaths.empty()) { // Cache the (costly) JNI results. A cached nullopt is an explicit miss, // distinct from a path that resolves to transparent (ARGB 0). - static std::mutex getColorCacheMutex; + static constinit std::mutex getColorCacheMutex; static folly::EvictingCacheMap> getColorCache(64); // Listen for appearance changes, which should invalidate the cache - static std::once_flag setupCacheInvalidation; + static constinit std::once_flag setupCacheInvalidation; std::call_once( setupCacheInvalidation, configurePlatformColorCacheInvalidationHook, diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp index 90057c69124b..552ab8104ed3 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp @@ -133,7 +133,7 @@ void RuntimeScheduler_Legacy::executeNowOnTheSameThread( RawCallback&& callback) { TraceSection s("RuntimeScheduler::executeNowOnTheSameThread"); - static thread_local jsi::Runtime* runtimePtr = nullptr; + static constinit thread_local jsi::Runtime* runtimePtr = nullptr; if (runtimePtr == nullptr) { runtimeAccessRequests_ += 1; diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp index 791a4f3a8d0b..2e57e23b0ce2 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp @@ -153,7 +153,7 @@ void RuntimeScheduler_Modern::executeNowOnTheSameThread( RawCallback&& callback) { TraceSection s("RuntimeScheduler::executeNowOnTheSameThread"); - static thread_local jsi::Runtime* runtimePtr = nullptr; + static constinit thread_local jsi::Runtime* runtimePtr = nullptr; auto currentTime = now_(); auto priority = SchedulerPriority::ImmediatePriority; diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/Task.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/Task.cpp index fa44d3d6f812..fced88bb4079 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/Task.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/Task.cpp @@ -13,7 +13,7 @@ namespace facebook::react { namespace { inline uint64_t getNextId() noexcept { - static std::atomic nextId = 1; + static constinit std::atomic nextId = 1; return nextId++; } diff --git a/packages/react-native/ReactCommon/react/renderer/telemetry/TransactionTelemetry.cpp b/packages/react-native/ReactCommon/react/renderer/telemetry/TransactionTelemetry.cpp index a5506321e04f..e30402c6f047 100644 --- a/packages/react-native/ReactCommon/react/renderer/telemetry/TransactionTelemetry.cpp +++ b/packages/react-native/ReactCommon/react/renderer/telemetry/TransactionTelemetry.cpp @@ -13,7 +13,8 @@ namespace facebook::react { -thread_local TransactionTelemetry* threadLocalTransactionTelemetry = nullptr; +constinit thread_local TransactionTelemetry* threadLocalTransactionTelemetry = + nullptr; TransactionTelemetry::TransactionTelemetry() : TransactionTelemetry(telemetryTimePointNow) {} diff --git a/packages/react-native/ReactCommon/reactperflogger/reactperflogger/ReactPerfetto.cpp b/packages/react-native/ReactCommon/reactperflogger/reactperflogger/ReactPerfetto.cpp index 77ebb2845ada..86f7b3375406 100644 --- a/packages/react-native/ReactCommon/reactperflogger/reactperflogger/ReactPerfetto.cpp +++ b/packages/react-native/ReactCommon/reactperflogger/reactperflogger/ReactPerfetto.cpp @@ -22,7 +22,7 @@ namespace facebook::react { -std::once_flag perfettoInit; +constinit std::once_flag perfettoInit; void initializePerfetto() { std::call_once(perfettoInit, []() { perfetto::TracingInitArgs args; diff --git a/packages/react-native/ReactCommon/runtimeexecutor/platform/ios/ReactCommon/RuntimeExecutorSyncUIThreadUtils.mm b/packages/react-native/ReactCommon/runtimeexecutor/platform/ios/ReactCommon/RuntimeExecutorSyncUIThreadUtils.mm index 77273fdf9475..3119ee46bd40 100644 --- a/packages/react-native/ReactCommon/runtimeexecutor/platform/ios/ReactCommon/RuntimeExecutorSyncUIThreadUtils.mm +++ b/packages/react-native/ReactCommon/runtimeexecutor/platform/ios/ReactCommon/RuntimeExecutorSyncUIThreadUtils.mm @@ -53,7 +53,7 @@ OnScopeExit onScopeExit(^{ // Protects access to g_uiTask std::mutex &g_mutex() { - static std::mutex mutex; + static constinit std::mutex mutex; return mutex; } @@ -65,13 +65,13 @@ OnScopeExit onScopeExit(^{ std::mutex &g_ticket() { - static std::mutex ticket; + static constinit std::mutex ticket; return ticket; } std::optional &g_uiTask() { - static std::optional uiTaskQueue; + static constinit std::optional uiTaskQueue; return uiTaskQueue; } diff --git a/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp b/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp index 7b1d7461d745..192a6af77da9 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +++ b/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp @@ -35,7 +35,7 @@ namespace facebook::yoga { -std::atomic gCurrentGenerationCount(0); +constinit std::atomic gCurrentGenerationCount(0); static bool hasAutoHorizontalMargin(const Style& style) { for (const auto direction : {Direction::LTR, Direction::RTL}) { diff --git a/packages/react-native/ReactCommon/yoga/yoga/event/event.cpp b/packages/react-native/ReactCommon/yoga/yoga/event/event.cpp index ac6735d6d44b..b9d373775946 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/event/event.cpp +++ b/packages/react-native/ReactCommon/yoga/yoga/event/event.cpp @@ -46,7 +46,7 @@ struct Node { : subscriber{std::move(subscriber)} {} }; -std::atomic subscribers{nullptr}; +constinit std::atomic subscribers{nullptr}; Node* push(Node* newHead) { Node* oldHead = nullptr; diff --git a/packages/react-native/ReactCxxPlatform/react/profiling/perfetto.cpp b/packages/react-native/ReactCxxPlatform/react/profiling/perfetto.cpp index c15a1179ae77..cc448e654ae8 100644 --- a/packages/react-native/ReactCxxPlatform/react/profiling/perfetto.cpp +++ b/packages/react-native/ReactCxxPlatform/react/profiling/perfetto.cpp @@ -11,7 +11,7 @@ #include void initializePerfetto() { - static std::once_flag s_PerfettoIsInitialized; + static constinit std::once_flag s_PerfettoIsInitialized; std::call_once(s_PerfettoIsInitialized, []() { perfetto::TracingInitArgs args; diff --git a/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativeFeatureFlags.cpp-template.js b/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativeFeatureFlags.cpp-template.js index 32d4e1788582..6c51a17a5817 100644 --- a/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativeFeatureFlags.cpp-template.js +++ b/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativeFeatureFlags.cpp-template.js @@ -31,7 +31,7 @@ namespace facebook::react { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wglobal-constructors" -std::unique_ptr accessor_; +constinit std::unique_ptr accessor_; #pragma GCC diagnostic pop ${Object.entries(definitions.common)