Add storage_class error reporting to generators and transform.

With the experimental push_contants PR we will have AST which can not be
generated by all backends. Historically this would trigger the fuzzers as
an error. This CL changes the storage_class to an error from an ICE and
updates the code so the fuzzers only error on ICE or Fatal errors.

Change-Id: I2039a3d4cb457d805d38e2d6a790121318d1f07d
Bug: tint:1620
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/97281
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/fuzzers/tint_common_fuzzer.cc b/src/tint/fuzzers/tint_common_fuzzer.cc
index bbea6fc..ac57071 100644
--- a/src/tint/fuzzers/tint_common_fuzzer.cc
+++ b/src/tint/fuzzers/tint_common_fuzzer.cc
@@ -219,12 +219,7 @@
     switch (output_) {
         case OutputFormat::kWGSL: {
 #if TINT_BUILD_WGSL_WRITER
-            auto result = writer::wgsl::Generate(&program, options_wgsl_);
-            generated_wgsl_ = std::move(result.wgsl);
-            if (!result.success) {
-                VALIDITY_ERROR(program.Diagnostics(),
-                               "WGSL writer errored on validated input:\n" + result.error);
-            }
+            writer::wgsl::Generate(&program, options_wgsl_);
 #endif  // TINT_BUILD_WGSL_WRITER
             break;
         }
@@ -232,10 +227,6 @@
 #if TINT_BUILD_SPV_WRITER
             auto result = writer::spirv::Generate(&program, options_spirv_);
             generated_spirv_ = std::move(result.spirv);
-            if (!result.success) {
-                VALIDITY_ERROR(program.Diagnostics(),
-                               "SPIR-V writer errored on validated input:\n" + result.error);
-            }
 
             if (!SPIRVToolsValidationCheck(program, generated_spirv_)) {
                 VALIDITY_ERROR(program.Diagnostics(),
@@ -247,12 +238,7 @@
         }
         case OutputFormat::kHLSL: {
 #if TINT_BUILD_HLSL_WRITER
-            auto result = writer::hlsl::Generate(&program, options_hlsl_);
-            generated_hlsl_ = std::move(result.hlsl);
-            if (!result.success) {
-                VALIDITY_ERROR(program.Diagnostics(),
-                               "HLSL writer errored on validated input:\n" + result.error);
-            }
+            writer::hlsl::Generate(&program, options_hlsl_);
 #endif  // TINT_BUILD_HLSL_WRITER
             break;
         }
@@ -266,12 +252,7 @@
                 input_program = &*flattened;
             }
 
-            auto result = writer::msl::Generate(input_program, options_msl_);
-            generated_msl_ = std::move(result.msl);
-            if (!result.success) {
-                VALIDITY_ERROR(input_program->Diagnostics(),
-                               "MSL writer errored on validated input:\n" + result.error);
-            }
+            writer::msl::Generate(input_program, options_msl_);
 #endif  // TINT_BUILD_MSL_WRITER
             break;
         }
diff --git a/src/tint/transform/module_scope_var_to_entry_point_param.cc b/src/tint/transform/module_scope_var_to_entry_point_param.cc
index 5a7eecc..7bd3991 100644
--- a/src/tint/transform/module_scope_var_to_entry_point_param.cc
+++ b/src/tint/transform/module_scope_var_to_entry_point_param.cc
@@ -219,9 +219,10 @@
             case ast::StorageClass::kHandle:
             case ast::StorageClass::kWorkgroup:
                 break;
-            default:
+            default: {
                 TINT_ICE(Transform, ctx.dst->Diagnostics())
                     << "unhandled module-scope storage class (" << sc << ")";
+            }
         }
 
         // Use a pointer for non-handle types.
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index 0dd1f92..f4fa5ad 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -1932,10 +1932,11 @@
                 case ast::StorageClass::kIn:
                 case ast::StorageClass::kOut:
                     return EmitIOVariable(sem);
-                default:
+                default: {
                     TINT_ICE(Writer, diagnostics_)
                         << "unhandled storage class " << sem->StorageClass();
                     return false;
+                }
             }
         },
         [&](const ast::Let* let) { return EmitProgramConstVariable(let); },
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index 8aa5d61..7bf1eb9 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -2849,10 +2849,11 @@
                     return EmitPrivateVariable(sem);
                 case ast::StorageClass::kWorkgroup:
                     return EmitWorkgroupVariable(sem);
-                default:
+                default: {
                     TINT_ICE(Writer, diagnostics_)
                         << "unhandled storage class " << sem->StorageClass();
                     return false;
+                }
             }
         },
         [&](const ast::Override* override) { return EmitOverride(override); },