[llvm] [orc-rt] Add SPS serialization support for size_t. (PR #162214)

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 6 19:32:03 PDT 2025


https://github.com/lhames created https://github.com/llvm/llvm-project/pull/162214

Serialize size_ts to uint64_t.

>From 29a5331ba5e1c9ff3e079f7f3bed9ea2cd915c8c Mon Sep 17 00:00:00 2001
From: Lang Hames <lhames at gmail.com>
Date: Tue, 7 Oct 2025 12:43:51 +1100
Subject: [PATCH] [orc-rt] Add SPS serialization support for size_t.

Serialize size_ts to uint64_t.
---
 .../orc-rt/SimplePackedSerialization.h        | 22 +++++++++++++++++++
 .../SimplePackedSerializationTest.cpp         |  5 +++++
 2 files changed, 27 insertions(+)

diff --git a/orc-rt/include/orc-rt/SimplePackedSerialization.h b/orc-rt/include/orc-rt/SimplePackedSerialization.h
index 7ac1cf2367dca..f60ccad666ab1 100644
--- a/orc-rt/include/orc-rt/SimplePackedSerialization.h
+++ b/orc-rt/include/orc-rt/SimplePackedSerialization.h
@@ -172,6 +172,28 @@ class SPSSerializationTraits<
   }
 };
 
+class SPSSize;
+
+/// SPSSize is serializable to/from size_t. Wire size is 64-bits.
+template <> class SPSSerializationTraits<SPSSize, size_t> {
+public:
+  static size_t size(const size_t &Value) {
+    return SPSArgList<uint64_t>::size(static_cast<uint64_t>(Value));
+  }
+  static bool serialize(SPSOutputBuffer &OB, const size_t &Value) {
+    return SPSArgList<uint64_t>::serialize(OB, static_cast<uint64_t>(Value));
+  }
+  static bool deserialize(SPSInputBuffer &IB, size_t &Value) {
+    uint64_t Tmp;
+    if (!SPSArgList<uint64_t>::deserialize(IB, Tmp))
+      return false;
+    if (Tmp > std::numeric_limits<size_t>::max())
+      return false;
+    Value = Tmp;
+    return true;
+  }
+};
+
 /// Any empty placeholder suitable as a substitute for void when deserializing
 class SPSEmpty {};
 
diff --git a/orc-rt/unittests/SimplePackedSerializationTest.cpp b/orc-rt/unittests/SimplePackedSerializationTest.cpp
index 8b4a8d2f64d56..c3df499da510f 100644
--- a/orc-rt/unittests/SimplePackedSerializationTest.cpp
+++ b/orc-rt/unittests/SimplePackedSerializationTest.cpp
@@ -103,6 +103,11 @@ TEST(SimplePackedSerializationTest, UInt64Serialization) {
   testFixedIntegralTypeSerialization<uint64_t>();
 }
 
+TEST(SimplePackedSerializationTest, SizeTSerialization) {
+  size_t V = 42;
+  blobSerializationRoundTrip<SPSSize, size_t>(V);
+}
+
 TEST(SimplePackedSerializationTest, SequenceSerialization) {
   std::vector<int32_t> V({1, 2, -47, 139});
   blobSerializationRoundTrip<SPSSequence<int32_t>, std::vector<int32_t>>(V);



More information about the llvm-commits mailing list