spirv-reader: reject empty structure types
SPIR-V supports them but WGSL does not.
Fixed: chromium:1230976
Change-Id: I27dbbf4a0f584bcff7355bf513bbd2b924dc349b
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/62922
Auto-Submit: David Neto <dneto@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 43886bd..bec3e4a 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -1089,6 +1089,11 @@
// Compute members
ast::StructMemberList ast_members;
const auto members = struct_ty->element_types();
+ if (members.empty()) {
+ Fail() << "WGSL does not support empty structures. can't convert type: "
+ << def_use_mgr_->GetDef(type_id)->PrettyPrint();
+ return nullptr;
+ }
TypeList ast_member_types;
unsigned num_non_writable_members = 0;
for (uint32_t member_index = 0; member_index < members.size();
diff --git a/src/reader/spirv/parser_impl_convert_type_test.cc b/src/reader/spirv/parser_impl_convert_type_test.cc
index acf2048..6757647 100644
--- a/src/reader/spirv/parser_impl_convert_type_test.cc
+++ b/src/reader/spirv/parser_impl_convert_type_test.cc
@@ -568,6 +568,19 @@
Eq("invalid array type ID 10: multiple ArrayStride decorations"));
}
+TEST_F(SpvParserTest, ConvertType_StructEmpty) {
+ auto p = parser(test::Assemble(Preamble() + R"(
+ %10 = OpTypeStruct
+ )" + MainBody()));
+ EXPECT_TRUE(p->BuildInternalModule());
+
+ auto* type = p->ConvertType(10);
+ EXPECT_EQ(type, nullptr);
+ EXPECT_EQ(p->error(),
+ "WGSL does not support empty structures. can't convert type: %10 = "
+ "OpTypeStruct");
+}
+
TEST_F(SpvParserTest, ConvertType_StructTwoMembers) {
auto p = parser(test::Assemble(Preamble() + R"(
%uint = OpTypeInt 32 0