[glsl][ir] Emit `Access`

This Cl adds `Access` support to the GLSL IR backend.

Bug: 42251044
Change-Id: Ic449a62f25c4eb249a2e4e5fdbd5029e26c14890
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/204535
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/glsl/writer/BUILD.bazel b/src/tint/lang/glsl/writer/BUILD.bazel
index e4b6e12..d7ff06c 100644
--- a/src/tint/lang/glsl/writer/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/BUILD.bazel
@@ -88,6 +88,7 @@
   name = "test",
   alwayslink = True,
   srcs = [
+    "access_test.cc",
     "binary_test.cc",
     "builtin_test.cc",
     "call_test.cc",
diff --git a/src/tint/lang/glsl/writer/BUILD.cmake b/src/tint/lang/glsl/writer/BUILD.cmake
index 27920ed..0fa971e 100644
--- a/src/tint/lang/glsl/writer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/BUILD.cmake
@@ -102,6 +102,7 @@
 # Condition: TINT_BUILD_GLSL_WRITER AND TINT_BUILD_GLSL_VALIDATOR
 ################################################################################
 tint_add_target(tint_lang_glsl_writer_test test
+  lang/glsl/writer/access_test.cc
   lang/glsl/writer/binary_test.cc
   lang/glsl/writer/builtin_test.cc
   lang/glsl/writer/call_test.cc
diff --git a/src/tint/lang/glsl/writer/BUILD.gn b/src/tint/lang/glsl/writer/BUILD.gn
index 0c6361d..8b79010 100644
--- a/src/tint/lang/glsl/writer/BUILD.gn
+++ b/src/tint/lang/glsl/writer/BUILD.gn
@@ -92,6 +92,7 @@
   if (tint_build_glsl_writer && tint_build_glsl_validator) {
     tint_unittests_source_set("unittests") {
       sources = [
+        "access_test.cc",
         "binary_test.cc",
         "builtin_test.cc",
         "call_test.cc",
diff --git a/src/tint/lang/glsl/writer/access_test.cc b/src/tint/lang/glsl/writer/access_test.cc
new file mode 100644
index 0000000..3a9b429
--- /dev/null
+++ b/src/tint/lang/glsl/writer/access_test.cc
@@ -0,0 +1,1687 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "src/tint/lang/glsl/writer/helper_test.h"
+
+#include "gmock/gmock.h"
+
+using namespace tint::core::number_suffixes;  // NOLINT
+using namespace tint::core::fluent_types;     // NOLINT
+
+namespace tint::glsl::writer {
+namespace {
+
+TEST_F(GlslWriterTest, AccessArray) {
+    auto* func = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+
+    b.Append(func->Block(), [&] {
+        auto* v = b.Var("v", b.Zero<array<f32, 3>>());
+        b.Let("x", b.Load(b.Access(ty.ptr<function, f32>(), v, 1_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v[3] = float[3](0.0f, 0.0f, 0.0f);
+  float x = v[1u];
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStruct) {
+    Vector members{
+        ty.Get<core::type::StructMember>(b.ir.symbols.New("a"), ty.i32(), 0u, 0u, 4u, 4u,
+                                         core::IOAttributes{}),
+        ty.Get<core::type::StructMember>(b.ir.symbols.New("b"), ty.f32(), 1u, 4u, 4u, 4u,
+                                         core::IOAttributes{}),
+    };
+    auto* strct = ty.Struct(b.ir.symbols.New("S"), std::move(members));
+
+    auto* f = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    f->SetWorkgroupSize(1, 1, 1);
+
+    b.Append(f->Block(), [&] {
+        auto* v = b.Var("v", b.Zero(strct));
+        b.Let("x", b.Load(b.Access(ty.ptr<function, f32>(), v, 1_u)));
+        b.Return(f);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct S {
+  int a;
+  float b;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S v = S(0, 0.0f);
+  float x = v.b;
+}
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessVector) {
+    auto* func = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+
+    b.Append(func->Block(), [&] {
+        auto* v = b.Var("v", b.Zero<vec3<f32>>());
+        b.Let("x", b.LoadVectorElement(v, 1_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessMatrix) {
+    auto* func = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+
+    b.Append(func->Block(), [&] {
+        auto* v = b.Var("v", b.Zero<mat4x4<f32>>());
+        auto* v1 = b.Access(ty.ptr<function, vec4<f32>>(), v, 1_u);
+        b.Let("x", b.LoadVectorElement(v1, 2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support StoreVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStoreVectorElementConstantIndex) {
+    auto* func = b.Function("foo", ty.void_());
+    b.Append(func->Block(), [&] {
+        auto* vec_var = b.Var("vec", ty.ptr<function, vec4<i32>>());
+        b.StoreVectorElement(vec_var, 1_u, b.Constant(42_i));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support StoreVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStoreVectorElementDynamicIndex) {
+    auto* idx = b.FunctionParam("idx", ty.i32());
+    auto* func = b.Function("foo", ty.void_());
+    func->SetParams({idx});
+    b.Append(func->Block(), [&] {
+        auto* vec_var = b.Var("vec", ty.ptr<function, vec4<i32>>());
+        b.StoreVectorElement(vec_var, idx, b.Constant(42_i));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+TEST_F(GlslWriterTest, AccessNested) {
+    Vector members_a{
+        ty.Get<core::type::StructMember>(b.ir.symbols.New("d"), ty.i32(), 0u, 0u, 4u, 4u,
+                                         core::IOAttributes{}),
+        ty.Get<core::type::StructMember>(b.ir.symbols.New("e"), ty.array<f32, 3>(), 1u, 4u, 4u, 4u,
+                                         core::IOAttributes{}),
+    };
+    auto* a_strct = ty.Struct(b.ir.symbols.New("A"), std::move(members_a));
+
+    Vector members_s{
+        ty.Get<core::type::StructMember>(b.ir.symbols.New("a"), ty.i32(), 0u, 0u, 4u, 4u,
+                                         core::IOAttributes{}),
+        ty.Get<core::type::StructMember>(b.ir.symbols.New("b"), ty.f32(), 1u, 4u, 4u, 4u,
+                                         core::IOAttributes{}),
+        ty.Get<core::type::StructMember>(b.ir.symbols.New("c"), a_strct, 2u, 8u, 8u, 8u,
+                                         core::IOAttributes{}),
+    };
+    auto* s_strct = ty.Struct(b.ir.symbols.New("S"), std::move(members_s));
+
+    auto* f = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    f->SetWorkgroupSize(1, 1, 1);
+
+    b.Append(f->Block(), [&] {
+        auto* v = b.Var("v", b.Zero(s_strct));
+        b.Let("x", b.Load(b.Access(ty.ptr<function, f32>(), v, 2_u, 1_u, 1_i)));
+        b.Return(f);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct A {
+  int d;
+  float e[3];
+};
+
+struct S {
+  int a;
+  float b;
+  A c;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S v = S(0, 0.0f, A(0, float[3](0.0f, 0.0f, 0.0f)));
+  float x = v.c.e[1u];
+}
+)");
+}
+
+// TODO(dsinclair): Support swizzle
+TEST_F(GlslWriterTest, DISABLED_AccessSwizzle) {
+    auto* f = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    f->SetWorkgroupSize(1, 1, 1);
+
+    b.Append(f->Block(), [&] {
+        auto* v = b.Var("v", b.Zero<vec3<f32>>());
+        b.Let("b", b.Swizzle(ty.f32(), v, {1u}));
+        b.Return(f);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support swizzle
+TEST_F(GlslWriterTest, DISABLED_AccessSwizzleMulti) {
+    auto* f = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    f->SetWorkgroupSize(1, 1, 1);
+
+    b.Append(f->Block(), [&] {
+        auto* v = b.Var("v", b.Zero<vec4<f32>>());
+        b.Let("b", b.Swizzle(ty.vec4<f32>(), v, {3u, 2u, 1u, 0u}));
+        b.Return(f);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStorageVector) {
+    auto* var = b.Var<storage, vec4<f32>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.LoadVectorElement(var, 0_u));
+        b.Let("c", b.LoadVectorElement(var, 1_u));
+        b.Let("d", b.LoadVectorElement(var, 2_u));
+        b.Let("e", b.LoadVectorElement(var, 3_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStorageVectorF16) {
+    auto* var = b.Var<storage, vec4<f16>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.LoadVectorElement(var, 0_u));
+        b.Let("c", b.LoadVectorElement(var, 1_u));
+        b.Let("d", b.LoadVectorElement(var, 2_u));
+        b.Let("e", b.LoadVectorElement(var, 3_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStorageMatrix) {
+    auto* var = b.Var<storage, mat4x4<f32>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<storage, vec4<f32>, core::Access::kRead>(), var, 3_u)));
+        b.Let("c", b.LoadVectorElement(
+                       b.Access(ty.ptr<storage, vec4<f32>, core::Access::kRead>(), var, 1_u), 2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Needs to create a buffer block
+TEST_F(GlslWriterTest, DISABLED_AccessStorageArray) {
+    auto* var = b.Var<storage, array<vec3<f32>, 5>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<storage, vec3<f32>, core::Access::kRead>(), var, 3_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+layout(binding = 0, std430) buffer v_block_ssbo {
+  vec3 inner[5];
+} v;
+
+void main() {
+  vec3 a[5] = v.inner;
+  vec3 b = v.inner[3u];
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStorageStruct) {
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.f32()},
+                                                });
+
+    auto* var = b.Var("v", storage, SB, core::Access::kRead);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<storage, f32, core::Access::kRead>(), var, 1_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct SB {
+  int a;
+  float b;
+};
+precision highp float;
+precision highp int;
+
+
+SB v;
+void main() {
+  SB a = v;
+  float b = v.b;
+}
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStorageNested) {
+    auto* Inner =
+        ty.Struct(mod.symbols.New("Inner"), {
+                                                {mod.symbols.New("s"), ty.mat3x3<f32>()},
+                                                {mod.symbols.New("t"), ty.array<vec3<f32>, 5>()},
+                                            });
+    auto* Outer = ty.Struct(mod.symbols.New("Outer"), {
+                                                          {mod.symbols.New("x"), ty.f32()},
+                                                          {mod.symbols.New("y"), Inner},
+                                                      });
+
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), Outer},
+                                                });
+
+    auto* var = b.Var("v", storage, SB, core::Access::kRead);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.LoadVectorElement(b.Access(ty.ptr<storage, vec3<f32>, core::Access::kRead>(),
+                                                var, 1_u, 1_u, 1_u, 3_u),
+                                       2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support StoreVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStorageStoreVector) {
+    auto* var = b.Var<storage, vec4<f32>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.StoreVectorElement(var, 0_u, 2_f);
+        b.StoreVectorElement(var, 1_u, 4_f);
+        b.StoreVectorElement(var, 2_u, 8_f);
+        b.StoreVectorElement(var, 3_u, 16_f);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessDirectVariable) {
+    auto* var1 = b.Var<storage, vec4<f32>, core::Access::kRead>("v1");
+    var1->SetBindingPoint(0, 0);
+    b.ir.root_block->Append(var1);
+
+    auto* var2 = b.Var<storage, vec4<f32>, core::Access::kRead>("v2");
+    var2->SetBindingPoint(0, 1);
+    b.ir.root_block->Append(var2);
+
+    auto* p = b.FunctionParam("x", ty.ptr<storage, vec4<f32>, core::Access::kRead>());
+    auto* bar = b.Function("bar", ty.void_());
+    bar->SetParams({p});
+    b.Append(bar->Block(), [&] {
+        b.Let("a", b.LoadVectorElement(p, 1_u));
+        b.Return(bar);
+    });
+
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Call(bar, var1);
+        b.Call(bar, var2);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+TEST_F(GlslWriterTest, AccessChainFromUnnamedAccessChain) {
+    auto* Inner = ty.Struct(mod.symbols.New("Inner"), {
+                                                          {mod.symbols.New("c"), ty.f32()},
+                                                          {mod.symbols.New("d"), ty.u32()},
+                                                      });
+    auto* sb = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), Inner},
+                                                });
+
+    auto* var = b.Var("v", storage, sb, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+    b.ir.root_block->Append(var);
+
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* x = b.Access(ty.ptr(storage, sb, core::Access::kReadWrite), var);
+        auto* y = b.Access(ty.ptr(storage, Inner, core::Access::kReadWrite), x->Result(0), 1_u);
+        b.Let("b", b.Load(b.Access(ty.ptr(storage, ty.u32(), core::Access::kReadWrite),
+                                   y->Result(0), 1_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct Inner {
+  float c;
+  uint d;
+};
+
+struct SB {
+  int a;
+  Inner b;
+};
+precision highp float;
+precision highp int;
+
+
+SB v;
+void main() {
+  uint b = v.b.d;
+}
+)");
+}
+
+// TODO(dsinclair): Requires let pointer translation
+TEST_F(GlslWriterTest, DISABLED_AccessChainFromLetAccessChain) {
+    auto* Inner = ty.Struct(mod.symbols.New("Inner"), {
+                                                          {mod.symbols.New("c"), ty.f32()},
+                                                      });
+    auto* sb = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), Inner},
+                                                });
+
+    auto* var = b.Var("v", storage, sb, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+    b.ir.root_block->Append(var);
+
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* x = b.Let("x", var);
+        auto* y = b.Let(
+            "y", b.Access(ty.ptr(storage, Inner, core::Access::kReadWrite), x->Result(0), 1_u));
+        auto* z = b.Let(
+            "z", b.Access(ty.ptr(storage, ty.f32(), core::Access::kReadWrite), y->Result(0), 0_u));
+        b.Let("a", b.Load(z));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support arrayLength
+TEST_F(GlslWriterTest, DISABLED_AccessComplexDynamicAccessChain) {
+    auto* S1 = ty.Struct(mod.symbols.New("S1"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.vec3<f32>()},
+                                                    {mod.symbols.New("c"), ty.i32()},
+                                                });
+    auto* S2 = ty.Struct(mod.symbols.New("S2"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.array(S1, 3)},
+                                                    {mod.symbols.New("c"), ty.i32()},
+                                                });
+
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.runtime_array(S2)},
+                                                });
+
+    auto* var = b.Var("sb", storage, SB, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* i = b.Load(b.Var("i", 4_i));
+        auto* j = b.Load(b.Var("j", 1_u));
+        auto* k = b.Load(b.Var("k", 2_i));
+        // let x : f32 = sb.b[i].b[j].b[k];
+        b.Let("x",
+              b.LoadVectorElement(
+                  b.Access(ty.ptr<storage, vec3<f32>, read_write>(), var, 1_u, i, 1_u, j, 1_u), k));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support arrayLength
+TEST_F(GlslWriterTest, DISABLED_AccessComplexDynamicAccessChainSplit) {
+    auto* S1 = ty.Struct(mod.symbols.New("S1"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.vec3<f32>()},
+                                                    {mod.symbols.New("c"), ty.i32()},
+                                                });
+    auto* S2 = ty.Struct(mod.symbols.New("S2"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.array(S1, 3)},
+                                                    {mod.symbols.New("c"), ty.i32()},
+                                                });
+
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.runtime_array(S2)},
+                                                });
+
+    auto* var = b.Var("sb", storage, SB, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* j = b.Load(b.Var("j", 1_u));
+        b.Let("x", b.LoadVectorElement(b.Access(ty.ptr<storage, vec3<f32>, read_write>(), var, 1_u,
+                                                4_u, 1_u, j, 1_u),
+                                       2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+TEST_F(GlslWriterTest, AccessUniformChainFromUnnamedAccessChain) {
+    auto* Inner = ty.Struct(mod.symbols.New("Inner"), {
+                                                          {mod.symbols.New("c"), ty.f32()},
+                                                          {mod.symbols.New("d"), ty.u32()},
+                                                      });
+
+    tint::Vector<const core::type::StructMember*, 2> members;
+    members.Push(ty.Get<core::type::StructMember>(mod.symbols.New("a"), ty.i32(), 0u, 0u, 4u,
+                                                  ty.i32()->Size(), core::IOAttributes{}));
+    members.Push(ty.Get<core::type::StructMember>(mod.symbols.New("b"), Inner, 1u, 16u, 16u,
+                                                  Inner->Size(), core::IOAttributes{}));
+    auto* sb = ty.Struct(mod.symbols.New("SB"), members);
+
+    auto* var = b.Var("v", uniform, sb, core::Access::kRead);
+    var->SetBindingPoint(0, 0);
+    b.ir.root_block->Append(var);
+
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* x = b.Access(ty.ptr(uniform, sb, core::Access::kRead), var);
+        auto* y = b.Access(ty.ptr(uniform, Inner, core::Access::kRead), x->Result(0), 1_u);
+        b.Let("b",
+              b.Load(b.Access(ty.ptr(uniform, ty.u32(), core::Access::kRead), y->Result(0), 1_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct Inner {
+  float c;
+  uint d;
+};
+
+struct SB {
+  int a;
+  Inner b;
+};
+precision highp float;
+precision highp int;
+
+
+uniform SB v;
+void main() {
+  uint b = v.b.d;
+}
+)");
+}
+
+// TODO(dsinclair): Handle let pointers
+TEST_F(GlslWriterTest, DISABLED_AccessUniformChainFromLetAccessChain) {
+    auto* Inner = ty.Struct(mod.symbols.New("Inner"), {
+                                                          {mod.symbols.New("c"), ty.f32()},
+                                                      });
+    tint::Vector<const core::type::StructMember*, 2> members;
+    members.Push(ty.Get<core::type::StructMember>(mod.symbols.New("a"), ty.i32(), 0u, 0u, 4u,
+                                                  ty.i32()->Size(), core::IOAttributes{}));
+    members.Push(ty.Get<core::type::StructMember>(mod.symbols.New("b"), Inner, 1u, 16u, 16u,
+                                                  Inner->Size(), core::IOAttributes{}));
+    auto* sb = ty.Struct(mod.symbols.New("SB"), members);
+
+    auto* var = b.Var("v", uniform, sb, core::Access::kRead);
+    var->SetBindingPoint(0, 0);
+    b.ir.root_block->Append(var);
+
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* x = b.Let("x", var);
+        auto* y =
+            b.Let("y", b.Access(ty.ptr(uniform, Inner, core::Access::kRead), x->Result(0), 1_u));
+        auto* z =
+            b.Let("z", b.Access(ty.ptr(uniform, ty.f32(), core::Access::kRead), y->Result(0), 0_u));
+        b.Let("a", b.Load(z));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+TEST_F(GlslWriterTest, AccessUniformScalar) {
+    auto* var = b.Var<uniform, f32, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+
+uniform float v;
+void main() {
+  float a = v;
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessUniformScalarF16) {
+    auto* var = b.Var<uniform, f16, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
+
+
+uniform float16_t v;
+void main() {
+  float16_t a = v;
+}
+)");
+}
+
+// TODO(dsinclair): Handle LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformVector) {
+    auto* var = b.Var<uniform, vec4<f32>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.LoadVectorElement(var, 0_u));
+        b.Let("c", b.LoadVectorElement(var, 1_u));
+        b.Let("d", b.LoadVectorElement(var, 2_u));
+        b.Let("e", b.LoadVectorElement(var, 3_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformVectorF16) {
+    auto* var = b.Var<uniform, vec4<f16>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* x = b.Var("x", 1_u);
+        b.Let("a", b.Load(var));
+        b.Let("b", b.LoadVectorElement(var, 0_u));
+        b.Let("c", b.LoadVectorElement(var, b.Load(x)));
+        b.Let("d", b.LoadVectorElement(var, 2_u));
+        b.Let("e", b.LoadVectorElement(var, 3_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix) {
+    auto* var = b.Var<uniform, mat4x4<f32>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, vec4<f32>, core::Access::kRead>(), var, 3_u)));
+        b.Let("c", b.LoadVectorElement(
+                       b.Access(ty.ptr<uniform, vec4<f32>, core::Access::kRead>(), var, 1_u), 2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix2x3) {
+    auto* var = b.Var<uniform, mat2x3<f32>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, vec3<f32>, core::Access::kRead>(), var, 1_u)));
+        b.Let("c", b.LoadVectorElement(
+                       b.Access(ty.ptr<uniform, vec3<f32>, core::Access::kRead>(), var, 1_u), 2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformMat2x3F16) {
+    auto* var = b.Var<uniform, mat2x3<f16>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+    b.ir.root_block->Append(var);
+
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr(uniform, ty.vec3<f16>()), var, 1_u)));
+        b.Let("c", b.LoadVectorElement(b.Access(ty.ptr(uniform, ty.vec3<f16>()), var, 1_u), 2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix3x2) {
+    auto* var = b.Var<uniform, mat3x2<f32>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, vec2<f32>, core::Access::kRead>(), var, 1_u)));
+        b.Let("c", b.LoadVectorElement(
+                       b.Access(ty.ptr<uniform, vec2<f32>, core::Access::kRead>(), var, 1_u), 1_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix2x2) {
+    auto* var = b.Var<uniform, mat2x2<f32>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, vec2<f32>, core::Access::kRead>(), var, 1_u)));
+        b.Let("c", b.LoadVectorElement(
+                       b.Access(ty.ptr<uniform, vec2<f32>, core::Access::kRead>(), var, 1_u), 1_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix2x2F16) {
+    auto* var = b.Var<uniform, mat2x2<f16>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, vec2<f16>, core::Access::kRead>(), var, 1_u)));
+        b.Let("c", b.LoadVectorElement(
+                       b.Access(ty.ptr<uniform, vec2<f16>, core::Access::kRead>(), var, 1_u), 1_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Needs buffer block
+TEST_F(GlslWriterTest, DISABLED_AccessUniformArray) {
+    auto* var = b.Var<uniform, array<vec3<f32>, 5>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, vec3<f32>, core::Access::kRead>(), var, 3_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Needs buffer block
+TEST_F(GlslWriterTest, DISABLED_AccessUniformArrayF16) {
+    auto* var = b.Var<uniform, array<vec3<f16>, 5>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, vec3<f16>, core::Access::kRead>(), var, 3_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Needs buffer block
+TEST_F(GlslWriterTest, DISABLED_AccessUniformArrayWhichCanHaveSizesOtherThenFive) {
+    auto* var = b.Var<uniform, array<vec3<f32>, 42>, core::Access::kRead>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, vec3<f32>, core::Access::kRead>(), var, 3_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+precision highp float;
+precision highp int;
+
+layout(binding = 0, std140) uniform v_block_ubo {
+  vec3 inner[42];
+} v;
+
+void main() {
+  vec3 a[42] = v.inner;
+  vec3 b = v.inner[3];
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessUniformStruct) {
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.f32()},
+                                                });
+
+    auto* var = b.Var("v", uniform, SB, core::Access::kRead);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, f32, core::Access::kRead>(), var, 1_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct SB {
+  int a;
+  float b;
+};
+precision highp float;
+precision highp int;
+
+
+uniform SB v;
+void main() {
+  SB a = v;
+  float b = v.b;
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessUniformStructF16) {
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.f16()},
+                                                });
+
+    auto* var = b.Var("v", uniform, SB, core::Access::kRead);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.Load(b.Access(ty.ptr<uniform, f16, core::Access::kRead>(), var, 1_u)));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+
+struct SB {
+  int a;
+  float16_t b;
+};
+precision highp float;
+precision highp int;
+
+
+uniform SB v;
+void main() {
+  SB a = v;
+  float16_t b = v.b;
+}
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessUniformStructNested) {
+    auto* Inner =
+        ty.Struct(mod.symbols.New("Inner"), {
+                                                {mod.symbols.New("s"), ty.mat3x3<f32>()},
+                                                {mod.symbols.New("t"), ty.array<vec3<f32>, 5>()},
+                                            });
+    auto* Outer = ty.Struct(mod.symbols.New("Outer"), {
+                                                          {mod.symbols.New("x"), ty.f32()},
+                                                          {mod.symbols.New("y"), Inner},
+                                                      });
+
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), Outer},
+                                                });
+
+    auto* var = b.Var("v", uniform, SB, core::Access::kRead);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Let("a", b.Load(var));
+        b.Let("b", b.LoadVectorElement(b.Access(ty.ptr<uniform, vec3<f32>, core::Access::kRead>(),
+                                                var, 1_u, 1_u, 1_u, 3_u),
+                                       2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreScalar) {
+    auto* var = b.Var<storage, f32, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, f32, core::Access::kReadWrite>(), var), 2_f);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+
+float v;
+void main() {
+  v = 2.0f;
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreScalarF16) {
+    auto* var = b.Var<storage, f16, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, f16, core::Access::kReadWrite>(), var), 2_h);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
+
+
+float16_t v;
+void main() {
+  v = 2.0hf;
+}
+)");
+}
+
+// TODO(dsinclair): Support StoreVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStoreVectorElement) {
+    auto* var = b.Var<storage, vec3<f32>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.StoreVectorElement(b.Access(ty.ptr<storage, vec3<f32>, core::Access::kReadWrite>(), var),
+                             1_u, 2_f);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support StoreVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStoreVectorElementF16) {
+    auto* var = b.Var<storage, vec3<f16>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.StoreVectorElement(b.Access(ty.ptr<storage, vec3<f16>, core::Access::kReadWrite>(), var),
+                             1_u, 2_h);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreVector) {
+    auto* var = b.Var<storage, vec3<f32>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, vec3<f32>, core::Access::kReadWrite>(), var),
+                b.Composite(ty.vec3<f32>(), 2_f, 3_f, 4_f));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+
+vec3 v;
+void main() {
+  v = vec3(2.0f, 3.0f, 4.0f);
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreVectorF16) {
+    auto* var = b.Var<storage, vec3<f16>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, vec3<f16>, core::Access::kReadWrite>(), var),
+                b.Composite(ty.vec3<f16>(), 2_h, 3_h, 4_h));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
+
+
+f16vec3 v;
+void main() {
+  v = f16vec3(2.0hf, 3.0hf, 4.0hf);
+}
+)");
+}
+
+// TODO(dsinclair): Support StoreVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStoreMatrixElement) {
+    auto* var = b.Var<storage, mat4x4<f32>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.StoreVectorElement(
+            b.Access(ty.ptr<storage, vec4<f32>, core::Access::kReadWrite>(), var, 1_u), 2_u, 5_f);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support StoreVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessStoreMatrixElementF16) {
+    auto* var = b.Var<storage, mat3x2<f16>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.StoreVectorElement(
+            b.Access(ty.ptr<storage, vec2<f16>, core::Access::kReadWrite>(), var, 2_u), 1_u, 5_h);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreMatrixColumn) {
+    auto* var = b.Var<storage, mat4x4<f32>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, vec4<f32>, core::Access::kReadWrite>(), var, 1_u),
+                b.Splat<vec4<f32>>(5_f));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+
+mat4 v;
+void main() {
+  v[1u] = vec4(5.0f);
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreMatrixColumnF16) {
+    auto* var = b.Var<storage, mat2x3<f16>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, vec3<f16>, core::Access::kReadWrite>(), var, 1_u),
+                b.Splat<vec3<f16>>(5_h));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
+
+
+f16mat2x3 v;
+void main() {
+  v[1u] = f16vec3(5.0hf);
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreMatrix) {
+    auto* var = b.Var<storage, mat4x4<f32>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(var, b.Zero<mat4x4<f32>>());
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+
+mat4 v;
+void main() {
+  v = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreMatrixF16) {
+    auto* var = b.Var<storage, mat4x4<f16>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(var, b.Zero<mat4x4<f16>>());
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
+
+
+f16mat4 v;
+void main() {
+  v = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreArrayElement) {
+    auto* var = b.Var<storage, array<f32, 5>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, f32, core::Access::kReadWrite>(), var, 3_u), 1_f);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+
+float v[5];
+void main() {
+  v[3u] = 1.0f;
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreArrayElementF16) {
+    auto* var = b.Var<storage, array<f16, 5>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, f16, core::Access::kReadWrite>(), var, 3_u), 1_h);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
+
+
+float16_t v[5];
+void main() {
+  v[3u] = 1.0hf;
+}
+)");
+}
+
+// TODO(dsinclair): Support Loop
+TEST_F(GlslWriterTest, DISABLED_AccessStoreArray) {
+    auto* var = b.Var<storage, array<vec3<f32>, 5>, core::Access::kReadWrite>("v");
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* ary = b.Let("ary", b.Zero<array<vec3<f32>, 5>>());
+        b.Store(var, ary);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreStructMember) {
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.f32()},
+                                                });
+
+    auto* var = b.Var("v", storage, SB, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, f32, core::Access::kReadWrite>(), var, 1_u), 3_f);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct SB {
+  int a;
+  float b;
+};
+precision highp float;
+precision highp int;
+
+
+SB v;
+void main() {
+  v.b = 3.0f;
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreStructMemberF16) {
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.f16()},
+                                                });
+
+    auto* var = b.Var("v", storage, SB, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, f16, core::Access::kReadWrite>(), var, 1_u), 3_h);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+
+struct SB {
+  int a;
+  float16_t b;
+};
+precision highp float;
+precision highp int;
+
+
+SB v;
+void main() {
+  v.b = 3.0hf;
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreStructNested) {
+    auto* Inner =
+        ty.Struct(mod.symbols.New("Inner"), {
+                                                {mod.symbols.New("s"), ty.mat3x3<f32>()},
+                                                {mod.symbols.New("t"), ty.array<vec3<f32>, 5>()},
+                                            });
+    auto* Outer = ty.Struct(mod.symbols.New("Outer"), {
+                                                          {mod.symbols.New("x"), ty.f32()},
+                                                          {mod.symbols.New("y"), Inner},
+                                                      });
+
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), Outer},
+                                                });
+
+    auto* var = b.Var("v", storage, SB, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        b.Store(b.Access(ty.ptr<storage, f32, core::Access::kReadWrite>(), var, 1_u, 0_u), 2_f);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct Inner {
+  mat3 s;
+  float t[5];
+};
+
+struct Outer {
+  float x;
+  Inner y;
+};
+
+struct SB {
+  int a;
+  Outer b;
+};
+precision highp float;
+precision highp int;
+
+
+SB v;
+void main() {
+  v.b.x = 2.0f;
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessStoreStruct) {
+    auto* Inner = ty.Struct(mod.symbols.New("Inner"), {
+                                                          {mod.symbols.New("s"), ty.f32()},
+                                                          {mod.symbols.New("t"), ty.vec3<f32>()},
+                                                      });
+    auto* Outer = ty.Struct(mod.symbols.New("Outer"), {
+                                                          {mod.symbols.New("x"), ty.f32()},
+                                                          {mod.symbols.New("y"), Inner},
+                                                      });
+
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), Outer},
+                                                });
+
+    auto* var = b.Var("v", storage, SB, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* s = b.Let("s", b.Zero(SB));
+        b.Store(var, s);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct Inner {
+  float s;
+  vec3 t;
+};
+
+struct Outer {
+  float x;
+  Inner y;
+};
+
+struct SB {
+  int a;
+  Outer b;
+};
+precision highp float;
+precision highp int;
+
+
+SB v;
+void tint_store_and_preserve_padding_2(inout Inner target, Inner value_param) {
+  target.s = value_param.s;
+  target.t = value_param.t;
+}
+void tint_store_and_preserve_padding_1(inout Outer target, Outer value_param) {
+  target.x = value_param.x;
+  tint_store_and_preserve_padding_2(target.y, value_param.y);
+}
+void tint_store_and_preserve_padding(inout SB target, SB value_param) {
+  target.a = value_param.a;
+  tint_store_and_preserve_padding_1(target.b, value_param.b);
+}
+void main() {
+  SB s = SB(0, Outer(0.0f, Inner(0.0f, vec3(0.0f))));
+  tint_store_and_preserve_padding(v, s);
+}
+)");
+}
+
+// TODO(dsinclair): Support Loop
+TEST_F(GlslWriterTest, DISABLED_AccessStoreStructComplex) {
+    auto* Inner =
+        ty.Struct(mod.symbols.New("Inner"), {
+                                                {mod.symbols.New("s"), ty.mat3x3<f32>()},
+                                                {mod.symbols.New("t"), ty.array<vec3<f32>, 5>()},
+                                            });
+    auto* Outer = ty.Struct(mod.symbols.New("Outer"), {
+                                                          {mod.symbols.New("x"), ty.f32()},
+                                                          {mod.symbols.New("y"), Inner},
+                                                      });
+
+    auto* SB = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), Outer},
+                                                });
+
+    auto* var = b.Var("v", storage, SB, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+
+    b.ir.root_block->Append(var);
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* s = b.Let("s", b.Zero(SB));
+        b.Store(var, s);
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_AccessChainReused) {
+    auto* sb = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("a"), ty.i32()},
+                                                    {mod.symbols.New("b"), ty.vec3<f32>()},
+                                                });
+
+    auto* var = b.Var("v", storage, sb, core::Access::kReadWrite);
+    var->SetBindingPoint(0, 0);
+    b.ir.root_block->Append(var);
+
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* x = b.Access(ty.ptr(storage, ty.vec3<f32>(), core::Access::kReadWrite), var, 1_u);
+        b.Let("b", b.LoadVectorElement(x, 1_u));
+        b.Let("c", b.LoadVectorElement(x, 2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+// TODO(dsinclair): Support LoadVectorElement
+TEST_F(GlslWriterTest, DISABLED_UniformAccessChainReused) {
+    auto* sb = ty.Struct(mod.symbols.New("SB"), {
+                                                    {mod.symbols.New("c"), ty.f32()},
+                                                    {mod.symbols.New("d"), ty.vec3<f32>()},
+                                                });
+
+    auto* var = b.Var("v", uniform, sb, core::Access::kRead);
+    var->SetBindingPoint(0, 0);
+    b.ir.root_block->Append(var);
+
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+    b.Append(func->Block(), [&] {
+        auto* x = b.Access(ty.ptr(uniform, ty.vec3<f32>(), core::Access::kRead), var, 1_u);
+        b.Let("b", b.LoadVectorElement(x, 1_u));
+        b.Let("c", b.LoadVectorElement(x, 2_u));
+        b.Return(func);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+
+)");
+}
+
+}  // namespace
+}  // namespace tint::glsl::writer
diff --git a/src/tint/lang/glsl/writer/printer/printer.cc b/src/tint/lang/glsl/writer/printer/printer.cc
index 6edfdec..7cfc246 100644
--- a/src/tint/lang/glsl/writer/printer/printer.cc
+++ b/src/tint/lang/glsl/writer/printer/printer.cc
@@ -114,7 +114,7 @@
         EmitBlock(ir_.root_block);
 
         // Emit functions.
-        for (auto& func : ir_.functions) {
+        for (auto& func : ir_.DependencyOrderedFunctions()) {
             EmitFunction(func);
         }
 
@@ -307,6 +307,30 @@
         Line() << "}";
     }
 
+    /// Emit an access instruction
+    void EmitAccess(StringStream& out, const core::ir::Access* a) {
+        EmitValue(out, a->Object());
+
+        auto* current_type = a->Object()->Type()->UnwrapPtr();
+        for (auto* index : a->Indices()) {
+            TINT_ASSERT(current_type);
+            Switch(
+                current_type,  //
+                [&](const core::type::Struct* s) {
+                    auto* c = index->As<core::ir::Constant>();
+                    auto* member = s->Members()[c->Value()->ValueAs<uint32_t>()];
+                    out << "." << member->Name().Name();
+                    current_type = member->Type();
+                },
+                [&](Default) {
+                    out << "[";
+                    EmitValue(out, index);
+                    out << "]";
+                    current_type = current_type->Element(0);
+                });
+        }
+    }
+
     void EmitLet(const core::ir::Let* l) {
         TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>());
 
@@ -621,7 +645,8 @@
             [&](const core::ir::Constant* c) { EmitConstant(out, c); },
             [&](const core::ir::InstructionResult* r) {
                 tint::Switch(
-                    r->Instruction(),  //
+                    r->Instruction(),                                        //
+                    [&](const core::ir::Access* a) { EmitAccess(out, a); },  //
                     [&](const core::ir::CoreBinary* b) { EmitBinary(out, b); },
                     [&](const core::ir::CoreBuiltinCall* c) { EmitCoreBuiltinCall(out, c); },
                     [&](const core::ir::CoreUnary* u) { EmitUnary(out, u); },
diff --git a/test/tint/access/let/matrix.wgsl.expected.ir.glsl b/test/tint/access/let/matrix.wgsl.expected.ir.glsl
index 1e74e77..7d8e0d4 100644
--- a/test/tint/access/let/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/access/let/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  vec3 v = m[1];
+  float f = v[1];
+  s = f;
+}
diff --git a/test/tint/access/var/matrix.wgsl.expected.ir.glsl b/test/tint/access/var/matrix.wgsl.expected.ir.glsl
index 72ca17c..5764c73 100644
--- a/test/tint/access/var/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/access/var/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3 m = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
+  vec3 v = m[1];
+  float f = v[1];
+  s = f;
+}
diff --git a/test/tint/array/function_parameter.wgsl.expected.ir.glsl b/test/tint/array/function_parameter.wgsl.expected.ir.glsl
index 1e74e77..81d455a 100644
--- a/test/tint/array/function_parameter.wgsl.expected.ir.glsl
+++ b/test/tint/array/function_parameter.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float s;
+float f1(float a[4]) {
+  return a[3];
+}
+float f2(float a[3][4]) {
+  return a[2][3];
+}
+float f3(float a[2][3][4]) {
+  return a[1][2][3];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float a1[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float a2[3][4] = float[3][4](float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f));
+  float a3[2][3][4] = float[2][3][4](float[3][4](float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f)), float[3][4](float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f)));
+  float v1 = f1(a1);
+  float v2 = f2(a2);
+  float v3 = f3(a3);
+  s = ((v1 + v2) + v3);
+}
diff --git a/test/tint/array/size.wgsl.expected.ir.glsl b/test/tint/array/size.wgsl.expected.ir.glsl
index d4bb1c9..640c889 100644
--- a/test/tint/array/size.wgsl.expected.ir.glsl
+++ b/test/tint/array/size.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
 
