Revert "[libFuzzer] Use std::discrete_distribution for input selection."
This reverts r339973 due to msan.test failing on
sanitizer-x86_64-linux-fuzzer bot.
llvm-svn: 339976
GitOrigin-RevId: be57e8e328696870abf4cf168e80114710476552
diff --git a/FuzzerCorpus.h b/FuzzerCorpus.h
index 11f5f1b..8ad1465 100644
--- a/FuzzerCorpus.h
+++ b/FuzzerCorpus.h
@@ -174,7 +174,7 @@
// Returns an index of random unit from the corpus to mutate.
size_t ChooseUnitIdxToMutate(Random &Rand) {
- size_t Idx = CorpusDistribution(Rand);
+ size_t Idx = static_cast<size_t>(CorpusDistribution(Rand));
assert(Idx < Inputs.size());
return Idx;
}
@@ -276,7 +276,9 @@
void UpdateCorpusDistribution() {
size_t N = Inputs.size();
assert(N);
+ Intervals.resize(N + 1);
Weights.resize(N);
+ std::iota(Intervals.begin(), Intervals.end(), 0);
for (size_t i = 0; i < N; i++)
Weights[i] = Inputs[i]->NumFeatures
? (i + 1) * (Inputs[i]->HasFocusFunction ? 1000 : 1)
@@ -289,11 +291,12 @@
Printf("%f ", Weights[i]);
Printf("Weights\n");
}
- CorpusDistribution =
- std::discrete_distribution<size_t>(Weights.begin(), Weights.end());
+ CorpusDistribution = std::piecewise_constant_distribution<double>(
+ Intervals.begin(), Intervals.end(), Weights.begin());
}
- std::discrete_distribution<size_t> CorpusDistribution;
+ std::piecewise_constant_distribution<double> CorpusDistribution;
+ Vector<double> Intervals;
Vector<double> Weights;
std::unordered_set<std::string> Hashes;