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.