From c2bc0946878eb23ed2a2d105ef6aaeb766cb2a82 Mon Sep 17 00:00:00 2001 From: Justin King Date: Fri, 11 Sep 2026 11:48:58 -0700 Subject: [PATCH] Mark `cel::Value` and `ValueMixin` with trivial ABI attributes PiperOrigin-RevId: 979936059 --- base/internal/unknown_set.h | 2 +- common/value.h | 3 ++- common/values/bytes_value.h | 3 ++- common/values/string_value.h | 3 ++- common/values/unknown_value.h | 3 ++- common/values/values.h | 10 +++++----- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/base/internal/unknown_set.h b/base/internal/unknown_set.h index 2ef9020d7..483ab1073 100644 --- a/base/internal/unknown_set.h +++ b/base/internal/unknown_set.h @@ -51,7 +51,7 @@ const FunctionResultSet& EmptyFunctionResultSet(); struct UnknownSetAccess; -class UnknownSet final { +class ABSL_ATTRIBUTE_TRIVIAL_ABI UnknownSet final { private: using Rep = UnknownSetRep; diff --git a/common/value.h b/common/value.h index c2ca1c608..ea040d2f8 100644 --- a/common/value.h +++ b/common/value.h @@ -96,7 +96,8 @@ namespace cel { // a known but invalid state. Any attempt to use it from then on, without // assigning another type, is undefined behavior. In debug builds, we do our // best to fail. -class Value final : private common_internal::ValueMixin { +class CEL_COMMON_INTERNAL_VALUE_VARIANT_TRIVIAL_ABI Value final + : private common_internal::ValueMixin { public: // Returns an appropriate `Value` for the dynamic protobuf enum. For open // enums, returns `cel::IntValue`. For closed enums, returns `cel::ErrorValue` diff --git a/common/values/bytes_value.h b/common/values/bytes_value.h index c18381a6a..11e16ce31 100644 --- a/common/values/bytes_value.h +++ b/common/values/bytes_value.h @@ -56,7 +56,8 @@ absl::string_view LegacyBytesValue(const BytesValue& value, bool stable, } // namespace common_internal // `BytesValue` represents values of the primitive `bytes` type. -class BytesValue final : private common_internal::ValueMixin { +class CEL_COMMON_INTERNAL_VALUE_VARIANT_TRIVIAL_ABI BytesValue final + : private common_internal::ValueMixin { public: static constexpr ValueKind kKind = ValueKind::kBytes; diff --git a/common/values/string_value.h b/common/values/string_value.h index 8045e4b3f..efdc31254 100644 --- a/common/values/string_value.h +++ b/common/values/string_value.h @@ -57,7 +57,8 @@ absl::string_view LegacyStringValue(const StringValue& value, bool stable, } // namespace common_internal // `StringValue` represents values of the primitive `string` type. -class StringValue final : private common_internal::ValueMixin { +class CEL_COMMON_INTERNAL_VALUE_VARIANT_TRIVIAL_ABI StringValue final + : private common_internal::ValueMixin { public: static constexpr ValueKind kKind = ValueKind::kString; diff --git a/common/values/unknown_value.h b/common/values/unknown_value.h index 9e8ddaae0..75be363eb 100644 --- a/common/values/unknown_value.h +++ b/common/values/unknown_value.h @@ -41,7 +41,8 @@ class Value; class UnknownValue; // `UnknownValue` represents values of the primitive `duration` type. -class UnknownValue final : private common_internal::ValueMixin { +class ABSL_ATTRIBUTE_TRIVIAL_ABI UnknownValue final + : private common_internal::ValueMixin { public: static constexpr ValueKind kKind = ValueKind::kUnknown; diff --git a/common/values/values.h b/common/values/values.h index aaa6f8659..ad2b269fa 100644 --- a/common/values/values.h +++ b/common/values/values.h @@ -50,9 +50,9 @@ class ValueInterface; class ListValueInterface; class StructValueInterface; -class Value; +class CEL_COMMON_INTERNAL_VALUE_VARIANT_TRIVIAL_ABI Value; class BoolValue; -class BytesValue; +class CEL_COMMON_INTERNAL_VALUE_VARIANT_TRIVIAL_ABI BytesValue; class DoubleValue; class DurationValue; class ABSL_ATTRIBUTE_TRIVIAL_ABI ErrorValue; @@ -62,12 +62,12 @@ class MapValue; class NullValue; class OpaqueValue; class OptionalValue; -class StringValue; +class CEL_COMMON_INTERNAL_VALUE_VARIANT_TRIVIAL_ABI StringValue; class StructValue; class TimestampValue; class TypeValue; class UintValue; -class UnknownValue; +class ABSL_ATTRIBUTE_TRIVIAL_ABI UnknownValue; class ParsedMessageValue; class ParsedMapFieldValue; class ParsedRepeatedFieldValue; @@ -203,7 +203,7 @@ using ListValueForEach2Callback = absl::FunctionRef(size_t, const Value&)>; template -class ValueMixin { +class ABSL_ATTRIBUTE_TRIVIAL_ABI ValueMixin { public: absl::StatusOr Equal( const Value& other,