Fixing sync problems
diff --git a/java/core/src/test/proto/com/google/protobuf/map_for_proto2_lite_test.proto b/java/core/src/test/proto/com/google/protobuf/map_for_proto2_lite_test.proto
index 1ab94eb..fd479bb 100644
--- a/java/core/src/test/proto/com/google/protobuf/map_for_proto2_lite_test.proto
+++ b/java/core/src/test/proto/com/google/protobuf/map_for_proto2_lite_test.proto
@@ -128,6 +128,3 @@
   // null is not a 'reserved word' per se but as a literal needs similar care
   map<string, SampleEnum> null = 10;
 }
-package map_for_proto2_lite_test;
-option java_package = "map_lite_test";
-option optimize_for = LITE_RUNTIME;
diff --git a/src/google/protobuf/arena.cc b/src/google/protobuf/arena.cc
index 6ba81f8..7a05037 100644
--- a/src/google/protobuf/arena.cc
+++ b/src/google/protobuf/arena.cc
@@ -53,6 +53,17 @@
 namespace google {
 namespace protobuf {
 namespace internal {
+namespace {
+
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT ArenaBlock
+kSentryArenaBlock = {};
+
+ArenaBlock* SentryArenaBlock() {
+  // const_cast<> is okay as kSentryArenaBlock will never be mutated.
+  return const_cast<ArenaBlock*>(&kSentryArenaBlock);
+}
+
+}
 
 static SerialArena::Memory AllocateMemory(const AllocationPolicy* policy_ptr,
                                           size_t last_size, size_t min_bytes) {
@@ -105,8 +116,6 @@
   size_t* space_allocated_;
 };
 
-constexpr ArenaBlock SerialArena::kSentryBlock;
-
 // It is guaranteed that this is constructed in `b`. IOW, this is not the first
 // arena and `b` cannot be sentry.
 SerialArena::SerialArena(ArenaBlock* b, ThreadSafeArena& parent)
@@ -120,7 +129,7 @@
 
 // It is guaranteed that this is the first SerialArena. Use sentry block.
 SerialArena::SerialArena(ThreadSafeArena& parent)
-    : head_{SentryBlock()}, parent_{parent} {}
+    : head_{SentryArenaBlock()}, parent_{parent} {}
 
 // It is guaranteed that this is the first SerialArena but `b` may be user
 // provided or newly allocated to store AllocationPolicy.
@@ -308,7 +317,7 @@
 // where the size of "ids" and "arenas" is determined at runtime; hence the use
 // of Layout.
 struct SerialArenaChunkHeader {
-  constexpr SerialArenaChunkHeader(uint32_t capacity, uint32_t size)
+  PROTOBUF_CONSTEXPR SerialArenaChunkHeader(uint32_t capacity, uint32_t size)
       : next_chunk(nullptr), capacity(capacity), size(size) {}
 
   ThreadSafeArena::SerialArenaChunk* next_chunk;
@@ -433,7 +442,7 @@
   }
 };
 
-constexpr SerialArenaChunkHeader kSentryArenaChunk = {0, 0};
+PROTOBUF_CONSTEXPR SerialArenaChunkHeader kSentryArenaChunk = {0, 0};
 
 ThreadSafeArena::SerialArenaChunk* ThreadSafeArena::SentrySerialArenaChunk() {
   // const_cast is okay because the sentry chunk is never mutated. Also,
@@ -487,7 +496,7 @@
 ArenaBlock* ThreadSafeArena::FirstBlock(void* buf, size_t size) {
   GOOGLE_DCHECK_EQ(reinterpret_cast<uintptr_t>(buf) & 7, 0u);
   if (buf == nullptr || size <= kBlockHeaderSize) {
-    return SerialArena::SentryBlock();
+    return SentryArenaBlock();
   }
   // Record user-owned block.
   alloc_policy_.set_is_user_owned_initial_block(true);
@@ -702,7 +711,7 @@
                         : kBlockHeaderSize + kAllocPolicySize;
     first_arena_.Init(new (mem.ptr) ArenaBlock{nullptr, mem.size}, offset);
   } else {
-    first_arena_.Init(SerialArena::SentryBlock(), 0);
+    first_arena_.Init(SentryArenaBlock(), 0);
   }
 
   // Since the first block and potential alloc_policy on the first block is
diff --git a/src/google/protobuf/arena_impl.h b/src/google/protobuf/arena_impl.h
index 43056f5..fa4d6f5 100644
--- a/src/google/protobuf/arena_impl.h
+++ b/src/google/protobuf/arena_impl.h
@@ -91,7 +91,7 @@
 // a default memory order (std::memory_order_seq_cst).
 template <typename T>
 struct Atomic {
-  constexpr explicit Atomic(T v) : val(v) {}
+  PROTOBUF_CONSTEXPR explicit Atomic(T v) : val(v) {}
 
   T relaxed_get() const { return val.load(std::memory_order_relaxed); }
   T relaxed_get() { return val.load(std::memory_order_relaxed); }
@@ -114,7 +114,7 @@
 struct ArenaBlock {
   // For the sentry block with zero-size where ptr_, limit_, cleanup_nodes all
   // point to "this".
-  constexpr ArenaBlock()
+  PROTOBUF_CONSTEXPR ArenaBlock()
       : next(nullptr), cleanup_nodes(this), relaxed_size(0) {}
 
   ArenaBlock(ArenaBlock* next, size_t size)
@@ -577,13 +577,6 @@
  private:
   friend class ThreadSafeArena;
 
-  static constexpr ArenaBlock kSentryBlock = {};
-
-  static ArenaBlock* SentryBlock() {
-    // const_cast<> is okay as kSentryBlock will never be mutated.
-    return const_cast<ArenaBlock*>(&kSentryBlock);
-  }
-
   // Creates a new SerialArena inside mem using the remaining memory as for
   // future allocations.
   // The `parent` arena must outlive the serial arena, which is guaranteed
@@ -872,7 +865,7 @@
 #pragma warning(disable : 4324)
 #endif
   struct alignas(kCacheAlignment) CacheAlignedLifecycleIdGenerator {
-    constexpr CacheAlignedLifecycleIdGenerator() : id{0} {}
+    PROTOBUF_CONSTEXPR CacheAlignedLifecycleIdGenerator() : id{0} {}
 
     Atomic<LifecycleIdAtomic> id;
   };