[tint][wgsl] RenameConflicts: Ensure types can be resolved.

Bug: chromium:327033774
Change-Id: I13055ab492709831b8cacbf54464f6155087dcfa
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/176860
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Auto-Submit: Ben Clayton <bclayton@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/lang/wgsl/writer/raise/rename_conflicts.cc b/src/tint/lang/wgsl/writer/raise/rename_conflicts.cc
index a6072ed..c86f3b1 100644
--- a/src/tint/lang/wgsl/writer/raise/rename_conflicts.cc
+++ b/src/tint/lang/wgsl/writer/raise/rename_conflicts.cc
@@ -68,6 +68,11 @@
 
         RegisterModuleScopeDecls();
 
+        // Process the types
+        for (auto* ty : ir.Types()) {
+            EnsureResolvable(ty);
+        }
+
         // Process the module-scope variable declarations
         for (auto* inst : *ir.root_block) {
             Process(inst);
diff --git a/src/tint/lang/wgsl/writer/raise/rename_conflicts_test.cc b/src/tint/lang/wgsl/writer/raise/rename_conflicts_test.cc
index 8b28870..b2823db 100644
--- a/src/tint/lang/wgsl/writer/raise/rename_conflicts_test.cc
+++ b/src/tint/lang/wgsl/writer/raise/rename_conflicts_test.cc
@@ -1101,5 +1101,55 @@
     EXPECT_EQ(expect, str());
 }
 
+TEST_F(IRToProgramRenameConflictsTest, Conflict_StructMember_ShadowedBy_Fn) {
+    auto* s = ty.Struct(b.ir.symbols.New("s"), {{b.ir.symbols.New("f"), ty.f32()}});
+
+    b.Append(mod.root_block, [&] {  //
+        b.Var(ty.ptr<private_>(s));
+    });
+
+    auto* fn = b.Function("f32", ty.void_());
+    b.Append(fn->Block(), [&] {  //
+        b.Return(fn);
+    });
+
+    auto* src = R"(
+s = struct @align(4) {
+  f:f32 @offset(0)
+}
+
+%b1 = block {  # root
+  %1:ptr<private, s, read_write> = var
+}
+
+%f32 = func():void -> %b2 {
+  %b2 = block {
+    ret
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+s = struct @align(4) {
+  f:f32 @offset(0)
+}
+
+%b1 = block {  # root
+  %1:ptr<private, s, read_write> = var
+}
+
+%f32_1 = func():void -> %b2 {
+  %b2 = block {
+    ret
+  }
+}
+)";
+
+    Run();
+
+    EXPECT_EQ(expect, str());
+}
+
 }  // namespace
 }  // namespace tint::wgsl::writer::raise