<div dir="ltr">Hello LLVM devs,<div><br></div><div>I'm running lots of experiments with LibFuzzer these days -- it's an amazing tool!</div><div><br></div><div>I've noticed something weird while examining the effect of various coverage options: for one of my benchmarks, the fuzzer was achieving a higher total coverage before April 2016, when -sanitizer-coverage-prune-blocks became true by default (<a href="https://github.com/llvm-mirror/llvm/commit/f593646d9ade6ab311cd6c55880bf3bdfc4b26a4">commit</a>).</div><div><br></div><div>Here are the numbers from running the fuzzer with different options for a fixed amount of time.</div><div><br></div><div><font face="monospace">#units  #blocks  #bits   options</font></div><div><font face="monospace">492     447      1666    <span style="line-height:18px">-fsanitize-coverage=edge,indirect-calls,8bit-counters -mllvm -sanitizer-coverage-prune-blocks=false</span></font><br></div><div><font face="monospace"><span style="line-height:18px">135     447      754     </span>-fsanitize-coverage=edge -mllvm -sanitizer-coverage-prune-blocks=false<br></font></div><div><font face="monospace"> 58     103      185     -fsanitize-coverage=edge,indirect-calls,8bit-counters</font><br><div><font face="monospace">135     447      754     -fsanitize-coverage=edge<br></font></div><div><br></div></div><div>Here, units is the number of test cases generated, blocks is the number of basic blocks covered (as measured by replaying the corpus using the -sanitizer-coverage-prune-blocks=false version), and bits is the number of bits from the 8bit-counters that were seen.</div><div><br></div><div>The outlier is the case where I use 8bit-counters and set -sanitizer-coverage-prune-blocks to true. There are two things I don't understand: (1) why can the 8bit-counters perform worse than using edge coverage only, and (2) why does -sanitizer-coverage-prune-blocks affect the result so much?</div><div><br></div><div>Any ideas?</div><div><br></div><div>If needed, I can provide scripts to reproduce this (it's a bit of work to clean them up, though). But maybe someone already has an idea why this could happen.</div><div><br></div><div>Cheers,</div><div>Jonas</div></div>