r233459 - Make the clang-fuzzer use the CompilerInstance directly.
Sean Silva
chisophugis at gmail.com
Fri Mar 27 18:26:53 PDT 2015
On Fri, Mar 27, 2015 at 5:42 PM, Manuel Klimek <klimek at google.com> wrote:
> Author: klimek
> Date: Fri Mar 27 19:42:36 2015
> New Revision: 233459
>
> URL: http://llvm.org/viewvc/llvm-project?rev=233459&view=rev
> Log:
> Make the clang-fuzzer use the CompilerInstance directly.
>
> Going through the driver is too slow.
>
Interesting. How much was the overhead? (clang wasn't forking, was it?)
-- Sean Silva
>
> Modified:
> cfe/trunk/include/clang/Tooling/Tooling.h
> cfe/trunk/lib/Tooling/Tooling.cpp
> cfe/trunk/tools/clang-fuzzer/ClangFuzzer.cpp
>
> Modified: cfe/trunk/include/clang/Tooling/Tooling.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Tooling.h?rev=233459&r1=233458&r2=233459&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Tooling/Tooling.h (original)
> +++ cfe/trunk/include/clang/Tooling/Tooling.h Fri Mar 27 19:42:36 2015
> @@ -40,6 +40,7 @@
> #include "clang/Tooling/CompilationDatabase.h"
> #include "llvm/ADT/StringMap.h"
> #include "llvm/ADT/Twine.h"
> +#include "llvm/Option/Option.h"
> #include <memory>
> #include <string>
> #include <vector>
> @@ -383,6 +384,11 @@ inline std::unique_ptr<FrontendActionFac
> /// \param File Either an absolute or relative path.
> std::string getAbsolutePath(StringRef File);
>
> +/// \brief Creates a \c CompilerInvocation.
> +clang::CompilerInvocation *newInvocation(
> + clang::DiagnosticsEngine *Diagnostics,
> + const llvm::opt::ArgStringList &CC1Args);
> +
> } // end namespace tooling
> } // end namespace clang
>
>
> Modified: cfe/trunk/lib/Tooling/Tooling.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Tooling.cpp?rev=233459&r1=233458&r2=233459&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Tooling/Tooling.cpp (original)
> +++ cfe/trunk/lib/Tooling/Tooling.cpp Fri Mar 27 19:42:36 2015
> @@ -90,7 +90,7 @@ static const llvm::opt::ArgStringList *g
> }
>
> /// \brief Returns a clang build invocation initialized from the CC1
> flags.
> -static clang::CompilerInvocation *newInvocation(
> +clang::CompilerInvocation *newInvocation(
> clang::DiagnosticsEngine *Diagnostics,
> const llvm::opt::ArgStringList &CC1Args) {
> assert(!CC1Args.empty() && "Must at least contain the program name!");
>
> Modified: cfe/trunk/tools/clang-fuzzer/ClangFuzzer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-fuzzer/ClangFuzzer.cpp?rev=233459&r1=233458&r2=233459&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/clang-fuzzer/ClangFuzzer.cpp (original)
> +++ cfe/trunk/tools/clang-fuzzer/ClangFuzzer.cpp Fri Mar 27 19:42:36 2015
> @@ -16,17 +16,28 @@
> #include "clang/Tooling/Tooling.h"
> #include "clang/Frontend/FrontendActions.h"
> #include "clang/Frontend/CompilerInstance.h"
> +#include "llvm/Option/Option.h"
>
> using namespace clang;
>
> extern "C" void TestOneInput(uint8_t *data, size_t size) {
> std::string s((const char *)data, size);
> + llvm::opt::ArgStringList CC1Args;
> + CC1Args.push_back("-cc1");
> + CC1Args.push_back("test.cc");
> llvm::IntrusiveRefCntPtr<FileManager> Files(
> new FileManager(FileSystemOptions()));
> - tooling::ToolInvocation Invocation({"clang", "-c", "test.cc"},
> - new clang::SyntaxOnlyAction,
> Files.get());
> IgnoringDiagConsumer Diags;
> - Invocation.setDiagnosticConsumer(&Diags);
> - Invocation.mapVirtualFile("test.cc", s);
> - Invocation.run();
> + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new
> DiagnosticOptions();
> + DiagnosticsEngine Diagnostics(
> + IntrusiveRefCntPtr<clang::DiagnosticIDs>(new DiagnosticIDs()),
> &*DiagOpts,
> + &Diags, false);
> + std::unique_ptr<clang::CompilerInvocation> Invocation(
> + tooling::newInvocation(&Diagnostics, CC1Args));
> + std::unique_ptr<llvm::MemoryBuffer> Input =
> + llvm::MemoryBuffer::getMemBuffer(s);
> + Invocation->getPreprocessorOpts().addRemappedFile("test.cc",
> Input.release());
> + std::unique_ptr<tooling::ToolAction> action(
> + tooling::newFrontendActionFactory<clang::SyntaxOnlyAction>());
> + action->runInvocation(Invocation.release(), Files.get(), &Diags);
> }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150327/8db6f6ac/attachment.html>
More information about the cfe-commits
mailing list