diff --git a/src/tint/lang/core/ir/transform/value_to_let.cc b/src/tint/lang/core/ir/transform/value_to_let.cc
index 019e5b5..e49d5f1 100644
--- a/src/tint/lang/core/ir/transform/value_to_let.cc
+++ b/src/tint/lang/core/ir/transform/value_to_let.cc
@@ -42,41 +42,26 @@
 /// Accesses is a set of of Access
 using Accesses = EnumSet<Access>;
 
-/// @returns the accesses that may be performed by the instruction @p inst
-Accesses AccessesFor(ir::Instruction* inst) {
-    return tint::Switch<Accesses>(
-        inst,  //
-        [&](const ir::Load* l) {
-            // Always inline things in the `handle` address space
-            if (l->From()->Type()->As<core::type::Pointer>()->AddressSpace() ==
-                core::AddressSpace::kHandle) {
-                return Accesses{};
-            }
-            return Accesses{Access::kLoad};
-        },                                                              //
-        [&](const ir::LoadVectorElement*) { return Access::kLoad; },    //
-        [&](const ir::Store*) { return Access::kStore; },               //
-        [&](const ir::StoreVectorElement*) { return Access::kStore; },  //
-        [&](const ir::Call*) {
-            if (inst->IsAnyOf<core::ir::Bitcast>()) {
-                return Accesses{};
-            }
-            return Accesses{Access::kLoad, Access::kStore};
-        },
-        [&](Default) { return Accesses{}; });
-}
-
 /// PIMPL state for the transform.
 struct State {
     /// The IR module.
     Module& ir;
 
+    /// The configuration
+    const ValueToLetConfig& cfg;
+
     /// The IR builder.
     Builder b{ir};
 
     /// The type manager.
     core::type::Manager& ty{ir.Types()};
 
+    // A set of possibly-inlinable values returned by a instructions that has not yet been
+    // marked-for or ruled-out-for inlining.
+    Hashset<ir::InstructionResult*, 32> pending_resolution{};
+    // The accesses of the values in pending_resolution.
+    Access pending_access = Access::kLoad;
+
     /// Process the module.
     void Process() {
         // Process each block.
@@ -87,54 +72,8 @@
 
   private:
     void Process(ir::Block* block) {
-        // A set of possibly-inlinable values returned by a instructions that has not yet been
-        // marked-for or ruled-out-for inlining.
-        Hashset<ir::InstructionResult*, 32> pending_resolution;
-        // The accesses of the values in pending_resolution.
-        Access pending_access = Access::kLoad;
-
-        auto put_pending_in_lets = [&] {
-            for (auto& pending : pending_resolution) {
-                PutInLet(pending);
-            }
-            pending_resolution.Clear();
-        };
-
-        auto maybe_put_in_let = [&](auto* inst, Accesses& accesses) {
-            if (auto* result = inst->Result(0)) {
-                auto& usages = result->UsagesUnsorted();
-                switch (result->NumUsages()) {
-                    case 0:  // No usage
-                        if (accesses.Contains(Access::kStore)) {
-                            // This instruction needs to be emitted but has no uses, so we need to
-                            // make sure that it will be used in a statement. Function call
-                            // instructions with no uses will be emitted as call statements, so we
-                            // just need to put other instructions in `let`s to force them to be
-                            // emitted.
-                            if (!inst->template IsAnyOf<core::ir::Call>() ||
-                                inst->template IsAnyOf<core::ir::Construct, core::ir::Convert>()) {
-                                inst = PutInLet(result);
-                            }
-                        }
-                        break;
-                    case 1: {  // Single usage
-                        auto usage = (*usages.begin())->instruction;
-                        if (usage->Block() == inst->Block()) {
-                            // Usage in same block. Assign to pending_resolution, as we don't
-                            // know whether its safe to inline yet.
-                            pending_resolution.Add(result);
-                        } else {
-                            // Usage from another block. Cannot inline.
-                            inst = PutInLet(result);
-                        }
-                        break;
-                    }
-                    default:  // Value has multiple usages. Cannot inline.
-                        inst = PutInLet(result);
-                        break;
-                }
-            }
-        };
+        // Replace all pointer lets with the value they point too.
+        ReplacePointerLetsWithValues();
 
         for (ir::Instruction* inst = block->Front(); inst; inst = inst->next) {
             // This transform assumes that all multi-result instructions have been replaced
@@ -143,6 +82,36 @@
             // The memory accesses of this instruction
             auto accesses = AccessesFor(inst);
 
+            // A pointer access chain will be inlined by the backends. For backends which don't
+            // provide pointer lets we need to force any arguments into lets such the occur in the
+            // correct order. Without this it's possible to shift function calls around if they're
+            // only used in the access.
+            //
+            // e.g.
+            // ```
+            // var arr : array<i32, 4>;
+            // let p = val[f() + 1];
+            // g();
+            // let x = p;
+            // ```
+            //
+            // If the access at `p` is inlined to `x` then the function `f()` will be called after
+            // `g()` instead of before as is required. So, we pessimize and for all access operands
+            // to lets to maintain ordering.
+            //
+            // This flush only needs to take place if the access chain contains operands which are
+            // pending resolution. If nothing is pending, we don't need to flush at all.
+            if (cfg.replace_pointer_lets && IsPointerAccess(inst)) {
+                for (auto* operand : inst->Operands()) {
+                    if (auto* result = operand->As<InstructionResult>()) {
+                        if (pending_resolution.Contains(result)) {
+                            PutPendingInLets();
+                            break;
+                        }
+                    }
+                }
+            }
+
             for (auto* operand : inst->Operands()) {
                 // If the operand is in pending_resolution, then we know it has a single use and
                 // because it hasn't been removed with put_pending_in_lets(), we know its safe to
@@ -161,25 +130,102 @@
             }
 
             if (accesses.Contains(Access::kStore)) {  // Note: Also handles load + store
-                put_pending_in_lets();
+                PutPendingInLets();
                 pending_access = Access::kStore;
-                maybe_put_in_let(inst, accesses);
+                inst = MaybePutInLet(inst, accesses);
             } else if (accesses.Contains(Access::kLoad)) {
                 if (pending_access != Access::kLoad) {
-                    put_pending_in_lets();
+                    PutPendingInLets();
                     pending_access = Access::kLoad;
                 }
-                maybe_put_in_let(inst, accesses);
+                inst = MaybePutInLet(inst, accesses);
             }
         }
     }
 
+    /// @returns the accesses that may be performed by the instruction @p inst
+    Accesses AccessesFor(ir::Instruction* inst) {
+        return tint::Switch<Accesses>(
+            inst,  //
+            [&](const ir::Load* l) {
+                // Always inline things in the `handle` address space
+                if (l->From()->Type()->As<core::type::Pointer>()->AddressSpace() ==
+                    core::AddressSpace::kHandle) {
+                    return Accesses{};
+                }
+                return Accesses{Access::kLoad};
+            },                                                              //
+            [&](const ir::LoadVectorElement*) { return Access::kLoad; },    //
+            [&](const ir::Store*) { return Access::kStore; },               //
+            [&](const ir::StoreVectorElement*) { return Access::kStore; },  //
+            [&](const ir::Call*) {
+                if (inst->IsAnyOf<core::ir::Bitcast>()) {
+                    return Accesses{};
+                }
+                return Accesses{Access::kLoad, Access::kStore};
+            },
+            [&](Default) { return Accesses{}; });
+    }
+
+    void PutPendingInLets() {
+        for (auto& pending : pending_resolution) {
+            PutInLet(pending);
+        }
+        pending_resolution.Clear();
+    }
+
+    core::ir::Instruction* MaybePutInLet(core::ir::Instruction* inst, Accesses& accesses) {
+        if (auto* result = inst->Result(0)) {
+            auto& usages = result->UsagesUnsorted();
+            switch (result->NumUsages()) {
+                case 0:  // No usage
+                    if (accesses.Contains(Access::kStore)) {
+                        // This instruction needs to be emitted but has no uses, so we need to
+                        // make sure that it will be used in a statement. Function call
+                        // instructions with no uses will be emitted as call statements, so we
+                        // just need to put other instructions in `let`s to force them to be
+                        // emitted.
+                        if (!inst->IsAnyOf<core::ir::Call>() ||
+                            inst->IsAnyOf<core::ir::Construct, core::ir::Convert>()) {
+                            inst = PutInLet(result);
+                        }
+                    }
+                    break;
+                case 1: {  // Single usage
+                    auto usage = (*usages.begin())->instruction;
+                    if (usage->Block() == inst->Block()) {
+                        // Usage in same block. Assign to pending_resolution, as we don't
+                        // know whether its safe to inline yet.
+                        pending_resolution.Add(result);
+                    } else {
+                        // Usage from another block. Cannot inline.
+                        inst = PutInLet(result);
+                    }
+                    break;
+                }
+                default:  // Value has multiple usages. Cannot inline.
+                    inst = PutInLet(result);
+                    break;
+            }
+        }
+        return inst;
+    }
+
+    bool IsPointerAccess(core::ir::Instruction* inst) {
+        return inst->Is<core::ir::Access>() && inst->Result(0)->Type()->Is<core::type::Pointer>();
+    }
+
     /// PutInLet places the value into a new 'let' instruction, immediately after the value's
     /// instruction
     /// @param value the value to place into the 'let'
     /// @return the created 'let' instruction.
-    ir::Let* PutInLet(ir::InstructionResult* value) {
+    ir::Instruction* PutInLet(ir::InstructionResult* value) {
         auto* inst = value->Instruction();
+
+        if (cfg.replace_pointer_lets && IsPointerAccess(inst)) {
+            return inst;
+        }
+
         auto* let = b.Let(value->Type());
         value->ReplaceAllUsesWith(let->Result(0));
         let->SetValue(value);
@@ -190,11 +236,27 @@
         }
         return let;
     }
+
+    void ReplacePointerLetsWithValues() {
+        if (!cfg.replace_pointer_lets) {
+            return;
+        }
+
+        for (auto* inst : ir.Instructions()) {
+            if (auto* l = inst->As<ir::Let>()) {
+                if (!l->Result(0)->Type()->Is<core::type::Pointer>()) {
+                    continue;
+                }
+                l->Result(0)->ReplaceAllUsesWith(l->Value());
+                l->Destroy();
+            }
+        }
+    }
 };
 
 }  // namespace
 
-Result<SuccessType> ValueToLet(Module& ir) {
+Result<SuccessType> ValueToLet(Module& ir, const ValueToLetConfig& cfg) {
     auto result = ValidateAndDumpIfNeeded(ir, "ValueToLet transform",
                                           core::ir::Capabilities{
                                               core::ir::Capability::kAllow8BitIntegers,
@@ -205,7 +267,7 @@
         return result;
     }
 
-    State{ir}.Process();
+    State{ir, cfg}.Process();
 
     return Success;
 }
diff --git a/src/tint/lang/core/ir/transform/value_to_let.h b/src/tint/lang/core/ir/transform/value_to_let.h
index 895bc09..6b72f1a 100644
--- a/src/tint/lang/core/ir/transform/value_to_let.h
+++ b/src/tint/lang/core/ir/transform/value_to_let.h
@@ -28,6 +28,7 @@
 #ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_VALUE_TO_LET_H_
 #define SRC_TINT_LANG_CORE_IR_TRANSFORM_VALUE_TO_LET_H_
 
+#include "src/tint/utils/reflection/reflection.h"
 #include "src/tint/utils/result/result.h"
 
 // Forward declarations.
@@ -37,6 +38,15 @@
 
 namespace tint::core::ir::transform {
 
+/// Configuration for ValueToLet transform.
+struct ValueToLetConfig {
+    /// Replace pointer lets with their value
+    bool replace_pointer_lets = false;
+
+    /// Reflection for this class
+    TINT_REFLECT(ValueToLetConfig, replace_pointer_lets);
+};
+
 /// ValueToLet is a transform that moves "non-inlinable" instruction values to let instructions.
 /// An expression is considered "non-inlinable" if any of the the following are true:
 /// * The value has multiple uses.
@@ -46,8 +56,9 @@
 /// * The value is used in a block different to the value's instruction.
 ///
 /// @param module the module to transform
+/// @param cfg the configuration
 /// @returns error diagnostics on failure
-Result<SuccessType> ValueToLet(Module& module);
+Result<SuccessType> ValueToLet(Module& module, const ValueToLetConfig& cfg);
 
 }  // namespace tint::core::ir::transform
 
diff --git a/src/tint/lang/core/ir/transform/value_to_let_fuzz.cc b/src/tint/lang/core/ir/transform/value_to_let_fuzz.cc
index 84564e2..d593e2d 100644
--- a/src/tint/lang/core/ir/transform/value_to_let_fuzz.cc
+++ b/src/tint/lang/core/ir/transform/value_to_let_fuzz.cc
@@ -44,12 +44,12 @@
     return true;
 }
 
-void ValueToLetFuzzer(Module& module) {
+void ValueToLetFuzzer(Module& module, ValueToLetConfig config) {
     if (!CanRun(module)) {
         return;
     }
 
-    if (auto res = ValueToLet(module); res != Success) {
+    if (auto res = ValueToLet(module, config); res != Success) {
         return;
     }
 
diff --git a/src/tint/lang/core/ir/transform/value_to_let_test.cc b/src/tint/lang/core/ir/transform/value_to_let_test.cc
index ed2e973..288a7a6 100644
--- a/src/tint/lang/core/ir/transform/value_to_let_test.cc
+++ b/src/tint/lang/core/ir/transform/value_to_let_test.cc
@@ -46,7 +46,7 @@
     auto* expect = R"(
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -66,7 +66,7 @@
 
     auto* expect = src;
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -95,7 +95,7 @@
 
     auto* expect = src;
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -121,7 +121,7 @@
 
     auto* expect = src;
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -173,7 +173,7 @@
 
     auto* expect = src;
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -226,7 +226,7 @@
 
     auto* expect = src;
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -279,7 +279,7 @@
 
     auto* expect = src;
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -321,7 +321,7 @@
 
     auto* expect = src;
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -358,7 +358,7 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -396,7 +396,7 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -463,7 +463,7 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -530,7 +530,7 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -594,7 +594,7 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -658,7 +658,7 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -722,7 +722,7 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 }
@@ -798,11 +798,11 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 
-    Run(ValueToLet);  // running a second time should be no-op
+    Run(ValueToLet, ValueToLetConfig{});  // running a second time should be no-op
 
     EXPECT_EQ(str(), expect);
 }
@@ -886,11 +886,11 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 
-    Run(ValueToLet);  // running a second time should be no-op
+    Run(ValueToLet, ValueToLetConfig{});  // running a second time should be no-op
 
     EXPECT_EQ(str(), expect);
 }
@@ -931,11 +931,11 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
 
     EXPECT_EQ(str(), expect);
 
-    Run(ValueToLet);  // running a second time should be no-op
+    Run(ValueToLet, ValueToLetConfig{});  // running a second time should be no-op
 
     EXPECT_EQ(str(), expect);
 }
@@ -982,10 +982,10 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
     EXPECT_EQ(str(), expect);
 
-    Run(ValueToLet);  // running a second time should be no-op
+    Run(ValueToLet, ValueToLetConfig{});  // running a second time should be no-op
     EXPECT_EQ(str(), expect);
 }
 
@@ -1049,10 +1049,175 @@
 }
 )";
 
-    Run(ValueToLet);
+    Run(ValueToLet, ValueToLetConfig{});
     EXPECT_EQ(str(), expect);
 
