From d3daee4c68c7e067c4a9f4ae620a7fa41a4c6428 Mon Sep 17 00:00:00 2001 From: Samuel Benzaquen Date: Tue, 25 Aug 2026 07:22:35 -0700 Subject: [PATCH] Continue cleaning up after the GLOBALS experiment. Remove branching for MessageGlobalsBase and the trait. PiperOrigin-RevId: 970537151 --- src/google/protobuf/message_lite.h | 43 +----------------------- src/google/protobuf/message_traits.h | 10 +++--- src/google/protobuf/message_unittest.inc | 3 -- src/google/protobuf/repeated_ptr_field.h | 4 +-- 4 files changed, 8 insertions(+), 52 deletions(-) diff --git a/src/google/protobuf/message_lite.h b/src/google/protobuf/message_lite.h index 27eed7351b..151d055ce7 100644 --- a/src/google/protobuf/message_lite.h +++ b/src/google/protobuf/message_lite.h @@ -247,31 +247,7 @@ PROTOBUF_EXPORT inline const std::string& GetEmptyStringAlreadyInited() { return fixed_address_empty_string.get(); } -#ifndef PROTOBUF_MESSAGE_GLOBALS -struct MessageGlobalsBase { - template - static const T* ToDefaultInstance(const void* globals) { - return reinterpret_cast(globals); - } - - static const MessageGlobalsBase* FromDefaultInstance( - const void* default_instance) { - return reinterpret_cast(default_instance); - } - - static const MessageGlobalsBase* FromClassData(const ClassData* class_data) { - return FromDefaultInstance(class_data->default_instance()); - } -}; - -template -struct GeneratedMessageTraitsT { - static constexpr const void* default_instance() { return kDefault; } - static constexpr const auto* class_data() { return kClassData->base(); } - static constexpr const auto* tc_table() { return class_data()->tc_table; } - static constexpr auto StrongPointer() { return default_instance(); } -}; -#else +// TODO: Remove unnecessary members, or move into ClassData. struct MessageGlobalsBase { template static constexpr size_t RoundUpTo(size_t n) { @@ -327,16 +303,9 @@ struct MessageGlobalsBase { template struct GeneratedMessageTraitsT { - static const void* default_instance() { - return MessageGlobalsBase::ToDefaultInstance(kGlobals); - } static const auto* class_data() { return MessageGlobalsBase::GetClassData(kGlobals); } - static const auto* tc_table() { - return MessageGlobalsBase::ToParseTableBase(kGlobals); - } - static constexpr const auto* globals() { return kGlobals; } static constexpr auto StrongPointer() { return kGlobals; } }; @@ -345,22 +314,12 @@ inline const MessageLite* ClassData::default_instance() const { return MessageGlobalsBase::ToDefaultInstance(this); } -#endif // PROTOBUF_MESSAGE_GLOBALS - inline const TcParseTableBase* ClassData::GetTcParseTable() const { -#ifdef PROTOBUF_MESSAGE_GLOBALS if (ABSL_PREDICT_FALSE(is_dynamic)) { -#else - if (ABSL_PREDICT_FALSE(tc_table == nullptr)) { -#endif ABSL_DCHECK(!is_lite); return descriptor_methods()->get_tc_table(this); } -#ifdef PROTOBUF_MESSAGE_GLOBALS return MessageGlobalsBase::ToParseTableBase(this); -#else - return tc_table; -#endif } } // namespace internal diff --git a/src/google/protobuf/message_traits.h b/src/google/protobuf/message_traits.h index 7bdcbf1e45..85742c847e 100644 --- a/src/google/protobuf/message_traits.h +++ b/src/google/protobuf/message_traits.h @@ -24,18 +24,18 @@ class MessageLite; namespace internal { +struct MessageGlobalsBase; struct ClassData; template const ClassData* GetClassData(const MessageT& msg); -template +template struct FallbackMessageTraits { - static const void* default_instance() { return &T::default_instance(); } - static constexpr const auto* class_data() { - return GetClassData(static_cast(T::default_instance())); + static const auto* class_data() { + return Globals::GetClassData( + Globals::FromDefaultInstance(&T::default_instance())); } - static const auto* tc_table() { return class_data()->GetTcParseTable(); } // We can't make a constexpr pointer to the default, so use a function pointer // instead. static constexpr auto StrongPointer() { return &T::default_instance; } diff --git a/src/google/protobuf/message_unittest.inc b/src/google/protobuf/message_unittest.inc index 74d949421a..74baa2ac4e 100644 --- a/src/google/protobuf/message_unittest.inc +++ b/src/google/protobuf/message_unittest.inc @@ -1672,9 +1672,6 @@ TEST(MESSAGE_TEST_NAME, MOMIParserEdgeCases) { } TEST(MESSAGE_TEST_NAME, MessageTraitsWork) { - EXPECT_EQ( - &UNITTEST::TestAllTypes::default_instance(), - internal::MessageTraits::default_instance()); EXPECT_EQ(internal::GetClassData(UNITTEST::TestAllTypes::default_instance()), internal::MessageTraits::class_data()); } diff --git a/src/google/protobuf/repeated_ptr_field.h b/src/google/protobuf/repeated_ptr_field.h index 345b396c46..643d44390d 100644 --- a/src/google/protobuf/repeated_ptr_field.h +++ b/src/google/protobuf/repeated_ptr_field.h @@ -1133,8 +1133,8 @@ class GenericTypeHandler { static const Type& default_instance() { static_assert(has_default_instance()); - return *static_cast( - MessageTraits::default_instance()); + return *reinterpret_cast( + MessageTraits::class_data()->default_instance()); } static constexpr bool has_default_instance() { return !std::is_same_v && !std::is_same_v;