// 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 #include #include "common/check.h" #include "llvm/ADT/StringRef.h" #include "toolchain/diagnostics/diagnostic_emitter.h" #include "toolchain/diagnostics/null_diagnostics.h" #include "toolchain/lexer/string_literal.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) { auto token = LexedStringLiteral::Lex( llvm::StringRef(reinterpret_cast(data), size)); if (!token) { // Lexically not a string literal. return 0; } if (!token->is_terminated()) { // Found errors while parsing. return 0; } fprintf(stderr, "valid: %d\n", token->is_terminated()); fprintf(stderr, "size: %lu\n", token->text().size()); fprintf(stderr, "text: %s\n", token->text().str().c_str()); // Check multiline flag was computed correctly. CARBON_CHECK(token->is_multi_line() == token->text().contains('\n')); volatile auto value = token->ComputeValue(NullDiagnosticEmitter()); (void)value; return 0; } } // namespace Carbon::Testing