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