-    Run(ValueToLet);  // running a second time should be no-op
+    Run(ValueToLet, ValueToLetConfig{});  // running a second time should be no-op
+    EXPECT_EQ(str(), expect);
+}
+
+TEST_F(IR_ValueToLetTest, AccessToLetWithFunctionParams) {
+    auto* f = b.Function("f", ty.i32());
+    b.Append(f->Block(), [&] { b.Return(f, 0_i); });
+
+    auto* g = b.Function("g", ty.i32());
+    b.Append(g->Block(), [&] { b.Return(f, 0_i); });
+
+    auto* foo = b.Function("foo", ty.void_());
+    b.Append(foo->Block(), [&] {
+        auto* arr = b.Var("arr", ty.ptr<function, array<i32, 4>, read_write>());
+        auto* c = b.Call(ty.i32(), f);
+        auto* access = b.Access(ty.ptr<function, i32, read_write>(), arr, c);
+        auto* p = b.Let("p", access);
+        auto* c2 = b.Call(ty.i32(), g);
+        b.Let("y", c2);
+        b.Let("x", b.Load(p));
+        b.Return(foo);
+    });
+
+    auto* src = R"(
+%f = func():i32 {
+  $B1: {
+    ret 0i
+  }
+}
+%g = func():i32 {
+  $B2: {
+    ret 0i
+  }
+}
+%foo = func():void {
+  $B3: {
+    %arr:ptr<function, array<i32, 4>, read_write> = var
+    %5:i32 = call %f
+    %6:ptr<function, i32, read_write> = access %arr, %5
+    %p:ptr<function, i32, read_write> = let %6
+    %8:i32 = call %g
+    %y:i32 = let %8
+    %10:i32 = load %p
+    %x:i32 = let %10
+    ret
+  }
+}
+)";
+    EXPECT_EQ(str(), src);
+
+    auto* expect = R"(
+%f = func():i32 {
+  $B1: {
+    ret 0i
+  }
+}
+%g = func():i32 {
+  $B2: {
+    ret 0i
+  }
+}
+%foo = func():void {
+  $B3: {
+    %arr:ptr<function, array<i32, 4>, read_write> = var
+    %5:i32 = call %f
+    %6:i32 = let %5
+    %7:ptr<function, i32, read_write> = access %arr, %6
+    %8:i32 = call %g
+    %y:i32 = let %8
+    %10:i32 = load %7
+    %x:i32 = let %10
+    ret
+  }
+}
+)";
+
+    ValueToLetConfig cfg{};
+    cfg.replace_pointer_lets = true;
+    Run(ValueToLet, cfg);
+    EXPECT_EQ(str(), expect);
+
+    Run(ValueToLet, cfg);  // running a second time should be no-op
+    EXPECT_EQ(str(), expect);
+}
+
+TEST_F(IR_ValueToLetTest, AccessToLetWithNestedFunctionParams) {
+    auto* f = b.Function("f", ty.i32());
+    b.Append(f->Block(), [&] { b.Return(f, 0_i); });
+
+    auto* g = b.Function("g", ty.i32());
+    b.Append(g->Block(), [&] { b.Return(f, 0_i); });
+
+    auto* foo = b.Function("foo", ty.void_());
+    b.Append(foo->Block(), [&] {
+        auto* arr = b.Var("arr", ty.ptr<function, array<i32, 4>, read_write>());
+        auto* c = b.Call(ty.i32(), f);
+        auto* d = b.Add(ty.i32(), c, 1_i);
+        auto* access = b.Access(ty.ptr<function, i32, read_write>(), arr, d);
+        auto* p = b.Let("p", access);
+        auto* c2 = b.Call(ty.i32(), g);
+        b.Let("y", c2);
+        b.Let("x", b.Load(p));
+        b.Return(foo);
+    });
+
+    auto* src = R"(
+%f = func():i32 {
+  $B1: {
+    ret 0i
+  }
+}
+%g = func():i32 {
+  $B2: {
+    ret 0i
+  }
+}
+%foo = func():void {
+  $B3: {
+    %arr:ptr<function, array<i32, 4>, read_write> = var
+    %5:i32 = call %f
+    %6:i32 = add %5, 1i
+    %7:ptr<function, i32, read_write> = access %arr, %6
+    %p:ptr<function, i32, read_write> = let %7
+    %9:i32 = call %g
+    %y:i32 = let %9
+    %11:i32 = load %p
+    %x:i32 = let %11
+    ret
+  }
+}
+)";
+    EXPECT_EQ(str(), src);
+
+    auto* expect = R"(
+%f = func():i32 {
+  $B1: {
+    ret 0i
+  }
+}
+%g = func():i32 {
+  $B2: {
+    ret 0i
+  }
+}
+%foo = func():void {
+  $B3: {
+    %arr:ptr<function, array<i32, 4>, read_write> = var
+    %5:i32 = call %f
+    %6:i32 = add %5, 1i
+    %7:i32 = let %6
+    %8:ptr<function, i32, read_write> = access %arr, %7
+    %9:i32 = call %g
+    %y:i32 = let %9
+    %11:i32 = load %8
+    %x:i32 = let %11
+    ret
+  }
+}
+)";
+
+    ValueToLetConfig cfg{};
+    cfg.replace_pointer_lets = true;
+    Run(ValueToLet, cfg);
+    EXPECT_EQ(str(), expect);
+
+    Run(ValueToLet, cfg);  // running a second time should be no-op
     EXPECT_EQ(str(), expect);
 }
 
diff --git a/src/tint/lang/glsl/writer/access_test.cc b/src/tint/lang/glsl/writer/access_test.cc
index 4b8a85c..57317af 100644
--- a/src/tint/lang/glsl/writer/access_test.cc
+++ b/src/tint/lang/glsl/writer/access_test.cc
@@ -2128,5 +2128,84 @@
 )");
 }
 
+TEST_F(GlslWriterTest, AccessToLetWithFunctionParams) {
+    auto* f = b.Function("f", ty.i32());
+    b.Append(f->Block(), [&] { b.Return(f, 0_i); });
+
+    auto* g = b.Function("g", ty.i32());
+    b.Append(g->Block(), [&] { b.Return(f, 0_i); });
+
+    auto* foo = b.Function("foo", ty.void_());
+    b.Append(foo->Block(), [&] {
+        auto* arr = b.Var("arr", ty.ptr<function, array<i32, 4>, read_write>());
+        auto* c = b.Call(ty.i32(), f);
+        auto* access = b.Access(ty.ptr<function, i32, read_write>(), arr, c);
+        auto* p = b.Let("p", access);
+        auto* c2 = b.Call(ty.i32(), g);
+        b.Let("y", c2);
+        b.Let("x", b.Load(p));
+        b.Return(foo);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+int f() {
+  return 0;
+}
+int g() {
+  return 0;
+}
+void foo() {
+  int arr[4] = int[4](0, 0, 0, 0);
+  uint v = min(uint(f()), 3u);
+  int y = g();
+  int x = arr[v];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
+)");
+}
+
+TEST_F(GlslWriterTest, AccessToLetWithNestedFunctionParams) {
+    auto* f = b.Function("f", ty.i32());
+    b.Append(f->Block(), [&] { b.Return(f, 0_i); });
+
+    auto* g = b.Function("g", ty.i32());
+    b.Append(g->Block(), [&] { b.Return(f, 0_i); });
+
+    auto* foo = b.Function("foo", ty.void_());
+    b.Append(foo->Block(), [&] {
+        auto* arr = b.Var("arr", ty.ptr<function, array<i32, 4>, read_write>());
+        auto* c = b.Call(ty.i32(), f);
+        auto* d = b.Add(ty.i32(), c, 1_i);
+        auto* access = b.Access(ty.ptr<function, i32, read_write>(), arr, d);
+        auto* p = b.Let("p", access);
+        auto* c2 = b.Call(ty.i32(), g);
+        b.Let("y", c2);
+        b.Let("x", b.Load(p));
+        b.Return(foo);
+    });
+
+    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+int f() {
+  return 0;
+}
+int g() {
+  return 0;
+}
+void foo() {
+  int arr[4] = int[4](0, 0, 0, 0);
+  uint v = min(uint((f() + 1)), 3u);
+  int y = g();
+  int x = arr[v];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
+)");
+}
+
 }  // namespace
 }  // namespace tint::glsl::writer
diff --git a/src/tint/lang/glsl/writer/raise/raise.cc b/src/tint/lang/glsl/writer/raise/raise.cc
index e67e469..0959342 100644
--- a/src/tint/lang/glsl/writer/raise/raise.cc
+++ b/src/tint/lang/glsl/writer/raise/raise.cc
@@ -147,7 +147,12 @@
     // naming conflicts, and expressions that need to be explicitly not inlined.
     RUN_TRANSFORM(core::ir::transform::RemoveTerminatorArgs, module);
     RUN_TRANSFORM(core::ir::transform::RenameConflicts, module);
-    RUN_TRANSFORM(core::ir::transform::ValueToLet, module);
+
+    {
+        core::ir::transform::ValueToLetConfig cfg;
+        cfg.replace_pointer_lets = true;
+        RUN_TRANSFORM(core::ir::transform::ValueToLet, module, cfg);
+    }
 
     return Success;
 }
diff --git a/src/tint/lang/hlsl/writer/raise/raise.cc b/src/tint/lang/hlsl/writer/raise/raise.cc
index bd4ad8f..67054cc 100644
--- a/src/tint/lang/hlsl/writer/raise/raise.cc
+++ b/src/tint/lang/hlsl/writer/raise/raise.cc
@@ -194,7 +194,10 @@
     // naming conflicts, and expressions that need to be explicitly not inlined.
     RUN_TRANSFORM(core::ir::transform::RemoveTerminatorArgs, module);
     RUN_TRANSFORM(core::ir::transform::RenameConflicts, module);
-    RUN_TRANSFORM(core::ir::transform::ValueToLet, module);
+    {
+        core::ir::transform::ValueToLetConfig cfg;
+        RUN_TRANSFORM(core::ir::transform::ValueToLet, module, cfg);
+    }
 
     // Anything which runs after this needs to handle `Capabilities::kAllowModuleScopedLets`
     RUN_TRANSFORM(raise::PromoteInitializers, module);
diff --git a/src/tint/lang/msl/writer/raise/raise.cc b/src/tint/lang/msl/writer/raise/raise.cc
index 56d1f6e..a386b79 100644
--- a/src/tint/lang/msl/writer/raise/raise.cc
+++ b/src/tint/lang/msl/writer/raise/raise.cc
@@ -144,7 +144,10 @@
     // naming conflicts, and expressions that need to be explicitly not inlined.
     RUN_TRANSFORM(core::ir::transform::RemoveTerminatorArgs, module);
     RUN_TRANSFORM(core::ir::transform::RenameConflicts, module);
-    RUN_TRANSFORM(core::ir::transform::ValueToLet, module);
+    {
+        core::ir::transform::ValueToLetConfig cfg;
+        RUN_TRANSFORM(core::ir::transform::ValueToLet, module, cfg);
+    }
 
     return raise_result;
 }
