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);