<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 28, 2015 at 10:23 PM, Kostya Serebryany <span dir="ltr"><<a href="mailto:kcc@google.com" target="_blank">kcc@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Wed, Jan 28, 2015 at 1:54 PM, Pasi Parviainen <span dir="ltr"><<a href="mailto:pasi.parviainen@iki.fi" target="_blank">pasi.parviainen@iki.fi</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div>On 28.1.2015 0:08, Kostya Serebryany wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Author: kcc<br>
Date: Tue Jan 27 16:08:41 2015<br>
New Revision: 227252<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=227252&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=227252&view=rev</a><br>
Log:<br>
Add a Fuzzer library<br>
<br>
Summary:<br>
A simple genetic in-process coverage-guided fuzz testing library.<br>
<br>
I've used this fuzzer to test clang-format<br>
(it found 12+ bugs, thanks djasper@ for the fixes!)<br>
and it may also help us test other parts of LLVM.<br>
So why not keep it in the LLVM repository?<br>
<br>
I plan to add the cmake build rules later (in a separate patch, if that's ok)<br>
and also add a clang-format-fuzzer target.<br>
<br>
See README.txt for details.<br>
<br>
Test Plan: Tests will follow separately.<br>
<br>
Reviewers: djasper, chandlerc, rnk<br>
<br>
Reviewed By: rnk<br>
<br>
Subscribers: majnemer, ygribov, dblaikie, llvm-commits<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D7184" target="_blank">http://reviews.llvm.org/D7184</a><br>
<br>
Added:<br>
     llvm/trunk/lib/Fuzzer/<br>
     llvm/trunk/lib/Fuzzer/<u></u>CMakeLists.txt<br>
     llvm/trunk/lib/Fuzzer/<u></u>FuzzerCrossOver.cpp<br>
     llvm/trunk/lib/Fuzzer/<u></u>FuzzerFlags.def<br>
     llvm/trunk/lib/Fuzzer/<u></u>FuzzerIO.cpp<br>
     llvm/trunk/lib/Fuzzer/<u></u>FuzzerInternal.h<br>
     llvm/trunk/lib/Fuzzer/<u></u>FuzzerLoop.cpp<br>
     llvm/trunk/lib/Fuzzer/<u></u>FuzzerMain.cpp<br>
     llvm/trunk/lib/Fuzzer/<u></u>FuzzerMutate.cpp<br>
     llvm/trunk/lib/Fuzzer/<u></u>FuzzerUtil.cpp<br>
     llvm/trunk/lib/Fuzzer/README.<u></u>txt<br>
     llvm/trunk/lib/Fuzzer/test/<br>
     llvm/trunk/lib/Fuzzer/test/<u></u>ExactTest.cpp<br>
     llvm/trunk/lib/Fuzzer/test/<u></u>InfiniteTest.cpp<br>
     llvm/trunk/lib/Fuzzer/test/<u></u>NullDerefTest.cpp<br>
     llvm/trunk/lib/Fuzzer/test/<u></u>SimpleTest.cpp<br>
     llvm/trunk/lib/Fuzzer/test/<u></u>TestFuzzerCrossOver.cpp<br>
     llvm/trunk/lib/Fuzzer/test/<u></u>TimeoutTest.cpp<br>
Modified:<br>
     llvm/trunk/lib/CMakeLists.txt<br>
</blockquote>
<br></div></div>
Putting this library directly under lib/ tree feels a little bit out of place. Perhaps utils/ or even tools/ trees would be more appropriate locations for this library, since most of its value is in testing (on limited environments, see below).</blockquote><div><br></div></div></div><div>I don't have any strong opinion here. But none of the reviewers objected. </div></div></div></div></blockquote><div><br></div><div>I somewhat agree with Pasi, but we already have precedent for having stuff that is sort of out of place in lib so I'm not too worried. E.g. lib/TableGen (builds a compile-time tool), clang/lib/Headers (contains builtin headers for user code).</div><div><br></div><div>-- Sean Silva</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Modified: llvm/trunk/lib/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CMakeLists.txt?rev=227252&r1=227251&r2=227252&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/<u></u>CMakeLists.txt?rev=227252&r1=<u></u>227251&r2=227252&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/CMakeLists.txt (original)<br>
+++ llvm/trunk/lib/CMakeLists.txt Tue Jan 27 16:08:41 2015<br>
@@ -17,3 +17,4 @@ add_subdirectory(Target)<br>
  add_subdirectory(AsmParser)<br>
  add_subdirectory(LineEditor)<br>
  add_subdirectory(ProfileData)<br>
+add_subdirectory(Fuzzer)<br>
<br>
Added: llvm/trunk/lib/Fuzzer/<u></u>CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/CMakeLists.txt?rev=227252&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/Fuzzer/<u></u>CMakeLists.txt?rev=227252&<u></u>view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/Fuzzer/<u></u>CMakeLists.txt (added)<br>
+++ llvm/trunk/lib/Fuzzer/<u></u>CMakeLists.txt Tue Jan 27 16:08:41 2015<br>
@@ -0,0 +1,9 @@<br>
+add_library(LLVMFuzzer STATIC<br>
+  EXCLUDE_FROM_ALL  # Do not build if you are not building fuzzers.<br>
+  FuzzerCrossOver.cpp<br>
+  FuzzerIO.cpp<br>
+  FuzzerLoop.cpp<br>
+  FuzzerMain.cpp<br>
+  FuzzerMutate.cpp<br>
+  FuzzerUtil.cpp<br>
+  )<br>
<br>
</blockquote>
<br></div></div>
This target should only be added when build environment can satisfy its requirements (sufficient posix interfaces + asan support), otherwise there will be a build target which is known to fail. Fuzzers depending on this library can then simply enable themselves by existence of this target.</blockquote><div><br></div></div></div>That's what EXCLUDE_FROM_ALL is for, right? </div><div class="gmail_quote"><br><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span><font color="#888888"><br>
<br>
Pasi.<br>
<br>
</font></span></blockquote></div><br></div></div>
<br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div></div>