Add initial version of a clang-fuzzer.

llvm-svn: 233455
This commit is contained in:
Manuel Klimek 2015-03-28 00:07:39 +00:00
parent 6fab3c73b8
commit 667c152bce
3 changed files with 51 additions and 0 deletions

View File

@ -2,6 +2,7 @@ add_subdirectory(diagtool)
add_subdirectory(driver)
add_subdirectory(clang-format)
add_subdirectory(clang-format-vs)
add_subdirectory(clang-fuzzer)
add_subdirectory(c-index-test)
add_subdirectory(libclang)

View File

@ -0,0 +1,18 @@
set(LLVM_LINK_COMPONENTS support)
add_clang_executable(clang-fuzzer
EXCLUDE_FROM_ALL
ClangFuzzer.cpp
)
target_link_libraries(clang-fuzzer
${CLANG_FORMAT_LIB_DEPS}
clangAST
clangBasic
clangDriver
clangFrontend
clangRewriteFrontend
clangStaticAnalyzerFrontend
clangTooling
LLVMFuzzer
)

View File

@ -0,0 +1,32 @@
//===-- ClangFuzzer.cpp - Fuzz Clang --------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// \brief This file implements a function that runs Clang on a single
/// input. This function is then linked into the Fuzzer library.
///
//===----------------------------------------------------------------------===//
#include "clang/Tooling/Tooling.h"
#include "clang/Frontend/FrontendActions.h"
#include "clang/Frontend/CompilerInstance.h"
using namespace clang;
extern "C" void TestOneInput(uint8_t *data, size_t size) {
std::string s((const char *)data, size);
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();
}