[glsl][ir] Add a transform to remove pointer lets.

This CL adds a transform which will replace a `let` which holds a
pointer with the value the let points too.

Bug: 42251044
Change-Id: Idb854af4c0802ef7887ee4f459735a159f0930b9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/208514
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
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