-tint executable returned error: signal: illegal instruction
+float s;
+void main() {
+  float signed_literal[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float unsigned_literal[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float signed_constant[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float unsigned_constant[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float shr_const_expr[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  unsigned_literal = signed_literal;
+  signed_constant = signed_literal;
+  unsigned_constant = signed_literal;
+  shr_const_expr = signed_literal;
+  s = ((((signed_literal[0] + unsigned_literal[0]) + signed_constant[0]) + unsigned_constant[0]) + shr_const_expr[0]);
+}
diff --git a/test/tint/benchmark/atan2-const-eval.wgsl.expected.ir.glsl b/test/tint/benchmark/atan2-const-eval.wgsl.expected.ir.glsl
deleted file mode 100644
index d4bb1c9..0000000
--- a/test/tint/benchmark/atan2-const-eval.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/buffer/storage/types/mat2x3_f16.wgsl.expected.ir.glsl b/test/tint/buffer/storage/types/mat2x3_f16.wgsl.expected.ir.glsl
index 72ca17c..24dbcd3 100644
--- a/test/tint/buffer/storage/types/mat2x3_f16.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/storage/types/mat2x3_f16.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat2x3 tint_symbol;
+f16mat2x3 tint_symbol_1;
+void tint_store_and_preserve_padding(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol_1, tint_symbol);
+}
diff --git a/test/tint/buffer/storage/types/mat2x3_f32.wgsl.expected.ir.glsl b/test/tint/buffer/storage/types/mat2x3_f32.wgsl.expected.ir.glsl
index 72ca17c..83d542d 100644
--- a/test/tint/buffer/storage/types/mat2x3_f32.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/storage/types/mat2x3_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x3 tint_symbol;
+mat2x3 tint_symbol_1;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol_1, tint_symbol);
+}
diff --git a/test/tint/buffer/storage/types/mat3x3_f16.wgsl.expected.ir.glsl b/test/tint/buffer/storage/types/mat3x3_f16.wgsl.expected.ir.glsl
index 72ca17c..72e64db 100644
--- a/test/tint/buffer/storage/types/mat3x3_f16.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/storage/types/mat3x3_f16.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat3 tint_symbol;
+f16mat3 tint_symbol_1;
+void tint_store_and_preserve_padding(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol_1, tint_symbol);
+}
diff --git a/test/tint/buffer/storage/types/mat3x3_f32.wgsl.expected.ir.glsl b/test/tint/buffer/storage/types/mat3x3_f32.wgsl.expected.ir.glsl
index 72ca17c..2e1b50c 100644
--- a/test/tint/buffer/storage/types/mat3x3_f32.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/storage/types/mat3x3_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat3 tint_symbol;
+mat3 tint_symbol_1;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol_1, tint_symbol);
+}
diff --git a/test/tint/buffer/storage/types/mat4x3_f16.wgsl.expected.ir.glsl b/test/tint/buffer/storage/types/mat4x3_f16.wgsl.expected.ir.glsl
index 72ca17c..4fc0453 100644
--- a/test/tint/buffer/storage/types/mat4x3_f16.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/storage/types/mat4x3_f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat4x3 tint_symbol;
+f16mat4x3 tint_symbol_1;
+void tint_store_and_preserve_padding(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol_1, tint_symbol);
+}
diff --git a/test/tint/buffer/storage/types/mat4x3_f32.wgsl.expected.ir.glsl b/test/tint/buffer/storage/types/mat4x3_f32.wgsl.expected.ir.glsl
index 72ca17c..c4240da 100644
--- a/test/tint/buffer/storage/types/mat4x3_f32.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/storage/types/mat4x3_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat4x3 tint_symbol;
+mat4x3 tint_symbol_1;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol_1, tint_symbol);
+}
diff --git a/test/tint/buffer/storage/types/struct_f16.wgsl.expected.ir.glsl b/test/tint/buffer/storage/types/struct_f16.wgsl.expected.ir.glsl
index 72ca17c..913c168 100644
--- a/test/tint/buffer/storage/types/struct_f16.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/storage/types/struct_f16.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Inner {
+  float16_t scalar_f16;
+  f16vec3 vec3_f16;
+  f16mat2x4 mat2x4_f16;
+};
 
