Continue cleaning up after the GLOBALS experiment.

Remove branching for MessageGlobalsBase and the trait.

PiperOrigin-RevId: 970537151
This commit is contained in:
Samuel Benzaquen 2026-08-25 07:22:35 -07:00 committed by Copybara-Service
parent 9d98477ca9
commit d3daee4c68
4 changed files with 8 additions and 52 deletions

View file

@ -247,31 +247,7 @@ PROTOBUF_EXPORT inline const std::string& GetEmptyStringAlreadyInited() {
return fixed_address_empty_string.get();
}
#ifndef PROTOBUF_MESSAGE_GLOBALS
struct MessageGlobalsBase {
template <typename T = MessageLite>
static const T* ToDefaultInstance(const void* globals) {
return reinterpret_cast<const T*>(globals);
}
static const MessageGlobalsBase* FromDefaultInstance(
const void* default_instance) {
return reinterpret_cast<const MessageGlobalsBase*>(default_instance);
}
static const MessageGlobalsBase* FromClassData(const ClassData* class_data) {
return FromDefaultInstance(class_data->default_instance());
}
};
template <const auto* kDefault, const auto* kClassData>
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 <size_t R, size_t KnownAlignment = 0>
static constexpr size_t RoundUpTo(size_t n) {
@ -327,16 +303,9 @@ struct MessageGlobalsBase {
template <const auto* kGlobals>
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

View file

@ -24,18 +24,18 @@ class MessageLite;
namespace internal {
struct MessageGlobalsBase;
struct ClassData;
template <typename MessageT>
const ClassData* GetClassData(const MessageT& msg);
template <typename T>
template <typename T, typename Globals = MessageGlobalsBase>
struct FallbackMessageTraits {
static const void* default_instance() { return &T::default_instance(); }
static constexpr const auto* class_data() {
return GetClassData(static_cast<const MessageLite&>(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; }

View file

@ -1672,9 +1672,6 @@ TEST(MESSAGE_TEST_NAME, MOMIParserEdgeCases) {
}
TEST(MESSAGE_TEST_NAME, MessageTraitsWork) {
EXPECT_EQ(
&UNITTEST::TestAllTypes::default_instance(),
internal::MessageTraits<UNITTEST::TestAllTypes>::default_instance());
EXPECT_EQ(internal::GetClassData(UNITTEST::TestAllTypes::default_instance()),
internal::MessageTraits<UNITTEST::TestAllTypes>::class_data());
}

View file

@ -1133,8 +1133,8 @@ class GenericTypeHandler {
static const Type& default_instance() {
static_assert(has_default_instance());
return *static_cast<const GenericType*>(
MessageTraits<Type>::default_instance());
return *reinterpret_cast<const GenericType*>(
MessageTraits<Type>::class_data()->default_instance());
}
static constexpr bool has_default_instance() {
return !std::is_same_v<Type, Message> && !std::is_same_v<Type, MessageLite>;