mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:00:12 +01:00
I'm partly doing this because the current setup would be difficult to share with the toolchain. e.g., ProtoToCarbon isn't explorer-specific, but the only way to run it via CLI is the explorer's fuzzverter. I want a separate tool.
This change:
- Adds a //common/fuzzing:proto_to_carbon tool.
- The rest of fuzzverter is now just //explorer/fuzzing:ast_to_proto.
- The change simplifies overall handling and removes a LLVM CLI dependency.
- Stops allowing unknown fields in the proto.
- This has mostly led to forgetting to remove fuzzer inputs that were for removed features.
- Moves more non-explorer-specific bits to //common/fuzzing.
- Cleans up remaining pieces in //explorer/fuzzing
- Merges the //explorer/fuzzing proto tests, which deduplicates AstToString copies.
- These tests also had duplicate dependencies, etc -- and all complete in ~6s.
- Updates and fixes regen_corpus which was previously broken by other changes.
- Updates the README to reflect changes.
- Removes obsolete proto-fuzzer build configuration (AFAICT this is no longer needed).
107 lines
2.8 KiB
Python
107 lines
2.8 KiB
Python
# 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
|
|
|
|
load("//bazel/fuzzing:rules.bzl", "cc_fuzz_test")
|
|
|
|
cc_library(
|
|
name = "ast_to_proto_lib",
|
|
testonly = 1,
|
|
srcs = ["ast_to_proto.cpp"],
|
|
hdrs = ["ast_to_proto.h"],
|
|
deps = [
|
|
"//common/fuzzing:carbon_cc_proto",
|
|
"//explorer/ast",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_binary(
|
|
name = "ast_to_proto",
|
|
testonly = 1,
|
|
srcs = ["ast_to_proto_main.cpp"],
|
|
deps = [
|
|
":ast_to_proto_lib",
|
|
"//common:bazel_working_dir",
|
|
"//common:error",
|
|
"//common/fuzzing:carbon_cc_proto",
|
|
"//explorer/ast",
|
|
"//explorer/common:arena",
|
|
"//explorer/syntax",
|
|
"@com_google_protobuf//:protobuf_headers",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "ast_to_proto_test",
|
|
srcs = ["ast_to_proto_test.cpp"],
|
|
args = [
|
|
"$(locations //explorer:standard_libraries)",
|
|
"$(locations //explorer/testdata:carbon_files)",
|
|
],
|
|
data = [
|
|
"//explorer:standard_libraries",
|
|
"//explorer/testdata:carbon_files",
|
|
],
|
|
deps = [
|
|
":ast_to_proto_lib",
|
|
"//common/fuzzing:carbon_cc_proto",
|
|
"//common/fuzzing:proto_to_carbon_lib",
|
|
"//explorer/syntax",
|
|
"@com_google_googletest//:gtest",
|
|
"@com_google_protobuf//:protobuf_headers",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "fuzzer_util",
|
|
testonly = 1,
|
|
srcs = ["fuzzer_util.cpp"],
|
|
hdrs = ["fuzzer_util.h"],
|
|
deps = [
|
|
"//common:check",
|
|
"//common:error",
|
|
"//common/fuzzing:carbon_cc_proto",
|
|
"//common/fuzzing:proto_to_carbon_lib",
|
|
"//explorer/ast",
|
|
"//explorer/interpreter:exec_program",
|
|
"//explorer/interpreter:trace_stream",
|
|
"//explorer/syntax",
|
|
"//explorer/syntax:prelude",
|
|
"@bazel_tools//tools/cpp/runfiles",
|
|
"@com_google_protobuf//:protobuf_headers",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "fuzzer_util_test",
|
|
srcs = ["fuzzer_util_test.cpp"],
|
|
data = [
|
|
"//explorer:standard_libraries",
|
|
],
|
|
deps = [
|
|
":fuzzer_util",
|
|
"//common:gtest_main",
|
|
"//common/fuzzing:proto_to_carbon_lib",
|
|
"@com_google_googletest//:gtest",
|
|
"@com_google_protobuf//:protobuf_headers",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_fuzz_test(
|
|
name = "explorer_fuzzer",
|
|
testonly = 1,
|
|
srcs = ["explorer_fuzzer.cpp"],
|
|
corpus = glob(["fuzzer_corpus/*"]),
|
|
shard_count = 8,
|
|
deps = [
|
|
":fuzzer_util",
|
|
"//common:error",
|
|
"@com_google_libprotobuf_mutator//:libprotobuf_mutator",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|