diff --git a/test/tint/access/ptr.wgsl.expected.ir.glsl b/test/tint/access/ptr.wgsl.expected.ir.glsl
index 1c00ea3..ea620aa 100644
--- a/test/tint/access/ptr.wgsl.expected.ir.glsl
+++ b/test/tint/access/ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,61 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  int a;
+  int b;
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  int tint_symbol_1;
+} v;
+shared int g1;
+int accept_value(int val) {
+  return val;
+}
+int accept_ptr_deref_call_func(inout int val) {
+  int v_1 = val;
+  return (v_1 + accept_value(val));
+}
+int accept_ptr_deref_pass_through(inout int val) {
+  int v_2 = val;
+  return (v_2 + accept_ptr_deref_call_func(val));
+}
+int accept_ptr_to_struct_and_access(inout S val) {
+  return (val.a + val.b);
+}
+int accept_ptr_to_struct_access_pass_ptr(inout S val) {
+  val.a = 2;
+  return val.a;
+}
+int tint_f32_to_i32(float value) {
+  return mix(2147483647, mix((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
+}
+int accept_ptr_vec_access_elements(inout vec3 v1) {
+  v1[0u] = cross(v1, v1)[0u];
+  return tint_f32_to_i32(v1.x);
+}
+int call_builtin_with_mod_scope_ptr() {
+  return atomicOr(g1, 0);
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    atomicExchange(g1, 0);
+  }
+  barrier();
+  int v1 = 0;
+  S v2 = S(0, 0);
+  vec3 v4 = vec3(0.0f);
+  int t1 = atomicOr(g1, 0);
+  int v_3 = accept_ptr_deref_pass_through(v1);
+  int v_4 = (v_3 + accept_ptr_to_struct_and_access(v2));
+  int v_5 = (v_4 + accept_ptr_to_struct_and_access(v2));
+  int v_6 = (v_5 + accept_ptr_vec_access_elements(v4));
+  int v_7 = (v_6 + accept_ptr_to_struct_access_pass_ptr(v2));
+  v.tint_symbol_1 = ((v_7 + call_builtin_with_mod_scope_ptr()) + t1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/array/assign_to_subexpr.wgsl.expected.ir.glsl b/test/tint/array/assign_to_subexpr.wgsl.expected.ir.glsl
index 1c00ea3..94438dc 100644
--- a/test/tint/array/assign_to_subexpr.wgsl.expected.ir.glsl
+++ b/test/tint/array/assign_to_subexpr.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  int arr[4];
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  int tint_symbol_1;
+} v;
+int foo() {
+  int src[4] = int[4](0, 0, 0, 0);
+  int dst[4] = int[4](0, 0, 0, 0);
+  S dst_struct = S(int[4](0, 0, 0, 0));
+  int dst_array[2][4] = int[2][4](int[4](0, 0, 0, 0), int[4](0, 0, 0, 0));
+  dst_struct.arr = src;
+  dst_array[1] = src;
+  dst = src;
+  dst_struct.arr = src;
+  dst_array[0] = src;
+  return ((dst[0] + dst_struct.arr[0]) + dst_array[0][0]);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  v.tint_symbol_1 = foo();
+}
diff --git a/test/tint/benchmark/metaball-isosurface.wgsl.expected.ir.glsl b/test/tint/benchmark/metaball-isosurface.wgsl.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/benchmark/metaball-isosurface.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..3149323 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat2x4 tint_symbol[4];
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_3_1_ssbo {
+  float tint_symbol_2;
+} v_1;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_2 = i();
+  int v_3 = i();
+  mat2x4 l_a[4] = v.tint_symbol;
+  mat2x4 l_a_i = v.tint_symbol[v_2];
+  vec4 l_a_i_i = v.tint_symbol[v_2][v_3];
+  v_1.tint_symbol_2 = (((v.tint_symbol[v_2][v_3].x + l_a[0][0][0u]) + l_a_i[0][0u]) + l_a_i_i[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..331349c 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat2x4 tint_symbol[4];
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_3_1_ssbo {
+  float tint_symbol_2;
+} v_1;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 l_a[4] = v.tint_symbol;
+  mat2x4 l_a_i = v.tint_symbol[2];
+  vec4 l_a_i_i = v.tint_symbol[2][1];
+  v_1.tint_symbol_2 = (((v.tint_symbol[2][1].x + l_a[0][0][0u]) + l_a_i[0][0u]) + l_a_i_i[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..fac3108 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat3x4 tint_symbol[4];
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_3_1_ssbo {
+  float tint_symbol_2;
+} v_1;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_2 = i();
+  int v_3 = i();
+  mat3x4 l_a[4] = v.tint_symbol;
+  mat3x4 l_a_i = v.tint_symbol[v_2];
+  vec4 l_a_i_i = v.tint_symbol[v_2][v_3];
+  v_1.tint_symbol_2 = (((v.tint_symbol[v_2][v_3].x + l_a[0][0][0u]) + l_a_i[0][0u]) + l_a_i_i[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..d94ffb7 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat3x4 tint_symbol[4];
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_3_1_ssbo {
+  float tint_symbol_2;
+} v_1;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3x4 l_a[4] = v.tint_symbol;
+  mat3x4 l_a_i = v.tint_symbol[2];
+  vec4 l_a_i_i = v.tint_symbol[2][1];
+  v_1.tint_symbol_2 = (((v.tint_symbol[2][1].x + l_a[0][0][0u]) + l_a_i[0][0u]) + l_a_i_i[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..7864ba5 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat4 tint_symbol[4];
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_3_1_ssbo {
+  float tint_symbol_2;
+} v_1;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_2 = i();
+  int v_3 = i();
+  mat4 l_a[4] = v.tint_symbol;
+  mat4 l_a_i = v.tint_symbol[v_2];
+  vec4 l_a_i_i = v.tint_symbol[v_2][v_3];
+  v_1.tint_symbol_2 = (((v.tint_symbol[v_2][v_3].x + l_a[0][0][0u]) + l_a_i[0][0u]) + l_a_i_i[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..1c85910 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat4 tint_symbol[4];
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_3_1_ssbo {
+  float tint_symbol_2;
+} v_1;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4 l_a[4] = v.tint_symbol;
+  mat4 l_a_i = v.tint_symbol[2];
+  vec4 l_a_i_i = v.tint_symbol[2][1];
+  v_1.tint_symbol_2 = (((v.tint_symbol[2][1].x + l_a[0][0][0u]) + l_a_i[0][0u]) + l_a_i_i[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..3bae035 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,100 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec2 m_col0;
+  f16vec2 m_col1;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat2 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat2(tint_input.m_col0, tint_input.m_col1));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat2 v_6 = f16mat2(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1);
+  f16vec2 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat2 l_a_i_a_i_m = v_6;
+  f16vec2 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..57cac49 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,99 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  vec2 m_col0;
+  vec2 m_col1;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  mat2 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(mat2(tint_input.m_col0, tint_input.m_col1));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  mat2 v_6 = mat2(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1);
+  vec2 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))), Inner(mat2(vec2(0.0f), vec2(0.0f))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  mat2 l_a_i_a_i_m = v_6;
+  vec2 l_a_i_a_i_m_i = v_7;
+  float l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..3df3a90 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,100 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec3 m_col0;
+  f16vec3 m_col1;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat2x3 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat2x3(tint_input.m_col0, tint_input.m_col1));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat2x3 v_6 = f16mat2x3(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1);
+  f16vec3 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat2x3 l_a_i_a_i_m = v_6;
+  f16vec3 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..d0c8d69 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,99 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  vec3 m_col0;
+  vec3 m_col1;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  mat2x3 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(mat2x3(tint_input.m_col0, tint_input.m_col1));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  mat2x3 v_6 = mat2x3(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1);
+  vec3 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))), Inner(mat2x3(vec3(0.0f), vec3(0.0f))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  mat2x3 l_a_i_a_i_m = v_6;
+  vec3 l_a_i_a_i_m_i = v_7;
+  float l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..d63edb1 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,100 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec4 m_col0;
+  f16vec4 m_col1;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat2x4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat2x4(tint_input.m_col0, tint_input.m_col1));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat2x4 v_6 = f16mat2x4(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1);
+  f16vec4 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat2x4 l_a_i_a_i_m = v_6;
+  f16vec4 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..6f4ffdc 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,33 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner {
+  mat2x4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  Outer tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_1 = i();
+  int v_2 = i();
+  int v_3 = i();
+  Outer l_a[4] = v.tint_symbol;
+  Outer l_a_i = v.tint_symbol[v_1];
+  Inner l_a_i_a[4] = v.tint_symbol[v_1].a;
+  Inner l_a_i_a_i = v.tint_symbol[v_1].a[v_2];
+  mat2x4 l_a_i_a_i_m = v.tint_symbol[v_1].a[v_2].m;
+  vec4 l_a_i_a_i_m_i = v.tint_symbol[v_1].a[v_2].m[v_3];
+  float l_a_i_a_i_m_i_i = v.tint_symbol[v_1].a[v_2].m[v_3][i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..2549b04 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner {
+  mat2x4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  Outer tint_symbol[4];
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  Outer l_a[4] = v.tint_symbol;
+  Outer l_a_3 = v.tint_symbol[3];
+  Inner l_a_3_a[4] = v.tint_symbol[3].a;
+  Inner l_a_3_a_2 = v.tint_symbol[3].a[2];
+  mat2x4 l_a_3_a_2_m = v.tint_symbol[3].a[2].m;
+  vec4 l_a_3_a_2_m_1 = v.tint_symbol[3].a[2].m[1];
+  float l_a_3_a_2_m_1_0 = v.tint_symbol[3].a[2].m[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..58dd34e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,101 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec2 m_col0;
+  f16vec2 m_col1;
+  f16vec2 m_col2;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat3x2 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat3x2(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat3x2 v_6 = f16mat3x2(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2);
+  f16vec2 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat3x2 l_a_i_a_i_m = v_6;
+  f16vec2 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..411ecb1 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,100 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  vec2 m_col0;
+  vec2 m_col1;
+  vec2 m_col2;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  mat3x2 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(mat3x2(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  mat3x2 v_6 = mat3x2(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2);
+  vec2 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  mat3x2 l_a_i_a_i_m = v_6;
+  vec2 l_a_i_a_i_m_i = v_7;
+  float l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..4d865b2 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,101 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec3 m_col0;
+  f16vec3 m_col1;
+  f16vec3 m_col2;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat3 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat3(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat3 v_6 = f16mat3(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2);
+  f16vec3 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat3 l_a_i_a_i_m = v_6;
+  f16vec3 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..b928e8f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,100 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  vec3 m_col0;
+  vec3 m_col1;
+  vec3 m_col2;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  mat3 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(mat3(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  mat3 v_6 = mat3(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2);
+  vec3 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  mat3 l_a_i_a_i_m = v_6;
+  vec3 l_a_i_a_i_m_i = v_7;
+  float l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..36ce5be 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,101 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec4 m_col0;
+  f16vec4 m_col1;
+  f16vec4 m_col2;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat3x4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat3x4(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat3x4 v_6 = f16mat3x4(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2);
+  f16vec4 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat3x4 l_a_i_a_i_m = v_6;
+  f16vec4 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..088a3ab 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,33 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner {
+  mat3x4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  Outer tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_1 = i();
+  int v_2 = i();
+  int v_3 = i();
+  Outer l_a[4] = v.tint_symbol;
+  Outer l_a_i = v.tint_symbol[v_1];
+  Inner l_a_i_a[4] = v.tint_symbol[v_1].a;
+  Inner l_a_i_a_i = v.tint_symbol[v_1].a[v_2];
+  mat3x4 l_a_i_a_i_m = v.tint_symbol[v_1].a[v_2].m;
+  vec4 l_a_i_a_i_m_i = v.tint_symbol[v_1].a[v_2].m[v_3];
+  float l_a_i_a_i_m_i_i = v.tint_symbol[v_1].a[v_2].m[v_3][i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..aa8cbee 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner {
+  mat3x4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  Outer tint_symbol[4];
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  Outer l_a[4] = v.tint_symbol;
+  Outer l_a_3 = v.tint_symbol[3];
+  Inner l_a_3_a[4] = v.tint_symbol[3].a;
+  Inner l_a_3_a_2 = v.tint_symbol[3].a[2];
+  mat3x4 l_a_3_a_2_m = v.tint_symbol[3].a[2].m;
+  vec4 l_a_3_a_2_m_1 = v.tint_symbol[3].a[2].m[1];
+  float l_a_3_a_2_m_1_0 = v.tint_symbol[3].a[2].m[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..d512e54 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,102 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec2 m_col0;
+  f16vec2 m_col1;
+  f16vec2 m_col2;
+  f16vec2 m_col3;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat4x2 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat4x2(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat4x2 v_6 = f16mat4x2(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2, v.tint_symbol[v_4].a[v_5].m_col3);
+  f16vec2 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))))), Outer(Inner[4](Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))), Inner(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat4x2 l_a_i_a_i_m = v_6;
+  f16vec2 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..21ff1b7 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,101 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  vec2 m_col0;
+  vec2 m_col1;
+  vec2 m_col2;
+  vec2 m_col3;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  mat4x2 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(mat4x2(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  mat4x2 v_6 = mat4x2(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2, v.tint_symbol[v_4].a[v_5].m_col3);
+  vec2 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))))), Outer(Inner[4](Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))), Inner(mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  mat4x2 l_a_i_a_i_m = v_6;
+  vec2 l_a_i_a_i_m_i = v_7;
+  float l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..6c6bcd7 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,102 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec3 m_col0;
+  f16vec3 m_col1;
+  f16vec3 m_col2;
+  f16vec3 m_col3;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat4x3 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat4x3(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat4x3 v_6 = f16mat4x3(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2, v.tint_symbol[v_4].a[v_5].m_col3);
+  f16vec3 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))))), Outer(Inner[4](Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))), Inner(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat4x3 l_a_i_a_i_m = v_6;
+  f16vec3 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..54e7659 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,101 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  vec3 m_col0;
+  vec3 m_col1;
+  vec3 m_col2;
+  vec3 m_col3;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  mat4x3 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(mat4x3(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  mat4x3 v_6 = mat4x3(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2, v.tint_symbol[v_4].a[v_5].m_col3);
+  vec3 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))))), Outer(Inner[4](Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))), Inner(mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  mat4x3 l_a_i_a_i_m = v_6;
+  vec3 l_a_i_a_i_m_i = v_7;
+  float l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..0f8c8c9 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,102 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner_std140 {
+  f16vec4 m_col0;
+  f16vec4 m_col1;
+  f16vec4 m_col2;
+  f16vec4 m_col3;
+};
+
+struct Outer_std140 {
+  Inner_std140 a[4];
+};
+
+struct Inner {
+  f16mat4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  Outer_std140 tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+Inner tint_convert_Inner(Inner_std140 tint_input) {
+  return Inner(f16mat4(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3));
+}
+Outer tint_convert_Outer(Outer_std140 tint_input) {
+  Inner v_1[4] = Inner[4](Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))));
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      v_1[v_3] = tint_convert_Inner(tint_input.a[v_3]);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  return Outer(v_1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_4 = i();
+  int v_5 = i();
+  f16mat4 v_6 = f16mat4(v.tint_symbol[v_4].a[v_5].m_col0, v.tint_symbol[v_4].a[v_5].m_col1, v.tint_symbol[v_4].a[v_5].m_col2, v.tint_symbol[v_4].a[v_5].m_col3);
+  f16vec4 v_7 = v_6[i()];
+  Outer_std140 v_8[4] = v.tint_symbol;
+  Outer v_9[4] = Outer[4](Outer(Inner[4](Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))))), Outer(Inner[4](Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))))));
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 4u)) {
+        break;
+      }
+      v_9[v_11] = tint_convert_Outer(v_8[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+  Outer l_a[4] = v_9;
+  Outer l_a_i = tint_convert_Outer(v.tint_symbol[v_4]);
+  Inner_std140 v_12[4] = v.tint_symbol[v_4].a;
+  Inner v_13[4] = Inner[4](Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))), Inner(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf))));
+  {
+    uint v_14 = 0u;
+    v_14 = 0u;
+    while(true) {
+      uint v_15 = v_14;
+      if ((v_15 >= 4u)) {
+        break;
+      }
+      v_13[v_15] = tint_convert_Inner(v_12[v_15]);
+      {
+        v_14 = (v_15 + 1u);
+      }
+      continue;
+    }
+  }
+  Inner l_a_i_a[4] = v_13;
+  Inner l_a_i_a_i = tint_convert_Inner(v.tint_symbol[v_4].a[v_5]);
+  f16mat4 l_a_i_a_i_m = v_6;
+  f16vec4 l_a_i_a_i_m_i = v_7;
+  float16_t l_a_i_a_i_m_i_i = v_7[i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..d1ac0d2 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,33 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner {
+  mat4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  Outer tint_symbol[4];
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_1 = i();
+  int v_2 = i();
+  int v_3 = i();
+  Outer l_a[4] = v.tint_symbol;
+  Outer l_a_i = v.tint_symbol[v_1];
+  Inner l_a_i_a[4] = v.tint_symbol[v_1].a;
+  Inner l_a_i_a_i = v.tint_symbol[v_1].a[v_2];
+  mat4 l_a_i_a_i_m = v.tint_symbol[v_1].a[v_2].m;
+  vec4 l_a_i_a_i_m_i = v.tint_symbol[v_1].a[v_2].m[v_3];
+  float l_a_i_a_i_m_i_i = v.tint_symbol[v_1].a[v_2].m[v_3][i()];
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..da2345f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Inner {
+  mat4 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  Outer tint_symbol[4];
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  Outer l_a[4] = v.tint_symbol;
+  Outer l_a_3 = v.tint_symbol[3];
+  Inner l_a_3_a[4] = v.tint_symbol[3].a;
+  Inner l_a_3_a_2 = v.tint_symbol[3].a[2];
+  mat4 l_a_3_a_2_m = v.tint_symbol[3].a[2].m;
+  vec4 l_a_3_a_2_m_1 = v.tint_symbol[3].a[2].m[1];
+  float l_a_3_a_2_m_1_0 = v.tint_symbol[3].a[2].m[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..6ab9a22 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat2x4 tint_symbol;
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_1 = i();
+  mat2x4 l_m = v.tint_symbol;
+  vec4 l_m_i = v.tint_symbol[v_1];
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..920b661 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat2x4 tint_symbol;
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 l_m = v.tint_symbol;
+  vec4 l_m_1 = v.tint_symbol[1];
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..6a2cd31 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat3x4 tint_symbol;
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_1 = i();
+  mat3x4 l_m = v.tint_symbol;
+  vec4 l_m_i = v.tint_symbol[v_1];
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..95025bd 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat3x4 tint_symbol;
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3x4 l_m = v.tint_symbol;
+  vec4 l_m_1 = v.tint_symbol[1];
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..cf2a24d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat4 tint_symbol;
+} v;
+int counter = 0;
+int i() {
+  counter = (counter + 1);
+  return counter;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int v_1 = i();
+  mat4 l_m = v.tint_symbol;
+  vec4 l_m_i = v.tint_symbol[v_1];
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
index 1c00ea3..50a51aa 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat4 tint_symbol;
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4 l_m = v.tint_symbol;
+  vec4 l_m_1 = v.tint_symbol[1];
+}
diff --git a/test/tint/bug/chromium/1273230.wgsl.expected.ir.glsl b/test/tint/bug/chromium/1273230.wgsl.expected.ir.glsl
index 07b193a..5faa1a2 100644
--- a/test/tint/bug/chromium/1273230.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/1273230.wgsl.expected.ir.glsl
@@ -88,16 +88,20 @@
     return;
   }
   doIgnore();
-  uint i0 = indices.values[((3u * triangleIndex) + 0u)];
-  uint i1 = indices.values[((3u * i0) + 1u)];
-  uint i2 = indices.values[((3u * i0) + 2u)];
+  uint v_5 = ((3u * triangleIndex) + 0u);
+  uint i0 = indices.values[v_5];
+  uint v_6 = ((3u * i0) + 1u);
+  uint i1 = indices.values[v_6];
+  uint v_7 = ((3u * i0) + 2u);
+  uint i2 = indices.values[v_7];
   vec3 p0 = loadPosition(i0);
   vec3 p1 = loadPosition(i0);
   vec3 p2 = loadPosition(i2);
   vec3 center = (((p0 + p2) + p1) / 3.0f);
   vec3 voxelPos = toVoxelPos(p1);
   uint lIndex = toIndex1D(v.tint_symbol.gridSize, p0);
-  int triangleOffset = atomicAdd(LUT.values[i1], 1);
+  uint v_8 = i1;
+  int triangleOffset = atomicAdd(LUT.values[v_8], 1);
 }
 layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
 void main() {
diff --git a/test/tint/bug/chromium/1360925.wgsl.expected.ir.glsl b/test/tint/bug/chromium/1360925.wgsl.expected.ir.glsl
index 1c00ea3..e085c70 100644
--- a/test/tint/bug/chromium/1360925.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/1360925.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  int tint_symbol[];
+} v;
+void n() {
+  uint v_1 = uint(v.tint_symbol.length());
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/chromium/1433499.wgsl.expected.ir.glsl b/test/tint/bug/chromium/1433499.wgsl.expected.ir.glsl
index 1c00ea3..22331ae 100644
--- a/test/tint/bug/chromium/1433499.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/1433499.wgsl.expected.ir.glsl
@@ -1,11 +1,7 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+void f(inout float p) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/chromium/1434271.wgsl.expected.ir.glsl b/test/tint/bug/chromium/1434271.wgsl.expected.ir.glsl
index 2f6e16c..e3d0c75 100644
--- a/test/tint/bug/chromium/1434271.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/1434271.wgsl.expected.ir.glsl
@@ -158,12 +158,14 @@
     uint src_offset = ((coord[0u] - 2u) + ((coord[1u] >> (2u & 31u)) * v.tint_symbol.width));
     float a = buf_in.weights[(src_offset << (0u & 31u))];
     float b = buf_in.weights[(src_offset + 1u)];
-    float c = buf_in.weights[((src_offset + 1u) + v.tint_symbol.width)];
-    float d = buf_in.weights[((src_offset + 1u) + v.tint_symbol.width)];
+    uint v_1 = ((src_offset + 1u) + v.tint_symbol.width);
+    float c = buf_in.weights[v_1];
+    uint v_2 = ((src_offset + 1u) + v.tint_symbol.width);
+    float d = buf_in.weights[v_2];
     float sum = dot(vec4(a, b, c, d), vec4(1.0f));
     buf_out.weights[dst_offset] = tint_float_modulo(sum, 4.0f);
-    vec4 v_1 = vec4(a, (a * b), ((a / b) + c), sum);
-    vec4 probabilities = (v_1 + max(sum, 0.0f));
+    vec4 v_3 = vec4(a, (a * b), ((a / b) + c), sum);
+    vec4 probabilities = (v_3 + max(sum, 0.0f));
     imageStore(tex_out, ivec2(coord.xy), probabilities);
   }
 }