-tint executable returned error: signal: illegal instruction
+struct S {
+  Inner inner;
+};
+
+S tint_symbol;
+S tint_symbol_1;
+void tint_store_and_preserve_padding_1(inout Inner target, Inner value_param) {
+  target.scalar_f16 = value_param.scalar_f16;
+  target.vec3_f16 = value_param.vec3_f16;
+  target.mat2x4_f16 = value_param.mat2x4_f16;
+}
+void tint_store_and_preserve_padding(inout S target, S value_param) {
+  tint_store_and_preserve_padding_1(target.inner, value_param.inner);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S t = tint_symbol;
+  tint_store_and_preserve_padding(tint_symbol_1, t);
+}
diff --git a/test/tint/buffer/storage/types/struct_f32.wgsl.expected.ir.glsl b/test/tint/buffer/storage/types/struct_f32.wgsl.expected.ir.glsl
index 72ca17c..c5f4266 100644
--- a/test/tint/buffer/storage/types/struct_f32.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/storage/types/struct_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Inner {
+  float scalar_f32;
+  vec3 vec3_f32;
+  mat2x4 mat2x4_f32;
+};
 
-tint executable returned error: signal: illegal instruction
+struct S {
+  Inner inner;
+};
+
+S tint_symbol;
+S tint_symbol_1;
+void tint_store_and_preserve_padding_1(inout Inner target, Inner value_param) {
+  target.scalar_f32 = value_param.scalar_f32;
+  target.vec3_f32 = value_param.vec3_f32;
+  target.mat2x4_f32 = value_param.mat2x4_f32;
+}
+void tint_store_and_preserve_padding(inout S target, S value_param) {
+  tint_store_and_preserve_padding_1(target.inner, value_param.inner);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S t = tint_symbol;
+  tint_store_and_preserve_padding(tint_symbol_1, t);
+}
diff --git a/test/tint/buffer/uniform/types/mat2x3_f16.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/types/mat2x3_f16.wgsl.expected.ir.glsl
index 72ca17c..b18a662 100644
--- a/test/tint/buffer/uniform/types/mat2x3_f16.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/types/mat2x3_f16.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x3 u;
+f16mat2x3 s;
+void tint_store_and_preserve_padding(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat2x3 x = u;
+  tint_store_and_preserve_padding(s, x);
+}
diff --git a/test/tint/buffer/uniform/types/mat2x3_f32.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/types/mat2x3_f32.wgsl.expected.ir.glsl
index 72ca17c..e82f91f 100644
--- a/test/tint/buffer/uniform/types/mat2x3_f32.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/types/mat2x3_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x3 u;
+mat2x3 s;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x3 x = u;
+  tint_store_and_preserve_padding(s, x);
+}
diff --git a/test/tint/buffer/uniform/types/mat3x3_f16.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/types/mat3x3_f16.wgsl.expected.ir.glsl
index 72ca17c..815340c 100644
--- a/test/tint/buffer/uniform/types/mat3x3_f16.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/types/mat3x3_f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3 u;
+f16mat3 s;
+void tint_store_and_preserve_padding(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat3 x = u;
+  tint_store_and_preserve_padding(s, x);
+}
diff --git a/test/tint/buffer/uniform/types/mat3x3_f32.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/types/mat3x3_f32.wgsl.expected.ir.glsl
index 72ca17c..ff33942 100644
--- a/test/tint/buffer/uniform/types/mat3x3_f32.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/types/mat3x3_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3 u;
+mat3 s;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3 x = u;
+  tint_store_and_preserve_padding(s, x);
+}
diff --git a/test/tint/buffer/uniform/types/mat4x3_f16.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/types/mat4x3_f16.wgsl.expected.ir.glsl
index 72ca17c..cb83818 100644
--- a/test/tint/buffer/uniform/types/mat4x3_f16.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/types/mat4x3_f16.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x3 u;
+f16mat4x3 s;
+void tint_store_and_preserve_padding(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat4x3 x = u;
+  tint_store_and_preserve_padding(s, x);
+}
diff --git a/test/tint/buffer/uniform/types/mat4x3_f32.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/types/mat4x3_f32.wgsl.expected.ir.glsl
index 72ca17c..4528499 100644
--- a/test/tint/buffer/uniform/types/mat4x3_f32.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/types/mat4x3_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x3 u;
+mat4x3 s;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4x3 x = u;
+  tint_store_and_preserve_padding(s, x);
+}
diff --git a/test/tint/buffer/uniform/types/struct_f16.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/types/struct_f16.wgsl.expected.ir.glsl
index 72ca17c..9077225 100644
--- a/test/tint/buffer/uniform/types/struct_f16.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/types/struct_f16.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Inner {
+  float16_t scalar_f16;
+  f16vec3 vec3_f16;
+  f16mat2x4 mat2x4_f16;
+};
 
