Skip to content

Commit d0d2162

Browse files
authored
[orc-rt] Enable SPS transparent conversion for reference arguments. (#162563)
Ensures that SPS transparent conversion will apply to arguments passed by reference.
1 parent 992cf9a commit d0d2162

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

orc-rt/include/orc-rt/SPSWrapperFunction.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ template <typename... SPSArgTs> struct WFSPSHelper {
102102
public:
103103
template <typename... ArgTs>
104104
std::optional<WrapperFunctionBuffer> serialize(ArgTs &&...Args) {
105-
return serializeImpl(Serializable<ArgTs>::to(std::forward<ArgTs>(Args))...);
105+
return serializeImpl(
106+
Serializable<std::decay_t<ArgTs>>::to(std::forward<ArgTs>(Args))...);
106107
}
107108

108109
template <typename ArgTuple>

orc-rt/unittests/SPSWrapperFunctionTest.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,17 @@ TEST(SPSWrapperFunctionUtilsTest, TransparentConversionPointers) {
190190
EXPECT_EQ(P, &X);
191191
}
192192

193+
TEST(SPSWrapperFunctionUtilsTest, TransparentConversionReferenceArguments) {
194+
int X = 42;
195+
int *P = nullptr;
196+
SPSWrapperFunction<SPSExecutorAddr(SPSExecutorAddr)>::call(
197+
DirectCaller(nullptr, round_trip_int_pointer_sps_wrapper),
198+
[&](Expected<int32_t *> R) { P = cantFail(std::move(R)); },
199+
static_cast<int *const &>(&X));
200+
201+
EXPECT_EQ(P, &X);
202+
}
203+
193204
static void
194205
expected_int_pointer_sps_wrapper(orc_rt_SessionRef Session, void *CallCtx,
195206
orc_rt_WrapperFunctionReturn Return,

0 commit comments

Comments
 (0)