It looks like there is a mistake in Bitmap::Get/Set operations. As it was reported by Rui Li:
When the bitmap is created, the buffer size is decided as “(num_bits + 63) >> 6”, which makes sense because the buffer is a vector of 64-bit integer. However, when we get/set bits, the word index is computed as “bit_index >> 8”. I think this will make different bit indices share the same slot, e.g. bit_index 0 and bit_index 64.
Indeed it looks wrong:
Probably we didn't notice this error because the Bitmap is being used only by the join filters that can have false positives. When we fix it we may get a better accuracy in the filters.