Specialize the SerializationTraits on 'char', 'signed char'
and 'unsigned char' directly, rather than combining the first one with
'int8_t' and 'uint8_t'. While the latter types are commonly implemented
using 'signed char' and 'unsigned char', there is no guarantee that
a plain 'char' would not be used for their implementation.
This is exactly what happens on SunOS (OpenIndiana), where 'int8_t' is
implemented using 'char' (which is signed by default on the platform).
As a result, the specialization for 'int8_t' is equivalent to the one
for 'char' and causes the build to fail:
In file included from .../lib/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.cpp:10: In file included from .../include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h:19: .../include/llvm/ExecutionEngine/Orc/RPCByteChannel.h:161:7: error: redefinition of 'SerializationTraits<type-parameter-0-0, char, void>' class SerializationTraits<ChannelT, char> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .../psllvm/include/llvm/ExecutionEngine/Orc/RPCByteChannel.h:154:7: note: previous definition is here class SerializationTraits<ChannelT, int8_t> ^ 1 error generated.
Therefore, use 'signed char' and 'unsigned char' directly, since both
those types are guaranteed to be distinct from 'char'. They should also
be of the same size as int8_t/uint8_t on all platforms LLVM is being
built on.