[Orc] Fix bool serialization for RawByteChannels.
authorLang Hames <lhames@gmail.com>
Thu, 13 Apr 2017 05:23:50 +0000 (05:23 +0000)
committerLang Hames <lhames@gmail.com>
Thu, 13 Apr 2017 05:23:50 +0000 (05:23 +0000)
The bool type may be larger than the char type, so assuming we can cast from
bool to char and write a byte out to the stream is unsafe.

Hopefully this will get RPCUtilsTest.ReturnExpectedFailure passing on the bots.

llvm-svn: 300174

llvm/include/llvm/ExecutionEngine/Orc/RawByteChannel.h

index 39753ed..52a546f 100644 (file)
@@ -121,11 +121,19 @@ class SerializationTraits<ChannelT, bool, bool,
                               RawByteChannel, ChannelT>::value>::type> {
 public:
   static Error serialize(ChannelT &C, bool V) {
-    return C.appendBytes(reinterpret_cast<const char *>(&V), 1);
+    uint8_t Tmp = V ? 1 : 0;
+    if (auto Err =
+          C.appendBytes(reinterpret_cast<const char *>(&Tmp), 1))
+      return Err;
+    return Error::success();
   }
 
   static Error deserialize(ChannelT &C, bool &V) {
-    return C.readBytes(reinterpret_cast<char *>(&V), 1);
+    uint8_t Tmp = 0;
+    if (auto Err = C.readBytes(reinterpret_cast<char *>(&Tmp), 1))
+      return Err;
+    V = Tmp != 0;
+    return Error::success();
   }
 };