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>
This commit is contained in:
parent
f330229de5
commit
8dbd4d0280
|
@ -219,12 +219,7 @@ int CommonFuzzer::Run(const uint8_t* data, size_t size) {
|
||||||
switch (output_) {
|
switch (output_) {
|
||||||
case OutputFormat::kWGSL: {
|
case OutputFormat::kWGSL: {
|
||||||
#if TINT_BUILD_WGSL_WRITER
|
#if TINT_BUILD_WGSL_WRITER
|
||||||
auto result = writer::wgsl::Generate(&program, options_wgsl_);
|
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);
|
|
||||||
}
|
|
||||||
#endif // TINT_BUILD_WGSL_WRITER
|
#endif // TINT_BUILD_WGSL_WRITER
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -232,10 +227,6 @@ int CommonFuzzer::Run(const uint8_t* data, size_t size) {
|
||||||
#if TINT_BUILD_SPV_WRITER
|
#if TINT_BUILD_SPV_WRITER
|
||||||
auto result = writer::spirv::Generate(&program, options_spirv_);
|
auto result = writer::spirv::Generate(&program, options_spirv_);
|
||||||
generated_spirv_ = std::move(result.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_)) {
|
if (!SPIRVToolsValidationCheck(program, generated_spirv_)) {
|
||||||
VALIDITY_ERROR(program.Diagnostics(),
|
VALIDITY_ERROR(program.Diagnostics(),
|
||||||
|
@ -247,12 +238,7 @@ int CommonFuzzer::Run(const uint8_t* data, size_t size) {
|
||||||
}
|
}
|
||||||
case OutputFormat::kHLSL: {
|
case OutputFormat::kHLSL: {
|
||||||
#if TINT_BUILD_HLSL_WRITER
|
#if TINT_BUILD_HLSL_WRITER
|
||||||
auto result = writer::hlsl::Generate(&program, options_hlsl_);
|
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);
|
|
||||||
}
|
|
||||||
#endif // TINT_BUILD_HLSL_WRITER
|
#endif // TINT_BUILD_HLSL_WRITER
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -266,12 +252,7 @@ int CommonFuzzer::Run(const uint8_t* data, size_t size) {
|
||||||
input_program = &*flattened;
|
input_program = &*flattened;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto result = writer::msl::Generate(input_program, options_msl_);
|
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);
|
|
||||||
}
|
|
||||||
#endif // TINT_BUILD_MSL_WRITER
|
#endif // TINT_BUILD_MSL_WRITER
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,9 +219,10 @@ struct ModuleScopeVarToEntryPointParam::State {
|
||||||
case ast::StorageClass::kHandle:
|
case ast::StorageClass::kHandle:
|
||||||
case ast::StorageClass::kWorkgroup:
|
case ast::StorageClass::kWorkgroup:
|
||||||
break;
|
break;
|
||||||
default:
|
default: {
|
||||||
TINT_ICE(Transform, ctx.dst->Diagnostics())
|
TINT_ICE(Transform, ctx.dst->Diagnostics())
|
||||||
<< "unhandled module-scope storage class (" << sc << ")";
|
<< "unhandled module-scope storage class (" << sc << ")";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use a pointer for non-handle types.
|
// Use a pointer for non-handle types.
|
||||||
|
|
|
@ -1932,10 +1932,11 @@ bool GeneratorImpl::EmitGlobalVariable(const ast::Variable* global) {
|
||||||
case ast::StorageClass::kIn:
|
case ast::StorageClass::kIn:
|
||||||
case ast::StorageClass::kOut:
|
case ast::StorageClass::kOut:
|
||||||
return EmitIOVariable(sem);
|
return EmitIOVariable(sem);
|
||||||
default:
|
default: {
|
||||||
TINT_ICE(Writer, diagnostics_)
|
TINT_ICE(Writer, diagnostics_)
|
||||||
<< "unhandled storage class " << sem->StorageClass();
|
<< "unhandled storage class " << sem->StorageClass();
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[&](const ast::Let* let) { return EmitProgramConstVariable(let); },
|
[&](const ast::Let* let) { return EmitProgramConstVariable(let); },
|
||||||
|
|
|
@ -2849,10 +2849,11 @@ bool GeneratorImpl::EmitGlobalVariable(const ast::Variable* global) {
|
||||||
return EmitPrivateVariable(sem);
|
return EmitPrivateVariable(sem);
|
||||||
case ast::StorageClass::kWorkgroup:
|
case ast::StorageClass::kWorkgroup:
|
||||||
return EmitWorkgroupVariable(sem);
|
return EmitWorkgroupVariable(sem);
|
||||||
default:
|
default: {
|
||||||
TINT_ICE(Writer, diagnostics_)
|
TINT_ICE(Writer, diagnostics_)
|
||||||
<< "unhandled storage class " << sem->StorageClass();
|
<< "unhandled storage class " << sem->StorageClass();
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[&](const ast::Override* override) { return EmitOverride(override); },
|
[&](const ast::Override* override) { return EmitOverride(override); },
|
||||||
|
|
Loading…
Reference in New Issue