The result of pointer arithmetic is of type ptrdiff_t, which is not necessarily the same underlying type as ssize_t. --- llvm-project-14.0.6.src/llvm/tools/llvm-objcopy/MachO/MachOWriter.cpp.orig 2022-06-23 02:46:24.000000000 +1000 +++ llvm-project-14.0.6.src/llvm/tools/llvm-objcopy/MachO/MachOWriter.cpp 2022-07-02 20:05:12.000000000 +1000 @@ -566,8 +566,8 @@ void MachOWriter::writeCodeSignatureData uint8_t *CurrHashWritePosition = HashWriteStart; while (CurrHashReadPosition < HashReadEnd) { StringRef Block(reinterpret_cast(CurrHashReadPosition), - std::min(HashReadEnd - CurrHashReadPosition, - static_cast(CodeSignature.BlockSize))); + std::min(static_cast(HashReadEnd - CurrHashReadPosition), + static_cast(CodeSignature.BlockSize))); SHA256 Hasher; Hasher.update(Block); StringRef Hash = Hasher.final();