If an error is ever returned from any of the functions called here, the error must be joined with the Result Error before being returned otherwise the Result Error will assert on destruction.
Details
Details
Diff Detail
Diff Detail
- Repository
- rG LLVM Github Monorepo
- Build Status
Buildable 37969 Build 37968: arc lint + arc unit
Event Timeline
Comment Actions
I think you need to consume Result here instead of joining it:
if (auto Err = SerializationTraits<ChannelT, Error, Error>::deserialize(C, Result)) { consumeError(std::move(Result)); return std::move(Err); }
In the first check deserialization has failed, so Result doesn't contain a meaningful Error value (it's probably still success, but it would depend on how the deserializer was written). In the second check you could return Result (since it has been fully deserialized) but for symmetry with other values I think you just want to consume it and return the RPC failure: that's what we do everywhere else.