[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