tint/resolver: Materialize array index expression

Bug: tint:1504
Change-Id: Ib14f4aa8ed7ca9d4bc4cdf6f4acdfa7eec03b716
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/91961
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/resolver/array_accessor_test.cc b/src/tint/resolver/array_accessor_test.cc
index 9323b23..d9ef10e 100644
--- a/src/tint/resolver/array_accessor_test.cc
+++ b/src/tint/resolver/array_accessor_test.cc
@@ -156,19 +156,36 @@
     EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
 }
 
-TEST_F(ResolverIndexAccessorTest, Array) {
-    auto* idx = Expr(2_i);
+TEST_F(ResolverIndexAccessorTest, Array_Literal_i32) {
     Global("my_var", ty.array<f32, 3>(), ast::StorageClass::kPrivate);
-
-    auto* acc = IndexAccessor("my_var", idx);
+    auto* acc = IndexAccessor("my_var", 2_i);
     WrapInFunction(acc);
-
     EXPECT_TRUE(r()->Resolve()) << r()->error();
-
     ASSERT_NE(TypeOf(acc), nullptr);
-    ASSERT_TRUE(TypeOf(acc)->Is<sem::Reference>());
-
     auto* ref = TypeOf(acc)->As<sem::Reference>();
+    ASSERT_NE(ref, nullptr);
+    EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
+}
+
+TEST_F(ResolverIndexAccessorTest, Array_Literal_u32) {
+    Global("my_var", ty.array<f32, 3>(), ast::StorageClass::kPrivate);
+    auto* acc = IndexAccessor("my_var", 2_u);
+    WrapInFunction(acc);
+    EXPECT_TRUE(r()->Resolve()) << r()->error();
+    ASSERT_NE(TypeOf(acc), nullptr);
+    auto* ref = TypeOf(acc)->As<sem::Reference>();
+    ASSERT_NE(ref, nullptr);
+    EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
+}
+
+TEST_F(ResolverIndexAccessorTest, Array_Literal_AInt) {
+    Global("my_var", ty.array<f32, 3>(), ast::StorageClass::kPrivate);
+    auto* acc = IndexAccessor("my_var", 2_a);
+    WrapInFunction(acc);
+    EXPECT_TRUE(r()->Resolve()) << r()->error();
+    ASSERT_NE(TypeOf(acc), nullptr);
+    auto* ref = TypeOf(acc)->As<sem::Reference>();
+    ASSERT_NE(ref, nullptr);
     EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
 }
 
@@ -249,7 +266,7 @@
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
-TEST_F(ResolverIndexAccessorTest, EXpr_Deref_FuncGoodParent) {
+TEST_F(ResolverIndexAccessorTest, Expr_Deref_FuncGoodParent) {
     // fn func(p: ptr<function, vec4<f32>>) -> f32 {
     //     let idx: u32 = u32();
     //     let x: f32 = (*p)[idx];
@@ -265,7 +282,7 @@
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
-TEST_F(ResolverIndexAccessorTest, EXpr_Deref_FuncBadParent) {
+TEST_F(ResolverIndexAccessorTest, Expr_Deref_FuncBadParent) {
     // fn func(p: ptr<function, vec4<f32>>) -> f32 {
     //     let idx: u32 = u32();
     //     let x: f32 = *p[idx];