summaryrefslogtreecommitdiffstats
path: root/clangd/fuzzer
diff options
context:
space:
mode:
Diffstat (limited to 'clangd/fuzzer')
-rw-r--r--clangd/fuzzer/CMakeLists.txt20
-rw-r--r--clangd/fuzzer/DummyClangdMain.cpp18
-rw-r--r--clangd/fuzzer/clangd-fuzzer.cpp (renamed from clangd/fuzzer/ClangdFuzzer.cpp)14
3 files changed, 36 insertions, 16 deletions
diff --git a/clangd/fuzzer/CMakeLists.txt b/clangd/fuzzer/CMakeLists.txt
index ca76c977..28191a3f 100644
--- a/clangd/fuzzer/CMakeLists.txt
+++ b/clangd/fuzzer/CMakeLists.txt
@@ -1,14 +1,15 @@
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..
+ ${CMAKE_CURRENT_BINARY_DIR}/..)
-set(LLVM_LINK_COMPONENTS support)
-
-if(LLVM_USE_SANITIZE_COVERAGE)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer")
-endif()
+set(LLVM_LINK_COMPONENTS
+ FuzzMutate
+ Support
+ )
-add_clang_executable(clangd-fuzzer
- EXCLUDE_FROM_ALL
- ClangdFuzzer.cpp
+# This fuzzer runs on oss-fuzz, so keep it around even if it looks unreferenced.
+add_llvm_fuzzer(clangd-fuzzer
+ clangd-fuzzer.cpp
+ DUMMY_MAIN DummyClangdMain.cpp
)
target_link_libraries(clangd-fuzzer
@@ -20,5 +21,4 @@ target_link_libraries(clangd-fuzzer
clangSema
clangTooling
clangToolingCore
- ${LLVM_LIB_FUZZING_ENGINE}
)
diff --git a/clangd/fuzzer/DummyClangdMain.cpp b/clangd/fuzzer/DummyClangdMain.cpp
new file mode 100644
index 00000000..cd5a6121
--- /dev/null
+++ b/clangd/fuzzer/DummyClangdMain.cpp
@@ -0,0 +1,18 @@
+//===---- DummyClangdMain.cpp - Entry point to sanity check the fuzzer ----===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implementation of main so we can build and test without linking libFuzzer.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/FuzzMutate/FuzzerCLI.h"
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+int main(int argc, char *argv[]) {
+ return llvm::runFuzzerOnInputs(argc, argv, LLVMFuzzerTestOneInput);
+}
diff --git a/clangd/fuzzer/ClangdFuzzer.cpp b/clangd/fuzzer/clangd-fuzzer.cpp
index 7afd0798..5e7de771 100644
--- a/clangd/fuzzer/ClangdFuzzer.cpp
+++ b/clangd/fuzzer/clangd-fuzzer.cpp
@@ -1,9 +1,8 @@
//===-- ClangdFuzzer.cpp - Fuzz clangd ------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
@@ -16,6 +15,7 @@
#include "ClangdLSPServer.h"
#include "ClangdServer.h"
#include "CodeComplete.h"
+#include "FSProvider.h"
#include <cstdio>
#include <sstream>
@@ -29,13 +29,15 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
std::FILE *In = fmemopen(data, size, "r");
auto Transport = newJSONTransport(In, llvm::nulls(),
/*InMirror=*/nullptr, /*Pretty=*/false,
- /*Style=*/JSONStreamStyle::Standard);
+ /*Style=*/JSONStreamStyle::Delimited);
+ RealFileSystemProvider FS;
CodeCompleteOptions CCOpts;
CCOpts.EnableSnippets = false;
ClangdServer::Options Opts;
// Initialize and run ClangdLSPServer.
- ClangdLSPServer LSPServer(*Transport, CCOpts, llvm::None, false, Opts);
+ ClangdLSPServer LSPServer(*Transport, FS, CCOpts, llvm::None, false,
+ llvm::None, Opts);
LSPServer.run();
return 0;
}