I'm compiling LLVM with MSVC at the moment, I've got the following

    BitstreamReader.h(327) : warning C4334: '<<' : result of 32-bit
    shift implicitly converted to 64 bits (was 64-bit shift intended?)

  in line

    uint64_t Piece = Read(NumBits);
    if ((Piece & (1U << (NumBits-1))) == 0)

  Is this warning relevant?

  Is also Read64() instead of Read() assumed?

bitstream_reader.patch (743 Bytes)

bitstream_reader_ull_read64.patch (863 Bytes)

Yes, the code was quite broken. Other people have applied some patches in the meantime, but it was still not right. Please see if this fixes the issues, thanks!