summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Morehouse <mascasa@google.com>2018-08-17 00:13:22 +0000
committerMatt Morehouse <mascasa@google.com>2018-08-17 00:13:22 +0000
commit0094d31f5b51691994f38c5de85c4a962fb75b61 (patch)
tree98823a1516835ee47242e3841f515b77c97d2279
parenta93e7261708d200924c530caaa00c252bfa25a15 (diff)
downloadbcm5719-llvm-0094d31f5b51691994f38c5de85c4a962fb75b61.tar.gz
bcm5719-llvm-0094d31f5b51691994f38c5de85c4a962fb75b61.zip
[libFuzzer] Use std::discrete_distribution for input selection.
Summary: Since we're casting from double to size_t during input selection, we really want a discrete distribution over size_t rather than a piecewise distribution over doubles. Reviewers: kcc Reviewed By: kcc Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D50356 llvm-svn: 339973
-rw-r--r--compiler-rt/lib/fuzzer/FuzzerCorpus.h11
1 files changed, 4 insertions, 7 deletions
diff --git a/compiler-rt/lib/fuzzer/FuzzerCorpus.h b/compiler-rt/lib/fuzzer/FuzzerCorpus.h
index 8ad14656cff..11f5f1baf0d 100644
--- a/compiler-rt/lib/fuzzer/FuzzerCorpus.h
+++ b/compiler-rt/lib/fuzzer/FuzzerCorpus.h
@@ -174,7 +174,7 @@ class InputCorpus {
// Returns an index of random unit from the corpus to mutate.
size_t ChooseUnitIdxToMutate(Random &Rand) {
- size_t Idx = static_cast<size_t>(CorpusDistribution(Rand));
+ size_t Idx = CorpusDistribution(Rand);
assert(Idx < Inputs.size());
return Idx;
}
@@ -276,9 +276,7 @@ private:
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)
@@ -291,12 +289,11 @@ private:
Printf("%f ", Weights[i]);
Printf("Weights\n");
}
- CorpusDistribution = std::piecewise_constant_distribution<double>(
- Intervals.begin(), Intervals.end(), Weights.begin());
+ CorpusDistribution =
+ std::discrete_distribution<size_t>(Weights.begin(), Weights.end());
}
- std::piecewise_constant_distribution<double> CorpusDistribution;
+ std::discrete_distribution<size_t> CorpusDistribution;
- Vector<double> Intervals;
Vector<double> Weights;
std::unordered_set<std::string> Hashes;
OpenPOWER on IntegriCloud