Add new SPIRV AST fuzzer.
This CL adds a new SPIRV AST fuzzer. The existing IR fuzzer is renamed
to `WriterIRFuzzer` to match the naming convention used with the AST
fuzzers.
Change-Id: Id42c6d3ee29734d2b7fc4a0f732828a5d497abab
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/167741
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/spirv/writer/BUILD.cmake b/src/tint/lang/spirv/writer/BUILD.cmake
index 3700f48..0afdfec 100644
--- a/src/tint/lang/spirv/writer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/BUILD.cmake
@@ -232,7 +232,7 @@
# Condition: TINT_BUILD_SPV_WRITER
################################################################################
tint_add_target(tint_lang_spirv_writer_fuzz fuzz
- lang/spirv/writer/writer_fuzz.cc
+ lang/spirv/writer/writer_ir_fuzz.cc
)
tint_target_add_dependencies(tint_lang_spirv_writer_fuzz fuzz
@@ -244,6 +244,7 @@
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
+ tint_lang_wgsl_features
tint_lang_wgsl_helpers
tint_lang_wgsl_program
tint_lang_wgsl_sem
@@ -283,6 +284,7 @@
if(TINT_BUILD_WGSL_READER)
tint_target_add_sources(tint_lang_spirv_writer_fuzz fuzz
"lang/spirv/writer/ast_writer_fuzz.cc"
+ "lang/spirv/writer/writer_ast_fuzz.cc"
)
tint_target_add_dependencies(tint_lang_spirv_writer_fuzz fuzz
tint_cmd_fuzz_wgsl_fuzz
diff --git a/src/tint/lang/spirv/writer/BUILD.gn b/src/tint/lang/spirv/writer/BUILD.gn
index 120b4f4..02f722a 100644
--- a/src/tint/lang/spirv/writer/BUILD.gn
+++ b/src/tint/lang/spirv/writer/BUILD.gn
@@ -205,7 +205,7 @@
}
if (tint_build_spv_writer) {
tint_fuzz_source_set("fuzz") {
- sources = [ "writer_fuzz.cc" ]
+ sources = [ "writer_ir_fuzz.cc" ]
deps = [
"${tint_src_dir}/api/common",
"${tint_src_dir}/cmd/fuzz/ir:fuzz",
@@ -215,6 +215,7 @@
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
+ "${tint_src_dir}/lang/wgsl/features",
"${tint_src_dir}/lang/wgsl/helpers",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/sem",
@@ -251,7 +252,10 @@
}
if (tint_build_wgsl_reader) {
- sources += [ "ast_writer_fuzz.cc" ]
+ sources += [
+ "ast_writer_fuzz.cc",
+ "writer_ast_fuzz.cc",
+ ]
deps += [ "${tint_src_dir}/cmd/fuzz/wgsl:fuzz" ]
}
}
diff --git a/src/tint/lang/spirv/writer/ast_printer/ast_printer.cc b/src/tint/lang/spirv/writer/ast_printer/ast_printer.cc
index cdac61d..2b3c5fa 100644
--- a/src/tint/lang/spirv/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/spirv/writer/ast_printer/ast_printer.cc
@@ -28,8 +28,6 @@
#include "src/tint/lang/spirv/writer/ast_printer/ast_printer.h"
#include <unordered_map>
-#include <utility>
-#include <vector>
#include "src/tint/lang/spirv/writer/ast_raise/clamp_frag_depth.h"
#include "src/tint/lang/spirv/writer/ast_raise/for_loop_to_loop.h"
diff --git a/src/tint/lang/spirv/writer/writer_fuzz.cc b/src/tint/lang/spirv/writer/writer_ast_fuzz.cc
similarity index 69%
copy from src/tint/lang/spirv/writer/writer_fuzz.cc
copy to src/tint/lang/spirv/writer/writer_ast_fuzz.cc
index 421db7b..8a7d6e9 100644
--- a/src/tint/lang/spirv/writer/writer_fuzz.cc
+++ b/src/tint/lang/spirv/writer/writer_ast_fuzz.cc
@@ -1,4 +1,4 @@
-// Copyright 2023 The Dawn & Tint Authors
+// Copyright 2024 The Dawn & Tint Authors
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
@@ -25,30 +25,27 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#include "src/tint/lang/spirv/writer/writer.h"
+// GEN_BUILD:CONDITION(tint_build_wgsl_reader)
-#include "src/tint/cmd/fuzz/ir/fuzz.h"
-#include "src/tint/lang/spirv/validate/validate.h"
-#include "src/tint/lang/spirv/writer/helpers/generate_bindings.h"
+#include "src/tint/cmd/fuzz/wgsl/fuzz.h"
+#include "src/tint/lang/spirv/writer/helpers/ast_generate_bindings.h"
+#include "src/tint/lang/spirv/writer/writer.h"
+#include "src/tint/lang/wgsl/ast/module.h"
namespace tint::spirv::writer {
namespace {
-void IRPrinterFuzzer(core::ir::Module& module, Options options) {
- options.bindings = GenerateBindings(module);
- auto output = Generate(module, options);
- if (output != Success) {
+void ASTFuzzer(const tint::Program& program, Options options) {
+ if (program.AST().HasOverrides()) {
return;
}
- auto& spirv = output->spirv;
- if (auto res = validate::Validate(Slice(spirv.data(), spirv.size()), SPV_ENV_VULKAN_1_1);
- res != Success) {
- TINT_ICE() << "Output of SPIR-V writer failed to validate with SPIR-V Tools\n"
- << res.Failure();
- }
+
+ options.bindings = GenerateBindings(program);
+
+ [[maybe_unused]] auto res = tint::spirv::writer::Generate(program, options);
}
} // namespace
} // namespace tint::spirv::writer
-TINT_IR_MODULE_FUZZER(tint::spirv::writer::IRPrinterFuzzer);
+TINT_WGSL_PROGRAM_FUZZER(tint::spirv::writer::ASTFuzzer);
diff --git a/src/tint/lang/spirv/writer/writer_fuzz.cc b/src/tint/lang/spirv/writer/writer_ir_fuzz.cc
similarity index 94%
rename from src/tint/lang/spirv/writer/writer_fuzz.cc
rename to src/tint/lang/spirv/writer/writer_ir_fuzz.cc
index 421db7b..dcc848c 100644
--- a/src/tint/lang/spirv/writer/writer_fuzz.cc
+++ b/src/tint/lang/spirv/writer/writer_ir_fuzz.cc
@@ -34,7 +34,7 @@
namespace tint::spirv::writer {
namespace {
-void IRPrinterFuzzer(core::ir::Module& module, Options options) {
+void IRFuzzer(core::ir::Module& module, Options options) {
options.bindings = GenerateBindings(module);
auto output = Generate(module, options);
if (output != Success) {
@@ -51,4 +51,4 @@
} // namespace
} // namespace tint::spirv::writer
-TINT_IR_MODULE_FUZZER(tint::spirv::writer::IRPrinterFuzzer);
+TINT_IR_MODULE_FUZZER(tint::spirv::writer::IRFuzzer);