diff --git a/test/tint/bug/chromium/344265982.wgsl.expected.ir.glsl b/test/tint/bug/chromium/344265982.wgsl.expected.ir.glsl
index ea7d6f4..96aeb24 100644
--- a/test/tint/bug/chromium/344265982.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/344265982.wgsl.expected.ir.glsl
@@ -14,8 +14,9 @@
       } else {
         break;
       }
+      int v_1 = i;
       bool tint_continue = false;
-      switch(v.tint_symbol_2[i]) {
+      switch(v.tint_symbol_2[v_1]) {
         case 1:
         {
           tint_continue = true;
@@ -23,7 +24,8 @@
         }
         default:
         {
-          v.tint_symbol_2[i] = 2;
+          int v_2 = i;
+          v.tint_symbol_2[v_2] = 2;
           break;
         }
       }
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 a4459fd..fed460e 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
@@ -24,5 +24,6 @@
 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));
-  v_1.tint_symbol_3.tint_symbol = s.data[v.tint_symbol_1.dynamic_idx];
+  int v_2 = v.tint_symbol_1.dynamic_idx;
+  v_1.tint_symbol_3.tint_symbol = s.data[v_2];
 }
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 e2eb79e..9fcf203 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
@@ -24,5 +24,6 @@
 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() {
-  v_1.tint_symbol_3.tint_symbol = s.data[v.tint_symbol_1.dynamic_idx];
+  int v_2 = v.tint_symbol_1.dynamic_idx;
+  v_1.tint_symbol_3.tint_symbol = s.data[v_2];
 }
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 8e136c4..d1b88dc 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
@@ -27,5 +27,6 @@
 } v_2;
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
-  v_1.tint_symbol_3.tint_symbol = v_2.tint_symbol_5.data[v.tint_symbol_1.dynamic_idx];
+  int v_3 = v.tint_symbol_1.dynamic_idx;
+  v_1.tint_symbol_3.tint_symbol = v_2.tint_symbol_5.data[v_3];
 }
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.glsl
index c18a5f2..b8dcafa 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.glsl
@@ -20,5 +20,6 @@
 } v_1;
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
-  v_1.tint_symbol_3.tint_symbol = v.tint_symbol_1.data[v.tint_symbol_1.dynamic_idx].x;
+  int v_2 = v.tint_symbol_1.dynamic_idx;
+  v_1.tint_symbol_3.tint_symbol = v.tint_symbol_1.data[v_2].x;
 }
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.glsl
index 81ea061..3e0ba17 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.glsl
@@ -39,7 +39,8 @@
     }
   }
   barrier();
-  v_1.tint_symbol_3.tint_symbol = s.data[v.tint_symbol_1.dynamic_idx];
+  int v_4 = v.tint_symbol_1.dynamic_idx;
+  v_1.tint_symbol_3.tint_symbol = s.data[v_4];
 }
 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/write/function.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.glsl
index 297f08f..d3fdd0c 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
@@ -24,6 +24,7 @@
 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[v.tint_symbol_1.dynamic_idx] = 1;
+  int v_2 = v.tint_symbol_1.dynamic_idx;
+  s.data[v_2] = 1;
   v_1.tint_symbol_3.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 a96b7b8..d2ce9bc 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
@@ -22,7 +22,8 @@
   Result tint_symbol_3;
 } v_1;
 void x(inout S p) {
-  p.data[v.tint_symbol_1.dynamic_idx] = 1;
+  int v_2 = v.tint_symbol_1.dynamic_idx;
+  p.data[v_2] = 1;
 }
 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/write/private.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.glsl
index 0dc224b..a0e97aa 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
@@ -24,6 +24,7 @@
 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[v.tint_symbol_1.dynamic_idx] = 1;
+  int v_2 = v.tint_symbol_1.dynamic_idx;
+  s.data[v_2] = 1;
   v_1.tint_symbol_3.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 07f68fd..30ce345 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
@@ -23,7 +23,8 @@
 } v_1;
 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[v.tint_symbol_1.dynamic_idx] = 1;
+  int v_2 = v.tint_symbol_1.dynamic_idx;
+  p.data[v_2] = 1;
 }
 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/write/storage.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.glsl
index 4fb6837..48d0f32 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
@@ -27,6 +27,7 @@
 } v_2;
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
-  v_2.tint_symbol_5.data[v.tint_symbol_1.dynamic_idx] = 1;
+  int v_3 = v.tint_symbol_1.dynamic_idx;
+  v_2.tint_symbol_5.data[v_3] = 1;
   v_1.tint_symbol_3.tint_symbol = v_2.tint_symbol_5.data[3];
 }
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.glsl
index 5fbb5bd..a77da0b 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.glsl
@@ -39,7 +39,8 @@
     }
   }
   barrier();
-  s.data[v.tint_symbol_1.dynamic_idx] = 1;
+  int v_4 = v.tint_symbol_1.dynamic_idx;
+  s.data[v_4] = 1;
   v_1.tint_symbol_3.tint_symbol = s.data[3];
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.ir.glsl b/test/tint/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.ir.glsl
index 9725201..af91ca8 100644
--- a/test/tint/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.ir.glsl
@@ -23,5 +23,7 @@
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   Particle particle = particles.p[0];
-  particle.position[v.tint_symbol_1.i] = particle.position[v.tint_symbol_1.i];
+  uint v_1 = v.tint_symbol_1.i;
+  uint v_2 = v.tint_symbol_1.i;
+  particle.position[v_1] = particle.position[v_2];
 }
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.glsl
index 7a92a22..3bc8536 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.glsl
@@ -13,5 +13,6 @@
 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[v.tint_symbol_1.i][0] = 1.0f;
+  uint v_1 = v.tint_symbol_1.i;
+  m1[v_1][0] = 1.0f;
 }
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.glsl
index 93b0645..75325c9 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.glsl
@@ -13,5 +13,6 @@
 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[v.tint_symbol_1.i][v.tint_symbol_1.j] = 1.0f;
+  uint v_1 = v.tint_symbol_1.i;
+  m1[v_1][v.tint_symbol_1.j] = 1.0f;
 }
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 6677b90..13f8ed6 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
@@ -13,5 +13,6 @@
 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[v.tint_symbol_1.i] = vec4(1.0f);
+  uint v_1 = v.tint_symbol_1.i;
+  m1[v_1] = vec4(1.0f);
 }
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.glsl
index 2ca13df..6d53917 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.glsl
@@ -13,5 +13,6 @@
 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[v.tint_symbol_1.i][0] = 1.0f;
+  uint v_1 = v.tint_symbol_1.i;
+  m1[v_1][0] = 1.0f;
 }
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.glsl
index 66764c8..c16d4de 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.glsl
@@ -13,5 +13,6 @@
 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[v.tint_symbol_1.i][v.tint_symbol_1.j] = 1.0f;
+  uint v_1 = v.tint_symbol_1.i;
+  m1[v_1][v.tint_symbol_1.j] = 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 8f24397..c2f3787 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
@@ -13,5 +13,6 @@
 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[v.tint_symbol_1.i] = vec4(1.0f);
+  uint v_1 = v.tint_symbol_1.i;
+  m1[v_1] = vec4(1.0f);
 }
diff --git a/test/tint/bug/tint/1113.wgsl.expected.ir.glsl b/test/tint/bug/tint/1113.wgsl.expected.ir.glsl
index 7cb94f4..5569d3a 100644
--- a/test/tint/bug/tint/1113.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1113.wgsl.expected.ir.glsl
@@ -88,16 +88,20 @@
     return;
   }
   doIgnore();
-  uint i0 = indices.values[((3u * triangleIndex) + 0u)];
-  uint i1 = indices.values[((3u * triangleIndex) + 1u)];
-  uint i2 = indices.values[((3u * triangleIndex) + 2u)];
+  uint v_5 = ((3u * triangleIndex) + 0u);
+  uint i0 = indices.values[v_5];
+  uint v_6 = ((3u * triangleIndex) + 1u);
+  uint i1 = indices.values[v_6];
+  uint v_7 = ((3u * triangleIndex) + 2u);
+  uint i2 = indices.values[v_7];
   vec3 p0 = loadPosition(i0);
   vec3 p1 = loadPosition(i1);
   vec3 p2 = loadPosition(i2);
   vec3 center = (((p0 + p1) + p2) / 3.0f);
   vec3 voxelPos = toVoxelPos(center);
   uint voxelIndex = toIndex1D(v.tint_symbol.gridSize, voxelPos);
