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