mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +01:00
Right now we expect crashes on invalid parses, we just don't try to handle it in general even though the long-term intent is we should handle semantics for bad parses. However, in theory, we should be correctly handling code that parses as valid and that's probably more interesting to fix bugs for. So this starts trying to fuzz that space of valid parses. Fuzzer corpus is based on explorer tests, with one merge run.
42 lines
1.4 KiB
C++
42 lines
1.4 KiB
C++
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Support/MemoryBuffer.h"
|
|
#include "llvm/Support/VirtualFileSystem.h"
|
|
#include "toolchain/driver/driver.h"
|
|
|
|
namespace Carbon::Testing {
|
|
|
|
// NOLINTNEXTLINE: Match the documented fuzzer entry point declaration style.
|
|
extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data,
|
|
std::size_t size) {
|
|
// Ignore large inputs.
|
|
// TODO: See tokenized_buffer_fuzzer.cpp.
|
|
if (size > 100000) {
|
|
return 0;
|
|
}
|
|
|
|
static constexpr llvm::StringLiteral TestFileName = "test.carbon";
|
|
llvm::vfs::InMemoryFileSystem fs;
|
|
llvm::StringRef data_ref(reinterpret_cast<const char*>(data), size);
|
|
CARBON_CHECK(fs.addFile(
|
|
TestFileName, /*ModificationTime=*/0,
|
|
llvm::MemoryBuffer::getMemBuffer(data_ref, /*BufferName=*/TestFileName,
|
|
/*RequiresNullTerminator=*/false)));
|
|
|
|
llvm::raw_null_ostream null_ostream;
|
|
Driver driver(fs, null_ostream, null_ostream);
|
|
|
|
// TODO: Get semantics-ir to a point where it can handle invalid parse trees
|
|
// without crashing.
|
|
if (!driver.RunFullCommand({"dump", "parse-tree", TestFileName})) {
|
|
return 0;
|
|
}
|
|
driver.RunFullCommand({"dump", "semantics-ir", TestFileName});
|
|
return 0;
|
|
}
|
|
|
|
} // namespace Carbon::Testing
|