-  uint acefg = atomicAdd(counters.values[voxelIndex], 1u);
+  uint v_8 = voxelIndex;
+  uint acefg = atomicAdd(counters.values[v_8], 1u);
   if ((triangleIndex == 0u)) {
     v_1.tint_symbol_2.value0 = v.tint_symbol.gridSize;
     v_1.tint_symbol_2.value_f32_0 = center.x;
@@ -175,12 +179,14 @@
   if ((voxelIndex >= maxVoxels)) {
     return;
   }
-  uint numTriangles = atomicOr(counters.values[voxelIndex], 0u);
+  uint v_2 = voxelIndex;
+  uint numTriangles = atomicOr(counters.values[v_2], 0u);
   int offset = -1;
   if ((numTriangles > 0u)) {
     offset = int(atomicAdd(v_1.tint_symbol_2.offsetCounter, numTriangles));
   }
-  atomicExchange(LUT.values[voxelIndex], offset);
+  uint v_3 = voxelIndex;
+  atomicExchange(LUT.values[v_3], offset);
 }
 layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
 void main() {
@@ -276,16 +282,20 @@
   if ((triangleIndex >= v.tint_symbol.numTriangles)) {
     return;
   }
-  uint i0 = indices.values[((3u * triangleIndex) + 0u)];
-  uint i1 = indices.values[((3u * triangleIndex) + 1u)];
-  uint i2 = indices.values[((3u * triangleIndex) + 2u)];
+  uint v_5 = ((3u * triangleIndex) + 0u);
+  uint i0 = indices.values[v_5];
+  uint v_6 = ((3u * triangleIndex) + 1u);
+  uint i1 = indices.values[v_6];
+  uint v_7 = ((3u * triangleIndex) + 2u);
+  uint i2 = indices.values[v_7];
   vec3 p0 = loadPosition(i0);
   vec3 p1 = loadPosition(i1);
   vec3 p2 = loadPosition(i2);
   vec3 center = (((p0 + p1) + p2) / 3.0f);
   vec3 voxelPos = toVoxelPos(center);
   uint voxelIndex = toIndex1D(v.tint_symbol.gridSize, voxelPos);
-  int triangleOffset = atomicAdd(LUT.values[voxelIndex], 1);
+  uint v_8 = voxelIndex;
+  int triangleOffset = atomicAdd(LUT.values[v_8], 1);
 }
 layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
 void main() {
diff --git a/test/tint/bug/tint/1121.wgsl.expected.ir.glsl b/test/tint/bug/tint/1121.wgsl.expected.ir.glsl
index 1c00ea3..7dc71b5 100644
--- a/test/tint/bug/tint/1121.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1121.wgsl.expected.ir.glsl
@@ -1,11 +1,192 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct LightData {
+  vec4 position;
+  vec3 color;
+  float radius;
+};
+
+struct TileLightIdData {
+  uint count;
+  uint lightId[64];
+};
+
+struct Tiles {
+  TileLightIdData data[4];
+};
+
+struct Config {
+  uint numLights;
+  uint numTiles;
+  uint tileCountX;
+  uint tileCountY;
+  uint numTileLightSlot;
+  uint tileSize;
+};
+
+struct Uniforms {
+  vec4 tint_symbol;
+  vec4 tint_symbol_1;
+  mat4 viewMatrix;
+  mat4 projectionMatrix;
+  vec4 fullScreenSize;
+};
+
+layout(binding = 0, std430)
+buffer LightsBuffer_1_ssbo {
+  LightData lights[];
+} lightsBuffer;
+layout(binding = 0, std430)
+buffer tint_symbol_4_1_ssbo {
+  Tiles tint_symbol_3;
+} v;
+layout(binding = 0, std140)
+uniform tint_symbol_6_1_ubo {
+  Config tint_symbol_5;
+} v_1;
+layout(binding = 0, std140)
+uniform tint_symbol_8_1_ubo {
+  Uniforms tint_symbol_7;
+} v_2;
+void tint_symbol_2_inner(uvec3 GlobalInvocationID) {
+  uint index = GlobalInvocationID[0u];
+  if ((index >= v_1.tint_symbol_5.numLights)) {
+    return;
+  }
+  uint v_3 = index;
+  uint v_4 = index;
+  float v_5 = (lightsBuffer.lights[v_4].position.y - 0.10000000149011611938f);
+  float v_6 = float(index);
+  lightsBuffer.lights[v_3].position[1u] = (v_5 + (0.00100000004749745131f * (v_6 - (64.0f * floor((float(index) / 64.0f))))));
+  uint v_7 = index;
+  if ((lightsBuffer.lights[v_7].position.y < v_2.tint_symbol_7.tint_symbol.y)) {
+    uint v_8 = index;
+    lightsBuffer.lights[v_8].position[1u] = v_2.tint_symbol_7.tint_symbol_1.y;
+  }
+  mat4 M = v_2.tint_symbol_7.projectionMatrix;
+  float viewNear = (-(M[3].z) / (-1.0f + M[2].z));
+  float viewFar = (-(M[3].z) / (1.0f + M[2].z));
+  uint v_9 = index;
+  vec4 lightPos = lightsBuffer.lights[v_9].position;
+  lightPos = (v_2.tint_symbol_7.viewMatrix * lightPos);
+  lightPos = (lightPos / lightPos.w);
+  uint v_10 = index;
+  float lightRadius = lightsBuffer.lights[v_10].radius;
+  vec4 v_11 = lightPos;
+  vec4 boxMin = (v_11 - vec4(vec3(lightRadius), 0.0f));
+  vec4 v_12 = lightPos;
+  vec4 boxMax = (v_12 + vec4(vec3(lightRadius), 0.0f));
+  vec4 frustumPlanes[6] = vec4[6](vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
+  frustumPlanes[4] = vec4(0.0f, 0.0f, -1.0f, viewNear);
+  frustumPlanes[5] = vec4(0.0f, 0.0f, 1.0f, -(viewFar));
+  int TILE_SIZE = 16;
+  int TILE_COUNT_X = 2;
+  int TILE_COUNT_Y = 2;
+  {
+    int y = 0;
+    while(true) {
+      if ((y < TILE_COUNT_Y)) {
+      } else {
+        break;
+      }
+      {
+        int x = 0;
+        while(true) {
+          if ((x < TILE_COUNT_X)) {
+          } else {
+            break;
+          }
+          ivec2 tilePixel0Idx = ivec2((x * TILE_SIZE), (y * TILE_SIZE));
+          vec2 v_13 = (2.0f * vec2(tilePixel0Idx));
+          vec2 floorCoord = ((v_13 / v_2.tint_symbol_7.fullScreenSize.xy) - vec2(1.0f));
+          ivec2 v_14 = tilePixel0Idx;
+          vec2 v_15 = (2.0f * vec2((v_14 + ivec2(TILE_SIZE))));
+          vec2 ceilCoord = ((v_15 / v_2.tint_symbol_7.fullScreenSize.xy) - vec2(1.0f));
+          vec2 viewFloorCoord = vec2((((-(viewNear) * floorCoord.x) - (M[2].x * viewNear)) / M[0].x), (((-(viewNear) * floorCoord.y) - (M[2].y * viewNear)) / M[1].y));
+          vec2 viewCeilCoord = vec2((((-(viewNear) * ceilCoord.x) - (M[2].x * viewNear)) / M[0].x), (((-(viewNear) * ceilCoord.y) - (M[2].y * viewNear)) / M[1].y));
+          frustumPlanes[0] = vec4(1.0f, 0.0f, (-(viewFloorCoord.x) / viewNear), 0.0f);
+          frustumPlanes[1] = vec4(-1.0f, 0.0f, (viewCeilCoord.x / viewNear), 0.0f);
+          frustumPlanes[2] = vec4(0.0f, 1.0f, (-(viewFloorCoord.y) / viewNear), 0.0f);
+          frustumPlanes[3] = vec4(0.0f, -1.0f, (viewCeilCoord.y / viewNear), 0.0f);
+          float dp = 0.0f;
+          {
+            uint i = 0u;
+            while(true) {
+              if ((i < 6u)) {
+              } else {
+                break;
+              }
+              vec4 p = vec4(0.0f);
+              uint v_16 = i;
+              if ((frustumPlanes[v_16].x > 0.0f)) {
+                p[0u] = boxMax.x;
+              } else {
+                p[0u] = boxMin.x;
+              }
+              uint v_17 = i;
+              if ((frustumPlanes[v_17].y > 0.0f)) {
+                p[1u] = boxMax.y;
+              } else {
+                p[1u] = boxMin.y;
+              }
+              uint v_18 = i;
+              if ((frustumPlanes[v_18].z > 0.0f)) {
+                p[2u] = boxMax.z;
+              } else {
+                p[2u] = boxMin.z;
+              }
+              p[3u] = 1.0f;
+              float v_19 = dp;
+              vec4 v_20 = p;
+              uint v_21 = i;
+              dp = (v_19 + min(0.0f, dot(v_20, frustumPlanes[v_21])));
+              {
+                i = (i + 1u);
+              }
+              continue;
+            }
+          }
+          if ((dp >= 0.0f)) {
+            uint tileId = uint((x + (y * TILE_COUNT_X)));
+            bool v_22 = false;
+            if ((tileId < 0u)) {
+              v_22 = true;
+            } else {
+              v_22 = (tileId >= v_1.tint_symbol_5.numTiles);
+            }
+            if (v_22) {
+              {
+                x = (x + 1);
+              }
+              continue;
+            }
+            uint v_23 = tileId;
+            uint offset = atomicAdd(v.tint_symbol_3.data[v_23].count, 1u);
+            if ((offset >= v_1.tint_symbol_5.numTileLightSlot)) {
+              {
+                x = (x + 1);
+              }
+              continue;
+            }
+            uint v_24 = tileId;
+            uint v_25 = offset;
+            v.tint_symbol_3.data[v_24].lightId[v_25] = GlobalInvocationID[0u];
+          }
+          {
+            x = (x + 1);
+          }
+          continue;
+        }
+      }
+      {
+        y = (y + 1);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_2_inner(gl_GlobalInvocationID);
+}
diff --git a/test/tint/bug/tint/1321.wgsl.expected.ir.glsl b/test/tint/bug/tint/1321.wgsl.expected.ir.glsl
index 1c00ea3..5f3ce69 100644
--- a/test/tint/bug/tint/1321.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1321.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+int foo() {
+  return 1;
+}
+void main() {
+  float arr[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  {
+    int v = foo();
+    while(true) {
+      float x = arr[v];
+      break;
+    }
+  }
+}
diff --git a/test/tint/bug/tint/1725.wgsl.expected.ir.glsl b/test/tint/bug/tint/1725.wgsl.expected.ir.glsl
index dfabfdf..75807cd 100644
--- a/test/tint/bug/tint/1725.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1725.wgsl.expected.ir.glsl
@@ -8,7 +8,8 @@
   int tint_symbol_3 = 0;
   int tint_symbol_4 = 0;
   int tint_symbol_5 = 0;
-  uint tint_symbol_6 = v.tint_symbol_7[min(tint_symbol_2, (uint(v.tint_symbol_7.length()) - 1u))];
+  uint v_1 = min(tint_symbol_2, (uint(v.tint_symbol_7.length()) - 1u));
+  uint tint_symbol_6 = v.tint_symbol_7[v_1];
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
diff --git a/test/tint/bug/tint/1764.wgsl.expected.ir.glsl b/test/tint/bug/tint/1764.wgsl.expected.ir.glsl
index 1c00ea3..b36f465 100644
--- a/test/tint/bug/tint/1764.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1764.wgsl.expected.ir.glsl
@@ -1,11 +1,26 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+shared int W[246];
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v = 0u;
+    v = tint_local_index;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 246u)) {
+        break;
+      }
+      W[v_1] = 0;
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  W[0] = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/bug/tint/1875.wgsl.expected.ir.glsl b/test/tint/bug/tint/1875.wgsl.expected.ir.glsl
index 750373f..815363e 100644
--- a/test/tint/bug/tint/1875.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1875.wgsl.expected.ir.glsl
@@ -6,7 +6,8 @@
   uint data[];
 } outputs;
 void push_output(uint value) {
-  outputs.data[count] = value;
+  uint v = count;
+  outputs.data[v] = value;
   count = (count + 1u);
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/bug/tint/2059.wgsl.expected.ir.glsl b/test/tint/bug/tint/2059.wgsl.expected.ir.glsl
index 1c00ea3..ef0f0529 100644
--- a/test/tint/bug/tint/2059.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/2059.wgsl.expected.ir.glsl
@@ -1,11 +1,156 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  mat3 m;
+};
+
+struct S2 {
+  mat3 m[1];
+};
+
+struct S3 {
+  S s;
+};
+
+struct S4 {
+  S s[1];
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  mat3 tint_symbol_1;
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_4_1_ssbo {
+  S tint_symbol_3;
+} v_1;
+layout(binding = 2, std430)
+buffer tint_symbol_6_1_ssbo {
+  S2 tint_symbol_5;
+} v_2;
+layout(binding = 3, std430)
+buffer tint_symbol_8_1_ssbo {
+  S3 tint_symbol_7;
+} v_3;
+layout(binding = 4, std430)
+buffer tint_symbol_10_1_ssbo {
+  S4 tint_symbol_9;
+} v_4;
+layout(binding = 5, std430)
+buffer tint_symbol_12_1_ssbo {
+  mat3 tint_symbol_11[1];
+} v_5;
+layout(binding = 6, std430)
+buffer tint_symbol_14_1_ssbo {
+  S tint_symbol_13[1];
+} v_6;
+layout(binding = 7, std430)
+buffer tint_symbol_16_1_ssbo {
+  S2 tint_symbol_15[1];
+} v_7;
+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];
+}
+void tint_store_and_preserve_padding_3(inout mat3 target[1], mat3 value_param[1]) {
+  {
+    uint v_8 = 0u;
+    v_8 = 0u;
+    while(true) {
+      uint v_9 = v_8;
+      if ((v_9 >= 1u)) {
+        break;
+      }
+      tint_store_and_preserve_padding(target[v_9], value_param[v_9]);
+      {
+        v_8 = (v_9 + 1u);
+      }
+      continue;
+    }
+  }
+}
+void tint_store_and_preserve_padding_2(inout S2 target, S2 value_param) {
+  tint_store_and_preserve_padding_3(target.m, value_param.m);
+}
+void tint_store_and_preserve_padding_7(inout S2 target[1], S2 value_param[1]) {
+  {
+    uint v_10 = 0u;
+    v_10 = 0u;
+    while(true) {
+      uint v_11 = v_10;
+      if ((v_11 >= 1u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_2(target[v_11], value_param[v_11]);
+      {
+        v_10 = (v_11 + 1u);
+      }
+      continue;
+    }
+  }
+}
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  tint_store_and_preserve_padding(target.m, value_param.m);
+}
+void tint_store_and_preserve_padding_6(inout S target[1], S value_param[1]) {
+  {
+    uint v_12 = 0u;
+    v_12 = 0u;
+    while(true) {
+      uint v_13 = v_12;
+      if ((v_13 >= 1u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_13], value_param[v_13]);
+      {
+        v_12 = (v_13 + 1u);
+      }
+      continue;
+    }
+  }
+}
+void tint_store_and_preserve_padding_5(inout S4 target, S4 value_param) {
+  tint_store_and_preserve_padding_6(target.s, value_param.s);
+}
+void tint_store_and_preserve_padding_4(inout S3 target, S3 value_param) {
+  tint_store_and_preserve_padding_1(target.s, value_param.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));
+  {
+    uint c = 0u;
+    while(true) {
+      if ((c < 3u)) {
+      } else {
+        break;
+      }
+      uint v_14 = c;
+      float v_15 = float(((c * 3u) + 1u));
+      float v_16 = float(((c * 3u) + 2u));
+      m[v_14] = vec3(v_15, v_16, float(((c * 3u) + 3u)));
+      {
+        c = (c + 1u);
+      }
+      continue;
+    }
+  }
+  mat3 a = m;
+  tint_store_and_preserve_padding(v.tint_symbol_1, a);
+  S a_1 = S(m);
+  tint_store_and_preserve_padding_1(v_1.tint_symbol_3, a_1);
+  S2 a_2 = S2(mat3[1](m));
+  tint_store_and_preserve_padding_2(v_2.tint_symbol_5, a_2);
+  S3 a_3 = S3(S(m));
+  tint_store_and_preserve_padding_4(v_3.tint_symbol_7, a_3);
+  S4 a_4 = S4(S[1](S(m)));
+  tint_store_and_preserve_padding_5(v_4.tint_symbol_9, a_4);
+  mat3 a_5[1] = mat3[1](m);
+  tint_store_and_preserve_padding_3(v_5.tint_symbol_11, a_5);
+  S a_6[1] = S[1](S(m));
+  tint_store_and_preserve_padding_6(v_6.tint_symbol_13, a_6);
+  S2 a_7[1] = S2[1](S2(mat3[1](m)));
+  tint_store_and_preserve_padding_7(v_7.tint_symbol_15, a_7);
+}
diff --git a/test/tint/bug/tint/221.wgsl.expected.ir.glsl b/test/tint/bug/tint/221.wgsl.expected.ir.glsl
index 1c00ea3..4fc9334 100644
--- a/test/tint/bug/tint/221.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/221.wgsl.expected.ir.glsl
@@ -1,11 +1,41 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Buf {
+  uint count;
+  uint data[50];
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  Buf tint_symbol_1;
+} v;
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint v_1 = mix(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint i = 0u;
+  {
+    while(true) {
+      if ((i >= v.tint_symbol_1.count)) {
+        break;
+      }
+      uint v_2 = i;
+      if ((tint_mod_u32(i, 2u) == 0u)) {
+        {
+          v.tint_symbol_1.data[v_2] = (v.tint_symbol_1.data[v_2] * 2u);
+          i = (i + 1u);
+        }
+        continue;
+      }
+      v.tint_symbol_1.data[v_2] = 0u;
+      {
+        v.tint_symbol_1.data[v_2] = (v.tint_symbol_1.data[v_2] * 2u);
+        i = (i + 1u);
+      }
+      continue;
+    }
+  }
+}
diff --git a/test/tint/bug/tint/492.wgsl.expected.ir.glsl b/test/tint/bug/tint/492.wgsl.expected.ir.glsl
index 1c00ea3..3cd5a6a 100644
--- a/test/tint/bug/tint/492.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/492.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  int a;
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  S tint_symbol_1;
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  v.tint_symbol_1.a = 12;
+}
diff --git a/test/tint/bug/tint/534.wgsl.expected.ir.glsl b/test/tint/bug/tint/534.wgsl.expected.ir.glsl
index cca3e96..0d28052 100644
--- a/test/tint/bug/tint/534.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/534.wgsl.expected.ir.glsl
@@ -64,9 +64,11 @@
   }
   uint outputIndex = ((GlobalInvocationID[1u] * uint(size.x)) + GlobalInvocationID[0u]);
   if (success) {
-    tint_symbol.result[outputIndex] = 1u;
+    uint v_7 = outputIndex;
+    tint_symbol.result[v_7] = 1u;
   } else {
-    tint_symbol.result[outputIndex] = 0u;
+    uint v_8 = outputIndex;
+    tint_symbol.result[v_8] = 0u;
   }
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/bug/tint/757.wgsl.expected.ir.glsl b/test/tint/bug/tint/757.wgsl.expected.ir.glsl
index 4fe1bcb..6866023 100644
--- a/test/tint/bug/tint/757.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/757.wgsl.expected.ir.glsl
@@ -18,7 +18,8 @@
       } else {
         break;
       }
