From 1b8ee706e8bb16a9b6c59c832d33b56915d1f410 Mon Sep 17 00:00:00 2001 From: Max Ihlenfeldt Date: Tue, 5 Sep 2023 09:51:38 +0000 Subject: [PATCH 18/33] [meta-browser] Fix "undefined symbol: PaintOpWriter::SerializedSize()" For some reason, clang 14 (currently used on dunfell and kirkstone) seems to fail to correctly generate a needed instantiation of `cc::PaintOpWriter::SerializedSize()`, 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 --- 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(); + // Serialization of raw/smart pointers is not supported by default. template static inline size_t SerializedSize(const T* p); @@ -385,6 +388,11 @@ constexpr size_t PaintOpWriter::SerializedSize() { SerializedSizeSimple(); // fBaseImageType } +template<> +constexpr size_t PaintOpWriter::SerializedSize() { + return SerializedSizeSimple(); +} + template constexpr size_t PaintOpWriter::SerializedSize() { static_assert(std::is_arithmetic_v || std::is_enum_v); -- 2.42.1