[llvm] [orc-rt] Simplify construction of SPSSerializableExpected from values. (PR #157796)
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 9 21:51:48 PDT 2025
https://github.com/lhames created https://github.com/llvm/llvm-project/pull/157796
Adds an overload of toSPSSerializableExpected that takes a plain T value and returns an SPSSerializableExpected<T>. This will reduce some boilerplate when creating SPSSerializableExpected values.
>From 6b243aff40da010b9398d2e8fd9d6c7c6201e125 Mon Sep 17 00:00:00 2001
From: Lang Hames <lhames at gmail.com>
Date: Wed, 10 Sep 2025 14:43:44 +1000
Subject: [PATCH] [orc-rt] Simplify construction of SPSSerializableExpected
from values.
Adds an overload of toSPSSerializableExpected that takes a plain T value and
returns an SPSSerializableExpected<T>. This will reduce some boilerplate when
creating SPSSerializableExpected values.
---
.../orc-rt/SimplePackedSerialization.h | 15 +++++++------
.../SimplePackedSerializationTest.cpp | 22 ++++++++++++++++++-
2 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/orc-rt/include/orc-rt/SimplePackedSerialization.h b/orc-rt/include/orc-rt/SimplePackedSerialization.h
index 4c1343c70cf27..7ac1cf2367dca 100644
--- a/orc-rt/include/orc-rt/SimplePackedSerialization.h
+++ b/orc-rt/include/orc-rt/SimplePackedSerialization.h
@@ -599,16 +599,12 @@ template <typename SPSTagT> class SPSExpected;
/// See SPSSerializableError for more details.
template <typename T> struct SPSSerializableExpected {
SPSSerializableExpected() = default;
- SPSSerializableExpected(Expected<T> E) {
+ explicit SPSSerializableExpected(Expected<T> E) {
if (E)
Val = decltype(Val)(std::in_place_index<0>, std::move(*E));
else
Val = decltype(Val)(std::in_place_index<1>, toString(E.takeError()));
}
- SPSSerializableExpected(Error E) {
- assert(E && "Cannot create Expected from Error::success()");
- Val = decltype(Val)(std::in_place_index<1>, toString(std::move(E)));
- }
Expected<T> toExpected() {
if (Val.index() == 0)
@@ -621,12 +617,17 @@ template <typename T> struct SPSSerializableExpected {
template <typename T>
SPSSerializableExpected<T> toSPSSerializableExpected(Expected<T> E) {
- return std::move(E);
+ return SPSSerializableExpected<T>(std::move(E));
+}
+
+template <typename T>
+SPSSerializableExpected<T> toSPSSerializableExpected(T Val) {
+ return SPSSerializableExpected<T>(std::move(Val));
}
template <typename T>
SPSSerializableExpected<T> toSPSSerializableExpected(Error E) {
- return std::move(E);
+ return SPSSerializableExpected<T>(std::move(E));
}
template <typename SPSTagT, typename T>
diff --git a/orc-rt/unittests/SimplePackedSerializationTest.cpp b/orc-rt/unittests/SimplePackedSerializationTest.cpp
index 09cc168d88645..8b4a8d2f64d56 100644
--- a/orc-rt/unittests/SimplePackedSerializationTest.cpp
+++ b/orc-rt/unittests/SimplePackedSerializationTest.cpp
@@ -223,7 +223,7 @@ TEST(SimplePackedSerializationTest, SerializeErrorFailure) {
EXPECT_EQ(toString(SE.toError()), std::string("test error message"));
}
-TEST(SimplePackedSerializationTest, SerializeExpectedSuccess) {
+TEST(SimplePackedSerializationTest, SerializeExpectedSuccessViaExpected) {
auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
toSPSSerializableExpected(Expected<uint32_t>(42U)));
if (!B) {
@@ -243,6 +243,26 @@ TEST(SimplePackedSerializationTest, SerializeExpectedSuccess) {
ADD_FAILURE() << "Unexpected failure value";
}
+TEST(SimplePackedSerializationTest, SerializeExpectedSuccessViaValue) {
+ auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
+ toSPSSerializableExpected(uint32_t(42U)));
+ if (!B) {
+ ADD_FAILURE() << "Unexpected failure to serialize expected-success value";
+ return;
+ }
+ SPSSerializableExpected<uint32_t> SE;
+ if (!spsDeserialize<SPSArgList<SPSExpected<uint32_t>>>(*B, SE)) {
+ ADD_FAILURE() << "Unexpected failure to deserialize expected-success value";
+ return;
+ }
+
+ auto E = SE.toExpected();
+ if (E)
+ EXPECT_EQ(*E, 42U);
+ else
+ ADD_FAILURE() << "Unexpected failure value";
+}
+
TEST(SimplePackedSerializationTest, SerializeExpectedFailure) {
auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
toSPSSerializableExpected<uint32_t>(
More information about the llvm-commits
mailing list