[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