[spirv-reader] Ignore empty string user names
Bug: tint:3
Change-Id: Ibef645b123706cf9fa7d5b98413a709d4624244d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/25102
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 27cac0a..ebddea9 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -487,16 +487,22 @@
// Register names from OpName and OpMemberName
for (const auto& inst : module_->debugs2()) {
switch (inst.opcode()) {
- case SpvOpName:
- namer_.SuggestSanitizedName(inst.GetSingleWordInOperand(0),
- inst.GetInOperand(1).AsString());
-
+ case SpvOpName: {
+ const auto name = inst.GetInOperand(1).AsString();
+ if (!name.empty()) {
+ namer_.SuggestSanitizedName(inst.GetSingleWordInOperand(0), name);
+ }
break;
- case SpvOpMemberName:
- namer_.SuggestSanitizedMemberName(inst.GetSingleWordInOperand(0),
- inst.GetSingleWordInOperand(1),
- inst.GetInOperand(2).AsString());
+ }
+ case SpvOpMemberName: {
+ const auto name = inst.GetInOperand(2).AsString();
+ if (!name.empty()) {
+ namer_.SuggestSanitizedMemberName(inst.GetSingleWordInOperand(0),
+ inst.GetSingleWordInOperand(1),
+ name);
+ }
break;
+ }
default:
break;
}
diff --git a/src/reader/spirv/parser_impl_user_name_test.cc b/src/reader/spirv/parser_impl_user_name_test.cc
index acbe71e..1afcdc1 100644
--- a/src/reader/spirv/parser_impl_user_name_test.cc
+++ b/src/reader/spirv/parser_impl_user_name_test.cc
@@ -36,6 +36,15 @@
EXPECT_THAT(p->namer().GetName(1), Eq("the_void_type"));
}
+TEST_F(SpvParserTest, UserName_IgnoreEmptyName) {
+ auto* p = parser(test::Assemble(R"(
+ OpName %1 ""
+ %1 = OpTypeVoid
+ )"));
+ EXPECT_TRUE(p->BuildAndParseInternalModule());
+ EXPECT_FALSE(p->namer().HasName(1));
+}
+
TEST_F(SpvParserTest, UserName_DistinguishDuplicateSuggestion) {
auto* p = parser(test::Assemble(R"(
OpName %1 "vanilla"
@@ -62,6 +71,16 @@
EXPECT_THAT(p->namer().GetMemberName(3, 2), Eq("chocolate"));
}
+TEST_F(SpvParserTest, UserName_IgnoreEmptyMemberName) {
+ auto* p = parser(test::Assemble(R"(
+ OpMemberName %3 0 ""
+ %2 = OpTypeInt 32 0
+ %3 = OpTypeStruct %2
+ )"));
+ EXPECT_TRUE(p->BuildAndParseInternalModule());
+ EXPECT_THAT(p->namer().GetMemberName(3, 0), Eq("field0"));
+}
+
TEST_F(SpvParserTest, UserName_SynthesizeMemberNames) {
auto* p = parser(test::Assemble(R"(
%2 = OpTypeInt 32 0