-tint executable returned error: signal: illegal instruction
+struct S {
+  Inner inner;
+};
+
+uniform S u;
+S s;
+void tint_store_and_preserve_padding_1(inout Inner target, Inner value_param) {
+  target.scalar_f16 = value_param.scalar_f16;
+  target.vec3_f16 = value_param.vec3_f16;
+  target.mat2x4_f16 = value_param.mat2x4_f16;
+}
+void tint_store_and_preserve_padding(inout S target, S value_param) {
+  tint_store_and_preserve_padding_1(target.inner, value_param.inner);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S x = u;
+  tint_store_and_preserve_padding(s, x);
+}
diff --git a/test/tint/buffer/uniform/types/struct_f32.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/types/struct_f32.wgsl.expected.ir.glsl
index 72ca17c..49bb17e 100644
--- a/test/tint/buffer/uniform/types/struct_f32.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/types/struct_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Inner {
+  float scalar_f32;
+  vec3 vec3_f32;
+  mat2x4 mat2x4_f32;
+};
 
-tint executable returned error: signal: illegal instruction
+struct S {
+  Inner inner;
+};
+
+uniform S u;
+S s;
+void tint_store_and_preserve_padding_1(inout Inner target, Inner value_param) {
+  target.scalar_f32 = value_param.scalar_f32;
+  target.vec3_f32 = value_param.vec3_f32;
+  target.mat2x4_f32 = value_param.mat2x4_f32;
+}
+void tint_store_and_preserve_padding(inout S target, S value_param) {
+  tint_store_and_preserve_padding_1(target.inner, value_param.inner);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S x = u;
+  tint_store_and_preserve_padding(s, x);
+}
diff --git a/test/tint/bug/chromium/1345468.wgsl.expected.ir.glsl b/test/tint/bug/chromium/1345468.wgsl.expected.ir.glsl
index 1e74e77..8843500 100644
--- a/test/tint/bug/chromium/1345468.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/1345468.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void f() {
+  int i = 1;
+  vec2 a = mat4x2(vec2(0.0f), vec2(0.0f), vec2(4.0f, 0.0f), vec2(0.0f))[i];
+  int b = ivec2(0, 1)[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/chromium/1442551.wgsl.expected.ir.glsl b/test/tint/bug/chromium/1442551.wgsl.expected.ir.glsl
index 1e74e77..8b5a970 100644
--- a/test/tint/bug/chromium/1442551.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/1442551.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void f() {
+  int i = 1;
+  int b = ivec2(1, 2)[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/function.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/read/function.wgsl.expected.ir.glsl
index d4bb1c9..7f748b2 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/function.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/function.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UBO {
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+struct S {
+  int data[64];
+};
+
+uniform UBO ubo;
+Result result;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+  result.tint_symbol = s.data[ubo.dynamic_idx];
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/private.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/read/private.wgsl.expected.ir.glsl
index d4bb1c9..e533e4b 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/private.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/private.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UBO {
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+struct S {
+  int data[64];
+};
+
+uniform UBO ubo;
+Result result;
+S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  result.tint_symbol = s.data[ubo.dynamic_idx];
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.ir.glsl
index d4bb1c9..dff4101 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UBO {
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+struct SSBO {
+  int data[4];
+};
+
+uniform UBO ubo;
+Result result;
+SSBO ssbo;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  result.tint_symbol = ssbo.data[ubo.dynamic_idx];
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.glsl
index d4bb1c9..1a1b227 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UBO {
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+struct S {
+  int data[64];
+};
+
+uniform UBO ubo;
+Result result;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+  s.data[ubo.dynamic_idx] = 1;
+  result.tint_symbol = s.data[3];
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.ir.glsl
index d4bb1c9..266b970 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UBO {
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+struct S {
+  int data[64];
+};
+
+uniform UBO ubo;
+Result result;
+void x(inout S p) {
+  p.data[ubo.dynamic_idx] = 1;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+  x(s);
+  result.tint_symbol = s.data[3];
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.glsl
index d4bb1c9..54e294e 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UBO {
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+struct S {
+  int data[64];
+};
+
+uniform UBO ubo;
+Result result;
+S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s.data[ubo.dynamic_idx] = 1;
+  result.tint_symbol = s.data[3];
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.ir.glsl
index d4bb1c9..c4c2296 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UBO {
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+struct S {
+  int data[64];
+};
+
+uniform UBO ubo;
+Result result;
+S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+void x(inout S p) {
+  p.data[ubo.dynamic_idx] = 1;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  x(s);
+  result.tint_symbol = s.data[3];
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.glsl
index d4bb1c9..a36f8c6 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UBO {
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+struct SSBO {
+  int data[4];
+};
+
+uniform UBO ubo;
+Result result;
+SSBO ssbo;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  ssbo.data[ubo.dynamic_idx] = 1;
+  result.tint_symbol = ssbo.data[3];
+}
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.ir.glsl
index d4bb1c9..e1a17ed 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 m1 = mat2x4(vec4(0.0f), vec4(0.0f));
+  m1[uniforms.i] = vec4(1.0f);
+}
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.ir.glsl
index d4bb1c9..79c183c 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform Uniforms uniforms;
+mat2x4 m1 = mat2x4(vec4(0.0f), vec4(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  m1[uniforms.i] = vec4(1.0f);
+}
diff --git a/test/tint/bug/tint/1136.wgsl.expected.ir.glsl b/test/tint/bug/tint/1136.wgsl.expected.ir.glsl
index d4bb1c9..53a5bafd 100644
--- a/test/tint/bug/tint/1136.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1136.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Buffer {
+  uint data;
+};
 
-tint executable returned error: signal: illegal instruction
+Buffer tint_symbol;
+void tint_symbol_1() {
+  tint_symbol.data = (tint_symbol.data + 1u);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/tint/1542.wgsl.expected.ir.glsl b/test/tint/bug/tint/1542.wgsl.expected.ir.glsl
index ae9b6d0..90a054e 100644
--- a/test/tint/bug/tint/1542.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1542.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBinary
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct UniformBuffer {
+  ivec3 d;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform UniformBuffer u_input;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  ivec3 temp = (u_input.d << (uvec3(0u) & uvec3(31u)));
+}
diff --git a/test/tint/bug/tint/1737.wgsl.expected.ir.glsl b/test/tint/bug/tint/1737.wgsl.expected.ir.glsl
index 72ca17c..cb0e2ed 100644
--- a/test/tint/bug/tint/1737.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1737.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float a[10];
+float b[20];
+void f() {
+  float x = a[0];
+  float y = b[0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/tint/1934.wgsl.expected.ir.glsl b/test/tint/bug/tint/1934.wgsl.expected.ir.glsl
index 1e74e77..1d0633e 100644
--- a/test/tint/bug/tint/1934.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1934.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void v() {
+  int i = 1;
+  int b = ivec2(1)[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/tint/2237.wgsl.expected.ir.glsl b/test/tint/bug/tint/2237.wgsl.expected.ir.glsl
index 1e74e77..130260d 100644
--- a/test/tint/bug/tint/2237.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/2237.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uint tint_symbol;
+uint foo() {
+  return uint[4](0u, 1u, 2u, 4u)[tint_symbol];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint v = uint[4](0u, 1u, 2u, 4u)[tint_symbol];
+  tint_symbol = (v + foo());
+}
diff --git a/test/tint/bug/tint/764.wgsl.expected.ir.glsl b/test/tint/bug/tint/764.wgsl.expected.ir.glsl
index 1e74e77..8baa603 100644
--- a/test/tint/bug/tint/764.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/764.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void f() {
+  mat4 m = mat4(vec4(1.0f), vec4(1.0f), vec4(1.0f), vec4(1.0f));
+  vec4 v1 = m[0];
+  float a = v1[0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/tint/825.wgsl.expected.ir.glsl b/test/tint/bug/tint/825.wgsl.expected.ir.glsl
index 1e74e77..1e8fbe6 100644
--- a/test/tint/bug/tint/825.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/825.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void f() {
+  int i = 0;
+  int j = 0;
+  mat2 m = mat2(vec2(1.0f, 2.0f), vec2(3.0f, 4.0f));
+  float f_1 = m[i][j];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/tint/998.wgsl.expected.ir.glsl b/test/tint/bug/tint/998.wgsl.expected.ir.glsl
index d4bb1c9..9ce5373 100644
--- a/test/tint/bug/tint/998.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/998.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Constants {
+  uint zero;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  uint value;
+};
+
+struct S {
+  uint data[3];
+};
+
+uniform Constants constants;
+Result result;
+S s = S(uint[3](0u, 0u, 0u));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s.data[constants.zero] = 0u;
+}
diff --git a/test/tint/builtins/frexp.wgsl.expected.ir.glsl b/test/tint/builtins/frexp.wgsl.expected.ir.glsl
index 1e74e77..e67c0ce 100644
--- a/test/tint/builtins/frexp.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/frexp.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct frexp_result_f32 {
+  float fract;
+  int exp;
+};
 
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  frexp_result_f32 res = frexp_result_f32(0.61500000953674316406f, 1);
+  int tint_symbol_1 = res.exp;
+  float tint_symbol_2 = res.fract;
+}
diff --git a/test/tint/builtins/frexp/scalar/const.wgsl.expected.ir.glsl b/test/tint/builtins/frexp/scalar/const.wgsl.expected.ir.glsl
index 1e74e77..b4f8e66 100644
--- a/test/tint/builtins/frexp/scalar/const.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/frexp/scalar/const.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct frexp_result_f32 {
+  float fract;
+  int exp;
+};
 
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  frexp_result_f32 res = frexp_result_f32(0.625f, 1);
+  float tint_symbol_2 = res.fract;
+  int tint_symbol_3 = res.exp;
+}
diff --git a/test/tint/builtins/frexp/vector/const.wgsl.expected.ir.glsl b/test/tint/builtins/frexp/vector/const.wgsl.expected.ir.glsl
index 1e74e77..8be4b60 100644
--- a/test/tint/builtins/frexp/vector/const.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/frexp/vector/const.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct frexp_result_vec2_f32 {
+  vec2 fract;
+  ivec2 exp;
+};
 
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  frexp_result_vec2_f32 res = frexp_result_vec2_f32(vec2(0.625f, 0.9375f), ivec2(1, 2));
+  vec2 tint_symbol_2 = res.fract;
+  ivec2 tint_symbol_3 = res.exp;
+}
diff --git a/test/tint/builtins/modf/scalar/const.wgsl.expected.ir.glsl b/test/tint/builtins/modf/scalar/const.wgsl.expected.ir.glsl
index 1e74e77..fdb66f3 100644
--- a/test/tint/builtins/modf/scalar/const.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/modf/scalar/const.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct modf_result_f32 {
+  float fract;
+  float whole;
+};
 
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  modf_result_f32 res = modf_result_f32(0.25f, 1.0f);
+  float tint_symbol_2 = res.fract;
+  float whole = res.whole;
+}
diff --git a/test/tint/builtins/modf/vector/const.wgsl.expected.ir.glsl b/test/tint/builtins/modf/vector/const.wgsl.expected.ir.glsl
index 1e74e77..d415b7f 100644
--- a/test/tint/builtins/modf/vector/const.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/modf/vector/const.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct modf_result_vec2_f32 {
+  vec2 fract;
+  vec2 whole;
+};
 
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  modf_result_vec2_f32 res = modf_result_vec2_f32(vec2(0.25f, 0.75f), vec2(1.0f, 3.0f));
+  vec2 tint_symbol_2 = res.fract;
+  vec2 whole = res.whole;
+}
diff --git a/test/tint/expressions/binary/mul/mat3x2-vec3/f16.wgsl.expected.ir.glsl b/test/tint/expressions/binary/mul/mat3x2-vec3/f16.wgsl.expected.ir.glsl
index ae9b6d0..4a128fb 100644
--- a/test/tint/expressions/binary/mul/mat3x2-vec3/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/binary/mul/mat3x2-vec3/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBinary
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  f16mat3x2 matrix;
+  f16vec3 vector;
+};
+precision highp float;
+precision highp int;
 
-tint executable returned error: signal: illegal instruction
+
+uniform S data;
+void main() {
+  f16vec2 x = (data.matrix * data.vector);
+}
diff --git a/test/tint/expressions/binary/mul/mat3x3-vec3/f16.wgsl.expected.ir.glsl b/test/tint/expressions/binary/mul/mat3x3-vec3/f16.wgsl.expected.ir.glsl
index ae9b6d0..f216af5 100644
--- a/test/tint/expressions/binary/mul/mat3x3-vec3/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/binary/mul/mat3x3-vec3/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBinary
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  f16mat3 matrix;
+  f16vec3 vector;
+};
+precision highp float;
+precision highp int;
 
-tint executable returned error: signal: illegal instruction
+
+uniform S data;
+void main() {
+  f16vec3 x = (data.matrix * data.vector);
+}
diff --git a/test/tint/expressions/binary/mul/vec3-mat3x3/f16.wgsl.expected.ir.glsl b/test/tint/expressions/binary/mul/vec3-mat3x3/f16.wgsl.expected.ir.glsl
index ae9b6d0..8a20df1 100644
--- a/test/tint/expressions/binary/mul/vec3-mat3x3/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/binary/mul/vec3-mat3x3/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBinary
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  f16mat3 matrix;
+  f16vec3 vector;
+};
+precision highp float;
+precision highp int;
 
-tint executable returned error: signal: illegal instruction
+
+uniform S data;
+void main() {
+  f16vec3 x = (data.vector * data.matrix);
+}
diff --git a/test/tint/expressions/binary/mul/vec3-mat4x3/f16.wgsl.expected.ir.glsl b/test/tint/expressions/binary/mul/vec3-mat4x3/f16.wgsl.expected.ir.glsl
index ae9b6d0..ee391b1 100644
--- a/test/tint/expressions/binary/mul/vec3-mat4x3/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/binary/mul/vec3-mat4x3/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBinary
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  f16mat4x3 matrix;
+  f16vec3 vector;
+};
+precision highp float;
+precision highp int;
 
-tint executable returned error: signal: illegal instruction
+
+uniform S data;
+void main() {
+  f16vec4 x = (data.vector * data.matrix);
+}
diff --git a/test/tint/expressions/index/let/array_nested_struct.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/array_nested_struct.wgsl.expected.ir.glsl
index 1e74e77..936cd36 100644
--- a/test/tint/expressions/index/let/array_nested_struct.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/array_nested_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+  uint n[4];
+};
 
-tint executable returned error: signal: illegal instruction
+uint f() {
+  S a[2] = S[2](S(0, uint[4](0u, 0u, 0u, 0u)), S(0, uint[4](0u, 0u, 0u, 0u)));
+  return a[1].n[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.ir.glsl
index 1e74e77..95de7b1 100644
--- a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f() {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  int i = 1;
+  return a[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.ir.glsl
index 1e74e77..a2f275f 100644
--- a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f() {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  int i = 1;
+  return m[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.ir.glsl
index 1e74e77..b6cfdca 100644
--- a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f() {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  int i = 1;
+  return v[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/let/param/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/let/param/array.wgsl.expected.ir.glsl
index 1e74e77..4938464 100644
--- a/test/tint/expressions/index/let/let/param/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/let/param/array.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f(int x) {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  int i = x;
+  return a[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.ir.glsl
index 1e74e77..16b363c 100644
--- a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f(int x) {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  int i = x;
+  return m[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.ir.glsl
index 1e74e77..69600ec 100644
--- a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f(int x) {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  int i = x;
+  return v[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/literal/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/literal/array.wgsl.expected.ir.glsl
index 1e74e77..d31d251 100644
--- a/test/tint/expressions/index/let/literal/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/literal/array.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f() {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  return a[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/literal/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/literal/matrix.wgsl.expected.ir.glsl
index 1e74e77..9f05a7f 100644
--- a/test/tint/expressions/index/let/literal/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/literal/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f() {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  return m[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/literal/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/literal/vector.wgsl.expected.ir.glsl
index 1e74e77..0abf8a1 100644
--- a/test/tint/expressions/index/let/literal/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/literal/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f() {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  return v[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/param/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/param/array.wgsl.expected.ir.glsl
index 1e74e77..547232f 100644
--- a/test/tint/expressions/index/let/param/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/param/array.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f(int i) {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  return a[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/param/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/param/matrix.wgsl.expected.ir.glsl
index 1e74e77..04e225a 100644
--- a/test/tint/expressions/index/let/param/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/param/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f(int i) {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  return m[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/param/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/param/vector.wgsl.expected.ir.glsl
index 1e74e77..9ad3700 100644
--- a/test/tint/expressions/index/let/param/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/param/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f(int i) {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  return v[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/struct.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/struct.wgsl.expected.ir.glsl
index 1e74e77..b96b5b2 100644
--- a/test/tint/expressions/index/let/struct.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+  uint n;
+};
 
-tint executable returned error: signal: illegal instruction
+uint f() {
+  S a = S(0, 0u);
+  return a.n;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/struct_nested_array.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/struct_nested_array.wgsl.expected.ir.glsl
index 1e74e77..c269d8d 100644
--- a/test/tint/expressions/index/let/struct_nested_array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/struct_nested_array.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+  uint n[4];
+};
 
-tint executable returned error: signal: illegal instruction
+uint f() {
+  S a = S(0, uint[4](0u, 0u, 0u, 0u));
+  return a.n[2];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/struct_nested_multiple.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/struct_nested_multiple.wgsl.expected.ir.glsl
index 1e74e77..49af430 100644
--- a/test/tint/expressions/index/let/struct_nested_multiple.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/struct_nested_multiple.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct T {
+  uint k[2];
+};
 
-tint executable returned error: signal: illegal instruction
+struct S {
+  int m;
+  T n[4];
+};
+
+uint f() {
+  S a = S(0, T[4](T(uint[2](0u, 0u)), T(uint[2](0u, 0u)), T(uint[2](0u, 0u)), T(uint[2](0u, 0u))));
+  return a.n[2].k[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/struct_nested_struct.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/struct_nested_struct.wgsl.expected.ir.glsl
index 1e74e77..264b2ed 100644
--- a/test/tint/expressions/index/let/struct_nested_struct.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/struct_nested_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,19 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct T {
+  float o;
+  uint p;
+};
 
-tint executable returned error: signal: illegal instruction
+struct S {
+  int m;
+  T n;
+};
+
+uint f() {
+  S a = S(0, T(0.0f, 0u));
+  return a.n.p;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/struct_with_matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/struct_with_matrix.wgsl.expected.ir.glsl
index 1e74e77..626ddf7 100644
--- a/test/tint/expressions/index/let/struct_with_matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/struct_with_matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+  mat4 n;
+};
 
-tint executable returned error: signal: illegal instruction
+float f() {
+  S a = S(0, mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)));
+  return a.n[2][1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/struct_with_vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/struct_with_vector.wgsl.expected.ir.glsl
index 1e74e77..47ba62a 100644
--- a/test/tint/expressions/index/let/struct_with_vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/struct_with_vector.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+  uvec3 n;
+};
 
-tint executable returned error: signal: illegal instruction
+uint f() {
+  S a = S(0, uvec3(0u));
+  return a.n[2];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.ir.glsl
index 1e74e77..95de7b1 100644
--- a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f() {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  int i = 1;
+  return a[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.ir.glsl
index 1e74e77..a2f275f 100644
--- a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f() {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  int i = 1;
+  return m[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.ir.glsl
index 1e74e77..b6cfdca 100644
--- a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f() {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  int i = 1;
+  return v[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/array_nested_struct.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/array_nested_struct.wgsl.expected.ir.glsl
index 72ca17c..936cd36 100644
--- a/test/tint/expressions/index/var/array_nested_struct.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/array_nested_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+  uint n[4];
+};
 
-tint executable returned error: signal: illegal instruction
+uint f() {
+  S a[2] = S[2](S(0, uint[4](0u, 0u, 0u, 0u)), S(0, uint[4](0u, 0u, 0u, 0u)));
+  return a[1].n[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.ir.glsl
index 72ca17c..95de7b1 100644
--- a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f() {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  int i = 1;
+  return a[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.ir.glsl
index 72ca17c..a2f275f 100644
--- a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f() {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  int i = 1;
+  return m[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/let/param/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/let/param/array.wgsl.expected.ir.glsl
index 72ca17c..4938464 100644
--- a/test/tint/expressions/index/var/let/param/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/let/param/array.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f(int x) {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  int i = x;
+  return a[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.ir.glsl
index 72ca17c..16b363c 100644
--- a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f(int x) {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  int i = x;
+  return m[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/literal/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/literal/array.wgsl.expected.ir.glsl
index 72ca17c..d31d251 100644
--- a/test/tint/expressions/index/var/literal/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/literal/array.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f() {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  return a[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/literal/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/literal/matrix.wgsl.expected.ir.glsl
index 72ca17c..9f05a7f 100644
--- a/test/tint/expressions/index/var/literal/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/literal/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f() {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  return m[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/param/array.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/param/array.wgsl.expected.ir.glsl
index 72ca17c..547232f 100644
--- a/test/tint/expressions/index/var/param/array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/param/array.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int f(int i) {
+  int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
+  return a[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/param/matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/param/matrix.wgsl.expected.ir.glsl
index 72ca17c..04e225a 100644
--- a/test/tint/expressions/index/var/param/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/param/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec3 f(int i) {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  return m[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/struct.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/struct.wgsl.expected.ir.glsl
index 72ca17c..b96b5b2 100644
--- a/test/tint/expressions/index/var/struct.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+  uint n;
+};
 
-tint executable returned error: signal: illegal instruction
+uint f() {
+  S a = S(0, 0u);
+  return a.n;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/struct_nested_array.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/struct_nested_array.wgsl.expected.ir.glsl
index 72ca17c..c269d8d 100644
--- a/test/tint/expressions/index/var/struct_nested_array.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/struct_nested_array.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+  uint n[4];
+};
 
-tint executable returned error: signal: illegal instruction
+uint f() {
+  S a = S(0, uint[4](0u, 0u, 0u, 0u));
+  return a.n[2];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/struct_nested_multiple.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/struct_nested_multiple.wgsl.expected.ir.glsl
index 72ca17c..49af430 100644
--- a/test/tint/expressions/index/var/struct_nested_multiple.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/struct_nested_multiple.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct T {
+  uint k[2];
+};
 
-tint executable returned error: signal: illegal instruction
+struct S {
+  int m;
+  T n[4];
+};
+
+uint f() {
+  S a = S(0, T[4](T(uint[2](0u, 0u)), T(uint[2](0u, 0u)), T(uint[2](0u, 0u)), T(uint[2](0u, 0u))));
+  return a.n[2].k[1];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/struct_nested_struct.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/struct_nested_struct.wgsl.expected.ir.glsl
index 72ca17c..264b2ed 100644
--- a/test/tint/expressions/index/var/struct_nested_struct.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/struct_nested_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,19 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct T {
+  float o;
+  uint p;
+};
 
-tint executable returned error: signal: illegal instruction
+struct S {
+  int m;
+  T n;
+};
+
+uint f() {
+  S a = S(0, T(0.0f, 0u));
+  return a.n.p;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f16.wgsl.expected.ir.glsl
index 72ca17c..759d96c 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat2x3 m = f16mat2x3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf));
+f16mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.ir.glsl
index 72ca17c..7077b54 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f16.wgsl.expected.ir.glsl
index 72ca17c..759d96c 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat2x3 m = f16mat2x3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf));
+f16mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.ir.glsl
index 72ca17c..7077b54 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
index d4bb1c9..282538c 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f)));
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f16.wgsl.expected.ir.glsl
index 72ca17c..759d96c 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat2x3 m = f16mat2x3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf));
+f16mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.ir.glsl
index 72ca17c..7077b54 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
index d4bb1c9..282538c 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f)));
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f16.wgsl.expected.ir.glsl
index 72ca17c..759d96c 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat2x3 m = f16mat2x3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf));
+f16mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.ir.glsl
index 72ca17c..7077b54 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
+mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/zero/f16.wgsl.expected.ir.glsl
index 72ca17c..0f14a8c 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat2x3 m = f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf));
+f16mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.ir.glsl
index 72ca17c..7575f0b 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x3 m = mat2x3(vec3(0.0f), vec3(0.0f));
+mat2x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f16.wgsl.expected.ir.glsl
index 72ca17c..3797a02 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat3 m = f16mat3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf), f16vec3(6.0hf, 7.0hf, 8.0hf));
+f16mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.ir.glsl
index 72ca17c..9d38dd3 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f16.wgsl.expected.ir.glsl
index 72ca17c..3797a02 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat3 m = f16mat3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf), f16vec3(6.0hf, 7.0hf, 8.0hf));
+f16mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.ir.glsl
index 72ca17c..9d38dd3 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
index d4bb1c9..1ce04e0 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f)));
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f16.wgsl.expected.ir.glsl
index 72ca17c..3797a02 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat3 m = f16mat3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf), f16vec3(6.0hf, 7.0hf, 8.0hf));
+f16mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.ir.glsl
index 72ca17c..9d38dd3 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
index d4bb1c9..1ce04e0 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f)));
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f16.wgsl.expected.ir.glsl
index 72ca17c..3797a02 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat3 m = f16mat3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf), f16vec3(6.0hf, 7.0hf, 8.0hf));
+f16mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.ir.glsl
index 72ca17c..9d38dd3 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
+mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/zero/f16.wgsl.expected.ir.glsl
index 72ca17c..1360ea6 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat3 m = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+f16mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.ir.glsl
index 72ca17c..89ba1f0 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat3 m = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
+mat3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f16.wgsl.expected.ir.glsl
index 72ca17c..7bd2000 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat4x3 m = f16mat4x3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf), f16vec3(6.0hf, 7.0hf, 8.0hf), f16vec3(9.0hf, 10.0hf, 11.0hf));
+f16mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.ir.glsl
index 72ca17c..6dc33c1 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f16.wgsl.expected.ir.glsl
index 72ca17c..7bd2000 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat4x3 m = f16mat4x3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf), f16vec3(6.0hf, 7.0hf, 8.0hf), f16vec3(9.0hf, 10.0hf, 11.0hf));
+f16mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.ir.glsl
index 72ca17c..6dc33c1 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
index d4bb1c9..ca6eff8 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f)));
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f16.wgsl.expected.ir.glsl
index 72ca17c..7bd2000 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat4x3 m = f16mat4x3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf), f16vec3(6.0hf, 7.0hf, 8.0hf), f16vec3(9.0hf, 10.0hf, 11.0hf));
+f16mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.ir.glsl
index 72ca17c..6dc33c1 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
index d4bb1c9..ca6eff8 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f)));
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f16.wgsl.expected.ir.glsl
index 72ca17c..7bd2000 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat4x3 m = f16mat4x3(f16vec3(0.0hf, 1.0hf, 2.0hf), f16vec3(3.0hf, 4.0hf, 5.0hf), f16vec3(6.0hf, 7.0hf, 8.0hf), f16vec3(9.0hf, 10.0hf, 11.0hf));
+f16mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.ir.glsl
index 72ca17c..6dc33c1 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
+mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f16.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/zero/f16.wgsl.expected.ir.glsl
index 72ca17c..53c3fbe 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+f16mat4x3 m = f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+f16mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.ir.glsl b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.ir.glsl
index 72ca17c..97ac1ed 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat4x3 m = mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
+mat4x3 tint_symbol;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(tint_symbol, m);
+}
diff --git a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.ir.glsl b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.ir.glsl
index d4bb1c9..64e1fa1 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.ir.glsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct PixelLocal {
+  uint a;
+};
+precision highp float;
+precision highp int;
 
-tint executable returned error: signal: illegal instruction
+
+PixelLocal P;
+void main() {
+  P.a = (P.a + 42u);
+}
diff --git a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.ir.glsl b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.ir.glsl
index d4bb1c9..4897dd4 100644
--- a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.ir.glsl
+++ b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct PixelLocal {
+  uint a;
+};
+precision highp float;
+precision highp int;
 
-tint executable returned error: signal: illegal instruction
+
+PixelLocal P;
+void f0() {
+  P.a = (P.a + 9u);
+}
+void f1() {
+  f0();
+  P.a = (P.a + 8u);
+}
+void f2() {
+  P.a = (P.a + 7u);
+  f1();
+}
+void main() {
+  f2();
+}
diff --git a/test/tint/identifiers/underscore/double/struct.wgsl.expected.ir.glsl b/test/tint/identifiers/underscore/double/struct.wgsl.expected.ir.glsl
index 1e74e77..d502b00 100644
--- a/test/tint/identifiers/underscore/double/struct.wgsl.expected.ir.glsl
+++ b/test/tint/identifiers/underscore/double/struct.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct tint_symbol {
+  int tint_symbol_1;
+};
 
-tint executable returned error: signal: illegal instruction
+int s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol c = tint_symbol(0);
+  int d = c.tint_symbol_1;
+  s = (c.tint_symbol_1 + d);
+}
diff --git a/test/tint/identifiers/underscore/prefix/lower/struct.wgsl.expected.ir.glsl b/test/tint/identifiers/underscore/prefix/lower/struct.wgsl.expected.ir.glsl
index 1e74e77..8c999d4 100644
--- a/test/tint/identifiers/underscore/prefix/lower/struct.wgsl.expected.ir.glsl
+++ b/test/tint/identifiers/underscore/prefix/lower/struct.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct _a {
+  int _b;
+};
 
-tint executable returned error: signal: illegal instruction
+int s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  _a c = _a(0);
+  int d = c._b;
+  s = (c._b + d);
+}
diff --git a/test/tint/identifiers/underscore/prefix/upper/struct.wgsl.expected.ir.glsl b/test/tint/identifiers/underscore/prefix/upper/struct.wgsl.expected.ir.glsl
index 1e74e77..bf13a69 100644
--- a/test/tint/identifiers/underscore/prefix/upper/struct.wgsl.expected.ir.glsl
+++ b/test/tint/identifiers/underscore/prefix/upper/struct.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct _A {
+  int _B;
+};
 
-tint executable returned error: signal: illegal instruction
+int s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  _A c = _A(0);
+  int d = c._B;
+  s = (c._B + d);
+}
diff --git a/test/tint/layout/storage/mat2x2/f32.wgsl.expected.ir.glsl b/test/tint/layout/storage/mat2x2/f32.wgsl.expected.ir.glsl
index 72ca17c..73e23eb 100644
--- a/test/tint/layout/storage/mat2x2/f32.wgsl.expected.ir.glsl
+++ b/test/tint/layout/storage/mat2x2/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct SSBO {
+  mat2 m;
+};
 
-tint executable returned error: signal: illegal instruction
+SSBO ssbo;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2 v = ssbo.m;
+  ssbo.m = v;
+}
diff --git a/test/tint/out_of_order_decls/array/alias.wgsl.expected.ir.glsl b/test/tint/out_of_order_decls/array/alias.wgsl.expected.ir.glsl
index d4bb1c9..72648b5 100644
--- a/test/tint/out_of_order_decls/array/alias.wgsl.expected.ir.glsl
+++ b/test/tint/out_of_order_decls/array/alias.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
 
-tint executable returned error: signal: illegal instruction
+int A[4] = int[4](0, 0, 0, 0);
+void main() {
+  A[0] = 1;
+}
diff --git a/test/tint/out_of_order_decls/array/struct.wgsl.expected.ir.glsl b/test/tint/out_of_order_decls/array/struct.wgsl.expected.ir.glsl
index d4bb1c9..033082d 100644
--- a/test/tint/out_of_order_decls/array/struct.wgsl.expected.ir.glsl
+++ b/test/tint/out_of_order_decls/array/struct.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int m;
+};
+precision highp float;
+precision highp int;
 
-tint executable returned error: signal: illegal instruction
+
+S A[4] = S[4](S(0), S(0), S(0), S(0));
+void main() {
+  A[0] = S(1);
+}
diff --git a/test/tint/ptr_ref/access/matrix.spvasm.expected.ir.glsl b/test/tint/ptr_ref/access/matrix.spvasm.expected.ir.glsl
index d4bb1c9..3303f50 100644
--- a/test/tint/ptr_ref/access/matrix.spvasm.expected.ir.glsl
+++ b/test/tint/ptr_ref/access/matrix.spvasm.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void main_1() {
+  mat3 m = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
+  m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  m[1] = vec3(5.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main_1();
+}
diff --git a/test/tint/ptr_ref/load/global/struct_field.spvasm.expected.ir.glsl b/test/tint/ptr_ref/load/global/struct_field.spvasm.expected.ir.glsl
index d4bb1c9..fdb6c43 100644
--- a/test/tint/ptr_ref/load/global/struct_field.spvasm.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/global/struct_field.spvasm.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+S V = S(0);
+void main_1() {
+  int i = 0;
+  i = V.i;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main_1();
+}
diff --git a/test/tint/ptr_ref/load/global/struct_field.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/global/struct_field.wgsl.expected.ir.glsl
index 72ca17c..299ba8b 100644
--- a/test/tint/ptr_ref/load/global/struct_field.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/global/struct_field.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+S V = S(0);
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int i = V.i;
+}
diff --git a/test/tint/ptr_ref/load/local/struct_field.spvasm.expected.ir.glsl b/test/tint/ptr_ref/load/local/struct_field.spvasm.expected.ir.glsl
index d4bb1c9..71511c4 100644
--- a/test/tint/ptr_ref/load/local/struct_field.spvasm.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/local/struct_field.spvasm.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+void main_1() {
+  int i = 0;
+  S V = S(0);
+  i = V.i;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main_1();
+}
diff --git a/test/tint/ptr_ref/load/local/struct_field.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/local/struct_field.wgsl.expected.ir.glsl
index 72ca17c..ee210b96b 100644
--- a/test/tint/ptr_ref/load/local/struct_field.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/local/struct_field.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  S V = S(0);
+  int i = V.i;
+}
diff --git a/test/tint/ptr_ref/load/param/function/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/function/array_in_struct.wgsl.expected.ir.glsl
index 72ca17c..977ec52 100644
--- a/test/tint/ptr_ref/load/param/function/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/function/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int arr[4];
+};
 
-tint executable returned error: signal: illegal instruction
+int[4] func(inout int pointer[4]) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str F = str(int[4](0, 0, 0, 0));
+  int r[4] = func(F.arr);
+}
diff --git a/test/tint/ptr_ref/load/param/function/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/function/i32_in_struct.wgsl.expected.ir.glsl
index 72ca17c..2308148 100644
--- a/test/tint/ptr_ref/load/param/function/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/function/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+int func(inout int pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str F = str(0);
+  int r = func(F.i);
+}
diff --git a/test/tint/ptr_ref/load/param/function/struct_in_array.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/function/struct_in_array.wgsl.expected.ir.glsl
index 72ca17c..f49a0a7 100644
--- a/test/tint/ptr_ref/load/param/function/struct_in_array.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/function/struct_in_array.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+str func(inout str pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str F[4] = str[4](str(0), str(0), str(0), str(0));
+  str r = func(F[2]);
+}
diff --git a/test/tint/ptr_ref/load/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
index 72ca17c..7422123 100644
--- a/test/tint/ptr_ref/load/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec2 func(inout vec2 pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2 F = mat2(vec2(0.0f), vec2(0.0f));
+  vec2 r = func(F[1]);
+}
diff --git a/test/tint/ptr_ref/load/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
index 72ca17c..002fb37 100644
--- a/test/tint/ptr_ref/load/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec4 func(inout vec4 pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 F = mat2x4(vec4(0.0f), vec4(0.0f));
+  vec4 r = func(F[1]);
+}
diff --git a/test/tint/ptr_ref/load/param/function/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/function/vec4_f32_in_struct.wgsl.expected.ir.glsl
index 72ca17c..eceac6d 100644
--- a/test/tint/ptr_ref/load/param/function/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/function/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  vec4 i;
+};
 
-tint executable returned error: signal: illegal instruction
+vec4 func(inout vec4 pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str F = str(vec4(0.0f));
+  vec4 r = func(F.i);
+}
diff --git a/test/tint/ptr_ref/load/param/private/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/private/array_in_struct.wgsl.expected.ir.glsl
index 72ca17c..46d1778 100644
--- a/test/tint/ptr_ref/load/param/private/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/private/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int arr[4];
+};
 
-tint executable returned error: signal: illegal instruction
+str P = str(int[4](0, 0, 0, 0));
+int[4] func(inout int pointer[4]) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int r[4] = func(P.arr);
+}
diff --git a/test/tint/ptr_ref/load/param/private/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/private/i32_in_struct.wgsl.expected.ir.glsl
index 72ca17c..9d7ce7e 100644
--- a/test/tint/ptr_ref/load/param/private/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/private/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+str P = str(0);
+int func(inout int pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int r = func(P.i);
+}
diff --git a/test/tint/ptr_ref/load/param/private/struct_in_array.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/private/struct_in_array.wgsl.expected.ir.glsl
index 72ca17c..0d9b43f 100644
--- a/test/tint/ptr_ref/load/param/private/struct_in_array.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/private/struct_in_array.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+str P[4] = str[4](str(0), str(0), str(0), str(0));
+str func(inout str pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str r = func(P[2]);
+}
diff --git a/test/tint/ptr_ref/load/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
index 72ca17c..4cd1e6d 100644
--- a/test/tint/ptr_ref/load/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2 P = mat2(vec2(0.0f), vec2(0.0f));
+vec2 func(inout vec2 pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec2 r = func(P[1]);
+}
diff --git a/test/tint/ptr_ref/load/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
index 72ca17c..f8863ef 100644
--- a/test/tint/ptr_ref/load/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x4 P = mat2x4(vec4(0.0f), vec4(0.0f));
+vec4 func(inout vec4 pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec4 r = func(P[1]);
+}
diff --git a/test/tint/ptr_ref/load/param/private/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/private/vec4_f32_in_struct.wgsl.expected.ir.glsl
index 72ca17c..1783c04 100644
--- a/test/tint/ptr_ref/load/param/private/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/private/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  vec4 i;
+};
 
-tint executable returned error: signal: illegal instruction
+str P = str(vec4(0.0f));
+vec4 func(inout vec4 pointer) {
+  return pointer;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec4 r = func(P.i);
+}
diff --git a/test/tint/ptr_ref/load/param/storage/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/storage/array_in_struct.wgsl.expected.ir.glsl
index 72ca17c..eea91bc 100644
--- a/test/tint/ptr_ref/load/param/storage/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/storage/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int arr[4];
+};
 
-tint executable returned error: signal: illegal instruction
+str S;
+int[4] func() {
+  return S.arr;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int r[4] = func();
+}
diff --git a/test/tint/ptr_ref/load/param/storage/i32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/storage/i32.wgsl.expected.ir.glsl
index 72ca17c..e046592 100644
--- a/test/tint/ptr_ref/load/param/storage/i32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/storage/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int S;
+int func() {
+  return S;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int r = func();
+}
diff --git a/test/tint/ptr_ref/load/param/storage/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/storage/i32_in_struct.wgsl.expected.ir.glsl
index 72ca17c..2a798a4 100644
--- a/test/tint/ptr_ref/load/param/storage/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/storage/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+str S;
+int func() {
+  return S.i;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int r = func();
+}
diff --git a/test/tint/ptr_ref/load/param/storage/vec4_f32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/storage/vec4_f32.wgsl.expected.ir.glsl
index 72ca17c..aac2ee1 100644
--- a/test/tint/ptr_ref/load/param/storage/vec4_f32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/storage/vec4_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec4 S;
+vec4 func() {
+  return S;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec4 r = func();
+}
diff --git a/test/tint/ptr_ref/load/param/storage/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/storage/vec4_f32_in_struct.wgsl.expected.ir.glsl
index 72ca17c..7e60da4 100644
--- a/test/tint/ptr_ref/load/param/storage/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/storage/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  vec4 i;
+};
 
-tint executable returned error: signal: illegal instruction
+str S;
+vec4 func() {
+  return S.i;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec4 r = func();
+}
diff --git a/test/tint/ptr_ref/load/param/uniform/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/uniform/array_in_struct.wgsl.expected.ir.glsl
index 72ca17c..3d9381d 100644
--- a/test/tint/ptr_ref/load/param/uniform/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/uniform/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int arr[4];
+};
 
-tint executable returned error: signal: illegal instruction
+uniform str S;
+int[4] func() {
+  return S.arr;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int r[4] = func();
+}
diff --git a/test/tint/ptr_ref/load/param/uniform/i32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/uniform/i32.wgsl.expected.ir.glsl
index 72ca17c..73681a9 100644
--- a/test/tint/ptr_ref/load/param/uniform/i32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/uniform/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform int S;
+int func() {
+  return S;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int r = func();
+}
diff --git a/test/tint/ptr_ref/load/param/uniform/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/uniform/i32_in_struct.wgsl.expected.ir.glsl
index 72ca17c..6c90606 100644
--- a/test/tint/ptr_ref/load/param/uniform/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/uniform/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform str S;
+int func() {
+  return S.i;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int r = func();
+}
diff --git a/test/tint/ptr_ref/load/param/uniform/vec4_f32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/uniform/vec4_f32.wgsl.expected.ir.glsl
index 72ca17c..7b0b3b9 100644
--- a/test/tint/ptr_ref/load/param/uniform/vec4_f32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/uniform/vec4_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform vec4 S;
+vec4 func() {
+  return S;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec4 r = func();
+}
diff --git a/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_struct.wgsl.expected.ir.glsl
index 72ca17c..f0f926e 100644
--- a/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  vec4 i;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform str S;
+vec4 func() {
+  return S.i;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec4 r = func();
+}
diff --git a/test/tint/ptr_ref/store/global/struct_field.spvasm.expected.ir.glsl b/test/tint/ptr_ref/store/global/struct_field.spvasm.expected.ir.glsl
index d4bb1c9..1806ae6 100644
--- a/test/tint/ptr_ref/store/global/struct_field.spvasm.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/global/struct_field.spvasm.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+S V = S(0);
+void main_1() {
+  V.i = 5;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main_1();
+}
diff --git a/test/tint/ptr_ref/store/local/struct_field.spvasm.expected.ir.glsl b/test/tint/ptr_ref/store/local/struct_field.spvasm.expected.ir.glsl
index d4bb1c9..74ffb1b 100644
--- a/test/tint/ptr_ref/store/local/struct_field.spvasm.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/local/struct_field.spvasm.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+void main_1() {
+  S V = S(0);
+  V.i = 5;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main_1();
+}
diff --git a/test/tint/ptr_ref/store/param/function/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/function/array_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..b12f792 100644
--- a/test/tint/ptr_ref/store/param/function/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/function/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int arr[4];
+};
 
-tint executable returned error: signal: illegal instruction
+void func(inout int pointer[4]) {
+  pointer = int[4](0, 0, 0, 0);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str F = str(int[4](0, 0, 0, 0));
+  func(F.arr);
+}
diff --git a/test/tint/ptr_ref/store/param/function/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/function/i32_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..82c0dfd 100644
--- a/test/tint/ptr_ref/store/param/function/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/function/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+void func(inout int pointer) {
+  pointer = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str F = str(0);
+  func(F.i);
+}
diff --git a/test/tint/ptr_ref/store/param/function/struct_in_array.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/function/struct_in_array.wgsl.expected.ir.glsl
index d4bb1c9..1758082 100644
--- a/test/tint/ptr_ref/store/param/function/struct_in_array.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/function/struct_in_array.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+void func(inout str pointer) {
+  pointer = str(0);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str F[4] = str[4](str(0), str(0), str(0), str(0));
+  func(F[2]);
+}
diff --git a/test/tint/ptr_ref/store/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
index d4bb1c9..0d45ad7 100644
--- a/test/tint/ptr_ref/store/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void func(inout vec2 pointer) {
+  pointer = vec2(0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2 F = mat2(vec2(0.0f), vec2(0.0f));
+  func(F[1]);
+}
diff --git a/test/tint/ptr_ref/store/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
index d4bb1c9..6d025d6 100644
--- a/test/tint/ptr_ref/store/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void func(inout vec4 pointer) {
+  pointer = vec4(0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 F = mat2x4(vec4(0.0f), vec4(0.0f));
+  func(F[1]);
+}
diff --git a/test/tint/ptr_ref/store/param/function/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/function/vec4_f32_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..69d0213 100644
--- a/test/tint/ptr_ref/store/param/function/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/function/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  vec4 i;
+};
 
-tint executable returned error: signal: illegal instruction
+void func(inout vec4 pointer) {
+  pointer = vec4(0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  str F = str(vec4(0.0f));
+  func(F.i);
+}
diff --git a/test/tint/ptr_ref/store/param/private/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/private/array_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..694ac27 100644
--- a/test/tint/ptr_ref/store/param/private/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/private/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int arr[4];
+};
 
-tint executable returned error: signal: illegal instruction
+str P = str(int[4](0, 0, 0, 0));
+void func(inout int pointer[4]) {
+  pointer = int[4](0, 0, 0, 0);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func(P.arr);
+}
diff --git a/test/tint/ptr_ref/store/param/private/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/private/i32_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..69918ef 100644
--- a/test/tint/ptr_ref/store/param/private/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/private/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+str P = str(0);
+void func(inout int pointer) {
+  pointer = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func(P.i);
+}
diff --git a/test/tint/ptr_ref/store/param/private/struct_in_array.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/private/struct_in_array.wgsl.expected.ir.glsl
index d4bb1c9..00b1c43e 100644
--- a/test/tint/ptr_ref/store/param/private/struct_in_array.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/private/struct_in_array.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+str P[4] = str[4](str(0), str(0), str(0), str(0));
+void func(inout str pointer) {
+  pointer = str(0);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func(P[2]);
+}
diff --git a/test/tint/ptr_ref/store/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
index d4bb1c9..78babbf 100644
--- a/test/tint/ptr_ref/store/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2 P = mat2(vec2(0.0f), vec2(0.0f));
+void func(inout vec2 pointer) {
+  pointer = vec2(0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func(P[1]);
+}
diff --git a/test/tint/ptr_ref/store/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
index d4bb1c9..fb76858 100644
--- a/test/tint/ptr_ref/store/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+mat2x4 P = mat2x4(vec4(0.0f), vec4(0.0f));
+void func(inout vec4 pointer) {
+  pointer = vec4(0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func(P[1]);
+}
diff --git a/test/tint/ptr_ref/store/param/private/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/private/vec4_f32_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..9136446 100644
--- a/test/tint/ptr_ref/store/param/private/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/private/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  vec4 i;
+};
 
-tint executable returned error: signal: illegal instruction
+str P = str(vec4(0.0f));
+void func(inout vec4 pointer) {
+  pointer = vec4(0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func(P.i);
+}
diff --git a/test/tint/ptr_ref/store/param/storage/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/storage/array_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..be9bf5c 100644
--- a/test/tint/ptr_ref/store/param/storage/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/storage/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int arr[4];
+};
 
-tint executable returned error: signal: illegal instruction
+str S;
+void func() {
+  S.arr = int[4](0, 0, 0, 0);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func();
+}
diff --git a/test/tint/ptr_ref/store/param/storage/i32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/storage/i32.wgsl.expected.ir.glsl
index d4bb1c9..76bd46d5 100644
--- a/test/tint/ptr_ref/store/param/storage/i32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/storage/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+int S;
+void func() {
+  S = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func();
+}
diff --git a/test/tint/ptr_ref/store/param/storage/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/storage/i32_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..c585faf 100644
--- a/test/tint/ptr_ref/store/param/storage/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/storage/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+str S;
+void func() {
+  S.i = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func();
+}
diff --git a/test/tint/ptr_ref/store/param/storage/vec4_f32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/storage/vec4_f32.wgsl.expected.ir.glsl
index d4bb1c9..eb586fc 100644
--- a/test/tint/ptr_ref/store/param/storage/vec4_f32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/storage/vec4_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec4 S;
+void func() {
+  S = vec4(0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func();
+}
diff --git a/test/tint/ptr_ref/store/param/storage/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/storage/vec4_f32_in_struct.wgsl.expected.ir.glsl
index d4bb1c9..d65f99f 100644
--- a/test/tint/ptr_ref/store/param/storage/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/storage/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct str {
+  vec4 i;
+};
 
-tint executable returned error: signal: illegal instruction
+str S;
+void func() {
+  S.i = vec4(0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  func();
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.ir.glsl
index d4bb1c9..a3a6fd0 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.ir.glsl
@@ -1,11 +1,32 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+struct InnerS {
+  int v;
+};
+
+struct S1 {
+  InnerS a2[8];
+};
+
+struct OuterS {
+  S1 a1[8];
+};
+
+uint nextIndex = 0u;
+uniform Uniforms uniforms;
+uint getNextIndex() {
+  nextIndex = (nextIndex + 1u);
+  return nextIndex;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  InnerS v = InnerS(0);
+  OuterS s = OuterS(S1[8](S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)))));
+  uint v_1 = getNextIndex();
+  s.a1[v_1].a2[uniforms.j] = v;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.ir.glsl
index d4bb1c9..3762854 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct InnerS {
+  int v;
+};
+
+struct OuterS {
+  InnerS a1[8];
+};
+
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  InnerS v = InnerS(0);
+  OuterS s1 = OuterS(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)));
+  s1.a1[uniforms.i] = v;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.ir.glsl
index d4bb1c9..e2f5363 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+struct InnerS {
+  int v;
+};
+
+struct OuterS {
+  InnerS a1[8][8];
+};
+
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  InnerS v = InnerS(0);
+  OuterS s1 = OuterS(InnerS[8][8](InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)), InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)), InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)), InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)), InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)), InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)), InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)), InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))));
+  s1.a1[uniforms.i][uniforms.j] = v;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.ir.glsl
index d4bb1c9..e0ea516 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct InnerS {
+  int v;
+};
+
+struct S1 {
+  InnerS s2;
+};
+
+struct OuterS {
+  S1 a1[8];
+};
+
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  InnerS v = InnerS(0);
+  OuterS s1 = OuterS(S1[8](S1(InnerS(0)), S1(InnerS(0)), S1(InnerS(0)), S1(InnerS(0)), S1(InnerS(0)), S1(InnerS(0)), S1(InnerS(0)), S1(InnerS(0))));
+  s1.a1[uniforms.i].s2 = v;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.ir.glsl
index d4bb1c9..f288422 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.ir.glsl
@@ -1,11 +1,26 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+struct InnerS {
+  int v;
+};
+
+struct S1 {
+  InnerS a2[8];
+};
+
+struct OuterS {
+  S1 a1[8];
+};
+
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  InnerS v = InnerS(0);
+  OuterS s = OuterS(S1[8](S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))), S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)))));
+  s.a1[uniforms.i].a2[uniforms.j] = v;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.ir.glsl
index d4bb1c9..b26df73 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct InnerS {
+  int v;
+};
+
+struct OuterS {
+  InnerS a1[8];
+  InnerS a2[8];
+};
+
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  InnerS v = InnerS(0);
+  OuterS s1 = OuterS(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)), InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)));
+  s1.a1[uniforms.i] = v;
+  s1.a2[uniforms.i] = v;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.ir.glsl
index d4bb1c9..4224c91 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct InnerS {
+  int v;
+};
+
+struct S1 {
+  InnerS a[8];
+};
+
+struct OuterS {
+  S1 s2;
+};
+
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  InnerS v = InnerS(0);
+  OuterS s1 = OuterS(S1(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0))));
+  s1.s2.a[uniforms.i] = v;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.ir.glsl
index d4bb1c9..810270b 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct InnerS {
+  int v;
+};
+
+struct OuterS {
+  InnerS a1[8];
+};
+
+uniform Uniforms uniforms;
+void f(inout OuterS p) {
+  InnerS v = InnerS(0);
+  p.a1[uniforms.i] = v;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  OuterS s1 = OuterS(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)));
+  f(s1);
+}
diff --git a/test/tint/statements/compound_assign/matrix/minus.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/matrix/minus.wgsl.expected.ir.glsl
index d4bb1c9..00e1c6a 100644
--- a/test/tint/statements/compound_assign/matrix/minus.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/matrix/minus.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  mat4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a - mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/matrix/plus.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/matrix/plus.wgsl.expected.ir.glsl
index d4bb1c9..2d33cef 100644
--- a/test/tint/statements/compound_assign/matrix/plus.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/matrix/plus.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  mat4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a + mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/matrix/times-scalar.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/matrix/times-scalar.wgsl.expected.ir.glsl
index d4bb1c9..34ac696 100644
--- a/test/tint/statements/compound_assign/matrix/times-scalar.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/matrix/times-scalar.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  mat4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a * 2.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/matrix/times.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/matrix/times.wgsl.expected.ir.glsl
index d4bb1c9..eaa062f 100644
--- a/test/tint/statements/compound_assign/matrix/times.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/matrix/times.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  mat4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a * mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/scalar/and.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/scalar/and.wgsl.expected.ir.glsl
index d4bb1c9..176f68d 100644
--- a/test/tint/statements/compound_assign/scalar/and.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/scalar/and.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a & 2);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/scalar/minus.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/scalar/minus.wgsl.expected.ir.glsl
index d4bb1c9..6aec0cf 100644
--- a/test/tint/statements/compound_assign/scalar/minus.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/scalar/minus.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a - 2);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/scalar/or.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/scalar/or.wgsl.expected.ir.glsl
index d4bb1c9..059fb74 100644
--- a/test/tint/statements/compound_assign/scalar/or.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/scalar/or.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a | 2);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/scalar/plus.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/scalar/plus.wgsl.expected.ir.glsl
index d4bb1c9..f04b6a3 100644
--- a/test/tint/statements/compound_assign/scalar/plus.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/scalar/plus.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a + 2);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/scalar/shift_left.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/scalar/shift_left.wgsl.expected.ir.glsl
index d4bb1c9..5c52632 100644
--- a/test/tint/statements/compound_assign/scalar/shift_left.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/scalar/shift_left.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a << (2u & 31u));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/scalar/shift_right.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/scalar/shift_right.wgsl.expected.ir.glsl
index d4bb1c9..9d08063 100644
--- a/test/tint/statements/compound_assign/scalar/shift_right.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/scalar/shift_right.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a >> (2u & 31u));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/scalar/times.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/scalar/times.wgsl.expected.ir.glsl
index d4bb1c9..3b8ff19 100644
--- a/test/tint/statements/compound_assign/scalar/times.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/scalar/times.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a * 2);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/scalar/xor.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/scalar/xor.wgsl.expected.ir.glsl
index d4bb1c9..5aca015 100644
--- a/test/tint/statements/compound_assign/scalar/xor.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/scalar/xor.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  int a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a ^ 2);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/and.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/and.wgsl.expected.ir.glsl
index d4bb1c9..1a1309f 100644
--- a/test/tint/statements/compound_assign/vector/and.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/and.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  ivec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a & ivec4(2));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/divide-scalar.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/divide-scalar.wgsl.expected.ir.glsl
index d4bb1c9..415d81c 100644
--- a/test/tint/statements/compound_assign/vector/divide-scalar.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/divide-scalar.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  vec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a / 2.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/minus-scalar.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/minus-scalar.wgsl.expected.ir.glsl
index d4bb1c9..6c6a8dd 100644
--- a/test/tint/statements/compound_assign/vector/minus-scalar.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/minus-scalar.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  vec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a - 2.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/minus.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/minus.wgsl.expected.ir.glsl
index d4bb1c9..7b519df 100644
--- a/test/tint/statements/compound_assign/vector/minus.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/minus.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  ivec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a - ivec4(2));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/or.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/or.wgsl.expected.ir.glsl
index d4bb1c9..85334f1 100644
--- a/test/tint/statements/compound_assign/vector/or.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/or.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  ivec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a | ivec4(2));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/plus-scalar.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/plus-scalar.wgsl.expected.ir.glsl
index d4bb1c9..16c4f13 100644
--- a/test/tint/statements/compound_assign/vector/plus-scalar.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/plus-scalar.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  vec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a + 2.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/plus.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/plus.wgsl.expected.ir.glsl
index d4bb1c9..cf3c448 100644
--- a/test/tint/statements/compound_assign/vector/plus.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/plus.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  ivec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a + ivec4(2));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/shift_left.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/shift_left.wgsl.expected.ir.glsl
index d4bb1c9..8a4d0c7 100644
--- a/test/tint/statements/compound_assign/vector/shift_left.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/shift_left.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  ivec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a << (uvec4(2u) & uvec4(31u)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/shift_right.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/shift_right.wgsl.expected.ir.glsl
index d4bb1c9..7eee516 100644
--- a/test/tint/statements/compound_assign/vector/shift_right.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/shift_right.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  ivec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a >> (uvec4(2u) & uvec4(31u)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/times-matrix.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/times-matrix.wgsl.expected.ir.glsl
index d4bb1c9..6053f4a 100644
--- a/test/tint/statements/compound_assign/vector/times-matrix.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/times-matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  vec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a * mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/times-scalar.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/times-scalar.wgsl.expected.ir.glsl
index d4bb1c9..684f4b2 100644
--- a/test/tint/statements/compound_assign/vector/times-scalar.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/times-scalar.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  vec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a * 2.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/times.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/times.wgsl.expected.ir.glsl
index d4bb1c9..3627dd3 100644
--- a/test/tint/statements/compound_assign/vector/times.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/times.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  ivec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a * ivec4(2));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/vector/xor.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/vector/xor.wgsl.expected.ir.glsl
index d4bb1c9..0100b9b 100644
--- a/test/tint/statements/compound_assign/vector/xor.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/vector/xor.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S {
+  ivec4 a;
+};
 
-tint executable returned error: signal: illegal instruction
+S v;
+void foo() {
+  v.a = (v.a ^ ivec4(2));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/decrement/array_element.wgsl.expected.ir.glsl b/test/tint/statements/decrement/array_element.wgsl.expected.ir.glsl
index 7a5bf9e..7e0e566 100644
--- a/test/tint/statements/decrement/array_element.wgsl.expected.ir.glsl
+++ b/test/tint/statements/decrement/array_element.wgsl.expected.ir.glsl
@@ -1,31 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:509:16: runtime error: member call on null pointer of type 'tint::core::constant::Value'
-SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:509:16 in 
-AddressSanitizer:DEADLYSIGNAL
-=================================================================
-==1764983==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x55686334f4d3 bp 0x7ffcb5963b80 sp 0x7ffcb59639a0 T0)
-==1764983==The signal is caused by a READ memory access.
-==1764983==Hint: address points to the zero page.
-    #0 0x55686334f4d3 in tint::glsl::writer::(anonymous namespace)::Printer::EmitConstant(tint::StringStream&, tint::core::constant::Value const*) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:509:16
-    #1 0x55686336217c in tint::glsl::writer::(anonymous namespace)::Printer::EmitZeroValue(tint::StringStream&, tint::core::type::Type const*) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:470:9
-    #2 0x556863361fd1 in tint::glsl::writer::(anonymous namespace)::Printer::EmitVar(tint::StringStream&, tint::core::ir::Var const*) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:461:13
-    #3 0x55686336172f in tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*)::operator()(tint::core::ir::Var const*) const <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:239:47
-    #4 0x55686334c704 in auto auto tint::Switch<tint::detail::Infer, tint::core::ir::Instruction const, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Call const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Let const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Return const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Unreachable const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::NextIteration const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::ExitIf const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Access const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Bitcast const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Construct const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreBinary const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreUnary const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Load const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::LoadVectorElement const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Swizzle const*), tint::SwitchMustMatchCase>(tint::core::ir::Instruction const*, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Call const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Let const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Return const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Unreachable const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::NextIteration const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::ExitIf const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Access const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Bitcast const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Construct const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreBinary const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreUnary const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Load const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::LoadVectorElement const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Swizzle const*)&&, tint::SwitchMustMatchCase&&)::'lambda'(auto&&)::operator()<tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*)>(auto&&) const <dawn>/src/tint/utils/rtti/switch.h:347:25
-    #5 0x55686334ba63 in auto tint::Switch<tint::detail::Infer, tint::core::ir::Instruction const, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Call const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Let const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Return const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Unreachable const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::NextIteration const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::ExitIf const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Access const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Bitcast const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Construct const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreBinary const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreUnary const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Load const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::LoadVectorElement const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Swizzle const*), tint::SwitchMustMatchCase>(tint::core::ir::Instruction const*, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Call const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Let const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Return const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Unreachable const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::NextIteration const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::ExitIf const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Access const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Bitcast const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Construct const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreBinary const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreUnary const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Load const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::LoadVectorElement const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Swizzle const*)&&, tint::SwitchMustMatchCase&&) <dawn>/src/tint/utils/rtti/switch.h:358:22
-    #6 0x55686334993a in tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:233:13
-    #7 0x556863348b21 in tint::glsl::writer::(anonymous namespace)::Printer::Generate[abi:cxx11](tint::glsl::writer::Version const&) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:105:9
-    #8 0x55686334802b in tint::glsl::writer::Print[abi:cxx11](tint::core::ir::Module&, tint::glsl::writer::Version const&) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:596:28
-    #9 0x556862e94ebb in tint::glsl::writer::Generate(tint::core::ir::Module&, tint::glsl::writer::Options const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) <dawn>/src/tint/lang/glsl/writer/writer.cc:48:19
-    #10 0x5568626b0455 in (anonymous namespace)::GenerateGlsl(tint::Program const&, (anonymous namespace)::Options const&)::$_0::operator()(tint::Program const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, tint::ast::PipelineStage) const <dawn>/src/tint/cmd/tint/main.cc:1100:22
-    #11 0x5568626989a6 in (anonymous namespace)::GenerateGlsl(tint::Program const&, (anonymous namespace)::Options const&) <dawn>/src/tint/cmd/tint/main.cc:1140:16
-    #12 0x556862680861 in main <dawn>/src/tint/cmd/tint/main.cc:1434:23
-    #13 0x7ffb62443b89 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
-    #14 0x7ffb62443c44 in __libc_start_main csu/../csu/libc-start.c:360:3
-    #15 0x5568625a5000 in _start (<dawn>/out/Debug/tint+0x2b08000) (BuildId: e8af56752221240d6aa5bbe38e8d6c485d94acd9)
-
-AddressSanitizer can not provide additional info.
-SUMMARY: AddressSanitizer: SEGV <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:509:16 in tint::glsl::writer::(anonymous namespace)::Printer::EmitConstant(tint::StringStream&, tint::core::constant::Value const*)
-==1764983==ABORTING
-
-tint executable returned error: exit status 1
+uint a[];
+void tint_symbol() {
+  a[1] = (a[1] - 1u);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/increment/array_element.wgsl.expected.ir.glsl b/test/tint/statements/increment/array_element.wgsl.expected.ir.glsl
index 2197dcc..1023a2d 100644
--- a/test/tint/statements/increment/array_element.wgsl.expected.ir.glsl
+++ b/test/tint/statements/increment/array_element.wgsl.expected.ir.glsl
@@ -1,31 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:509:16: runtime error: member call on null pointer of type 'tint::core::constant::Value'
-SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:509:16 in 
-AddressSanitizer:DEADLYSIGNAL
-=================================================================
-==1765018==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x55f226c7e4d3 bp 0x7fff15cdc8a0 sp 0x7fff15cdc6c0 T0)
-==1765018==The signal is caused by a READ memory access.
-==1765018==Hint: address points to the zero page.
-    #0 0x55f226c7e4d3 in tint::glsl::writer::(anonymous namespace)::Printer::EmitConstant(tint::StringStream&, tint::core::constant::Value const*) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:509:16
-    #1 0x55f226c9117c in tint::glsl::writer::(anonymous namespace)::Printer::EmitZeroValue(tint::StringStream&, tint::core::type::Type const*) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:470:9
-    #2 0x55f226c90fd1 in tint::glsl::writer::(anonymous namespace)::Printer::EmitVar(tint::StringStream&, tint::core::ir::Var const*) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:461:13
-    #3 0x55f226c9072f in tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*)::operator()(tint::core::ir::Var const*) const <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:239:47
-    #4 0x55f226c7b704 in auto auto tint::Switch<tint::detail::Infer, tint::core::ir::Instruction const, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Call const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Let const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Return const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Unreachable const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::NextIteration const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::ExitIf const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Access const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Bitcast const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Construct const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreBinary const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreUnary const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Load const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::LoadVectorElement const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Swizzle const*), tint::SwitchMustMatchCase>(tint::core::ir::Instruction const*, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Call const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Let const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Return const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Unreachable const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::NextIteration const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::ExitIf const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Access const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Bitcast const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Construct const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreBinary const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreUnary const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Load const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::LoadVectorElement const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Swizzle const*)&&, tint::SwitchMustMatchCase&&)::'lambda'(auto&&)::operator()<tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*)>(auto&&) const <dawn>/src/tint/utils/rtti/switch.h:347:25
-    #5 0x55f226c7aa63 in auto tint::Switch<tint::detail::Infer, tint::core::ir::Instruction const, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Call const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Let const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Return const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Unreachable const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::NextIteration const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::ExitIf const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Access const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Bitcast const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Construct const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreBinary const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreUnary const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Load const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::LoadVectorElement const*), tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Swizzle const*), tint::SwitchMustMatchCase>(tint::core::ir::Instruction const*, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Call const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Let const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Return const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Unreachable const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Var const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::NextIteration const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::ExitIf const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Access const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Bitcast const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Construct const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreBinary const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::CoreUnary const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Load const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::LoadVectorElement const*)&&, tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*)::'lambda'(tint::core::ir::Swizzle const*)&&, tint::SwitchMustMatchCase&&) <dawn>/src/tint/utils/rtti/switch.h:358:22
-    #6 0x55f226c7893a in tint::glsl::writer::(anonymous namespace)::Printer::EmitBlock(tint::core::ir::Block const*) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:233:13
-    #7 0x55f226c77b21 in tint::glsl::writer::(anonymous namespace)::Printer::Generate[abi:cxx11](tint::glsl::writer::Version const&) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:105:9
-    #8 0x55f226c7702b in tint::glsl::writer::Print[abi:cxx11](tint::core::ir::Module&, tint::glsl::writer::Version const&) <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:596:28
-    #9 0x55f2267c3ebb in tint::glsl::writer::Generate(tint::core::ir::Module&, tint::glsl::writer::Options const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) <dawn>/src/tint/lang/glsl/writer/writer.cc:48:19
-    #10 0x55f225fdf455 in (anonymous namespace)::GenerateGlsl(tint::Program const&, (anonymous namespace)::Options const&)::$_0::operator()(tint::Program const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, tint::ast::PipelineStage) const <dawn>/src/tint/cmd/tint/main.cc:1100:22
-    #11 0x55f225fc79a6 in (anonymous namespace)::GenerateGlsl(tint::Program const&, (anonymous namespace)::Options const&) <dawn>/src/tint/cmd/tint/main.cc:1140:16
-    #12 0x55f225faf861 in main <dawn>/src/tint/cmd/tint/main.cc:1434:23
-    #13 0x7fd5da764b89 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
-    #14 0x7fd5da764c44 in __libc_start_main csu/../csu/libc-start.c:360:3
-    #15 0x55f225ed4000 in _start (<dawn>/out/Debug/tint+0x2b08000) (BuildId: e8af56752221240d6aa5bbe38e8d6c485d94acd9)
-
-AddressSanitizer can not provide additional info.
-SUMMARY: AddressSanitizer: SEGV <dawn>/src/tint/lang/glsl/writer/printer/printer.cc:509:16 in tint::glsl::writer::(anonymous namespace)::Printer::EmitConstant(tint::StringStream&, tint::core::constant::Value const*)
-==1765018==ABORTING
-
-tint executable returned error: exit status 1
+uint a[];
+void tint_symbol() {
+  a[1] = (a[1] + 1u);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.ir.glsl
deleted file mode 100644
index d4bb1c9..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.ir.glsl
deleted file mode 100644
index d4bb1c9..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/var/initialization/function/nested_structs.wgsl.expected.ir.glsl b/test/tint/var/initialization/function/nested_structs.wgsl.expected.ir.glsl
index 1e74e77..c0da6c7 100644
--- a/test/tint/var/initialization/function/nested_structs.wgsl.expected.ir.glsl
+++ b/test/tint/var/initialization/function/nested_structs.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S1 {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct S2 {
+  S1 s1;
+};
+
+struct S3 {
+  S2 s2;
+};
+
+int tint_symbol;
+int f(S3 s3) {
+  return s3.s2.s1.i;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol = f(S3(S2(S1(42))));
+}
diff --git a/test/tint/var/initialization/private/nested_structs.wgsl.expected.ir.glsl b/test/tint/var/initialization/private/nested_structs.wgsl.expected.ir.glsl
index d4bb1c9..c0a5ad0 100644
--- a/test/tint/var/initialization/private/nested_structs.wgsl.expected.ir.glsl
+++ b/test/tint/var/initialization/private/nested_structs.wgsl.expected.ir.glsl
@@ -1,11 +1,20 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+struct S1 {
+  int i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct S2 {
+  S1 s1;
+};
+
+struct S3 {
+  S2 s2;
+};
+
+S3 P = S3(S2(S1(42)));
+int tint_symbol;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol = P.s2.s1.i;
+}
diff --git a/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.ir.glsl
deleted file mode 100644
index d4bb1c9..0000000
--- a/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.ir.glsl b/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.ir.glsl
deleted file mode 100644
index d4bb1c9..0000000
--- a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.ir.glsl b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.ir.glsl
deleted file mode 100644
index d4bb1c9..0000000
--- a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction