From 1b8ee706e8bb16a9b6c59c832d33b56915d1f410 Mon Sep 17 00:00:00 2001 From: Max Ihlenfeldt <max@igalia.com> Date: Tue, 5 Sep 2023 09:51:38 +0000 Subject: [PATCH 18/33] [meta-browser] Fix "undefined symbol: PaintOpWriter::SerializedSize<unsigned long>()" For some reason, clang 14 (currently used on dunfell and kirkstone) seems to fail to correctly generate a needed instantiation of `cc::PaintOpWriter::SerializedSize<T>()`, and thus the final linking step fails with an "undefined symbol" error. We can fix this by explicitly providing a specialization, which does the same thing as the generic implementation. Upstream-Status: Inappropriate [specific to older versions of clang] Signed-off-by: Max Ihlenfeldt <max@igalia.com> --- cc/paint/paint_op_writer.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cc/paint/paint_op_writer.h b/cc/paint/paint_op_writer.h index 70153c0aa64ac..f47eb934c1eb1 100644 --- a/cc/paint/paint_op_writer.h +++ b/cc/paint/paint_op_writer.h @@ -122,6 +122,9 @@ class CC_PAINT_EXPORT PaintOpWriter { static size_t SerializedSize(const PaintRecord& record); static size_t SerializedSize(const SkHighContrastConfig& config); + template<> + constexpr size_t SerializedSize<size_t>(); + // Serialization of raw/smart pointers is not supported by default. template <typename T> static inline size_t SerializedSize(const T* p); @@ -385,6 +388,11 @@ constexpr size_t PaintOpWriter::SerializedSize<SkGainmapInfo>() { SerializedSizeSimple<uint32_t>(); // fBaseImageType } +template<> +constexpr size_t PaintOpWriter::SerializedSize<size_t>() { + return SerializedSizeSimple<size_t>(); +} + template <typename T> constexpr size_t PaintOpWriter::SerializedSize() { static_assert(std::is_arithmetic_v<T> || std::is_enum_v<T>); -- 2.42.1