Summary:
Running the folly/io/test:compression_test with a UBSAN-enabled binary would fail with this:
folly/io/test/CompressionTest.cpp:96:36: runtime error: shift exponent
16777216 is too large for 64-bit type 'size_t' (aka 'unsigned long')
That exposed the unwanted left-shift.
That made it so the actual "start" offsets were in the range [0..numThreads-1], rather than being
e.g., with numThreads == 8, [0,
16777216,
33554432, ...]. Oops.
Reviewed By: luciang
Differential Revision:
D3277606
fbshipit-source-id:
4bc48f84b0065de070b62a810f08b96e36ea7136
threads.emplace_back(
[this, seed, t, numThreadsLog2, sizeLog2] () {
std::mt19937 rng(seed + t);
- size_t countLog2 = size_t(1) << (sizeLog2 - numThreadsLog2);
+ size_t countLog2 = sizeLog2 - numThreadsLog2;
size_t start = size_t(t) << countLog2;
for (size_t i = 0; i < countLog2; ++i) {
this->data_[start + i] = rng();