-      result.values[(flatIndex + i)] = texel.x;
+      uint v_2 = (flatIndex + i);
+      result.values[v_2] = texel.x;
       {
         i = (i + 1u);
       }
diff --git a/test/tint/bug/tint/914.wgsl.expected.ir.glsl b/test/tint/bug/tint/914.wgsl.expected.ir.glsl
index 1c00ea3..0c96af1 100644
--- a/test/tint/bug/tint/914.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/914.wgsl.expected.ir.glsl
@@ -1,11 +1,286 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Uniforms {
+  uint dimAOuter;
+  uint dimInner;
+  uint dimBOuter;
+};
+
+layout(binding = 0, std430)
+buffer Matrix_1_ssbo {
+  float numbers[];
+} firstMatrix;
+layout(binding = 1, std430)
+buffer Matrix_2_ssbo {
+  float numbers[];
+} secondMatrix;
+layout(binding = 2, std430)
+buffer Matrix_3_ssbo {
+  float numbers[];
+} resultMatrix;
+layout(binding = 3, std140)
+uniform tint_symbol_2_1_ubo {
+  Uniforms tint_symbol_1;
+} v;
+shared float mm_Asub[64][64];
+shared float mm_Bsub[64][64];
+float mm_readA(uint row, uint col) {
+  bool v_1 = false;
+  if ((row < v.tint_symbol_1.dimAOuter)) {
+    v_1 = (col < v.tint_symbol_1.dimInner);
+  } else {
+    v_1 = false;
+  }
+  if (v_1) {
+    uint v_2 = ((row * v.tint_symbol_1.dimInner) + col);
+    float result = firstMatrix.numbers[v_2];
+    return result;
+  }
+  return 0.0f;
+}
+float mm_readB(uint row, uint col) {
+  bool v_3 = false;
+  if ((row < v.tint_symbol_1.dimInner)) {
+    v_3 = (col < v.tint_symbol_1.dimBOuter);
+  } else {
+    v_3 = false;
+  }
+  if (v_3) {
+    uint v_4 = ((row * v.tint_symbol_1.dimBOuter) + col);
+    float result = secondMatrix.numbers[v_4];
+    return result;
+  }
+  return 0.0f;
+}
+void mm_write(uint row, uint col, float value) {
+  bool v_5 = false;
+  if ((row < v.tint_symbol_1.dimAOuter)) {
+    v_5 = (col < v.tint_symbol_1.dimBOuter);
+  } else {
+    v_5 = false;
+  }
+  if (v_5) {
+    uint index = (col + (row * v.tint_symbol_1.dimBOuter));
+    resultMatrix.numbers[index] = value;
+  }
+}
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / mix(rhs, 1u, (rhs == 0u)));
+}
+void tint_symbol_inner(uvec3 local_id, uvec3 global_id, uint tint_local_index) {
+  {
+    uint v_6 = 0u;
+    v_6 = tint_local_index;
+    while(true) {
+      uint v_7 = v_6;
+      if ((v_7 >= 4096u)) {
+        break;
+      }
+      mm_Asub[(v_7 / 64u)][(v_7 % 64u)] = 0.0f;
+      mm_Bsub[(v_7 / 64u)][(v_7 % 64u)] = 0.0f;
+      {
+        v_6 = (v_7 + 256u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  uint tileRow = (local_id[1u] * 4u);
+  uint tileCol = (local_id[0u] * 4u);
+  uint globalRow = (global_id[1u] * 4u);
+  uint globalCol = (global_id[0u] * 4u);
+  uint numTiles = (tint_div_u32((v.tint_symbol_1.dimInner - 1u), 64u) + 1u);
+  float acc[16] = float[16](0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  float ACached = 0.0f;
+  float BCached[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  {
+    uint index = 0u;
+    while(true) {
+      if ((index < 16u)) {
+      } else {
+        break;
+      }
+      uint v_8 = index;
+      acc[v_8] = 0.0f;
+      {
+        index = (index + 1u);
+      }
+      continue;
+    }
+  }
+  uint ColPerThreadA = 4u;
+  uint tileColA = (local_id[0u] * ColPerThreadA);
+  uint RowPerThreadB = 4u;
+  uint tileRowB = (local_id[1u] * RowPerThreadB);
+  {
+    uint t = 0u;
+    while(true) {
+      if ((t < numTiles)) {
+      } else {
+        break;
+      }
+      {
+        uint innerRow = 0u;
+        while(true) {
+          if ((innerRow < 4u)) {
+          } else {
+            break;
+          }
+          {
+            uint innerCol = 0u;
+            while(true) {
+              if ((innerCol < ColPerThreadA)) {
+              } else {
+                break;
+              }
+              uint inputRow = (tileRow + innerRow);
+              uint inputCol = (tileColA + innerCol);
+              mm_Asub[inputRow][inputCol] = mm_readA((globalRow + innerRow), ((t * 64u) + inputCol));
+              {
+                innerCol = (innerCol + 1u);
+              }
+              continue;
+            }
+          }
+          {
+            innerRow = (innerRow + 1u);
+          }
+          continue;
+        }
+      }
+      {
+        uint innerRow = 0u;
+        while(true) {
+          if ((innerRow < RowPerThreadB)) {
+          } else {
+            break;
+          }
+          {
+            uint innerCol = 0u;
+            while(true) {
+              if ((innerCol < 4u)) {
+              } else {
+                break;
+              }
+              uint inputRow = (tileRowB + innerRow);
+              uint inputCol = (tileCol + innerCol);
+              uint v_9 = innerCol;
+              mm_Bsub[v_9][inputCol] = mm_readB(((t * 64u) + inputRow), (globalCol + innerCol));
+              {
+                innerCol = (innerCol + 1u);
+              }
+              continue;
+            }
+          }
+          {
+            innerRow = (innerRow + 1u);
+          }
+          continue;
+        }
+      }
+      barrier();
+      {
+        uint k = 0u;
+        while(true) {
+          if ((k < 64u)) {
+          } else {
+            break;
+          }
+          {
+            uint inner = 0u;
+            while(true) {
+              if ((inner < 4u)) {
+              } else {
+                break;
+              }
+              uint v_10 = inner;
+              uint v_11 = k;
+              uint v_12 = (tileCol + inner);
+              BCached[v_10] = mm_Bsub[v_11][v_12];
+              {
+                inner = (inner + 1u);
+              }
+              continue;
+            }
+          }
+          {
+            uint innerRow = 0u;
+            while(true) {
+              if ((innerRow < 4u)) {
+              } else {
+                break;
+              }
+              uint v_13 = (tileRow + innerRow);
+              uint v_14 = k;
+              ACached = mm_Asub[v_13][v_14];
+              {
+                uint innerCol = 0u;
+                while(true) {
+                  if ((innerCol < 4u)) {
+                  } else {
+                    break;
+                  }
+                  uint index = ((innerRow * 4u) + innerCol);
+                  float v_15 = acc[index];
+                  float v_16 = ACached;
+                  uint v_17 = innerCol;
+                  acc[index] = (v_15 + (v_16 * BCached[v_17]));
+                  {
+                    innerCol = (innerCol + 1u);
+                  }
+                  continue;
+                }
+              }
+              {
+                innerRow = (innerRow + 1u);
+              }
+              continue;
+            }
+          }
+          {
+            k = (k + 1u);
+          }
+          continue;
+        }
+      }
+      barrier();
+      {
+        t = (t + 1u);
+      }
+      continue;
+    }
+  }
+  {
+    uint innerRow = 0u;
+    while(true) {
+      if ((innerRow < 4u)) {
+      } else {
+        break;
+      }
+      {
+        uint innerCol = 0u;
+        while(true) {
+          if ((innerCol < 4u)) {
+          } else {
+            break;
+          }
+          uint index = ((innerRow * 4u) + innerCol);
+          mm_write((globalRow + innerRow), (globalCol + innerCol), acc[index]);
+          {
+            innerCol = (innerCol + 1u);
+          }
+          continue;
+        }
+      }
+      {
+        innerRow = (innerRow + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationID, gl_GlobalInvocationID, gl_LocalInvocationIndex);
+}
diff --git a/test/tint/bug/tint/922.wgsl.expected.ir.glsl b/test/tint/bug/tint/922.wgsl.expected.ir.glsl
index e4666db..1caa683 100644
--- a/test/tint/bug/tint/922.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/922.wgsl.expected.ir.glsl
@@ -132,7 +132,8 @@
   Mat4x3_ t_PosMtx = Mat4x3_(vec4(0.0f), vec4(0.0f), vec4(0.0f));
   vec2 t_TexSpaceCoord = vec2(0.0f);
   float x_e15 = a_PosMtxIdx1;
-  Mat4x3_ x_e18 = v_3.tint_symbol_6.u_PosMtx[tint_f32_to_i32(x_e15)];
+  int v_8 = tint_f32_to_i32(x_e15);
+  Mat4x3_ x_e18 = v_3.tint_symbol_6.u_PosMtx[v_8];
   t_PosMtx = x_e18;
   Mat4x3_ x_e23 = t_PosMtx;
   Mat4x4_ x_e24 = x_Mat4x4_1(x_e23);
@@ -184,10 +185,10 @@
   return VertexOutput(x_e11, x_e13, x_e15);
 }
 void main() {
-  VertexOutput v_8 = tint_symbol_1_inner(tint_symbol_1_loc0_Input, tint_symbol_1_loc1_Input, tint_symbol_1_loc2_Input, tint_symbol_1_loc3_Input, tint_symbol_1_loc4_Input);
-  tint_symbol_1_loc0_Output = v_8.v_Color;
-  tint_symbol_1_loc1_Output = v_8.v_TexCoord;
-  gl_Position = v_8.member;
+  VertexOutput v_9 = tint_symbol_1_inner(tint_symbol_1_loc0_Input, tint_symbol_1_loc1_Input, tint_symbol_1_loc2_Input, tint_symbol_1_loc3_Input, tint_symbol_1_loc4_Input);
+  tint_symbol_1_loc0_Output = v_9.v_Color;
+  tint_symbol_1_loc1_Output = v_9.v_TexCoord;
+  gl_Position = v_9.member;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
   gl_PointSize = 1.0f;
diff --git a/test/tint/bug/tint/990.wgsl.expected.ir.glsl b/test/tint/bug/tint/990.wgsl.expected.ir.glsl
index 1c00ea3..1491092 100644
--- a/test/tint/bug/tint/990.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/990.wgsl.expected.ir.glsl
@@ -1,11 +1,19 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+void f() {
+  int i = 0;
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      {
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/bug/tint/993.wgsl.expected.ir.glsl b/test/tint/bug/tint/993.wgsl.expected.ir.glsl
index 3985021..3571a92 100644
--- a/test/tint/bug/tint/993.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/993.wgsl.expected.ir.glsl
@@ -26,7 +26,8 @@
   TestData tint_symbol_5;
 } v_2;
 int runTest() {
-  return atomicOr(v_2.tint_symbol_5.data[(0u + uint(v.tint_symbol_1.zero))], 0);
+  uint v_3 = (0u + uint(v.tint_symbol_1.zero));
+  return atomicOr(v_2.tint_symbol_5.data[v_3], 0);
 }
 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 65b53d1..144339d 100644
--- a/test/tint/bug/tint/998.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/998.wgsl.expected.ir.glsl
@@ -16,5 +16,6 @@
 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[v.tint_symbol_1.zero] = 0u;
+  uint v_1 = v.tint_symbol_1.zero;
+  s.data[v_1] = 0u;
 }
diff --git a/test/tint/builtins/arrayLength/complex_via_let.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/complex_via_let.wgsl.expected.ir.glsl
index 1c00ea3..7d70253 100644
--- a/test/tint/builtins/arrayLength/complex_via_let.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/complex_via_let.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer S_1_ssbo {
+  int a[];
+} G;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint l1 = uint(G.a.length());
+}
diff --git a/test/tint/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.ir.glsl
index 1c00ea3..598d6eb 100644
--- a/test/tint/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  int tint_symbol_1[];
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint l1 = uint(v.tint_symbol_1.length());
+}
diff --git a/test/tint/builtins/arrayLength/deprecated.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/deprecated.wgsl.expected.ir.glsl
index ffd961c..44c79bf 100644
--- a/test/tint/builtins/arrayLength/deprecated.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/deprecated.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer S_1_ssbo {
+  int a[];
+} G;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint l1 = uint(G.a.length());
+  uint l2 = uint(G.a.length());
+}
diff --git a/test/tint/builtins/arrayLength/via_let.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/via_let.wgsl.expected.ir.glsl
index 1c00ea3..7d70253 100644
--- a/test/tint/builtins/arrayLength/via_let.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/via_let.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer S_1_ssbo {
+  int a[];
+} G;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint l1 = uint(G.a.length());
+}
diff --git a/test/tint/builtins/arrayLength/via_let_complex.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/via_let_complex.wgsl.expected.ir.glsl
index 1c00ea3..7d70253 100644
--- a/test/tint/builtins/arrayLength/via_let_complex.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/via_let_complex.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer S_1_ssbo {
+  int a[];
+} G;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint l1 = uint(G.a.length());
+}
diff --git a/test/tint/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.ir.glsl
index 1c00ea3..598d6eb 100644
--- a/test/tint/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  int tint_symbol_1[];
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint l1 = uint(v.tint_symbol_1.length());
+}
diff --git a/test/tint/builtins/arrayLength/via_let_no_struct.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/via_let_no_struct.wgsl.expected.ir.glsl
index 1c00ea3..598d6eb 100644
--- a/test/tint/builtins/arrayLength/via_let_no_struct.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/via_let_no_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  int tint_symbol_1[];
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  uint l1 = uint(v.tint_symbol_1.length());
+}
diff --git a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.ir.glsl b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.ir.glsl
index 7b39cdf..e73ff10 100644
--- a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.ir.glsl
+++ b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.ir.glsl
@@ -22,7 +22,8 @@
       uint x_35 = idx;
       uint v_1 = tint_div_u32(x_31, 2u);
       uint v_2 = tint_mod_u32(x_33, 2u);
-      atomicExchange(wg[v_1][v_2][tint_mod_u32(x_35, 1u)], 0u);
+      uint v_3 = tint_mod_u32(x_35, 1u);
+      atomicExchange(wg[v_1][v_2][v_3], 0u);
       {
         idx = (idx + 1u);
       }
@@ -38,16 +39,16 @@
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
   {
-    uint v_3 = 0u;
-    v_3 = local_invocation_index_1_param;
+    uint v_4 = 0u;
+    v_4 = local_invocation_index_1_param;
     while(true) {
-      uint v_4 = v_3;
-      if ((v_4 >= 6u)) {
+      uint v_5 = v_4;
+      if ((v_5 >= 6u)) {
         break;
       }
-      atomicExchange(wg[(v_4 / 2u)][(v_4 % 2u)][0u], 0u);
+      atomicExchange(wg[(v_5 / 2u)][(v_5 % 2u)][0u], 0u);
       {
-        v_3 = (v_4 + 1u);
+        v_4 = (v_5 + 1u);
       }
       continue;
     }
diff --git a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.ir.glsl b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.ir.glsl
index 7b39cdf..e73ff10 100644
--- a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.ir.glsl
+++ b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.ir.glsl
@@ -22,7 +22,8 @@
       uint x_35 = idx;
       uint v_1 = tint_div_u32(x_31, 2u);
       uint v_2 = tint_mod_u32(x_33, 2u);
-      atomicExchange(wg[v_1][v_2][tint_mod_u32(x_35, 1u)], 0u);
+      uint v_3 = tint_mod_u32(x_35, 1u);
+      atomicExchange(wg[v_1][v_2][v_3], 0u);
       {
         idx = (idx + 1u);
       }
@@ -38,16 +39,16 @@
 }
 void compute_main_inner_1(uint local_invocation_index_1_param) {
   {
-    uint v_3 = 0u;
-    v_3 = local_invocation_index_1_param;
+    uint v_4 = 0u;
+    v_4 = local_invocation_index_1_param;
     while(true) {
-      uint v_4 = v_3;
-      if ((v_4 >= 6u)) {
+      uint v_5 = v_4;
+      if ((v_5 >= 6u)) {
         break;
       }
-      atomicExchange(wg[(v_4 / 2u)][(v_4 % 2u)][0u], 0u);
+      atomicExchange(wg[(v_5 / 2u)][(v_5 % 2u)][0u], 0u);
       {
-        v_3 = (v_4 + 1u);
+        v_4 = (v_5 + 1u);
       }
       continue;
     }
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.glsl b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.glsl
index 1c00ea3..2705eb9 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  int x;
+  uint a;
+  uint y;
+};
+
+shared S wg;
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    wg.x = 0;
+    atomicExchange(wg.a, 0u);
+    wg.y = 0u;
+  }
+  barrier();
+  atomicExchange(wg.a, 1u);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/access/matrix.wgsl.expected.ir.glsl b/test/tint/ptr_ref/access/matrix.wgsl.expected.ir.glsl
index 1c00ea3..6f4fd8d 100644
--- a/test/tint/ptr_ref/access/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/access/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,7 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+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));
+  m[1] = vec3(5.0f);
+}
diff --git a/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.glsl
index 1c00ea3..25381ce 100644
--- a/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.glsl
@@ -1,11 +1,7 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int i = 123;
+  int u = (i + 1);
+}
diff --git a/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.glsl
index 1c00ea3..c1b85c7 100644
--- a/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.glsl
@@ -1,11 +1,7 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+int i = 123;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int u = (i + 1);
+}
diff --git a/test/tint/ptr_ref/load/local/ptr_storage.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/local/ptr_storage.wgsl.expected.ir.glsl
index 1c00ea3..1745110 100644
--- a/test/tint/ptr_ref/load/local/ptr_storage.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/local/ptr_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  int a;
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+  S tint_symbol_1;
+} v_1;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int u = (v_1.tint_symbol_1.a + 1);
+}
diff --git a/test/tint/ptr_ref/load/local/ptr_uniform.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/local/ptr_uniform.wgsl.expected.ir.glsl
index 1c00ea3..be5a4ac 100644
--- a/test/tint/ptr_ref/load/local/ptr_uniform.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/local/ptr_uniform.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  int a;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_2_1_ubo {
+  S tint_symbol_1;
+} v_1;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int u = (v_1.tint_symbol_1.a + 1);
+}
diff --git a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.glsl
index 1c00ea3..0caf535 100644
--- a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+shared int i;
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    i = 0;
+  }
+  barrier();
+  i = 123;
+  int u = (i + 1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/local/i32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/local/i32.wgsl.expected.ir.glsl
index 1c00ea3..e7bf30c 100644
--- a/test/tint/ptr_ref/store/local/i32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/local/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,8 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  int i = 123;
+  i = 123;
+  i = 123;
+}
diff --git a/test/tint/ptr_sugar/array.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/array.wgsl.expected.ir.glsl
index 1c00ea3..e675cbf 100644
--- a/test/tint/ptr_sugar/array.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/array.wgsl.expected.ir.glsl
@@ -1,11 +1,47 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+void deref_const() {
+  int a[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  int b = a[0];
+  a[0] = 42;
+}
+void no_deref_const() {
+  int a[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  int b = a[0];
+  a[0] = 42;
+}
+void deref_let() {
+  int a[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  int i = 0;
+  int b = a[i];
+  a[0] = 42;
+}
+void no_deref_let() {
+  int a[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  int i = 0;
+  int b = a[i];
+  a[0] = 42;
+}
+void deref_var() {
+  int a[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  int i = 0;
+  int v = i;
+  int b = a[v];
+  a[0] = 42;
+}
+void no_deref_var() {
+  int a[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  int i = 0;
+  int v_1 = i;
+  int b = a[v_1];
+  a[0] = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref_const();
+  no_deref_const();
+  deref_let();
+  no_deref_let();
+  deref_var();
+  no_deref_var();
+}
diff --git a/test/tint/ptr_sugar/builtin_struct.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/builtin_struct.wgsl.expected.ir.glsl
index 1c00ea3..08eb09c 100644
--- a/test/tint/ptr_sugar/builtin_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/builtin_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct modf_result_f32 {
+  float fract;
+  float whole;
+};
+
+struct frexp_result_f32 {
+  float fract;
+  int exp;
+};
+
+void deref_modf() {
+  modf_result_f32 a = modf_result_f32(0.5f, 1.0f);
+  float tint_symbol = a.fract;
+  float whole = a.whole;
+}
+void no_deref_modf() {
+  modf_result_f32 a = modf_result_f32(0.5f, 1.0f);
+  float tint_symbol = a.fract;
+  float whole = a.whole;
+}
+void deref_frexp() {
+  frexp_result_f32 a = frexp_result_f32(0.75f, 1);
+  float tint_symbol = a.fract;
+  int tint_symbol_1 = a.exp;
+}
+void no_deref_frexp() {
+  frexp_result_f32 a = frexp_result_f32(0.75f, 1);
+  float tint_symbol = a.fract;
+  int tint_symbol_1 = a.exp;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref_modf();
+  no_deref_modf();
+  deref_frexp();
+  no_deref_frexp();
+}
diff --git a/test/tint/ptr_sugar/compound_assign_index.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/compound_assign_index.wgsl.expected.ir.glsl
index 1c00ea3..d7ca299 100644
--- a/test/tint/ptr_sugar/compound_assign_index.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/compound_assign_index.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+void deref() {
+  ivec3 a = ivec3(0);
+  a[0] = (a.x + 42);
+}
+void no_deref() {
+  ivec3 a = ivec3(0);
+  a[0] = (a.x + 42);
+}
+void deref_inc() {
+  ivec3 a = ivec3(0);
+  a[0] = (a.x + 1);
+}
+void no_deref_inc() {
+  ivec3 a = ivec3(0);
+  a[0] = (a.x + 1);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref();
+  no_deref();
+  deref_inc();
+  no_deref_inc();
+}
diff --git a/test/tint/ptr_sugar/compound_assign_member.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/compound_assign_member.wgsl.expected.ir.glsl
index 1c00ea3..fcb0a39 100644
--- a/test/tint/ptr_sugar/compound_assign_member.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/compound_assign_member.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+void deref() {
+  ivec3 a = ivec3(0);
+  a[0u] = (a.x + 42);
+}
+void no_deref() {
+  ivec3 a = ivec3(0);
+  a[0u] = (a.x + 42);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref();
+  no_deref();
+}
diff --git a/test/tint/ptr_sugar/matrix.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/matrix.wgsl.expected.ir.glsl
index 1c00ea3..964efca 100644
--- a/test/tint/ptr_sugar/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+void deref() {
+  mat2x3 a = mat2x3(vec3(0.0f), vec3(0.0f));
+  vec3 b = a[0];
+  a[0] = vec3(1.0f, 2.0f, 3.0f);
+}
+void no_deref() {
+  mat2x3 a = mat2x3(vec3(0.0f), vec3(0.0f));
+  vec3 b = a[0];
+  a[0] = vec3(1.0f, 2.0f, 3.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref();
+  no_deref();
+}
diff --git a/test/tint/ptr_sugar/struct.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/struct.wgsl.expected.ir.glsl
index 1c00ea3..79d1221 100644
--- a/test/tint/ptr_sugar/struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/struct.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  int x;
+};
+
+void deref() {
+  S a = S(0);
+  int b = a.x;
+  a.x = 42;
+}
+void no_deref() {
+  S a = S(0);
+  int b = a.x;
+  a.x = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref();
+  no_deref();
+}
diff --git a/test/tint/ptr_sugar/vector_index.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/vector_index.wgsl.expected.ir.glsl
index 1c00ea3..355df83 100644
--- a/test/tint/ptr_sugar/vector_index.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/vector_index.wgsl.expected.ir.glsl
@@ -1,11 +1,45 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+void deref_const() {
+  ivec3 a = ivec3(0);
+  int b = a.x;
+  a[0] = 42;
+}
+void no_deref_const() {
+  ivec3 a = ivec3(0);
+  int b = a.x;
+  a[0] = 42;
+}
+void deref_let() {
+  ivec3 a = ivec3(0);
+  int i = 0;
+  int b = a[i];
+  a[0] = 42;
+}
+void no_deref_let() {
+  ivec3 a = ivec3(0);
+  int i = 0;
+  int b = a[i];
+  a[0] = 42;
+}
+void deref_var() {
+  ivec3 a = ivec3(0);
+  int i = 0;
+  int b = a[i];
+  a[0] = 42;
+}
+void no_deref_var() {
+  ivec3 a = ivec3(0);
+  int i = 0;
+  int b = a[i];
+  a[0] = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref_const();
+  no_deref_const();
+  deref_let();
+  no_deref_let();
+  deref_var();
+  no_deref_var();
+}
diff --git a/test/tint/ptr_sugar/vector_member.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/vector_member.wgsl.expected.ir.glsl
index 1c00ea3..641ae8d 100644
--- a/test/tint/ptr_sugar/vector_member.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/vector_member.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+void deref() {
+  ivec3 a = ivec3(0);
+  int b = a.x;
+  a[0u] = 42;
+}
+void no_deref() {
+  ivec3 a = ivec3(0);
+  int b = a.x;
+  a[0u] = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref();
+  no_deref();
+}
diff --git a/test/tint/ptr_sugar/vector_swizzle.wgsl.expected.ir.glsl b/test/tint/ptr_sugar/vector_swizzle.wgsl.expected.ir.glsl
index 1c00ea3..b594e57 100644
--- a/test/tint/ptr_sugar/vector_swizzle.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_sugar/vector_swizzle.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_3_1_ssbo {
+  ivec4 tint_symbol_2;
+} v;
+void deref() {
+  v.tint_symbol_2 = v.tint_symbol_2.wzyx;
+}
+void no_deref() {
+  v.tint_symbol_2 = v.tint_symbol_2.wzyx;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  deref();
+  no_deref();
+}
diff --git a/test/tint/samples/compute_boids.wgsl.expected.ir.glsl b/test/tint/samples/compute_boids.wgsl.expected.ir.glsl
index 54fc6b8..5290b29 100644
--- a/test/tint/samples/compute_boids.wgsl.expected.ir.glsl
+++ b/test/tint/samples/compute_boids.wgsl.expected.ir.glsl
@@ -67,8 +67,10 @@
   if ((index >= 5u)) {
     return;
   }
-  vec2 vPos = v_1.tint_symbol_3.particles[index].pos;
-  vec2 vVel = v_1.tint_symbol_3.particles[index].vel;
+  uint v_3 = index;
+  vec2 vPos = v_1.tint_symbol_3.particles[v_3].pos;
+  uint v_4 = index;
+  vec2 vVel = v_1.tint_symbol_3.particles[v_4].vel;
   vec2 cMass = vec2(0.0f);
   vec2 cVel = vec2(0.0f);
   vec2 colVel = vec2(0.0f);
@@ -89,19 +91,21 @@
         }
         continue;
       }
-      pos = v_1.tint_symbol_3.particles[i].pos.xy;
-      vel = v_1.tint_symbol_3.particles[i].vel.xy;
-      float v_3 = distance(pos, vPos);
-      if ((v_3 < v.tint_symbol_1.rule1Distance)) {
+      uint v_5 = i;
+      pos = v_1.tint_symbol_3.particles[v_5].pos.xy;
+      uint v_6 = i;
+      vel = v_1.tint_symbol_3.particles[v_6].vel.xy;
+      float v_7 = distance(pos, vPos);
+      if ((v_7 < v.tint_symbol_1.rule1Distance)) {
         cMass = (cMass + pos);
         cMassCount = (cMassCount + 1);
       }
-      float v_4 = distance(pos, vPos);
-      if ((v_4 < v.tint_symbol_1.rule2Distance)) {
+      float v_8 = distance(pos, vPos);
+      if ((v_8 < v.tint_symbol_1.rule2Distance)) {
         colVel = (colVel - (pos - vPos));
       }
-      float v_5 = distance(pos, vPos);
-      if ((v_5 < v.tint_symbol_1.rule3Distance)) {
+      float v_9 = distance(pos, vPos);
+      if ((v_9 < v.tint_symbol_1.rule3Distance)) {
         cVel = (cVel + vel);
         cVelCount = (cVelCount + 1);
       }
@@ -112,19 +116,19 @@
     }
   }
   if ((cMassCount > 0)) {
-    vec2 v_6 = cMass;
-    float v_7 = float(cMassCount);
-    vec2 v_8 = (v_6 / vec2(v_7, float(cMassCount)));
-    cMass = (v_8 - vPos);
+    vec2 v_10 = cMass;
+    float v_11 = float(cMassCount);
+    vec2 v_12 = (v_10 / vec2(v_11, float(cMassCount)));
+    cMass = (v_12 - vPos);
   }
   if ((cVelCount > 0)) {
-    vec2 v_9 = cVel;
-    float v_10 = float(cVelCount);
-    cVel = (v_9 / vec2(v_10, float(cVelCount)));
+    vec2 v_13 = cVel;
+    float v_14 = float(cVelCount);
+    cVel = (v_13 / vec2(v_14, float(cVelCount)));
   }
   vVel = (((vVel + (cMass * v.tint_symbol_1.rule1Scale)) + (colVel * v.tint_symbol_1.rule2Scale)) + (cVel * v.tint_symbol_1.rule3Scale));
-  vec2 v_11 = normalize(vVel);
-  vVel = (v_11 * clamp(length(vVel), 0.0f, 0.10000000149011611938f));
+  vec2 v_15 = normalize(vVel);
+  vVel = (v_15 * clamp(length(vVel), 0.0f, 0.10000000149011611938f));
   vPos = (vPos + (vVel * v.tint_symbol_1.deltaT));
   if ((vPos.x < -1.0f)) {
     vPos[0u] = 1.0f;
@@ -138,8 +142,10 @@
   if ((vPos.y > 1.0f)) {
     vPos[1u] = -1.0f;
   }
-  v_2.tint_symbol_5.particles[index].pos = vPos;
-  v_2.tint_symbol_5.particles[index].vel = vVel;
+  uint v_16 = index;
+  v_2.tint_symbol_5.particles[v_16].pos = vPos;
+  uint v_17 = index;
+  v_2.tint_symbol_5.particles[v_17].vel = vVel;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
diff --git a/test/tint/shadowing/loop.wgsl.expected.ir.glsl b/test/tint/shadowing/loop.wgsl.expected.ir.glsl
index af31d39..06df91a 100644
--- a/test/tint/shadowing/loop.wgsl.expected.ir.glsl
+++ b/test/tint/shadowing/loop.wgsl.expected.ir.glsl
@@ -9,9 +9,11 @@
   int i = 0;
   {
     while(true) {
-      int x = v.tint_symbol_1[i];
+      int v_1 = i;
+      int x = v.tint_symbol_1[v_1];
       {
-        int x = v.tint_symbol_1[x];
+        int v_2 = x;
+        int x = v.tint_symbol_1[v_2];
         i = (i + x);
         if ((i > 10)) { break; }
       }
diff --git a/test/tint/shadowing/short_names/renamer/function.wgsl.expected.ir.glsl b/test/tint/shadowing/short_names/renamer/function.wgsl.expected.ir.glsl
index 4197ad7..c445dcc 100644
--- a/test/tint/shadowing/short_names/renamer/function.wgsl.expected.ir.glsl
+++ b/test/tint/shadowing/short_names/renamer/function.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 int vec4f() {
@@ -12,24 +10,11 @@
   return bool(f);
 }
 vec4 tint_symbol_inner(uint VertexIndex) {
-  bool v = vec2i(vec2f(vec4f()));
-  float v_1 = ((v.x) ? (vec4(1.0f).x) : (vec4(0.0f).x));
-  float v_2 = ((v.y) ? (vec4(1.0f).y) : (vec4(0.0f).y));
-  float v_3 = ((v.z) ? (vec4(1.0f).z) : (vec4(0.0f).z));
-  return vec4(v_1, v_2, v_3, ((v.w) ? (vec4(1.0f).w) : (vec4(0.0f).w)));
+  return mix(vec4(0.0f), vec4(1.0f), bvec4(vec2i(vec2f(vec4f()))));
 }
 void main() {
-  gl_Position = tint_symbol_inner(gl_VertexID);
+  gl_Position = tint_symbol_inner(uint(gl_VertexID));
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:14: 'scalar swizzle' : not supported with this profile: es
-ERROR: 0:14: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/shadowing/short_names/renamer/type.wgsl.expected.ir.glsl b/test/tint/shadowing/short_names/renamer/type.wgsl.expected.ir.glsl
index fbb1c7e..e519ac8 100644
--- a/test/tint/shadowing/short_names/renamer/type.wgsl.expected.ir.glsl
+++ b/test/tint/shadowing/short_names/renamer/type.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 
 
@@ -11,23 +9,11 @@
   vec4f s = vec4f(1);
   float f = float(s.i);
   bool b = bool(f);
-  float v = ((b.x) ? (vec4(1.0f).x) : (vec4(0.0f).x));
-  float v_1 = ((b.y) ? (vec4(1.0f).y) : (vec4(0.0f).y));
-  float v_2 = ((b.z) ? (vec4(1.0f).z) : (vec4(0.0f).z));
-  return vec4(v, v_1, v_2, ((b.w) ? (vec4(1.0f).w) : (vec4(0.0f).w)));
+  return mix(vec4(0.0f), vec4(1.0f), bvec4(b));
 }
 void main() {
-  gl_Position = tint_symbol_inner(gl_VertexID);
+  gl_Position = tint_symbol_inner(uint(gl_VertexID));
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'scalar swizzle' : not supported with this profile: es
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.ir.glsl
index 2f8cfcf..c9efbf9 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.ir.glsl
@@ -28,7 +28,8 @@
       } else {
         break;
       }
-      s1.a1[v_1.tint_symbol_1.i] = v;
+      uint v_2 = v_1.tint_symbol_1.i;
+      s1.a1[v_2] = v;
       {
         i = (i + 1);
       }
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.ir.glsl
index aec9caf..71947f2 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.ir.glsl
@@ -30,7 +30,8 @@
       }
       i = (i + 1);
       {
-        s1.a1[v_1.tint_symbol_1.i] = v;
+        uint v_2 = v_1.tint_symbol_1.i;
+        s1.a1[v_2] = v;
       }
       continue;
     }
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.ir.glsl
index f230518..1834b48 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.ir.glsl
@@ -23,7 +23,8 @@
   OuterS s1 = OuterS(InnerS[8](InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0), InnerS(0)));
   int i = 0;
   {
-    s1.a1[v_1.tint_symbol_1.i] = v;
+    uint v_2 = v_1.tint_symbol_1.i;
+    s1.a1[v_2] = v;
     while(true) {
       if ((i < 4)) {
       } else {
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 0cdfbde..d5a54f1 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
@@ -32,5 +32,6 @@
   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_2 = getNextIndex();
-  s.a1[v_2].a2[v_1.tint_symbol_1.j] = v;
+  uint v_3 = v_1.tint_symbol_1.j;
+  s.a1[v_2].a2[v_3] = 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 837fe49..22da132 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
@@ -21,5 +21,6 @@
 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[v_1.tint_symbol_1.i] = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  s1.a1[v_2] = 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 d0bf667..04b34ea 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
@@ -22,5 +22,7 @@
 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[v_1.tint_symbol_1.i][v_1.tint_symbol_1.j] = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  uint v_3 = v_1.tint_symbol_1.j;
+  s1.a1[v_2][v_3] = 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 3dd1be4..0542885 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
@@ -25,5 +25,6 @@
 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[v_1.tint_symbol_1.i].s2 = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  s1.a1[v_2].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 6a6b84b..7bb5ec5 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
@@ -26,5 +26,7 @@
 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[v_1.tint_symbol_1.i].a2[v_1.tint_symbol_1.j] = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  uint v_3 = v_1.tint_symbol_1.j;
+  s.a1[v_2].a2[v_3] = v;
 }
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.ir.glsl
index 627d4ab..a21cbc7 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.ir.glsl
@@ -20,5 +20,6 @@
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   InnerS v = InnerS(0);
-  s1.a1[v_1.tint_symbol_1.i] = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  s1.a1[v_2] = v;
 }
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.ir.glsl
index 09456b4..d99b470 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.ir.glsl
@@ -25,5 +25,7 @@
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   InnerS v = InnerS(0);
-  s.a1[v_1.tint_symbol_1.i].a2[v_1.tint_symbol_1.j] = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  uint v_3 = v_1.tint_symbol_1.j;
+  s.a1[v_2].a2[v_3] = v;
 }
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.glsl
index 2376b26..b22e066 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.glsl
@@ -16,6 +16,8 @@
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   OuterS s1 = OuterS(mat2x4(vec4(0.0f), vec4(0.0f)));
-  s1.m1[v.tint_symbol_1.i] = vec4(1.0f);
-  s1.m1[v.tint_symbol_1.i][v.tint_symbol_1.i] = 1.0f;
+  uint v_1 = v.tint_symbol_1.i;
+  s1.m1[v_1] = vec4(1.0f);
+  uint v_2 = v.tint_symbol_1.i;
+  s1.m1[v_2][v.tint_symbol_1.i] = 1.0f;
 }
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 36cf428..e3c1412 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
@@ -22,6 +22,8 @@
 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[v_1.tint_symbol_1.i] = v;
-  s1.a2[v_1.tint_symbol_1.i] = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  s1.a1[v_2] = v;
+  uint v_3 = v_1.tint_symbol_1.i;
+  s1.a2[v_3] = 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 abc071c..311c280 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
@@ -25,5 +25,6 @@
 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[v_1.tint_symbol_1.i] = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  s1.s2.a[v_2] = v;
 }
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.glsl
index c078c75..17728d2 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.glsl
@@ -20,6 +20,8 @@
 void main() {
   OuterS s1 = OuterS(uint[8](0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u));
   vec3 v = vec3(0.0f);
-  v[s1.a1[v_1.tint_symbol_1.i]] = 1.0f;
-  v[f(s1.a1[v_1.tint_symbol_1.i])] = 1.0f;
+  uint v_2 = v_1.tint_symbol_1.i;
+  v[s1.a1[v_2]] = 1.0f;
+  uint v_3 = v_1.tint_symbol_1.i;
+  v[f(s1.a1[v_3])] = 1.0f;
 }
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.ir.glsl
index 1c00ea3..22da132 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.ir.glsl
@@ -1,11 +1,26 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct Uniforms {
+  uint i;
+};
+
+struct InnerS {
+  int v;
+};
+
+struct OuterS {
+  InnerS a1[8];
+};
+
+layout(binding = 4, std140)
+uniform tint_symbol_2_1_ubo {
+  Uniforms tint_symbol_1;
+} v_1;
+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)));
+  uint v_2 = v_1.tint_symbol_1.i;
+  s1.a1[v_2] = 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 7cc025f..782ac61 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
@@ -19,7 +19,8 @@
 } v_1;
 void f(inout OuterS p) {
   InnerS v = InnerS(0);
-  p.a1[v_1.tint_symbol_1.i] = v;
+  uint v_2 = v_1.tint_symbol_1.i;
+  p.a1[v_2] = v;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
diff --git a/test/tint/statements/compound_assign/complex_lhs.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/complex_lhs.wgsl.expected.ir.glsl
index 1c00ea3..f2aed78 100644
--- a/test/tint/statements/compound_assign/complex_lhs.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/complex_lhs.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  ivec4 a[4];
+};
+
+int counter = 0;
+int foo() {
+  counter = (counter + 1);
+  return counter;
+}
+int bar() {
+  counter = (counter + 2);
+  return counter;
+}
+void tint_symbol() {
+  S x = S(ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0)));
+  int v = foo();
+  int v_1 = bar();
+  x.a[v][v_1] = (x.a[v][v_1] + 5);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/compound_assign/for_loop.wgsl.expected.ir.glsl b/test/tint/statements/compound_assign/for_loop.wgsl.expected.ir.glsl
index 1c00ea3..e324fc8 100644
--- a/test/tint/statements/compound_assign/for_loop.wgsl.expected.ir.glsl
+++ b/test/tint/statements/compound_assign/for_loop.wgsl.expected.ir.glsl
@@ -1,11 +1,48 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  int a;
+  vec4 b;
+  mat2 c;
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  S tint_symbol;
+} v_1;
+uint i = 0u;
+int idx1() {
+  i = (i + 1u);
+  return 1;
+}
+int idx2() {
+  i = (i + 2u);
+  return 1;
+}
+int idx3() {
+  i = (i + 3u);
+  return 1;
+}
+void foo() {
+  float a[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  {
+    int v_2 = idx1();
+    a[v_2] = (a[v_2] * 2.0f);
+    while(true) {
+      int v_3 = idx2();
+      if ((a[v_3] < 10.0f)) {
+      } else {
+        break;
+      }
+      {
+        int v_4 = idx3();
+        a[v_4] = (a[v_4] + 1.0f);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/decrement/complex.wgsl.expected.ir.glsl b/test/tint/statements/decrement/complex.wgsl.expected.ir.glsl
index 1c00ea3..07f40e8 100644
--- a/test/tint/statements/decrement/complex.wgsl.expected.ir.glsl
+++ b/test/tint/statements/decrement/complex.wgsl.expected.ir.glsl
@@ -1,11 +1,60 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  ivec4 a[4];
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_3_1_ssbo {
+  S tint_symbol_2[];
+} v_1;
+uint v = 0u;
+int idx1() {
+  v = (v - 1u);
+  return 1;
+}
+int idx2() {
+  v = (v - 1u);
+  return 2;
+}
+int idx3() {
+  v = (v - 1u);
+  return 3;
+}
+int idx4() {
+  v = (v - 1u);
+  return 4;
+}
+int idx5() {
+  v = (v - 1u);
+  return 0;
+}
+int idx6() {
+  v = (v - 1u);
+  return 2;
+}
+void tint_symbol_1() {
+  {
+    int v_2 = idx1();
+    int v_3 = idx2();
+    int v_4 = idx3();
+    v_1.tint_symbol_2[v_2].a[v_3][v_4] = (v_1.tint_symbol_2[v_2].a[v_3][v_4] - 1);
+    while(true) {
+      if ((v < 10u)) {
+      } else {
+        break;
+      }
+      {
+        int v_5 = idx4();
+        int v_6 = idx5();
+        int v_7 = idx6();
+        v_1.tint_symbol_2[v_5].a[v_6][v_7] = (v_1.tint_symbol_2[v_5].a[v_6][v_7] - 1);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/increment/complex.wgsl.expected.ir.glsl b/test/tint/statements/increment/complex.wgsl.expected.ir.glsl
index 1c00ea3..a35c2d8 100644
--- a/test/tint/statements/increment/complex.wgsl.expected.ir.glsl
+++ b/test/tint/statements/increment/complex.wgsl.expected.ir.glsl
@@ -1,11 +1,60 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  ivec4 a[4];
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_3_1_ssbo {
+  S tint_symbol_2[];
+} v_1;
+uint v = 0u;
+int idx1() {
+  v = (v + 1u);
+  return 1;
+}
+int idx2() {
+  v = (v + 1u);
+  return 2;
+}
+int idx3() {
+  v = (v + 1u);
+  return 3;
+}
+int idx4() {
+  v = (v + 1u);
+  return 4;
+}
+int idx5() {
+  v = (v + 1u);
+  return 0;
+}
+int idx6() {
+  v = (v + 1u);
+  return 2;
+}
+void tint_symbol_1() {
+  {
+    int v_2 = idx1();
+    int v_3 = idx2();
+    int v_4 = idx3();
+    v_1.tint_symbol_2[v_2].a[v_3][v_4] = (v_1.tint_symbol_2[v_2].a[v_3][v_4] + 1);
+    while(true) {
+      if ((v < 10u)) {
+      } else {
+        break;
+      }
+      {
+        int v_5 = idx4();
+        int v_6 = idx5();
+        int v_7 = idx6();
+        v_1.tint_symbol_2[v_5].a[v_6][v_7] = (v_1.tint_symbol_2[v_5].a[v_6][v_7] + 1);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/types/function_scope_declarations.wgsl.expected.ir.glsl b/test/tint/types/function_scope_declarations.wgsl.expected.ir.glsl
index 1c00ea3..a35a50c 100644
--- a/test/tint/types/function_scope_declarations.wgsl.expected.ir.glsl
+++ b/test/tint/types/function_scope_declarations.wgsl.expected.ir.glsl
@@ -1,11 +1,30 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+struct S {
+  float a;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  bool bool_var = false;
+  bool bool_let = false;
+  int i32_var = 0;
+  int i32_let = 0;
+  uint u32_var = 0u;
+  uint u32_let = 0u;
+  float f32_var = 0.0f;
+  float f32_let = 0.0f;
+  ivec2 v2i32_var = ivec2(0);
+  ivec2 v2i32_let = ivec2(0);
+  uvec3 v3u32_var = uvec3(0u);
+  uvec3 v3u32_let = uvec3(0u);
+  vec4 v4f32_var = vec4(0.0f);
+  vec4 v4f32_let = vec4(0.0f);
+  mat2x3 m2x3_var = mat2x3(vec3(0.0f), vec3(0.0f));
+  mat3x4 m3x4_let = mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f));
+  float arr_var[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float arr_let[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  S struct_var = S(0.0f);
+  S struct_let = S(0.0f);
+}
diff --git a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.glsl b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.glsl
index 1c00ea3..5d9ce65 100644
--- a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.glsl
+++ b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
+float p = 0.0f;
+shared float w;
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = 0.0f;
+  }
+  barrier();
+  float x = (p + w);
+  p = x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index 1c00ea3..0000000
--- a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:521 internal compiler error: TINT_ASSERT(!l->Result(0)->Type()->Is<core::type::Pointer>())
-********************************************************************
-*  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: trace/BPT trap
