diff options
| author | Matt Morehouse <mascasa@google.com> | 2018-08-17 00:13:22 +0000 |
|---|---|---|
| committer | Matt Morehouse <mascasa@google.com> | 2018-08-17 00:13:22 +0000 |
| commit | 0094d31f5b51691994f38c5de85c4a962fb75b61 (patch) | |
| tree | 98823a1516835ee47242e3841f515b77c97d2279 | |
| parent | a93e7261708d200924c530caaa00c252bfa25a15 (diff) | |
| download | bcm5719-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.h | 11 |
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; |

