[ir][msl] Generate expectation files.

Add SKIP and expectation files for the remaining MSL expectations.
The expectations have been compared to the MSL AST Printer expectations
and any that didn't match are marked as skip.

Bug: tint:1967
Change-Id: Idefc90bacd6e54ed2251c8e6efbf3d5a016a0da4
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/162120
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/test/tint/bug/chromium/1221120.wgsl.expected.ir.msl b/test/tint/bug/chromium/1221120.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fbf9d3f
--- /dev/null
+++ b/test/tint/bug/chromium/1221120.wgsl.expected.ir.msl
@@ -0,0 +1,4 @@
+
+#include <metal_stdlib>
+using namespace metal;
+
diff --git a/test/tint/bug/chromium/1236161.wgsl.expected.ir.msl b/test/tint/bug/chromium/1236161.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b3332ec
--- /dev/null
+++ b/test/tint/bug/chromium/1236161.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void i() {
+  float const s = 1.0f;
+}
diff --git a/test/tint/bug/chromium/1273451.wgsl.expected.ir.msl b/test/tint/bug/chromium/1273451.wgsl.expected.ir.msl
new file mode 100644
index 0000000..502238c
--- /dev/null
+++ b/test/tint/bug/chromium/1273451.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct B {
+  int b;
+};
+
+B f() {
+  return B{};
+}
diff --git a/test/tint/bug/chromium/1341475.wgsl.expected.ir.msl b/test/tint/bug/chromium/1341475.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1cb6c56
--- /dev/null
+++ b/test/tint/bug/chromium/1341475.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  float const a = 1.0f;
+}
diff --git a/test/tint/bug/chromium/1343242.wgsl.expected.ir.msl b/test/tint/bug/chromium/1343242.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d009c59
--- /dev/null
+++ b/test/tint/bug/chromium/1343242.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool o = true;
diff --git a/test/tint/bug/chromium/1350147.wgsl.expected.ir.msl b/test/tint/bug/chromium/1350147.wgsl.expected.ir.msl
new file mode 100644
index 0000000..dba5f88
--- /dev/null
+++ b/test/tint/bug/chromium/1350147.wgsl.expected.ir.msl
@@ -0,0 +1,13 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void original_clusterfuzz_code() {
+}
+void more_tests_that_would_fail() {
+  float const a = 1.47112762928009033203f;
+  float const b = 0.09966865181922912598f;
+  float const a = 2.5f;
+  float const b = 2.5f;
+}
diff --git a/test/tint/bug/chromium/1367602_function_space_initializer_valid_count.wgsl.expected.ir.msl b/test/tint/bug/chromium/1367602_function_space_initializer_valid_count.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1910270
--- /dev/null
+++ b/test/tint/bug/chromium/1367602_function_space_initializer_valid_count.wgsl.expected.ir.msl
@@ -0,0 +1,18 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void f() {
+  tint_array<bool, 65535> v = tint_array<bool, 65535>{};
+}
diff --git a/test/tint/bug/chromium/1367602_function_space_no_initializer_valid_count.wgsl.expected.ir.msl b/test/tint/bug/chromium/1367602_function_space_no_initializer_valid_count.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bf555cc
--- /dev/null
+++ b/test/tint/bug/chromium/1367602_function_space_no_initializer_valid_count.wgsl.expected.ir.msl
@@ -0,0 +1,18 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void f() {
+  tint_array<bool, 65535> v = {};
+}
diff --git a/test/tint/bug/chromium/1367602_private_space_initializer_valid_count.wgsl.expected.ir.msl b/test/tint/bug/chromium/1367602_private_space_initializer_valid_count.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5e5fb64
--- /dev/null
+++ b/test/tint/bug/chromium/1367602_private_space_initializer_valid_count.wgsl.expected.ir.msl
@@ -0,0 +1,20 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<bool, 65535> v = tint_array<bool, 65535>{};
+void f() {
+}
diff --git a/test/tint/bug/chromium/1367602_private_space_no_initializer_valid_count.wgsl.expected.ir.msl b/test/tint/bug/chromium/1367602_private_space_no_initializer_valid_count.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bf741e0
--- /dev/null
+++ b/test/tint/bug/chromium/1367602_private_space_no_initializer_valid_count.wgsl.expected.ir.msl
@@ -0,0 +1,20 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<bool, 65535> v = {};
+void f() {
+}
diff --git a/test/tint/bug/chromium/1381883.wgsl.expected.ir.msl b/test/tint/bug/chromium/1381883.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f925a33
--- /dev/null
+++ b/test/tint/bug/chromium/1381883.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+}
diff --git a/test/tint/bug/chromium/1383755.wgsl.expected.ir.msl b/test/tint/bug/chromium/1383755.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e1d3e0c
--- /dev/null
+++ b/test/tint/bug/chromium/1383755.wgsl.expected.ir.msl
@@ -0,0 +1,5 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
diff --git a/test/tint/bug/chromium/1395241.wgsl.expected.ir.msl b/test/tint/bug/chromium/1395241.wgsl.expected.ir.msl
new file mode 100644
index 0000000..799748a
--- /dev/null
+++ b/test/tint/bug/chromium/1395241.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void fr6snorm() {
+  int bzbxttch = 2;
+}
diff --git a/test/tint/bug/chromium/1417515.wgsl.expected.ir.msl b/test/tint/bug/chromium/1417515.wgsl.expected.ir.msl
new file mode 100644
index 0000000..92e2505
--- /dev/null
+++ b/test/tint/bug/chromium/1417515.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+#include <metal_stdlib>
+using namespace metal;
+struct modf_result_f32 {
+  float fract;
+  float whole;
+};
+
+void foo() {
+  modf_result_f32 const s1 = modf_result_f32{};
+}
diff --git a/test/tint/bug/chromium/1449474.wgsl.expected.ir.msl b/test/tint/bug/chromium/1449474.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e3024b1
--- /dev/null
+++ b/test/tint/bug/chromium/1449474.wgsl.expected.ir.msl
@@ -0,0 +1,20 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1> arr = tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<int, 1>, 1>, 1>{tint_array<tint_array<int, 1>, 1>{tint_array<int, 1>{-6}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}};
+void f() {
+}
diff --git a/test/tint/bug/chromium/1501769.wgsl.expected.ir.msl b/test/tint/bug/chromium/1501769.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4e22f2b
--- /dev/null
+++ b/test/tint/bug/chromium/1501769.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void a() {
+}
diff --git a/test/tint/bug/tint/1083.wgsl.expected.ir.msl b/test/tint/bug/tint/1083.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a5d4f90
--- /dev/null
+++ b/test/tint/bug/tint/1083.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 0;
+}
diff --git a/test/tint/bug/tint/1518.wgsl.expected.ir.msl b/test/tint/bug/tint/1518.wgsl.expected.ir.msl
new file mode 100644
index 0000000..047dc30
--- /dev/null
+++ b/test/tint/bug/tint/1518.wgsl.expected.ir.msl
@@ -0,0 +1,379 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  } else {
+    if (false) {
+    } else {
+      if (false) {
+      } else {
+        if (false) {
+        } else {
+          if (false) {
+          } else {
+            if (false) {
+            } else {
+              if (false) {
+              } else {
+                if (false) {
+                } else {
+                  if (false) {
+                  } else {
+                    if (false) {
+                    } else {
+                      if (false) {
+                      } else {
+                        if (false) {
+                        } else {
+                          if (false) {
+                          } else {
+                            if (false) {
+                            } else {
+                              if (false) {
+                              } else {
+                                if (false) {
+                                } else {
+                                  if (false) {
+                                  } else {
+                                    if (false) {
+                                    } else {
+                                      if (false) {
+                                      } else {
+                                        if (false) {
+                                        } else {
+                                          if (false) {
+                                          } else {
+                                            if (false) {
+                                            } else {
+                                              if (false) {
+                                              } else {
+                                                if (false) {
+                                                } else {
+                                                  if (false) {
+                                                  } else {
+                                                    if (false) {
+                                                    } else {
+                                                      if (false) {
+                                                      } else {
+                                                        if (false) {
+                                                        } else {
+                                                          if (false) {
+                                                          } else {
+                                                            if (false) {
+                                                            } else {
+                                                              if (false) {
+                                                              } else {
+                                                                if (false) {
+                                                                } else {
+                                                                  if (false) {
+                                                                  } else {
+                                                                    if (false) {
+                                                                    } else {
+                                                                      if (false) {
+                                                                      } else {
+                                                                        if (false) {
+                                                                        } else {
+                                                                          if (false) {
+                                                                          } else {
+                                                                            if (false) {
+                                                                            } else {
+                                                                              if (false) {
+                                                                              } else {
+                                                                                if (false) {
+                                                                                } else {
+                                                                                  if (false) {
+                                                                                  } else {
+                                                                                    if (false) {
+                                                                                    } else {
+                                                                                      if (false) {
+                                                                                      } else {
+                                                                                        if (false) {
+                                                                                        } else {
+                                                                                          if (false) {
+                                                                                          } else {
+                                                                                            if (false) {
+                                                                                            } else {
+                                                                                              if (false) {
+                                                                                              } else {
+                                                                                                if (false) {
+                                                                                                } else {
+                                                                                                  if (false) {
+                                                                                                  } else {
+                                                                                                    if (false) {
+                                                                                                    } else {
+                                                                                                      if (false) {
+                                                                                                      } else {
+                                                                                                        if (false) {
+                                                                                                        } else {
+                                                                                                          if (false) {
+                                                                                                          } else {
+                                                                                                            if (false) {
+                                                                                                            } else {
+                                                                                                              if (false) {
+                                                                                                              } else {
+                                                                                                                if (false) {
+                                                                                                                } else {
+                                                                                                                  if (false) {
+                                                                                                                  } else {
+                                                                                                                    if (false) {
+                                                                                                                    } else {
+                                                                                                                      if (false) {
+                                                                                                                      } else {
+                                                                                                                        if (false) {
+                                                                                                                        } else {
+                                                                                                                          if (false) {
+                                                                                                                          } else {
+                                                                                                                            if (false) {
+                                                                                                                            } else {
+                                                                                                                              if (false) {
+                                                                                                                              } else {
+                                                                                                                                if (false) {
+                                                                                                                                } else {
+                                                                                                                                  if (false) {
+                                                                                                                                  } else {
+                                                                                                                                    if (false) {
+                                                                                                                                    } else {
+                                                                                                                                      if (false) {
+                                                                                                                                      } else {
+                                                                                                                                        if (false) {
+                                                                                                                                        } else {
+                                                                                                                                          if (false) {
+                                                                                                                                          } else {
+                                                                                                                                            if (false) {
+                                                                                                                                            } else {
+                                                                                                                                              if (false) {
+                                                                                                                                              } else {
+                                                                                                                                                if (false) {
+                                                                                                                                                } else {
+                                                                                                                                                  if (false) {
+                                                                                                                                                  } else {
+                                                                                                                                                    if (false) {
+                                                                                                                                                    } else {
+                                                                                                                                                      if (false) {
+                                                                                                                                                      } else {
+                                                                                                                                                        if (false) {
+                                                                                                                                                        } else {
+                                                                                                                                                          if (false) {
+                                                                                                                                                          } else {
+                                                                                                                                                            if (false) {
+                                                                                                                                                            } else {
+                                                                                                                                                              if (false) {
+                                                                                                                                                              } else {
+                                                                                                                                                                if (false) {
+                                                                                                                                                                } else {
+                                                                                                                                                                  if (false) {
+                                                                                                                                                                  } else {
+                                                                                                                                                                    if (false) {
+                                                                                                                                                                    } else {
+                                                                                                                                                                      if (false) {
+                                                                                                                                                                      } else {
+                                                                                                                                                                        if (false) {
+                                                                                                                                                                        } else {
+                                                                                                                                                                          if (false) {
+                                                                                                                                                                          } else {
+                                                                                                                                                                            if (false) {
+                                                                                                                                                                            } else {
+                                                                                                                                                                              if (false) {
+                                                                                                                                                                              } else {
+                                                                                                                                                                                if (false) {
+                                                                                                                                                                                } else {
+                                                                                                                                                                                  if (false) {
+                                                                                                                                                                                  } else {
+                                                                                                                                                                                    if (false) {
+                                                                                                                                                                                    } else {
+                                                                                                                                                                                      if (false) {
+                                                                                                                                                                                      } else {
+                                                                                                                                                                                        if (false) {
+                                                                                                                                                                                        } else {
+                                                                                                                                                                                          if (false) {
+                                                                                                                                                                                          } else {
+                                                                                                                                                                                            if (false) {
+                                                                                                                                                                                            } else {
+                                                                                                                                                                                              if (false) {
+                                                                                                                                                                                              } else {
+                                                                                                                                                                                                if (false) {
+                                                                                                                                                                                                } else {
+                                                                                                                                                                                                  if (false) {
+                                                                                                                                                                                                  } else {
+                                                                                                                                                                                                    if (false) {
+                                                                                                                                                                                                    } else {
+                                                                                                                                                                                                      if (false) {
+                                                                                                                                                                                                      } else {
+                                                                                                                                                                                                        if (false) {
+                                                                                                                                                                                                        } else {
+                                                                                                                                                                                                          if (false) {
+                                                                                                                                                                                                          } else {
+                                                                                                                                                                                                            if (false) {
+                                                                                                                                                                                                            } else {
+                                                                                                                                                                                                              if (false) {
+                                                                                                                                                                                                              } else {
+                                                                                                                                                                                                                if (false) {
+                                                                                                                                                                                                                } else {
+                                                                                                                                                                                                                  if (false) {
+                                                                                                                                                                                                                  } else {
+                                                                                                                                                                                                                    if (false) {
+                                                                                                                                                                                                                    } else {
+                                                                                                                                                                                                                      if (false) {
+                                                                                                                                                                                                                      } else {
+                                                                                                                                                                                                                        if (false) {
+                                                                                                                                                                                                                        } else {
+                                                                                                                                                                                                                          if (false) {
+                                                                                                                                                                                                                          } else {
+                                                                                                                                                                                                                            if (false) {
+                                                                                                                                                                                                                            } else {
+                                                                                                                                                                                                                              if (false) {
+                                                                                                                                                                                                                              } else {
+                                                                                                                                                                                                                                if (false) {
+                                                                                                                                                                                                                                } else {
+                                                                                                                                                                                                                                  if (false) {
+                                                                                                                                                                                                                                  } else {
+                                                                                                                                                                                                                                    if (false) {
+                                                                                                                                                                                                                                    } else {
+                                                                                                                                                                                                                                      if (false) {
+                                                                                                                                                                                                                                      } else {
+                                                                                                                                                                                                                                        if (false) {
+                                                                                                                                                                                                                                        } else {
+                                                                                                                                                                                                                                          if (false) {
+                                                                                                                                                                                                                                          } else {
+                                                                                                                                                                                                                                            if (false) {
+                                                                                                                                                                                                                                            } else {
+                                                                                                                                                                                                                                              if (false) {
+                                                                                                                                                                                                                                              } else {
+                                                                                                                                                                                                                                                if (false) {
+                                                                                                                                                                                                                                                } else {
+                                                                                                                                                                                                                                                  if (false) {
+                                                                                                                                                                                                                                                  } else {
+                                                                                                                                                                                                                                                    if (false) {
+                                                                                                                                                                                                                                                    } else {
+                                                                                                                                                                                                                                                      if (false) {
+                                                                                                                                                                                                                                                      } else {
+                                                                                                                                                                                                                                                        if (false) {
+                                                                                                                                                                                                                                                        } else {
+                                                                                                                                                                                                                                                          if (false) {
+                                                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                                                        }
+                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                }
+                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                                        }
+                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                }
+                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                        }
+                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                }
+                                                                                                                                                                                                              }
+                                                                                                                                                                                                            }
+                                                                                                                                                                                                          }
+                                                                                                                                                                                                        }
+                                                                                                                                                                                                      }
+                                                                                                                                                                                                    }
+                                                                                                                                                                                                  }
+                                                                                                                                                                                                }
+                                                                                                                                                                                              }
+                                                                                                                                                                                            }
+                                                                                                                                                                                          }
+                                                                                                                                                                                        }
+                                                                                                                                                                                      }
+                                                                                                                                                                                    }
+                                                                                                                                                                                  }
+                                                                                                                                                                                }
+                                                                                                                                                                              }
+                                                                                                                                                                            }
+                                                                                                                                                                          }
+                                                                                                                                                                        }
+                                                                                                                                                                      }
+                                                                                                                                                                    }
+                                                                                                                                                                  }
+                                                                                                                                                                }
+                                                                                                                                                              }
+                                                                                                                                                            }
+                                                                                                                                                          }
+                                                                                                                                                        }
+                                                                                                                                                      }
+                                                                                                                                                    }
+                                                                                                                                                  }
+                                                                                                                                                }
+                                                                                                                                              }
+                                                                                                                                            }
+                                                                                                                                          }
+                                                                                                                                        }
+                                                                                                                                      }
+                                                                                                                                    }
+                                                                                                                                  }
+                                                                                                                                }
+                                                                                                                              }
+                                                                                                                            }
+                                                                                                                          }
+                                                                                                                        }
+                                                                                                                      }
+                                                                                                                    }
+                                                                                                                  }
+                                                                                                                }
+                                                                                                              }
+                                                                                                            }
+                                                                                                          }
+                                                                                                        }
+                                                                                                      }
+                                                                                                    }
+                                                                                                  }
+                                                                                                }
+                                                                                              }
+                                                                                            }
+                                                                                          }
+                                                                                        }
+                                                                                      }
+                                                                                    }
+                                                                                  }
+                                                                                }
+                                                                              }
+                                                                            }
+                                                                          }
+                                                                        }
+                                                                      }
+                                                                    }
+                                                                  }
+                                                                }
+                                                              }
+                                                            }
+                                                          }
+                                                        }
+                                                      }
+                                                    }
+                                                  }
+                                                }
+                                              }
+                                            }
+                                          }
+                                        }
+                                      }
+                                    }
+                                  }
+                                }
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/test/tint/bug/tint/1540.wgsl.expected.ir.msl b/test/tint/bug/tint/1540.wgsl.expected.ir.msl
new file mode 100644
index 0000000..16b8883
--- /dev/null
+++ b/test/tint/bug/tint/1540.wgsl.expected.ir.msl
@@ -0,0 +1,12 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  bool e;
+};
+
+void tint_symbol() {
+  bool b = false;
+  S v = {.e=(true & b)};
+}
diff --git a/test/tint/bug/tint/1564.wgsl.expected.ir.msl b/test/tint/bug/tint/1564.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ddf62d5
--- /dev/null
+++ b/test/tint/bug/tint/1564.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void foo() {
+  float const b = 9.9999461e-41f;
+}
diff --git a/test/tint/bug/tint/1598.wgsl.expected.ir.msl b/test/tint/bug/tint/1598.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ff96893
--- /dev/null
+++ b/test/tint/bug/tint/1598.wgsl.expected.ir.msl
@@ -0,0 +1,20 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void tint_symbol() {
+  tint_array<int, 5> a = {};
+}
diff --git a/test/tint/bug/tint/1660.wgsl.expected.ir.msl b/test/tint/bug/tint/1660.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cc034c1
--- /dev/null
+++ b/test/tint/bug/tint/1660.wgsl.expected.ir.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+threadgroup tint_array<float, 2> a;
diff --git a/test/tint/bug/tint/1664.wgsl.expected.ir.msl b/test/tint/bug/tint/1664.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4d167dc
--- /dev/null
+++ b/test/tint/bug/tint/1664.wgsl.expected.ir.msl
@@ -0,0 +1,12 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f0() {
+  int const a = 2147483647;
+  int const b = 1;
+}
+void f1() {
+  int const a = 1;
+}
diff --git a/test/tint/bug/tint/1697.wgsl.expected.ir.msl b/test/tint/bug/tint/1697.wgsl.expected.ir.msl
new file mode 100644
index 0000000..316baf2
--- /dev/null
+++ b/test/tint/bug/tint/1697.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int v = 0;
+}
diff --git a/test/tint/bug/tint/1713.wgsl.expected.ir.msl b/test/tint/bug/tint/1713.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6c73104
--- /dev/null
+++ b/test/tint/bug/tint/1713.wgsl.expected.ir.msl
@@ -0,0 +1,3 @@
+#include <metal_stdlib>
+using namespace metal;
+
diff --git a/test/tint/bug/tint/1717.wgsl.expected.ir.msl b/test/tint/bug/tint/1717.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e9b0ddb
--- /dev/null
+++ b/test/tint/bug/tint/1717.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+uint f() {
+  return 2147483648u;
+}
diff --git a/test/tint/bug/tint/1731.wgsl.expected.ir.msl b/test/tint/bug/tint/1731.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4353bd7
--- /dev/null
+++ b/test/tint/bug/tint/1731.wgsl.expected.ir.msl
@@ -0,0 +1,5 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void g() {
+}
diff --git a/test/tint/bug/tint/1781.wgsl.expected.ir.msl b/test/tint/bug/tint/1781.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e7fbdcc
--- /dev/null
+++ b/test/tint/bug/tint/1781.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+}
diff --git a/test/tint/bug/tint/1852.wgsl.expected.ir.msl b/test/tint/bug/tint/1852.wgsl.expected.ir.msl
new file mode 100644
index 0000000..55991d1
--- /dev/null
+++ b/test/tint/bug/tint/1852.wgsl.expected.ir.msl
@@ -0,0 +1,5 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void foo() {
+}
diff --git a/test/tint/bug/tint/2052.wgsl.expected.ir.msl b/test/tint/bug/tint/2052.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6f459d5
--- /dev/null
+++ b/test/tint/bug/tint/2052.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  discard_fragment();
+}
diff --git a/test/tint/bug/tint/2056.wgsl.expected.ir.msl b/test/tint/bug/tint/2056.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6712bf5
--- /dev/null
+++ b/test/tint/bug/tint/2056.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+float f() {
+  return 0.0f;
+}
diff --git a/test/tint/bug/tint/992.wgsl.expected.ir.msl b/test/tint/bug/tint/992.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5ecef9e
--- /dev/null
+++ b/test/tint/bug/tint/992.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 frag_main() {
+  float b = 0.0f;
+  float3 v = float3(b);
+  return float4(v, 1.0f);
+}
diff --git a/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.msl b/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8a29a00
--- /dev/null
+++ b/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  float const fract = 0.625f;
+  int const exp = 1;
+}
diff --git a/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.msl b/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eab81ac
--- /dev/null
+++ b/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  float2 const fract = float2(0.625f, 0.9375f);
+  int2 const exp = int2(1, 2);
+}
diff --git a/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.msl b/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d16f03d
--- /dev/null
+++ b/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  float const fract = 0.25f;
+  float const whole = 1.0f;
+}
diff --git a/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.msl b/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.msl
new file mode 100644
index 0000000..496e949
--- /dev/null
+++ b/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  float2 const fract = float2(0.25f, 0.75f);
+  float2 const whole = float2(1.0f, 3.0f);
+}
diff --git a/test/tint/const/global/global.wgsl.expected.ir.msl b/test/tint/const/global/global.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1980cc5
--- /dev/null
+++ b/test/tint/const/global/global.wgsl.expected.ir.msl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+float4 tint_symbol() {
+  int v1 = 1;
+  uint v2 = 1u;
+  float v3 = 1.0f;
+  int3 v4 = int3(1);
+  uint3 v5 = uint3(1u);
+  float3 v6 = float3(1.0f);
+  float3x3 v7 = float3x3(float3(1.0f), float3(1.0f), float3(1.0f));
+  tint_array<float, 10> v9 = tint_array<float, 10>{};
+  return float4(0.0f);
+}
diff --git a/test/tint/const/inferred/function.wgsl.expected.ir.msl b/test/tint/const/inferred/function.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8153696
--- /dev/null
+++ b/test/tint/const/inferred/function.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void const_decls() {
+}
+float4 tint_symbol() {
+  return float4(0.0f);
+}
diff --git a/test/tint/expressions/binary/add/mat3x3-mat3x3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/mat3x3-mat3x3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d6c3ec1
--- /dev/null
+++ b/test/tint/expressions/binary/add/mat3x3-mat3x3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3x3 const a = half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
+  half3x3 const b = half3x3(half3(-1.0h, -2.0h, -3.0h), half3(-4.0h, -5.0h, -6.0h), half3(-7.0h, -8.0h, -9.0h));
+}
diff --git a/test/tint/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1172bde
--- /dev/null
+++ b/test/tint/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3x3 const a = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+  float3x3 const b = float3x3(float3(-1.0f, -2.0f, -3.0f), float3(-4.0f, -5.0f, -6.0f), float3(-7.0f, -8.0f, -9.0f));
+}
diff --git a/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3ebbb83
--- /dev/null
+++ b/test/tint/expressions/binary/add/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 1.0h;
+  half const b = 2.0h;
+}
diff --git a/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b959d37
--- /dev/null
+++ b/test/tint/expressions/binary/add/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 1.0f;
+  float const b = 2.0f;
+}
diff --git a/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cba1693
--- /dev/null
+++ b/test/tint/expressions/binary/add/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 2;
+}
diff --git a/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/add/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/add/scalar-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/scalar-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a505df7
--- /dev/null
+++ b/test/tint/expressions/binary/add/scalar-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 4.0h;
+  half3 const b = half3(1.0h, 2.0h, 3.0h);
+}
diff --git a/test/tint/expressions/binary/add/scalar-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/scalar-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..51e1b1b
--- /dev/null
+++ b/test/tint/expressions/binary/add/scalar-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 4.0f;
+  float3 const b = float3(1.0f, 2.0f, 3.0f);
+}
diff --git a/test/tint/expressions/binary/add/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..878cca2e6
--- /dev/null
+++ b/test/tint/expressions/binary/add/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 4;
+  int3 const b = int3(1, 2, 3);
+}
diff --git a/test/tint/expressions/binary/add/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2f882cb
--- /dev/null
+++ b/test/tint/expressions/binary/add/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 4u;
+  uint3 const b = uint3(1u, 2u, 3u);
+}
diff --git a/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9f8e17
--- /dev/null
+++ b/test/tint/expressions/binary/add/vec3-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half const b = 4.0h;
+}
diff --git a/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5f7496b
--- /dev/null
+++ b/test/tint/expressions/binary/add/vec3-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float const b = 4.0f;
+}
diff --git a/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0a9e3c3
--- /dev/null
+++ b/test/tint/expressions/binary/add/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int const b = 4;
+}
diff --git a/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..15f8d71
--- /dev/null
+++ b/test/tint/expressions/binary/add/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint const b = 4u;
+}
diff --git a/test/tint/expressions/binary/add/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d8ff0a8
--- /dev/null
+++ b/test/tint/expressions/binary/add/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half3 const b = half3(4.0h, 5.0h, 6.0h);
+}
diff --git a/test/tint/expressions/binary/add/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0851e67
--- /dev/null
+++ b/test/tint/expressions/binary/add/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float3 const b = float3(4.0f, 5.0f, 6.0f);
+}
diff --git a/test/tint/expressions/binary/add/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5041ed9
--- /dev/null
+++ b/test/tint/expressions/binary/add/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(4, 5, 6);
+}
diff --git a/test/tint/expressions/binary/add/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/add/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/add/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2276dc3
--- /dev/null
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool const a = true;
+  bool const b = false;
+}
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cba1693
--- /dev/null
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 2;
+}
diff --git a/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/bit-and/vec3-vec3/bool.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-and/vec3-vec3/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3b7447d
--- /dev/null
+++ b/test/tint/expressions/binary/bit-and/vec3-vec3/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool3 const a = bool3(true, true, false);
+  bool3 const b = bool3(true, false, true);
+}
diff --git a/test/tint/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5041ed9
--- /dev/null
+++ b/test/tint/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(4, 5, 6);
+}
diff --git a/test/tint/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cba1693
--- /dev/null
+++ b/test/tint/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 2;
+}
diff --git a/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5041ed9
--- /dev/null
+++ b/test/tint/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(4, 5, 6);
+}
diff --git a/test/tint/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cba1693
--- /dev/null
+++ b/test/tint/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 2;
+}
diff --git a/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5041ed9
--- /dev/null
+++ b/test/tint/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(4, 5, 6);
+}
diff --git a/test/tint/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3ebbb83
--- /dev/null
+++ b/test/tint/expressions/binary/div/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 1.0h;
+  half const b = 2.0h;
+}
diff --git a/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b959d37
--- /dev/null
+++ b/test/tint/expressions/binary/div/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 1.0f;
+  float const b = 2.0f;
+}
diff --git a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cba1693
--- /dev/null
+++ b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 2;
+}
diff --git a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/div/scalar-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a505df7
--- /dev/null
+++ b/test/tint/expressions/binary/div/scalar-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 4.0h;
+  half3 const b = half3(1.0h, 2.0h, 3.0h);
+}
diff --git a/test/tint/expressions/binary/div/scalar-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..51e1b1b
--- /dev/null
+++ b/test/tint/expressions/binary/div/scalar-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 4.0f;
+  float3 const b = float3(1.0f, 2.0f, 3.0f);
+}
diff --git a/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..878cca2e6
--- /dev/null
+++ b/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 4;
+  int3 const b = int3(1, 2, 3);
+}
diff --git a/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2f882cb
--- /dev/null
+++ b/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 4u;
+  uint3 const b = uint3(1u, 2u, 3u);
+}
diff --git a/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9f8e17
--- /dev/null
+++ b/test/tint/expressions/binary/div/vec3-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half const b = 4.0h;
+}
diff --git a/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5f7496b
--- /dev/null
+++ b/test/tint/expressions/binary/div/vec3-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float const b = 4.0f;
+}
diff --git a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0a9e3c3
--- /dev/null
+++ b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int const b = 4;
+}
diff --git a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..15f8d71
--- /dev/null
+++ b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint const b = 4u;
+}
diff --git a/test/tint/expressions/binary/div/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d8ff0a8
--- /dev/null
+++ b/test/tint/expressions/binary/div/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half3 const b = half3(4.0h, 5.0h, 6.0h);
+}
diff --git a/test/tint/expressions/binary/div/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0851e67
--- /dev/null
+++ b/test/tint/expressions/binary/div/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float3 const b = float3(4.0f, 5.0f, 6.0f);
+}
diff --git a/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5041ed9
--- /dev/null
+++ b/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(4, 5, 6);
+}
diff --git a/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f63b8fd
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 1.0h;
+  half const b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..975ccb2
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 1.0f;
+  float const b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a5d4f90
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 0;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7943893
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 0u;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2a3947e
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 4.0h;
+  half3 const b = half3(0.0h, 2.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..16b88cc
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 4.0f;
+  float3 const b = float3(0.0f, 2.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bc05a99
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 4;
+  int3 const b = int3(0, 2, 0);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ede1555
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 4u;
+  uint3 const b = uint3(0u, 2u, 0u);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4210527
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half const b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0249176
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float const b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bbc470f
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int const b = 0;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e998022
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint const b = 0u;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8c5d32c
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half3 const b = half3(0.0h, 5.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e3f790d
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float3 const b = float3(0.0f, 5.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3678ad1
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(0, 5, 0);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ae81ed3
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(0u, 5u, 0u);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..42d4db2
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half a = 1.0h;
+  half b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4855ca8
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float a = 1.0f;
+  float b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a7840c1
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 1;
+  int b = 0;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a8e41ca
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint a = 1u;
+  uint b = 0u;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a49122d
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half a = 4.0h;
+  half3 b = half3(0.0h, 2.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..60934f0
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float a = 4.0f;
+  float3 b = float3(0.0f, 2.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..214ed33
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 4;
+  int3 b = int3(0, 2, 0);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cc3dec0
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint a = 4u;
+  uint3 b = uint3(0u, 2u, 0u);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3c2d549
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 a = half3(1.0h, 2.0h, 3.0h);
+  half b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2da5cee
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 a = float3(1.0f, 2.0f, 3.0f);
+  float b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a93d4f1
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 a = int3(1, 2, 3);
+  int b = 0;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cbe9efc
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 a = uint3(1u, 2u, 3u);
+  uint b = 0u;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fdc0b2c
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 a = half3(1.0h, 2.0h, 3.0h);
+  half3 b = half3(0.0h, 5.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6772e01
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 a = float3(1.0f, 2.0f, 3.0f);
+  float3 b = float3(0.0f, 5.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b7aa27e
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 a = int3(1, 2, 3);
+  int3 b = int3(0, 5, 0);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1784f68
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 a = uint3(1u, 2u, 3u);
+  uint3 b = uint3(0u, 5u, 0u);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..42d4db2
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half a = 1.0h;
+  half b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4855ca8
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float a = 1.0f;
+  float b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a7840c1
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 1;
+  int b = 0;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a8e41ca
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint a = 1u;
+  uint b = 0u;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a49122d
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half a = 4.0h;
+  half3 b = half3(0.0h, 2.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..60934f0
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float a = 4.0f;
+  float3 b = float3(0.0f, 2.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..214ed33
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 4;
+  int3 b = int3(0, 2, 0);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cc3dec0
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint a = 4u;
+  uint3 b = uint3(0u, 2u, 0u);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3c2d549
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 a = half3(1.0h, 2.0h, 3.0h);
+  half b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2da5cee
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 a = float3(1.0f, 2.0f, 3.0f);
+  float b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a93d4f1
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 a = int3(1, 2, 3);
+  int b = 0;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cbe9efc
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 a = uint3(1u, 2u, 3u);
+  uint b = 0u;
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fdc0b2c
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 a = half3(1.0h, 2.0h, 3.0h);
+  half3 b = half3(0.0h, 5.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6772e01
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 a = float3(1.0f, 2.0f, 3.0f);
+  float3 b = float3(0.0f, 5.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b7aa27e
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 a = int3(1, 2, 3);
+  int3 b = int3(0, 5, 0);
+}
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1784f68
--- /dev/null
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 a = uint3(1u, 2u, 3u);
+  uint3 b = uint3(0u, 5u, 0u);
+}
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..12bc740
--- /dev/null
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..786f22b
--- /dev/null
+++ b/test/tint/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3ebbb83
--- /dev/null
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 1.0h;
+  half const b = 2.0h;
+}
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b959d37
--- /dev/null
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 1.0f;
+  float const b = 2.0f;
+}
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cba1693
--- /dev/null
+++ b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 2;
+}
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a505df7
--- /dev/null
+++ b/test/tint/expressions/binary/mod/scalar-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 4.0h;
+  half3 const b = half3(1.0h, 2.0h, 3.0h);
+}
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..51e1b1b
--- /dev/null
+++ b/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 4.0f;
+  float3 const b = float3(1.0f, 2.0f, 3.0f);
+}
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..878cca2e6
--- /dev/null
+++ b/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 4;
+  int3 const b = int3(1, 2, 3);
+}
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2f882cb
--- /dev/null
+++ b/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 4u;
+  uint3 const b = uint3(1u, 2u, 3u);
+}
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9f8e17
--- /dev/null
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half const b = 4.0h;
+}
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5f7496b
--- /dev/null
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float const b = 4.0f;
+}
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0a9e3c3
--- /dev/null
+++ b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int const b = 4;
+}
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..15f8d71
--- /dev/null
+++ b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint const b = 4u;
+}
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d8ff0a8
--- /dev/null
+++ b/test/tint/expressions/binary/mod/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half3 const b = half3(4.0h, 5.0h, 6.0h);
+}
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0851e67
--- /dev/null
+++ b/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float3 const b = float3(4.0f, 5.0f, 6.0f);
+}
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5041ed9
--- /dev/null
+++ b/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(4, 5, 6);
+}
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f63b8fd
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 1.0h;
+  half const b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..975ccb2
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 1.0f;
+  float const b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a5d4f90
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 0;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7943893
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 0u;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bc05a99
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 4;
+  int3 const b = int3(0, 2, 0);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ede1555
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 4u;
+  uint3 const b = uint3(0u, 2u, 0u);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bbc470f
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int const b = 0;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e998022
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint const b = 0u;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8c5d32c
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half3 const b = half3(0.0h, 5.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e3f790d
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float3 const b = float3(0.0f, 5.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3678ad1
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(0, 5, 0);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ae81ed3
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(0u, 5u, 0u);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..42d4db2
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half a = 1.0h;
+  half b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4855ca8
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float a = 1.0f;
+  float b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a7840c1
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 1;
+  int b = 0;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a8e41ca
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint a = 1u;
+  uint b = 0u;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..214ed33
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 4;
+  int3 b = int3(0, 2, 0);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cc3dec0
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint a = 4u;
+  uint3 b = uint3(0u, 2u, 0u);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a93d4f1
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 a = int3(1, 2, 3);
+  int b = 0;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cbe9efc
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 a = uint3(1u, 2u, 3u);
+  uint b = 0u;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fdc0b2c
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 a = half3(1.0h, 2.0h, 3.0h);
+  half3 b = half3(0.0h, 5.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6772e01
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 a = float3(1.0f, 2.0f, 3.0f);
+  float3 b = float3(0.0f, 5.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b7aa27e
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 a = int3(1, 2, 3);
+  int3 b = int3(0, 5, 0);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1784f68
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 a = uint3(1u, 2u, 3u);
+  uint3 b = uint3(0u, 5u, 0u);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..42d4db2
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half a = 1.0h;
+  half b = 0.0h;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4855ca8
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float a = 1.0f;
+  float b = 0.0f;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a7840c1
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 1;
+  int b = 0;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a8e41ca
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint a = 1u;
+  uint b = 0u;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..214ed33
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 4;
+  int3 b = int3(0, 2, 0);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cc3dec0
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint a = 4u;
+  uint3 b = uint3(0u, 2u, 0u);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a93d4f1
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 a = int3(1, 2, 3);
+  int b = 0;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cbe9efc
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 a = uint3(1u, 2u, 3u);
+  uint b = 0u;
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fdc0b2c
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 a = half3(1.0h, 2.0h, 3.0h);
+  half3 b = half3(0.0h, 5.0h, 0.0h);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6772e01
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 a = float3(1.0f, 2.0f, 3.0f);
+  float3 b = float3(0.0f, 5.0f, 0.0f);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b7aa27e
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 a = int3(1, 2, 3);
+  int3 b = int3(0, 5, 0);
+}
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1784f68
--- /dev/null
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 a = uint3(1u, 2u, 3u);
+  uint3 b = uint3(0u, 5u, 0u);
+}
diff --git a/test/tint/expressions/binary/mul/mat2x4-mat4x2/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat2x4-mat4x2/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..38d35d4
--- /dev/null
+++ b/test/tint/expressions/binary/mul/mat2x4-mat4x2/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2x4 const a = half2x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h));
+  half4x2 const b = half4x2(half2(-1.0h, -2.0h), half2(-3.0h, -4.0h), half2(-5.0h, -6.0h), half2(-7.0h, -8.0h));
+}
diff --git a/test/tint/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e6331b8
--- /dev/null
+++ b/test/tint/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2x4 const a = float2x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f));
+  float4x2 const b = float4x2(float2(-1.0f, -2.0f), float2(-3.0f, -4.0f), float2(-5.0f, -6.0f), float2(-7.0f, -8.0f));
+}
diff --git a/test/tint/expressions/binary/mul/mat3x3-mat3x3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat3x3-mat3x3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d6c3ec1
--- /dev/null
+++ b/test/tint/expressions/binary/mul/mat3x3-mat3x3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3x3 const a = half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
+  half3x3 const b = half3x3(half3(-1.0h, -2.0h, -3.0h), half3(-4.0h, -5.0h, -6.0h), half3(-7.0h, -8.0h, -9.0h));
+}
diff --git a/test/tint/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1172bde
--- /dev/null
+++ b/test/tint/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3x3 const a = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+  float3x3 const b = float3x3(float3(-1.0f, -2.0f, -3.0f), float3(-4.0f, -5.0f, -6.0f), float3(-7.0f, -8.0f, -9.0f));
+}
diff --git a/test/tint/expressions/binary/mul/mat4x2-mat2x4/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat4x2-mat2x4/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..85374b1
--- /dev/null
+++ b/test/tint/expressions/binary/mul/mat4x2-mat2x4/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4x2 const a = half4x2(half2(-1.0h, -2.0h), half2(-3.0h, -4.0h), half2(-5.0h, -6.0h), half2(-7.0h, -8.0h));
+  half2x4 const b = half2x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h));
+}
diff --git a/test/tint/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0a59737
--- /dev/null
+++ b/test/tint/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float4x2 const a = float4x2(float2(-1.0f, -2.0f), float2(-3.0f, -4.0f), float2(-5.0f, -6.0f), float2(-7.0f, -8.0f));
+  float2x4 const b = float2x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f));
+}
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3ebbb83
--- /dev/null
+++ b/test/tint/expressions/binary/mul/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 1.0h;
+  half const b = 2.0h;
+}
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b959d37
--- /dev/null
+++ b/test/tint/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 1.0f;
+  float const b = 2.0f;
+}
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cba1693
--- /dev/null
+++ b/test/tint/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 2;
+}
diff --git a/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/mul/scalar-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/scalar-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a505df7
--- /dev/null
+++ b/test/tint/expressions/binary/mul/scalar-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 4.0h;
+  half3 const b = half3(1.0h, 2.0h, 3.0h);
+}
diff --git a/test/tint/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..51e1b1b
--- /dev/null
+++ b/test/tint/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 4.0f;
+  float3 const b = float3(1.0f, 2.0f, 3.0f);
+}
diff --git a/test/tint/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..878cca2e6
--- /dev/null
+++ b/test/tint/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 4;
+  int3 const b = int3(1, 2, 3);
+}
diff --git a/test/tint/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2f882cb
--- /dev/null
+++ b/test/tint/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 4u;
+  uint3 const b = uint3(1u, 2u, 3u);
+}
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9f8e17
--- /dev/null
+++ b/test/tint/expressions/binary/mul/vec3-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half const b = 4.0h;
+}
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5f7496b
--- /dev/null
+++ b/test/tint/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float const b = 4.0f;
+}
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0a9e3c3
--- /dev/null
+++ b/test/tint/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int const b = 4;
+}
diff --git a/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..15f8d71
--- /dev/null
+++ b/test/tint/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint const b = 4u;
+}
diff --git a/test/tint/expressions/binary/mul/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d8ff0a8
--- /dev/null
+++ b/test/tint/expressions/binary/mul/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half3 const b = half3(4.0h, 5.0h, 6.0h);
+}
diff --git a/test/tint/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0851e67
--- /dev/null
+++ b/test/tint/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float3 const b = float3(4.0f, 5.0f, 6.0f);
+}
diff --git a/test/tint/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5041ed9
--- /dev/null
+++ b/test/tint/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(4, 5, 6);
+}
diff --git a/test/tint/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..12bc740
--- /dev/null
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..786f22b
--- /dev/null
+++ b/test/tint/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/binary/sub/mat3x3-mat3x3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/mat3x3-mat3x3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d6c3ec1
--- /dev/null
+++ b/test/tint/expressions/binary/sub/mat3x3-mat3x3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3x3 const a = half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
+  half3x3 const b = half3x3(half3(-1.0h, -2.0h, -3.0h), half3(-4.0h, -5.0h, -6.0h), half3(-7.0h, -8.0h, -9.0h));
+}
diff --git a/test/tint/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1172bde
--- /dev/null
+++ b/test/tint/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3x3 const a = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+  float3x3 const b = float3x3(float3(-1.0f, -2.0f, -3.0f), float3(-4.0f, -5.0f, -6.0f), float3(-7.0f, -8.0f, -9.0f));
+}
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3ebbb83
--- /dev/null
+++ b/test/tint/expressions/binary/sub/scalar-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 1.0h;
+  half const b = 2.0h;
+}
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b959d37
--- /dev/null
+++ b/test/tint/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 1.0f;
+  float const b = 2.0f;
+}
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cba1693
--- /dev/null
+++ b/test/tint/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const b = 2;
+}
diff --git a/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd56cad
--- /dev/null
+++ b/test/tint/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 1u;
+  uint const b = 2u;
+}
diff --git a/test/tint/expressions/binary/sub/scalar-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/scalar-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a505df7
--- /dev/null
+++ b/test/tint/expressions/binary/sub/scalar-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const a = 4.0h;
+  half3 const b = half3(1.0h, 2.0h, 3.0h);
+}
diff --git a/test/tint/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..51e1b1b
--- /dev/null
+++ b/test/tint/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const a = 4.0f;
+  float3 const b = float3(1.0f, 2.0f, 3.0f);
+}
diff --git a/test/tint/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..878cca2e6
--- /dev/null
+++ b/test/tint/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 4;
+  int3 const b = int3(1, 2, 3);
+}
diff --git a/test/tint/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2f882cb
--- /dev/null
+++ b/test/tint/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const a = 4u;
+  uint3 const b = uint3(1u, 2u, 3u);
+}
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9f8e17
--- /dev/null
+++ b/test/tint/expressions/binary/sub/vec3-scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half const b = 4.0h;
+}
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5f7496b
--- /dev/null
+++ b/test/tint/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float const b = 4.0f;
+}
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0a9e3c3
--- /dev/null
+++ b/test/tint/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int const b = 4;
+}
diff --git a/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..15f8d71
--- /dev/null
+++ b/test/tint/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint const b = 4u;
+}
diff --git a/test/tint/expressions/binary/sub/vec3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/vec3-vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d8ff0a8
--- /dev/null
+++ b/test/tint/expressions/binary/sub/vec3-vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half3 const b = half3(4.0h, 5.0h, 6.0h);
+}
diff --git a/test/tint/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0851e67
--- /dev/null
+++ b/test/tint/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const a = float3(1.0f, 2.0f, 3.0f);
+  float3 const b = float3(4.0f, 5.0f, 6.0f);
+}
diff --git a/test/tint/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5041ed9
--- /dev/null
+++ b/test/tint/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const a = int3(1, 2, 3);
+  int3 const b = int3(4, 5, 6);
+}
diff --git a/test/tint/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..685f22d
--- /dev/null
+++ b/test/tint/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const a = uint3(1u, 2u, 3u);
+  uint3 const b = uint3(4u, 5u, 6u);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9065780
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float4 const b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..dac3cc1
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int4 const b = int4(1073757184, -1006616064, -998242304, 987654321);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8ec8122
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint4 const b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9065780
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float4 const b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..dac3cc1
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int4 const b = int4(1073757184, -1006616064, -998242304, 987654321);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8ec8122
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint4 const b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9065780
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float4 const b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..dac3cc1
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int4 const b = int4(1073757184, -1006616064, -998242304, 987654321);
+}
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8ec8122
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint4 const b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
+}
diff --git a/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..243c681
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half const b = 1.0h;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6c651f7
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const b = 2.003662109375f;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..39045e6
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const b = 1073757184;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b76edda
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const b = 1073757184u;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f061333
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2 const b = half2(1.0h, 2.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6c651f7
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const b = 2.003662109375f;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..39045e6
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const b = 1073757184;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b76edda
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const b = 1073757184u;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f061333
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2 const b = half2(1.0h, 2.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..33316aa
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const b = 2147483648u;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6c651f7
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const b = 2.003662109375f;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..39045e6
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const b = 1073757184;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b76edda
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const b = 1073757184u;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f061333
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2 const b = half2(1.0h, 2.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6c651f7
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float const b = 2.003662109375f;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..39045e6
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const b = 1073757184;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b76edda
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint const b = 1073757184u;
+}
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f061333
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2 const b = half2(1.0h, 2.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..438f49c
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 const b = half3(1.0h, 2.0h, 3.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1c1d109
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2 const b = float2(2.003662109375f, -513.03125f);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6b8e61b
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int2 const b = int2(1073757184, -1006616064);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8b43e6e
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint2 const b = uint2(1073757184u, 3288351232u);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..86b7889
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4 const b = half4(1.0h, 2.0h, 3.0h, -4.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1c1d109
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2 const b = float2(2.003662109375f, -513.03125f);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6b8e61b
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int2 const b = int2(1073757184, -1006616064);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8b43e6e
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint2 const b = uint2(1073757184u, 3288351232u);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..86b7889
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4 const b = half4(1.0h, 2.0h, 3.0h, -4.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1c1d109
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2 const b = float2(2.003662109375f, -513.03125f);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6b8e61b
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int2 const b = int2(1073757184, -1006616064);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8b43e6e
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint2 const b = uint2(1073757184u, 3288351232u);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..86b7889
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4 const b = half4(1.0h, 2.0h, 3.0h, -4.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1c1d109
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2 const b = float2(2.003662109375f, -513.03125f);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6b8e61b
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int2 const b = int2(1073757184, -1006616064);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8b43e6e
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint2 const b = uint2(1073757184u, 3288351232u);
+}
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..86b7889
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4 const b = half4(1.0h, 2.0h, 3.0h, -4.0h);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e508f2f
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const b = float3(2.003662109375f, -513.03125f, -1024.25f);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4d37f26
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const b = int3(1073757184, -1006616064, -998242304);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9d17503
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const b = uint3(1073757184u, 3288351232u, 3296724992u);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e508f2f
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const b = float3(2.003662109375f, -513.03125f, -1024.25f);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4d37f26
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const b = int3(1073757184, -1006616064, -998242304);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9d17503
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const b = uint3(1073757184u, 3288351232u, 3296724992u);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e508f2f
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 const b = float3(2.003662109375f, -513.03125f, -1024.25f);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4d37f26
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 const b = int3(1073757184, -1006616064, -998242304);
+}
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9d17503
--- /dev/null
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 const b = uint3(1073757184u, 3288351232u, 3296724992u);
+}
diff --git a/test/tint/expressions/literals/intmin.wgsl.expected.ir.msl b/test/tint/expressions/literals/intmin.wgsl.expected.ir.msl
new file mode 100644
index 0000000..007aa7f
--- /dev/null
+++ b/test/tint/expressions/literals/intmin.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+int add_int_min_explicit() {
+  int a = (-2147483647 - 1);
+  int b = (a + 1);
+  int c = -2147483647;
+  return c;
+}
diff --git a/test/tint/expressions/splat/expression/bool.wgsl.expected.ir.msl b/test/tint/expressions/splat/expression/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..07df88b
--- /dev/null
+++ b/test/tint/expressions/splat/expression/bool.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool2 v2 = bool2(true);
+  bool3 v3 = bool3(true);
+  bool4 v4 = bool4(true);
+}
diff --git a/test/tint/expressions/splat/expression/f16.wgsl.expected.ir.msl b/test/tint/expressions/splat/expression/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bd97013
--- /dev/null
+++ b/test/tint/expressions/splat/expression/f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2 v2 = half2(3.0h);
+  half3 v3 = half3(3.0h);
+  half4 v4 = half4(3.0h);
+}
diff --git a/test/tint/expressions/splat/expression/f32.wgsl.expected.ir.msl b/test/tint/expressions/splat/expression/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c043256
--- /dev/null
+++ b/test/tint/expressions/splat/expression/f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2 v2 = float2(3.0f);
+  float3 v3 = float3(3.0f);
+  float4 v4 = float4(3.0f);
+}
diff --git a/test/tint/expressions/splat/expression/i32.wgsl.expected.ir.msl b/test/tint/expressions/splat/expression/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c5437ef
--- /dev/null
+++ b/test/tint/expressions/splat/expression/i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int2 v2 = int2(3);
+  int3 v3 = int3(3);
+  int4 v4 = int4(3);
+}
diff --git a/test/tint/expressions/splat/expression/u32.wgsl.expected.ir.msl b/test/tint/expressions/splat/expression/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4f6ce54
--- /dev/null
+++ b/test/tint/expressions/splat/expression/u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint2 v2 = uint2(3u);
+  uint3 v3 = uint3(3u);
+  uint4 v4 = uint4(3u);
+}
diff --git a/test/tint/expressions/splat/immediate/bool.wgsl.expected.ir.msl b/test/tint/expressions/splat/immediate/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..07df88b
--- /dev/null
+++ b/test/tint/expressions/splat/immediate/bool.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool2 v2 = bool2(true);
+  bool3 v3 = bool3(true);
+  bool4 v4 = bool4(true);
+}
diff --git a/test/tint/expressions/splat/immediate/f16.wgsl.expected.ir.msl b/test/tint/expressions/splat/immediate/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7487402
--- /dev/null
+++ b/test/tint/expressions/splat/immediate/f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2 v2 = half2(1.0h);
+  half3 v3 = half3(1.0h);
+  half4 v4 = half4(1.0h);
+}
diff --git a/test/tint/expressions/splat/immediate/f32.wgsl.expected.ir.msl b/test/tint/expressions/splat/immediate/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4c04a5d
--- /dev/null
+++ b/test/tint/expressions/splat/immediate/f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2 v2 = float2(1.0f);
+  float3 v3 = float3(1.0f);
+  float4 v4 = float4(1.0f);
+}
diff --git a/test/tint/expressions/splat/immediate/i32.wgsl.expected.ir.msl b/test/tint/expressions/splat/immediate/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d13ea0f
--- /dev/null
+++ b/test/tint/expressions/splat/immediate/i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int2 v2 = int2(1);
+  int3 v3 = int3(1);
+  int4 v4 = int4(1);
+}
diff --git a/test/tint/expressions/splat/immediate/u32.wgsl.expected.ir.msl b/test/tint/expressions/splat/immediate/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d4136cf
--- /dev/null
+++ b/test/tint/expressions/splat/immediate/u32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint2 v2 = uint2(1u);
+  uint3 v3 = uint3(1u);
+  uint4 v4 = uint4(1u);
+}
diff --git a/test/tint/expressions/splat/var/bool.wgsl.expected.ir.msl b/test/tint/expressions/splat/var/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cfe4b5d
--- /dev/null
+++ b/test/tint/expressions/splat/var/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool v = true;
+  bool2 v2 = bool2(v);
+  bool3 v3 = bool3(v);
+  bool4 v4 = bool4(v);
+}
diff --git a/test/tint/expressions/splat/var/f16.wgsl.expected.ir.msl b/test/tint/expressions/splat/var/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6b6bcd3
--- /dev/null
+++ b/test/tint/expressions/splat/var/f16.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half v = 3.0h;
+  half2 v2 = half2(v);
+  half3 v3 = half3(v);
+  half4 v4 = half4(v);
+}
diff --git a/test/tint/expressions/splat/var/f32.wgsl.expected.ir.msl b/test/tint/expressions/splat/var/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1a00596
--- /dev/null
+++ b/test/tint/expressions/splat/var/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float v = 3.0f;
+  float2 v2 = float2(v);
+  float3 v3 = float3(v);
+  float4 v4 = float4(v);
+}
diff --git a/test/tint/expressions/splat/var/i32.wgsl.expected.ir.msl b/test/tint/expressions/splat/var/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b5d9367
--- /dev/null
+++ b/test/tint/expressions/splat/var/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int v = 3;
+  int2 v2 = int2(v);
+  int3 v3 = int3(v);
+  int4 v4 = int4(v);
+}
diff --git a/test/tint/expressions/splat/var/u32.wgsl.expected.ir.msl b/test/tint/expressions/splat/var/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..07a73af
--- /dev/null
+++ b/test/tint/expressions/splat/var/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint v = 3u;
+  uint2 v2 = uint2(v);
+  uint3 v3 = uint3(v);
+  uint4 v4 = uint4(v);
+}
diff --git a/test/tint/expressions/splat/with_swizzle/f16.wgsl.expected.ir.msl b/test/tint/expressions/splat/with_swizzle/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f4c8c9d
--- /dev/null
+++ b/test/tint/expressions/splat/with_swizzle/f16.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half a = 1.0h;
+  half b = 1.0h;
+  half c = 1.0h;
+}
diff --git a/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.ir.msl b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e5d5442
--- /dev/null
+++ b/test/tint/expressions/splat/with_swizzle/f32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float a = 1.0f;
+  float b = 1.0f;
+  float c = 1.0f;
+}
diff --git a/test/tint/expressions/type_conv/mat2x2/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x2/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f476304
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat2x2/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x2 u = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
diff --git a/test/tint/expressions/type_conv/mat2x2/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x2/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..32c02a5
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat2x2/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2x2 u = half2x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h));
diff --git a/test/tint/expressions/type_conv/mat2x3/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x3/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e275a8b
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat2x3/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x3 u = float2x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f));
diff --git a/test/tint/expressions/type_conv/mat2x3/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x3/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..112f78c
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat2x3/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2x3 u = half2x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h));
diff --git a/test/tint/expressions/type_conv/mat2x4/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x4/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4989270
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat2x4/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x4 u = float2x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f));
diff --git a/test/tint/expressions/type_conv/mat2x4/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x4/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5e79b85
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat2x4/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2x4 u = half2x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h));
diff --git a/test/tint/expressions/type_conv/mat3x2/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x2/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..109ca80
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat3x2/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x2 u = float3x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f));
diff --git a/test/tint/expressions/type_conv/mat3x2/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x2/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7f3eb76
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat3x2/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3x2 u = half3x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h));
diff --git a/test/tint/expressions/type_conv/mat3x3/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x3/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..98944b6
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat3x3/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x3 u = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
diff --git a/test/tint/expressions/type_conv/mat3x3/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x3/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7f70be3
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat3x3/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3x3 u = half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
diff --git a/test/tint/expressions/type_conv/mat3x4/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x4/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6a0cf8e
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat3x4/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x4 u = float3x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f));
diff --git a/test/tint/expressions/type_conv/mat3x4/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x4/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9edd653
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat3x4/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3x4 u = half3x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h));
diff --git a/test/tint/expressions/type_conv/mat4x2/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x2/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eea749f
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat4x2/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4x2 u = float4x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), float2(7.0f, 8.0f));
diff --git a/test/tint/expressions/type_conv/mat4x2/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x2/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..30e3527
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat4x2/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4x2 u = half4x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h), half2(7.0h, 8.0h));
diff --git a/test/tint/expressions/type_conv/mat4x3/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x3/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..67a2e51
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat4x3/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4x3 u = float4x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), float3(10.0f, 11.0f, 12.0f));
diff --git a/test/tint/expressions/type_conv/mat4x3/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x3/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ffb2c81
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat4x3/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4x3 u = half4x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h), half3(10.0h, 11.0h, 12.0h));
diff --git a/test/tint/expressions/type_conv/mat4x4/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x4/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..675c2ec
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat4x4/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4x4 u = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
diff --git a/test/tint/expressions/type_conv/mat4x4/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x4/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1b90074
--- /dev/null
+++ b/test/tint/expressions/type_conv/mat4x4/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4x4 u = half4x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h), half4(13.0h, 14.0h, 15.0h, 16.0h));
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..570be9b
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half u = 1.0h;
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9db9db8
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..47bca0d
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int u = 1;
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3126801
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint u = 1u;
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c4b1953
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool u = true;
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9db9db8
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..47bca0d
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int u = 1;
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3126801
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint u = 1u;
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c4b1953
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool u = true;
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..570be9b
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half u = 1.0h;
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..47bca0d
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int u = 1;
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3126801
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint u = 1u;
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c4b1953
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool u = true;
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..570be9b
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half u = 1.0h;
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9db9db8
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3126801
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint u = 1u;
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c4b1953
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool u = true;
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..570be9b
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half u = 1.0h;
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9db9db8
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..47bca0d
--- /dev/null
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int u = 1;
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7bf2352
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 u = half2(1.0h);
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b470051
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 u = float2(1.0f);
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a32b883
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 u = int2(1);
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6bfac8e
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 u = uint2(1u);
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a616059
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 u = bool2(true);
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b470051
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 u = float2(1.0f);
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a32b883
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 u = int2(1);
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6bfac8e
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 u = uint2(1u);
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a616059
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 u = bool2(true);
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7bf2352
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 u = half2(1.0h);
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a32b883
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 u = int2(1);
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6bfac8e
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 u = uint2(1u);
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a616059
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 u = bool2(true);
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7bf2352
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 u = half2(1.0h);
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b470051
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 u = float2(1.0f);
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6bfac8e
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 u = uint2(1u);
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a616059
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 u = bool2(true);
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7bf2352
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 u = half2(1.0h);
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b470051
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 u = float2(1.0f);
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a32b883
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 u = int2(1);
diff --git a/test/tint/expressions/type_conv/vec3/literal/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/bool-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1fe00b9
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/bool-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 u = half3(1.0h);
diff --git a/test/tint/expressions/type_conv/vec3/literal/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/bool-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b47b481
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/bool-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 u = float3(1.0f);
diff --git a/test/tint/expressions/type_conv/vec3/literal/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/bool-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c2d75f
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/bool-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 u = int3(1);
diff --git a/test/tint/expressions/type_conv/vec3/literal/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/bool-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ac08e95
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/bool-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 u = uint3(1u);
diff --git a/test/tint/expressions/type_conv/vec3/literal/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f16-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9256549
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/f16-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 u = bool3(true);
diff --git a/test/tint/expressions/type_conv/vec3/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b47b481
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 u = float3(1.0f);
diff --git a/test/tint/expressions/type_conv/vec3/literal/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f16-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c2d75f
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/f16-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 u = int3(1);
diff --git a/test/tint/expressions/type_conv/vec3/literal/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f16-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ac08e95
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/f16-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 u = uint3(1u);
diff --git a/test/tint/expressions/type_conv/vec3/literal/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9256549
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/f32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 u = bool3(true);
diff --git a/test/tint/expressions/type_conv/vec3/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1fe00b9
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 u = half3(1.0h);
diff --git a/test/tint/expressions/type_conv/vec3/literal/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c2d75f
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/f32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 u = int3(1);
diff --git a/test/tint/expressions/type_conv/vec3/literal/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ac08e95
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/f32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 u = uint3(1u);
diff --git a/test/tint/expressions/type_conv/vec3/literal/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/i32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9256549
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/i32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 u = bool3(true);
diff --git a/test/tint/expressions/type_conv/vec3/literal/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/i32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1fe00b9
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/i32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 u = half3(1.0h);
diff --git a/test/tint/expressions/type_conv/vec3/literal/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/i32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b47b481
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/i32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 u = float3(1.0f);
diff --git a/test/tint/expressions/type_conv/vec3/literal/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/i32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ac08e95
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/i32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 u = uint3(1u);
diff --git a/test/tint/expressions/type_conv/vec3/literal/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/u32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9256549
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/u32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 u = bool3(true);
diff --git a/test/tint/expressions/type_conv/vec3/literal/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/u32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1fe00b9
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/u32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 u = half3(1.0h);
diff --git a/test/tint/expressions/type_conv/vec3/literal/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/u32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b47b481
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/u32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 u = float3(1.0f);
diff --git a/test/tint/expressions/type_conv/vec3/literal/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/u32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c2d75f
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec3/literal/u32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 u = int3(1);
diff --git a/test/tint/expressions/type_conv/vec4/literal/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/bool-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7d9d594
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/bool-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 u = half4(1.0h);
diff --git a/test/tint/expressions/type_conv/vec4/literal/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/bool-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a87ee3f
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/bool-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 u = float4(1.0f);
diff --git a/test/tint/expressions/type_conv/vec4/literal/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/bool-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..785cd97
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/bool-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 u = int4(1);
diff --git a/test/tint/expressions/type_conv/vec4/literal/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/bool-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d1e3c40
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/bool-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 u = uint4(1u);
diff --git a/test/tint/expressions/type_conv/vec4/literal/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f16-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..df7652e
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/f16-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 u = bool4(true);
diff --git a/test/tint/expressions/type_conv/vec4/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f16-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a87ee3f
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/f16-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 u = float4(1.0f);
diff --git a/test/tint/expressions/type_conv/vec4/literal/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f16-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..785cd97
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/f16-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 u = int4(1);
diff --git a/test/tint/expressions/type_conv/vec4/literal/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f16-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d1e3c40
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/f16-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 u = uint4(1u);
diff --git a/test/tint/expressions/type_conv/vec4/literal/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..df7652e
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/f32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 u = bool4(true);
diff --git a/test/tint/expressions/type_conv/vec4/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7d9d594
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/f32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 u = half4(1.0h);
diff --git a/test/tint/expressions/type_conv/vec4/literal/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..785cd97
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/f32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 u = int4(1);
diff --git a/test/tint/expressions/type_conv/vec4/literal/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d1e3c40
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/f32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 u = uint4(1u);
diff --git a/test/tint/expressions/type_conv/vec4/literal/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/i32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..df7652e
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/i32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 u = bool4(true);
diff --git a/test/tint/expressions/type_conv/vec4/literal/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/i32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7d9d594
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/i32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 u = half4(1.0h);
diff --git a/test/tint/expressions/type_conv/vec4/literal/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/i32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a87ee3f
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/i32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 u = float4(1.0f);
diff --git a/test/tint/expressions/type_conv/vec4/literal/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/i32-u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d1e3c40
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/i32-u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 u = uint4(1u);
diff --git a/test/tint/expressions/type_conv/vec4/literal/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/u32-bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..df7652e
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/u32-bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 u = bool4(true);
diff --git a/test/tint/expressions/type_conv/vec4/literal/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/u32-f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7d9d594
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/u32-f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 u = half4(1.0h);
diff --git a/test/tint/expressions/type_conv/vec4/literal/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/u32-f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a87ee3f
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/u32-f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 u = float4(1.0f);
diff --git a/test/tint/expressions/type_conv/vec4/literal/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/u32-i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..785cd97
--- /dev/null
+++ b/test/tint/expressions/type_conv/vec4/literal/u32-i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 u = int4(1);
diff --git a/test/tint/expressions/type_ctor/array/explicit/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/abstract.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9a8928
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/abstract.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float, 2> arr = tint_array<float, 2>{1.0f, 2.0f};
+void f() {
+  tint_array<float, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/array/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/array/abstract.wgsl.expected.ir.msl
new file mode 100644
index 0000000..308730b
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/array/abstract.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<tint_array<float, 2>, 2> arr = tint_array<tint_array<float, 2>, 2>{tint_array<float, 2>{1.0f, 2.0f}, tint_array<float, 2>{3.0f, 4.0f}};
+void f() {
+  tint_array<tint_array<float, 2>, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/array/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/array/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..308730b
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/array/f32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<tint_array<float, 2>, 2> arr = tint_array<tint_array<float, 2>, 2>{tint_array<float, 2>{1.0f, 2.0f}, tint_array<float, 2>{3.0f, 4.0f}};
+void f() {
+  tint_array<tint_array<float, 2>, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9a8928
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/f32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float, 2> arr = tint_array<float, 2>{1.0f, 2.0f};
+void f() {
+  tint_array<float, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ff91c2d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/i32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<int, 2> arr = tint_array<int, 2>{1, 2};
+void f() {
+  tint_array<int, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/mat2x2/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/mat2x2/abstract.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eebeaad
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/mat2x2/abstract.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float2x2, 2> arr = tint_array<float2x2, 2>{float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f)), float2x2(float2(5.0f, 6.0f), float2(7.0f, 8.0f))};
+void f() {
+  tint_array<float2x2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/mat2x2/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/mat2x2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eebeaad
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/mat2x2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float2x2, 2> arr = tint_array<float2x2, 2>{float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f)), float2x2(float2(5.0f, 6.0f), float2(7.0f, 8.0f))};
+void f() {
+  tint_array<float2x2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7c73df8
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/u32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<uint, 2> arr = tint_array<uint, 2>{1u, 2u};
+void f() {
+  tint_array<uint, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/vec2/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/vec2/abstract.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fe1c892
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/vec2/abstract.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float2, 2> arr = tint_array<float2, 2>{float2(1.0f), float2(2.0f)};
+void f() {
+  tint_array<float2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/vec2/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/vec2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fe1c892
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/vec2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float2, 2> arr = tint_array<float2, 2>{float2(1.0f), float2(2.0f)};
+void f() {
+  tint_array<float2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/vec2/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/vec2/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..44f2746
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/vec2/i32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<int2, 2> arr = tint_array<int2, 2>{int2(1), int2(2)};
+void f() {
+  tint_array<int2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/explicit/vec2/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/vec2/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e7de8f2
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/explicit/vec2/u32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<uint2, 2> arr = tint_array<uint2, 2>{uint2(1u), uint2(2u)};
+void f() {
+  tint_array<uint2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/abstract.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ff91c2d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/abstract.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<int, 2> arr = tint_array<int, 2>{1, 2};
+void f() {
+  tint_array<int, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/array/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/array/abstract.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6373c40
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/array/abstract.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<tint_array<int, 2>, 2> arr = tint_array<tint_array<int, 2>, 2>{tint_array<int, 2>{1, 2}, tint_array<int, 2>{3, 4}};
+void f() {
+  tint_array<tint_array<int, 2>, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/array/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/array/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..308730b
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/array/f32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<tint_array<float, 2>, 2> arr = tint_array<tint_array<float, 2>, 2>{tint_array<float, 2>{1.0f, 2.0f}, tint_array<float, 2>{3.0f, 4.0f}};
+void f() {
+  tint_array<tint_array<float, 2>, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9a8928
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/f32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float, 2> arr = tint_array<float, 2>{1.0f, 2.0f};
+void f() {
+  tint_array<float, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ff91c2d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/i32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<int, 2> arr = tint_array<int, 2>{1, 2};
+void f() {
+  tint_array<int, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/mat2x2/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/mat2x2/abstract.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eebeaad
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/mat2x2/abstract.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float2x2, 2> arr = tint_array<float2x2, 2>{float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f)), float2x2(float2(5.0f, 6.0f), float2(7.0f, 8.0f))};
+void f() {
+  tint_array<float2x2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/mat2x2/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/mat2x2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eebeaad
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/mat2x2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float2x2, 2> arr = tint_array<float2x2, 2>{float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f)), float2x2(float2(5.0f, 6.0f), float2(7.0f, 8.0f))};
+void f() {
+  tint_array<float2x2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7c73df8
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/u32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<uint, 2> arr = tint_array<uint, 2>{1u, 2u};
+void f() {
+  tint_array<uint, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/vec2/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/vec2/abstract.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fe1c892
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/vec2/abstract.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float2, 2> arr = tint_array<float2, 2>{float2(1.0f), float2(2.0f)};
+void f() {
+  tint_array<float2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/vec2/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/vec2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fe1c892
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/vec2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<float2, 2> arr = tint_array<float2, 2>{float2(1.0f), float2(2.0f)};
+void f() {
+  tint_array<float2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/vec2/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/vec2/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..44f2746
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/vec2/i32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<int2, 2> arr = tint_array<int2, 2>{int2(1), int2(2)};
+void f() {
+  tint_array<int2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/array/inferred/vec2/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/vec2/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e7de8f2
--- /dev/null
+++ b/test/tint/expressions/type_ctor/array/inferred/vec2/u32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<uint2, 2> arr = tint_array<uint2, 2>{uint2(1u), uint2(2u)};
+void f() {
+  tint_array<uint2, 2> v = arr;
+}
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..33cf2d8
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 v = bool2(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1159ffb
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 v = half2(0.0h, 1.0h);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..956ec80
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 v = float2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0ddb857
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 v = int2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ece0809
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 v = uint2(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.ir.msl
new file mode 100644
index 0000000..956ec80
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 v = float2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0ddb857
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 v = int2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..33cf2d8
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 v = bool2(false, true);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1159ffb
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 v = half2(0.0h, 1.0h);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..956ec80
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 v = float2(0.0f, 1.0f);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0ddb857
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 v = int2(0, 1);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ece0809
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 v = uint2(0u, 1u);
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/zero.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/zero.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1254737
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec2/inferred/zero.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 f = float2(0.0f);
+thread int2 i = int2(0);
+thread uint2 u = uint2(0u);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..885d513
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 v = bool3(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0cb8cf8
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 v = half3(0.0h, 1.0h, 2.0h);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4101d05
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 v = float3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b49329d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 v = int3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4815de2
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 v = uint3(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4101d05
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 v = float3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b49329d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 v = int3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..885d513
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 v = bool3(false, true, false);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0cb8cf8
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 v = half3(0.0h, 1.0h, 2.0h);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4101d05
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 v = float3(0.0f, 1.0f, 2.0f);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b49329d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 v = int3(0, 1, 2);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4815de2
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 v = uint3(0u, 1u, 2u);
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/zero.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/zero.wgsl.expected.ir.msl
new file mode 100644
index 0000000..93371a1
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec3/inferred/zero.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 f = float3(0.0f);
+thread int3 i = int3(0);
+thread uint3 u = uint3(0u);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3a81db9
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 v = bool4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6847244
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 v = half4(0.0h, 1.0h, 2.0h, 3.0h);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7c24508
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d90e99d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 v = int4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..65cdb85
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 v = uint4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7c24508
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d90e99d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 v = int4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3a81db9
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 v = bool4(false, true, false, true);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6847244
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 v = half4(0.0h, 1.0h, 2.0h, 3.0h);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7c24508
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d90e99d
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 v = int4(0, 1, 2, 3);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..65cdb85
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 v = uint4(0u, 1u, 2u, 3u);
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/zero.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/zero.wgsl.expected.ir.msl
new file mode 100644
index 0000000..acd7234
--- /dev/null
+++ b/test/tint/expressions/type_ctor/vec4/inferred/zero.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 f = float4(0.0f);
+thread int4 i = int4(0);
+thread uint4 u = uint4(0u);
diff --git a/test/tint/expressions/zero_init/array/bool.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/array/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7b18978
--- /dev/null
+++ b/test/tint/expressions/zero_init/array/bool.wgsl.expected.ir.msl
@@ -0,0 +1,18 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void f() {
+  tint_array<bool, 4> v = tint_array<bool, 4>{};
+}
diff --git a/test/tint/expressions/zero_init/array/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/array/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f80962a
--- /dev/null
+++ b/test/tint/expressions/zero_init/array/f16.wgsl.expected.ir.msl
@@ -0,0 +1,18 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void f() {
+  tint_array<half, 4> v = tint_array<half, 4>{};
+}
diff --git a/test/tint/expressions/zero_init/array/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/array/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ab928ca
--- /dev/null
+++ b/test/tint/expressions/zero_init/array/f32.wgsl.expected.ir.msl
@@ -0,0 +1,18 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void f() {
+  tint_array<float, 4> v = tint_array<float, 4>{};
+}
diff --git a/test/tint/expressions/zero_init/array/i32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/array/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e67c14d
--- /dev/null
+++ b/test/tint/expressions/zero_init/array/i32.wgsl.expected.ir.msl
@@ -0,0 +1,18 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void f() {
+  tint_array<int, 4> v = tint_array<int, 4>{};
+}
diff --git a/test/tint/expressions/zero_init/array/struct.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/array/struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e9cfb41
--- /dev/null
+++ b/test/tint/expressions/zero_init/array/struct.wgsl.expected.ir.msl
@@ -0,0 +1,24 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+struct S {
+  int i;
+  uint u;
+  float f;
+  bool b;
+};
+
+void f() {
+  tint_array<S, 4> v = tint_array<S, 4>{};
+}
diff --git a/test/tint/expressions/zero_init/array/u32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/array/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1e707f2
--- /dev/null
+++ b/test/tint/expressions/zero_init/array/u32.wgsl.expected.ir.msl
@@ -0,0 +1,18 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void f() {
+  tint_array<uint, 4> v = tint_array<uint, 4>{};
+}
diff --git a/test/tint/expressions/zero_init/mat2x2/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat2x2/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..20e741f
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat2x2/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2x2 v = half2x2(half2(0.0h), half2(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat2x2/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat2x2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..15c9851
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat2x2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2x2 v = float2x2(float2(0.0f), float2(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/mat2x3/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat2x3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bf004b9
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat2x3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2x3 v = half2x3(half3(0.0h), half3(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat2x3/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat2x3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5589fd0
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat2x3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2x3 v = float2x3(float3(0.0f), float3(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/mat2x4/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat2x4/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8efc80d
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat2x4/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2x4 v = half2x4(half4(0.0h), half4(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat2x4/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat2x4/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e3c4487
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat2x4/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2x4 v = float2x4(float4(0.0f), float4(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/mat3x2/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat3x2/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8d92b85
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat3x2/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3x2 v = half3x2(half2(0.0h), half2(0.0h), half2(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat3x2/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat3x2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f8a539c
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat3x2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3x2 v = float3x2(float2(0.0f), float2(0.0f), float2(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/mat3x3/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat3x3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2b0f356
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat3x3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3x3 v = half3x3(half3(0.0h), half3(0.0h), half3(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat3x3/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat3x3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..018a8b2
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat3x3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3x3 v = float3x3(float3(0.0f), float3(0.0f), float3(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/mat3x4/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat3x4/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9cdc29f
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat3x4/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3x4 v = half3x4(half4(0.0h), half4(0.0h), half4(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat3x4/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat3x4/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8eba2e9
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat3x4/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3x4 v = float3x4(float4(0.0f), float4(0.0f), float4(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/mat4x2/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat4x2/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e63ca2b
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat4x2/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4x2 v = half4x2(half2(0.0h), half2(0.0h), half2(0.0h), half2(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat4x2/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat4x2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8625f7b
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat4x2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float4x2 v = float4x2(float2(0.0f), float2(0.0f), float2(0.0f), float2(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/mat4x3/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat4x3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2be2722
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat4x3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4x3 v = half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat4x3/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat4x3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fb4affc
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat4x3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float4x3 v = float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/mat4x4/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat4x4/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..49689f4
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat4x4/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4x4 v = half4x4(half4(0.0h), half4(0.0h), half4(0.0h), half4(0.0h));
+}
diff --git a/test/tint/expressions/zero_init/mat4x4/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/mat4x4/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b2ae2e2
--- /dev/null
+++ b/test/tint/expressions/zero_init/mat4x4/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float4x4 v = float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f));
+}
diff --git a/test/tint/expressions/zero_init/scalar/bool.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/scalar/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..48a4cdc
--- /dev/null
+++ b/test/tint/expressions/zero_init/scalar/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool v = false;
+}
diff --git a/test/tint/expressions/zero_init/scalar/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/scalar/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..449b000
--- /dev/null
+++ b/test/tint/expressions/zero_init/scalar/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half v = 0.0h;
+}
diff --git a/test/tint/expressions/zero_init/scalar/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/scalar/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ac5b307
--- /dev/null
+++ b/test/tint/expressions/zero_init/scalar/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float v = 0.0f;
+}
diff --git a/test/tint/expressions/zero_init/scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/scalar/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..316baf2
--- /dev/null
+++ b/test/tint/expressions/zero_init/scalar/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int v = 0;
+}
diff --git a/test/tint/expressions/zero_init/scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/scalar/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e7474dc
--- /dev/null
+++ b/test/tint/expressions/zero_init/scalar/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint v = 0u;
+}
diff --git a/test/tint/expressions/zero_init/struct/array.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/struct/array.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3dc63d9
--- /dev/null
+++ b/test/tint/expressions/zero_init/struct/array.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+struct S {
+  tint_array<float, 4> a;
+};
+
+void f() {
+  S v = S{};
+}
diff --git a/test/tint/expressions/zero_init/struct/scalar.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/struct/scalar.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c51bc92
--- /dev/null
+++ b/test/tint/expressions/zero_init/struct/scalar.wgsl.expected.ir.msl
@@ -0,0 +1,12 @@
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int i;
+  uint u;
+  float f;
+  bool b;
+};
+
+void f() {
+  S v = S{};
+}
diff --git a/test/tint/expressions/zero_init/vec2/bool.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec2/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..17979a514b
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec2/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool2 v = bool2(false);
+}
diff --git a/test/tint/expressions/zero_init/vec2/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec2/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..14aea75
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec2/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half2 v = half2(0.0h);
+}
diff --git a/test/tint/expressions/zero_init/vec2/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec2/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d4e8511
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec2/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float2 v = float2(0.0f);
+}
diff --git a/test/tint/expressions/zero_init/vec2/i32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec2/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..62dcdd6
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec2/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int2 v = int2(0);
+}
diff --git a/test/tint/expressions/zero_init/vec2/u32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec2/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3e2bbf9
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec2/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint2 v = uint2(0u);
+}
diff --git a/test/tint/expressions/zero_init/vec3/bool.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec3/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9a00c1e
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec3/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool3 v = bool3(false);
+}
diff --git a/test/tint/expressions/zero_init/vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec3/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8fd1974
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec3/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half3 v = half3(0.0h);
+}
diff --git a/test/tint/expressions/zero_init/vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec3/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bf2e3c4
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec3/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float3 v = float3(0.0f);
+}
diff --git a/test/tint/expressions/zero_init/vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec3/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1d7dcce
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec3/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int3 v = int3(0);
+}
diff --git a/test/tint/expressions/zero_init/vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec3/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..dc9783f
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec3/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint3 v = uint3(0u);
+}
diff --git a/test/tint/expressions/zero_init/vec4/bool.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec4/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..db5ba6d
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec4/bool.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool4 v = bool4(false);
+}
diff --git a/test/tint/expressions/zero_init/vec4/f16.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec4/f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d5a9b87
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec4/f16.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  half4 v = half4(0.0h);
+}
diff --git a/test/tint/expressions/zero_init/vec4/f32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec4/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..09d47b3
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec4/f32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  float4 v = float4(0.0f);
+}
diff --git a/test/tint/expressions/zero_init/vec4/i32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec4/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ec6f2b6
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec4/i32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int4 v = int4(0);
+}
diff --git a/test/tint/expressions/zero_init/vec4/u32.wgsl.expected.ir.msl b/test/tint/expressions/zero_init/vec4/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f365b12
--- /dev/null
+++ b/test/tint/expressions/zero_init/vec4/u32.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  uint4 v = uint4(0u);
+}
diff --git a/test/tint/extensions/parsing/basic.wgsl.expected.ir.msl b/test/tint/extensions/parsing/basic.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8afe5ea
--- /dev/null
+++ b/test/tint/extensions/parsing/basic.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 tint_symbol() {
+  return float4(0.10000000149011611938f, 0.20000000298023223877f, 0.30000001192092895508f, 0.40000000596046447754f);
+}
diff --git a/test/tint/extensions/parsing/duplicated_extensions.wgsl.expected.ir.msl b/test/tint/extensions/parsing/duplicated_extensions.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8afe5ea
--- /dev/null
+++ b/test/tint/extensions/parsing/duplicated_extensions.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 tint_symbol() {
+  return float4(0.10000000149011611938f, 0.20000000298023223877f, 0.30000001192092895508f, 0.40000000596046447754f);
+}
diff --git a/test/tint/extensions/parsing/multiple.wgsl.expected.ir.msl b/test/tint/extensions/parsing/multiple.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8afe5ea
--- /dev/null
+++ b/test/tint/extensions/parsing/multiple.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 tint_symbol() {
+  return float4(0.10000000149011611938f, 0.20000000298023223877f, 0.30000001192092895508f, 0.40000000596046447754f);
+}
diff --git a/test/tint/identifiers/underscore/double/alias.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/alias.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e815e60
--- /dev/null
+++ b/test/tint/identifiers/underscore/double/alias.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int c = 0;
+  int d = 0;
+}
diff --git a/test/tint/identifiers/underscore/double/const.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/const.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0f7ec1f
--- /dev/null
+++ b/test/tint/identifiers/underscore/double/const.wgsl.expected.ir.msl
@@ -0,0 +1,5 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+}
diff --git a/test/tint/identifiers/underscore/double/let.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/let.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1fb355b
--- /dev/null
+++ b/test/tint/identifiers/underscore/double/let.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const a__ = a;
+  int const b = a;
+  int const b__ = a__;
+}
diff --git a/test/tint/identifiers/underscore/double/var.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/var.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5ff7f9f
--- /dev/null
+++ b/test/tint/identifiers/underscore/double/var.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int a = 1;
+thread int a__ = 2;
+void f() {
+  int b = a;
+  int b__ = a__;
+}
diff --git a/test/tint/identifiers/underscore/prefix/lower/alias.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/alias.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e815e60
--- /dev/null
+++ b/test/tint/identifiers/underscore/prefix/lower/alias.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int c = 0;
+  int d = 0;
+}
diff --git a/test/tint/identifiers/underscore/prefix/lower/const.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/const.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0f7ec1f
--- /dev/null
+++ b/test/tint/identifiers/underscore/prefix/lower/const.wgsl.expected.ir.msl
@@ -0,0 +1,5 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+}
diff --git a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.ir.msl
new file mode 100644
index 0000000..41a3f3d
--- /dev/null
+++ b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int const _a = a;
+  int const b = a;
+  int const _b = _a;
+}
diff --git a/test/tint/identifiers/underscore/prefix/lower/var.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/var.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f00abbc
--- /dev/null
+++ b/test/tint/identifiers/underscore/prefix/lower/var.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int a = 1;
+thread int _a = 2;
+void f() {
+  int b = a;
+  int _b = _a;
+}
diff --git a/test/tint/identifiers/underscore/prefix/upper/alias.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/alias.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e815e60
--- /dev/null
+++ b/test/tint/identifiers/underscore/prefix/upper/alias.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int c = 0;
+  int d = 0;
+}
diff --git a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ec0d03b
--- /dev/null
+++ b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const A = 1;
+  int const _A = 2;
+  int const B = A;
+  int const _B = _A;
+}
diff --git a/test/tint/identifiers/underscore/prefix/upper/var.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/var.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a588ec6
--- /dev/null
+++ b/test/tint/identifiers/underscore/prefix/upper/var.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int A = 1;
+thread int _A = 2;
+void f() {
+  int B = A;
+  int _B = _A;
+}
diff --git a/test/tint/out_of_order_decls/alias/alias.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/alias/alias.wgsl.expected.ir.msl
new file mode 100644
index 0000000..aad034a
--- /dev/null
+++ b/test/tint/out_of_order_decls/alias/alias.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int v = 0;
+}
diff --git a/test/tint/out_of_order_decls/alias/struct.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/alias/struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b8b71b7
--- /dev/null
+++ b/test/tint/out_of_order_decls/alias/struct.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int m;
+};
+
+void f() {
+  S v = {};
+}
diff --git a/test/tint/out_of_order_decls/func/const.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/func/const.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e7fbdcc
--- /dev/null
+++ b/test/tint/out_of_order_decls/func/const.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+}
diff --git a/test/tint/out_of_order_decls/func/type.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/func/type.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7cc9d6d
--- /dev/null
+++ b/test/tint/out_of_order_decls/func/type.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int b = 0;
+}
diff --git a/test/tint/out_of_order_decls/func/var.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/func/var.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c23e22
--- /dev/null
+++ b/test/tint/out_of_order_decls/func/var.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int a = 1;
+void f() {
+}
diff --git a/test/tint/out_of_order_decls/struct/alias.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/struct/alias.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b8b71b7
--- /dev/null
+++ b/test/tint/out_of_order_decls/struct/alias.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int m;
+};
+
+void f() {
+  S v = {};
+}
diff --git a/test/tint/out_of_order_decls/struct/struct.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/struct/struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7fe5789
--- /dev/null
+++ b/test/tint/out_of_order_decls/struct/struct.wgsl.expected.ir.msl
@@ -0,0 +1,14 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct S2 {
+  int m;
+};
+struct S1 {
+  S2 m;
+};
+
+void f() {
+  S1 v = {};
+}
diff --git a/test/tint/ptr_ref/load/global/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/global/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c81019f
--- /dev/null
+++ b/test/tint/ptr_ref/load/global/i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int I = 0;
+void tint_symbol() {
+}
diff --git a/test/tint/ptr_ref/load/local/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1b87c5d
--- /dev/null
+++ b/test/tint/ptr_ref/load/local/i32.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  int i = 123;
+}
diff --git a/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5cf693f
--- /dev/null
+++ b/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  int i = 123;
+  thread int* const p = i;
+}
diff --git a/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.msl
new file mode 100644
index 0000000..14bee98
--- /dev/null
+++ b/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int i = 123;
+void tint_symbol() {
+  thread int* const p = i;
+}
diff --git a/test/tint/samples/function.wgsl.expected.ir.msl b/test/tint/samples/function.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b1d8502
--- /dev/null
+++ b/test/tint/samples/function.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float tint_symbol() {
+  return 0.40000000596046447754f;
+}
+void ep() {
+}
diff --git a/test/tint/shader_io/compute_workgroup_expression.wgsl.expected.ir.msl b/test/tint/shader_io/compute_workgroup_expression.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f925a33
--- /dev/null
+++ b/test/tint/shader_io/compute_workgroup_expression.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+}
diff --git a/test/tint/shader_io/fragment_output_builtins.wgsl.expected.ir.msl b/test/tint/shader_io/fragment_output_builtins.wgsl.expected.ir.msl
new file mode 100644
index 0000000..03541c4
--- /dev/null
+++ b/test/tint/shader_io/fragment_output_builtins.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float main1() {
+  return 1.0f;
+}
+uint main2() {
+  return 1u;
+}
diff --git a/test/tint/shader_io/fragment_output_builtins_struct.wgsl.expected.ir.msl b/test/tint/shader_io/fragment_output_builtins_struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0f5855e
--- /dev/null
+++ b/test/tint/shader_io/fragment_output_builtins_struct.wgsl.expected.ir.msl
@@ -0,0 +1,12 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct FragmentOutputs {
+  float frag_depth [[depth(any)]];
+  uint sample_mask [[sample_mask]];
+};
+
+FragmentOutputs tint_symbol() {
+  return FragmentOutputs{.frag_depth=1.0f, .sample_mask=1u};
+}
diff --git a/test/tint/shader_io/fragment_output_locations.wgsl.expected.ir.msl b/test/tint/shader_io/fragment_output_locations.wgsl.expected.ir.msl
new file mode 100644
index 0000000..abc6fa0
--- /dev/null
+++ b/test/tint/shader_io/fragment_output_locations.wgsl.expected.ir.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+int main0() {
+  return 1;
+}
+uint main1() {
+  return 1u;
+}
+float main2() {
+  return 1.0f;
+}
+float4 main3() {
+  return float4(1.0f, 2.0f, 3.0f, 4.0f);
+}
diff --git a/test/tint/shader_io/fragment_output_locations_f16.wgsl.expected.ir.msl b/test/tint/shader_io/fragment_output_locations_f16.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0b35440
--- /dev/null
+++ b/test/tint/shader_io/fragment_output_locations_f16.wgsl.expected.ir.msl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+int main0() {
+  return 1;
+}
+uint main1() {
+  return 1u;
+}
+float main2() {
+  return 1.0f;
+}
+float4 main3() {
+  return float4(1.0f, 2.0f, 3.0f, 4.0f);
+}
+half main4() {
+  return 2.25h;
+}
+half3 main5() {
+  return half3(3.0h, 5.0h, 8.0h);
+}
diff --git a/test/tint/shader_io/interpolate_input_parameters.wgsl.expected.ir.msl b/test/tint/shader_io/interpolate_input_parameters.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f925a33
--- /dev/null
+++ b/test/tint/shader_io/interpolate_input_parameters.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+}
diff --git a/test/tint/shader_io/interpolate_input_struct.wgsl.expected.ir.msl b/test/tint/shader_io/interpolate_input_struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f925a33
--- /dev/null
+++ b/test/tint/shader_io/interpolate_input_struct.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+}
diff --git a/test/tint/shader_io/invariant.wgsl.expected.ir.msl b/test/tint/shader_io/invariant.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9618b5e
--- /dev/null
+++ b/test/tint/shader_io/invariant.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 tint_symbol() {
+  return float4(0.0f);
+}
diff --git a/test/tint/shader_io/invariant_struct_member.wgsl.expected.ir.msl b/test/tint/shader_io/invariant_struct_member.wgsl.expected.ir.msl
new file mode 100644
index 0000000..db7f2fc
--- /dev/null
+++ b/test/tint/shader_io/invariant_struct_member.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct Out {
+  float4 pos [[position]] TINT_INVARIANT;
+};
+
+Out tint_symbol() {
+  return Out{};
+}
diff --git a/test/tint/shader_io/vertex_input_builtins.wgsl.expected.ir.msl b/test/tint/shader_io/vertex_input_builtins.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9618b5e
--- /dev/null
+++ b/test/tint/shader_io/vertex_input_builtins.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 tint_symbol() {
+  return float4(0.0f);
+}
diff --git a/test/tint/shader_io/vertex_output_builtins.wgsl.expected.ir.msl b/test/tint/shader_io/vertex_output_builtins.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8b02b62
--- /dev/null
+++ b/test/tint/shader_io/vertex_output_builtins.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 tint_symbol() {
+  return float4(1.0f, 2.0f, 3.0f, 4.0f);
+}
diff --git a/test/tint/shader_io/vertex_output_builtins_struct.wgsl.expected.ir.msl b/test/tint/shader_io/vertex_output_builtins_struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1b0e192
--- /dev/null
+++ b/test/tint/shader_io/vertex_output_builtins_struct.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+struct VertexOutputs {
+  float4 position [[position]];
+};
+
+VertexOutputs tint_symbol() {
+  return VertexOutputs{.position=float4(1.0f, 2.0f, 3.0f, 4.0f)};
+}
diff --git a/test/tint/shadowing/alias/const.wgsl.expected.ir.msl b/test/tint/shadowing/alias/const.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0f7ec1f
--- /dev/null
+++ b/test/tint/shadowing/alias/const.wgsl.expected.ir.msl
@@ -0,0 +1,5 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+}
diff --git a/test/tint/shadowing/alias/let.wgsl.expected.ir.msl b/test/tint/shadowing/alias/let.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8ccc0c2
--- /dev/null
+++ b/test/tint/shadowing/alias/let.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 0;
+  int const b = a;
+  int const a = 0;
+  int const b = a;
+}
diff --git a/test/tint/shadowing/alias/var.wgsl.expected.ir.msl b/test/tint/shadowing/alias/var.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d76e035
--- /dev/null
+++ b/test/tint/shadowing/alias/var.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int a = 0;
+  int b = a;
+  int a = 0;
+  int b = a;
+}
diff --git a/test/tint/shadowing/function/let.wgsl.expected.ir.msl b/test/tint/shadowing/function/let.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c523995
--- /dev/null
+++ b/test/tint/shadowing/function/let.wgsl.expected.ir.msl
@@ -0,0 +1,11 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void a() {
+  int a = 1;
+  int b = a;
+  int const a = 1;
+  int const b = a;
+}
diff --git a/test/tint/shadowing/function/var.wgsl.expected.ir.msl b/test/tint/shadowing/function/var.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3def775
--- /dev/null
+++ b/test/tint/shadowing/function/var.wgsl.expected.ir.msl
@@ -0,0 +1,14 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct a {
+  int a;
+};
+
+void f() {
+  a a = a{};
+  a b = a;
+  a a = a{};
+  a b = a;
+}
diff --git a/test/tint/shadowing/short_names/const.wgsl.expected.ir.msl b/test/tint/shadowing/short_names/const.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0f7ec1f
--- /dev/null
+++ b/test/tint/shadowing/short_names/const.wgsl.expected.ir.msl
@@ -0,0 +1,5 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+}
diff --git a/test/tint/shadowing/short_names/let.wgsl.expected.ir.msl b/test/tint/shadowing/short_names/let.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4dd58b4
--- /dev/null
+++ b/test/tint/shadowing/short_names/let.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const vec3f = 1;
+  int const b = vec3f;
+  float3 const c = float3(0.0f);
+  float3 const d = float3(0.0f);
+}
diff --git a/test/tint/shadowing/short_names/renamer/renamer.wgsl.expected.ir.msl b/test/tint/shadowing/short_names/renamer/renamer.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7be8f30
--- /dev/null
+++ b/test/tint/shadowing/short_names/renamer/renamer.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 tint_symbol() {
+  return float4(0.0f, 0.0f, 0.0f, 1.0f);
+}
diff --git a/test/tint/shadowing/short_names/var.wgsl.expected.ir.msl b/test/tint/shadowing/short_names/var.wgsl.expected.ir.msl
new file mode 100644
index 0000000..68ae9d9
--- /dev/null
+++ b/test/tint/shadowing/short_names/var.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int vec3f = 1;
+  int b = vec3f;
+  float3 c = float3(0.0f);
+  float3 d = float3(0.0f);
+}
diff --git a/test/tint/shadowing/struct/let.wgsl.expected.ir.msl b/test/tint/shadowing/struct/let.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2660268
--- /dev/null
+++ b/test/tint/shadowing/struct/let.wgsl.expected.ir.msl
@@ -0,0 +1,14 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct a {
+  int a;
+};
+
+void f() {
+  a const a = a{};
+  a const b = a;
+  a const a = a{};
+  a const b = a;
+}
diff --git a/test/tint/shadowing/struct/var.wgsl.expected.ir.msl b/test/tint/shadowing/struct/var.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3def775
--- /dev/null
+++ b/test/tint/shadowing/struct/var.wgsl.expected.ir.msl
@@ -0,0 +1,14 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct a {
+  int a;
+};
+
+void f() {
+  a a = a{};
+  a b = a;
+  a a = a{};
+  a b = a;
+}
diff --git a/test/tint/types/function_scope_declarations.wgsl.expected.ir.msl b/test/tint/types/function_scope_declarations.wgsl.expected.ir.msl
new file mode 100644
index 0000000..73340f8
--- /dev/null
+++ b/test/tint/types/function_scope_declarations.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+struct S {
+  float a;
+};
+
+void tint_symbol() {
+  bool bool_var = false;
+  bool const bool_let = false;
+  int i32_var = 0;
+  int const i32_let = 0;
+  uint u32_var = 0u;
+  uint const u32_let = 0u;
+  float f32_var = 0.0f;
+  float const f32_let = 0.0f;
+  int2 v2i32_var = int2(0);
+  int2 const v2i32_let = int2(0);
+  uint3 v3u32_var = uint3(0u);
+  uint3 const v3u32_let = uint3(0u);
+  float4 v4f32_var = float4(0.0f);
+  float4 const v4f32_let = float4(0.0f);
+  float2x3 m2x3_var = float2x3(float3(0.0f), float3(0.0f));
+  float3x4 const m3x4_let = float3x4(float4(0.0f), float4(0.0f), float4(0.0f));
+  tint_array<float, 4> arr_var = tint_array<float, 4>{};
+  tint_array<float, 4> const arr_let = tint_array<float, 4>{};
+  S struct_var = S{};
+  S const struct_let = S{};
+  thread float* const ptr_f32 = f32_var;
+  thread float4* const ptr_vec = v4f32_var;
+  thread tint_array<float, 4>* const ptr_arr = arr_var;
+}
diff --git a/test/tint/types/function_scope_var_conversions.wgsl.expected.ir.msl b/test/tint/types/function_scope_var_conversions.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3d27582
--- /dev/null
+++ b/test/tint/types/function_scope_var_conversions.wgsl.expected.ir.msl
@@ -0,0 +1,32 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void constant_with_non_constant() {
+  float a = 0.0f;
+  float2 b = float2(1.0f, a);
+}
+void tint_symbol() {
+  bool bool_var1 = true;
+  bool bool_var2 = true;
+  bool bool_var3 = true;
+  int i32_var1 = 123;
+  int i32_var2 = 123;
+  int i32_var3 = 1;
+  uint u32_var1 = 123u;
+  uint u32_var2 = 123u;
+  uint u32_var3 = 1u;
+  bool3 v3bool_var1 = bool3(true);
+  bool3 v3bool_var11 = bool3(true);
+  bool3 v3bool_var2 = bool3(true);
+  bool3 v3bool_var3 = bool3(true);
+  int3 v3i32_var1 = int3(123);
+  int3 v3i32_var2 = int3(123);
+  int3 v3i32_var3 = int3(1);
+  uint3 v3u32_var1 = uint3(123u);
+  uint3 v3u32_var2 = uint3(123u);
+  uint3 v3u32_var3 = uint3(1u);
+  bool3 v3bool_var4 = bool3(true);
+  bool4 v4bool_var5 = bool4(true, false, true, false);
+}
diff --git a/test/tint/types/module_scope_const.wgsl.expected.ir.msl b/test/tint/types/module_scope_const.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f925a33
--- /dev/null
+++ b/test/tint/types/module_scope_const.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+}
diff --git a/test/tint/types/parameters.wgsl.expected.ir.msl b/test/tint/types/parameters.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eb3a832
--- /dev/null
+++ b/test/tint/types/parameters.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void foo() {
+}
+void tint_symbol() {
+}
diff --git a/test/tint/types/return_types.wgsl.expected.ir.msl b/test/tint/types/return_types.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e2c3aef
--- /dev/null
+++ b/test/tint/types/return_types.wgsl.expected.ir.msl
@@ -0,0 +1,52 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+struct S {
+  float a;
+};
+
+bool ret_bool() {
+  return false;
+}
+int ret_i32() {
+  return 0;
+}
+uint ret_u32() {
+  return 0u;
+}
+float ret_f32() {
+  return 0.0f;
+}
+int2 ret_v2i32() {
+  return int2(0);
+}
+uint3 ret_v3u32() {
+  return uint3(0u);
+}
+float4 ret_v4f32() {
+  return float4(0.0f);
+}
+float2x3 ret_m2x3() {
+  return float2x3(float3(0.0f), float3(0.0f));
+}
+tint_array<float, 4> ret_arr() {
+  return tint_array<float, 4>{};
+}
+S ret_struct() {
+  return S{};
+}
+void tint_symbol() {
+}
diff --git a/test/tint/types/sampler.wgsl.expected.ir.msl b/test/tint/types/sampler.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c3942d3
--- /dev/null
+++ b/test/tint/types/sampler.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+sampler s;
+sampler sc;
+void tint_symbol() {
+}
diff --git a/test/tint/types/short_names/short_names.wgsl.expected.ir.msl b/test/tint/types/short_names/short_names.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7be8f30
--- /dev/null
+++ b/test/tint/types/short_names/short_names.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+float4 tint_symbol() {
+  return float4(0.0f, 0.0f, 0.0f, 1.0f);
+}
diff --git a/test/tint/types/struct_members.wgsl.expected.ir.msl b/test/tint/types/struct_members.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c5e5a4b
--- /dev/null
+++ b/test/tint/types/struct_members.wgsl.expected.ir.msl
@@ -0,0 +1,35 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+struct S_inner {
+  float a;
+};
+struct S {
+  bool member_bool;
+  int member_i32;
+  uint member_u32;
+  float member_f32;
+  int2 member_v2i32;
+  uint3 member_v3u32;
+  float4 member_v4f32;
+  float2x3 member_m2x3;
+  tint_array<float, 4> member_arr;
+  S_inner member_struct;
+};
+
+void tint_symbol() {
+  S const s = S{};
+}
diff --git a/test/tint/types/texture/depth/2d.wgsl.expected.ir.msl b/test/tint/types/texture/depth/2d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..df40174
--- /dev/null
+++ b/test/tint/types/texture/depth/2d.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+depth2d<float, access::sample> t_f;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/depth/2d_array.wgsl.expected.ir.msl b/test/tint/types/texture/depth/2d_array.wgsl.expected.ir.msl
new file mode 100644
index 0000000..864933a
--- /dev/null
+++ b/test/tint/types/texture/depth/2d_array.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+depth2d_array<float, access::sample> t_f;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/depth/cube.wgsl.expected.ir.msl b/test/tint/types/texture/depth/cube.wgsl.expected.ir.msl
new file mode 100644
index 0000000..35a54bc
--- /dev/null
+++ b/test/tint/types/texture/depth/cube.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+depthcube<float, access::sample> t_f;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/depth/cube_array.wgsl.expected.ir.msl b/test/tint/types/texture/depth/cube_array.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ae64100
--- /dev/null
+++ b/test/tint/types/texture/depth/cube_array.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+depthcube_array<float, access::sample> t_f;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/multisampled/2d.wgsl.expected.ir.msl b/test/tint/types/texture/multisampled/2d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7a873c5
--- /dev/null
+++ b/test/tint/types/texture/multisampled/2d.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture2d_ms<float, access::read> t_f;
+texture2d_ms<int, access::read> t_i;
+texture2d_ms<uint, access::read> t_u;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/sampled/1d.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/1d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..de8963b
--- /dev/null
+++ b/test/tint/types/texture/sampled/1d.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture1d<float, access::sample> t_f;
+texture1d<int, access::sample> t_i;
+texture1d<uint, access::sample> t_u;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/sampled/2d.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/2d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..249fc21
--- /dev/null
+++ b/test/tint/types/texture/sampled/2d.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture2d<float, access::sample> t_f;
+texture2d<int, access::sample> t_i;
+texture2d<uint, access::sample> t_u;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/sampled/2d_array.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/2d_array.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5a91806
--- /dev/null
+++ b/test/tint/types/texture/sampled/2d_array.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture2d_array<float, access::sample> t_f;
+texture2d_array<int, access::sample> t_i;
+texture2d_array<uint, access::sample> t_u;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/sampled/3d.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/3d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..16cef6c
--- /dev/null
+++ b/test/tint/types/texture/sampled/3d.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture3d<float, access::sample> t_f;
+texture3d<int, access::sample> t_i;
+texture3d<uint, access::sample> t_u;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/sampled/cube.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/cube.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9be39c
--- /dev/null
+++ b/test/tint/types/texture/sampled/cube.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+#include <metal_stdlib>
+using namespace metal;
+
+texturecube<float, access::sample> t_f;
+texturecube<int, access::sample> t_i;
+texturecube<uint, access::sample> t_u;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/sampled/cube_array.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/cube_array.wgsl.expected.ir.msl
new file mode 100644
index 0000000..773b17f
--- /dev/null
+++ b/test/tint/types/texture/sampled/cube_array.wgsl.expected.ir.msl
@@ -0,0 +1,10 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texturecube_array<float, access::sample> t_f;
+texturecube_array<int, access::sample> t_i;
+texturecube_array<uint, access::sample> t_u;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/storage/1d.wgsl.expected.ir.msl b/test/tint/types/texture/storage/1d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c2b9c9d
--- /dev/null
+++ b/test/tint/types/texture/storage/1d.wgsl.expected.ir.msl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture1d<float, access::write> t_rgba8unorm;
+texture1d<float, access::write> t_rgba8snorm;
+texture1d<uint, access::write> t_rgba8uint;
+texture1d<int, access::write> t_rgba8sint;
+texture1d<uint, access::write> t_rgba16uint;
+texture1d<int, access::write> t_rgba16sint;
+texture1d<float, access::write> t_rgba16float;
+texture1d<uint, access::write> t_r32uint;
+texture1d<int, access::write> t_r32sint;
+texture1d<float, access::write> t_r32float;
+texture1d<uint, access::write> t_rg32uint;
+texture1d<int, access::write> t_rg32sint;
+texture1d<float, access::write> t_rg32float;
+texture1d<uint, access::write> t_rgba32uint;
+texture1d<int, access::write> t_rgba32sint;
+texture1d<float, access::write> t_rgba32float;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/storage/2d.wgsl.expected.ir.msl b/test/tint/types/texture/storage/2d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..597f501
--- /dev/null
+++ b/test/tint/types/texture/storage/2d.wgsl.expected.ir.msl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture2d<float, access::write> t_rgba8unorm;
+texture2d<float, access::write> t_rgba8snorm;
+texture2d<uint, access::write> t_rgba8uint;
+texture2d<int, access::write> t_rgba8sint;
+texture2d<uint, access::write> t_rgba16uint;
+texture2d<int, access::write> t_rgba16sint;
+texture2d<float, access::write> t_rgba16float;
+texture2d<uint, access::write> t_r32uint;
+texture2d<int, access::write> t_r32sint;
+texture2d<float, access::write> t_r32float;
+texture2d<uint, access::write> t_rg32uint;
+texture2d<int, access::write> t_rg32sint;
+texture2d<float, access::write> t_rg32float;
+texture2d<uint, access::write> t_rgba32uint;
+texture2d<int, access::write> t_rgba32sint;
+texture2d<float, access::write> t_rgba32float;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/storage/2d_array.wgsl.expected.ir.msl b/test/tint/types/texture/storage/2d_array.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ed693ca
--- /dev/null
+++ b/test/tint/types/texture/storage/2d_array.wgsl.expected.ir.msl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture2d_array<float, access::write> t_rgba8unorm;
+texture2d_array<float, access::write> t_rgba8snorm;
+texture2d_array<uint, access::write> t_rgba8uint;
+texture2d_array<int, access::write> t_rgba8sint;
+texture2d_array<uint, access::write> t_rgba16uint;
+texture2d_array<int, access::write> t_rgba16sint;
+texture2d_array<float, access::write> t_rgba16float;
+texture2d_array<uint, access::write> t_r32uint;
+texture2d_array<int, access::write> t_r32sint;
+texture2d_array<float, access::write> t_r32float;
+texture2d_array<uint, access::write> t_rg32uint;
+texture2d_array<int, access::write> t_rg32sint;
+texture2d_array<float, access::write> t_rg32float;
+texture2d_array<uint, access::write> t_rgba32uint;
+texture2d_array<int, access::write> t_rgba32sint;
+texture2d_array<float, access::write> t_rgba32float;
+void tint_symbol() {
+}
diff --git a/test/tint/types/texture/storage/3d.wgsl.expected.ir.msl b/test/tint/types/texture/storage/3d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..805775a
--- /dev/null
+++ b/test/tint/types/texture/storage/3d.wgsl.expected.ir.msl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+texture3d<float, access::write> t_rgba8unorm;
+texture3d<float, access::write> t_rgba8snorm;
+texture3d<uint, access::write> t_rgba8uint;
+texture3d<int, access::write> t_rgba8sint;
+texture3d<uint, access::write> t_rgba16uint;
+texture3d<int, access::write> t_rgba16sint;
+texture3d<float, access::write> t_rgba16float;
+texture3d<uint, access::write> t_r32uint;
+texture3d<int, access::write> t_r32sint;
+texture3d<float, access::write> t_r32float;
+texture3d<uint, access::write> t_rg32uint;
+texture3d<int, access::write> t_rg32sint;
+texture3d<float, access::write> t_rg32float;
+texture3d<uint, access::write> t_rgba32uint;
+texture3d<int, access::write> t_rgba32sint;
+texture3d<float, access::write> t_rgba32float;
+void tint_symbol() {
+}
diff --git a/test/tint/unicode/comments.wgsl.expected.ir.msl b/test/tint/unicode/comments.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f925a33
--- /dev/null
+++ b/test/tint/unicode/comments.wgsl.expected.ir.msl
@@ -0,0 +1,7 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+}
diff --git a/test/tint/var/inferred/global.wgsl.expected.ir.msl b/test/tint/var/inferred/global.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b147a04
--- /dev/null
+++ b/test/tint/var/inferred/global.wgsl.expected.ir.msl
@@ -0,0 +1,38 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct MyStruct {
+  float f1;
+};
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread int v1 = 1;
+thread uint v2 = 1u;
+thread float v3 = 1.0f;
+thread int3 v4 = int3(1);
+thread uint3 v5 = uint3(1u, 2u, 3u);
+thread float3 v6 = float3(1.0f, 2.0f, 3.0f);
+thread MyStruct v7 = MyStruct{.f1=1.0f};
+thread tint_array<float, 10> v8 = tint_array<float, 10>{};
+thread int v9 = 0;
+thread uint v10 = 0u;
+thread float v11 = 0.0f;
+thread MyStruct v12 = MyStruct{};
+thread MyStruct v13 = MyStruct{};
+thread tint_array<float, 10> v14 = tint_array<float, 10>{};
+thread int3 v15 = int3(1, 2, 3);
+thread float3 v16 = float3(1.0f, 2.0f, 3.0f);
+void f() {
+}
diff --git a/test/tint/var/initialization/function/array/array_i32.wgsl.expected.ir.msl b/test/tint/var/initialization/function/array/array_i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..75ad03c
--- /dev/null
+++ b/test/tint/var/initialization/function/array/array_i32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void tint_symbol() {
+  tint_array<tint_array<int, 3>, 2> zero = {};
+  tint_array<tint_array<int, 3>, 2> init = tint_array<tint_array<int, 3>, 2>{tint_array<int, 3>{1, 2, 3}, tint_array<int, 3>{4, 5, 6}};
+}
diff --git a/test/tint/var/initialization/function/array/i32.wgsl.expected.ir.msl b/test/tint/var/initialization/function/array/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..245d842
--- /dev/null
+++ b/test/tint/var/initialization/function/array/i32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+void tint_symbol() {
+  tint_array<int, 3> zero = {};
+  tint_array<int, 3> init = tint_array<int, 3>{1, 2, 3};
+}
diff --git a/test/tint/var/initialization/function/matrix.wgsl.expected.ir.msl b/test/tint/var/initialization/function/matrix.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f100982
--- /dev/null
+++ b/test/tint/var/initialization/function/matrix.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  float2x3 v = float2x3(0.0f);
+}
diff --git a/test/tint/var/initialization/function/scalar.wgsl.expected.ir.msl b/test/tint/var/initialization/function/scalar.wgsl.expected.ir.msl
new file mode 100644
index 0000000..98c7160
--- /dev/null
+++ b/test/tint/var/initialization/function/scalar.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  int v = 0;
+}
diff --git a/test/tint/var/initialization/function/struct.wgsl.expected.ir.msl b/test/tint/var/initialization/function/struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c6de34b
--- /dev/null
+++ b/test/tint/var/initialization/function/struct.wgsl.expected.ir.msl
@@ -0,0 +1,12 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int a;
+  float b;
+};
+
+void tint_symbol() {
+  S v = {};
+}
diff --git a/test/tint/var/initialization/function/vector.wgsl.expected.ir.msl b/test/tint/var/initialization/function/vector.wgsl.expected.ir.msl
new file mode 100644
index 0000000..623d79d8
--- /dev/null
+++ b/test/tint/var/initialization/function/vector.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  int3 v = 0;
+}
diff --git a/test/tint/var/initialization/private/array/array_i32.wgsl.expected.ir.msl b/test/tint/var/initialization/private/array/array_i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eec5fd3
--- /dev/null
+++ b/test/tint/var/initialization/private/array/array_i32.wgsl.expected.ir.msl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<tint_array<int, 3>, 2> zero = {};
+thread tint_array<tint_array<int, 3>, 2> init = tint_array<tint_array<int, 3>, 2>{tint_array<int, 3>{1, 2, 3}, tint_array<int, 3>{4, 5, 6}};
+void tint_symbol() {
+  tint_array<tint_array<int, 3>, 2> v0 = zero;
+  tint_array<tint_array<int, 3>, 2> v1 = init;
+}
diff --git a/test/tint/var/initialization/private/array/i32.wgsl.expected.ir.msl b/test/tint/var/initialization/private/array/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c1da198
--- /dev/null
+++ b/test/tint/var/initialization/private/array/i32.wgsl.expected.ir.msl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+thread tint_array<int, 3> zero = {};
+thread tint_array<int, 3> init = tint_array<int, 3>{1, 2, 3};
+void tint_symbol() {
+  tint_array<int, 3> v0 = zero;
+  tint_array<int, 3> v1 = init;
+}
diff --git a/test/tint/var/initialization/private/matrix.wgsl.expected.ir.msl b/test/tint/var/initialization/private/matrix.wgsl.expected.ir.msl
new file mode 100644
index 0000000..187732e
--- /dev/null
+++ b/test/tint/var/initialization/private/matrix.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x3 v = float2x3(0.0f);
+void tint_symbol() {
+}
diff --git a/test/tint/var/initialization/private/scalar.wgsl.expected.ir.msl b/test/tint/var/initialization/private/scalar.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2a27538
--- /dev/null
+++ b/test/tint/var/initialization/private/scalar.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int v = 0;
+void tint_symbol() {
+}
diff --git a/test/tint/var/initialization/private/struct.wgsl.expected.ir.msl b/test/tint/var/initialization/private/struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..aeed8b1
--- /dev/null
+++ b/test/tint/var/initialization/private/struct.wgsl.expected.ir.msl
@@ -0,0 +1,12 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int a;
+  float b;
+};
+
+thread S v = {};
+void tint_symbol() {
+}
diff --git a/test/tint/var/initialization/private/vector.wgsl.expected.ir.msl b/test/tint/var/initialization/private/vector.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cdca7cd
--- /dev/null
+++ b/test/tint/var/initialization/private/vector.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 v = 0;
+void tint_symbol() {
+}
diff --git a/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..031bb7c
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+threadgroup tint_array<tint_array<int, 3>, 2> zero;
+void tint_symbol() {
+  tint_array<tint_array<int, 3>, 2> v = zero;
+}
diff --git a/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..32c5bf6
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
+
+
+threadgroup tint_array<int, 3> zero;
+void tint_symbol() {
+  tint_array<int, 3> v = zero;
+}
diff --git a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c034870
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float2x3 v;
+void tint_symbol() {
+}
diff --git a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e655faa
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int v;
+void tint_symbol() {
+}
diff --git a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..90e81f0
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl
@@ -0,0 +1,12 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int a;
+  float b;
+};
+
+threadgroup S v;
+void tint_symbol() {
+}
diff --git a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b55a175
--- /dev/null
+++ b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl
@@ -0,0 +1,8 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int3 v;
+void tint_symbol() {
+}
diff --git a/test/tint/var/override/named/no_init/bool.wgsl.expected.ir.msl b/test/tint/var/override/named/no_init/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/no_init/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/named/no_init/f32.wgsl.expected.ir.msl b/test/tint/var/override/named/no_init/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2a46c89
--- /dev/null
+++ b/test/tint/var/override/named/no_init/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (true) {
+  }
+}
diff --git a/test/tint/var/override/named/no_init/i32.wgsl.expected.ir.msl b/test/tint/var/override/named/no_init/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/no_init/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/named/no_init/u32.wgsl.expected.ir.msl b/test/tint/var/override/named/no_init/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/no_init/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/named/val_init/bool.wgsl.expected.ir.msl b/test/tint/var/override/named/val_init/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/val_init/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/named/val_init/f32.wgsl.expected.ir.msl b/test/tint/var/override/named/val_init/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2a46c89
--- /dev/null
+++ b/test/tint/var/override/named/val_init/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (true) {
+  }
+}
diff --git a/test/tint/var/override/named/val_init/i32.wgsl.expected.ir.msl b/test/tint/var/override/named/val_init/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/val_init/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/named/val_init/u32.wgsl.expected.ir.msl b/test/tint/var/override/named/val_init/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/val_init/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/named/zero_init/bool.wgsl.expected.ir.msl b/test/tint/var/override/named/zero_init/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/zero_init/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/named/zero_init/f32.wgsl.expected.ir.msl b/test/tint/var/override/named/zero_init/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2a46c89
--- /dev/null
+++ b/test/tint/var/override/named/zero_init/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (true) {
+  }
+}
diff --git a/test/tint/var/override/named/zero_init/i32.wgsl.expected.ir.msl b/test/tint/var/override/named/zero_init/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/zero_init/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/named/zero_init/u32.wgsl.expected.ir.msl b/test/tint/var/override/named/zero_init/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/named/zero_init/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/no_init/bool.wgsl.expected.ir.msl b/test/tint/var/override/numbered/no_init/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/no_init/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/no_init/f32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/no_init/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2a46c89
--- /dev/null
+++ b/test/tint/var/override/numbered/no_init/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (true) {
+  }
+}
diff --git a/test/tint/var/override/numbered/no_init/i32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/no_init/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2a46c89
--- /dev/null
+++ b/test/tint/var/override/numbered/no_init/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (true) {
+  }
+}
diff --git a/test/tint/var/override/numbered/no_init/u32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/no_init/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/no_init/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/val_init/bool.wgsl.expected.ir.msl b/test/tint/var/override/numbered/val_init/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/val_init/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/val_init/f32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/val_init/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/val_init/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/val_init/i32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/val_init/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/val_init/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/val_init/u32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/val_init/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/val_init/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/zero_init/bool.wgsl.expected.ir.msl b/test/tint/var/override/numbered/zero_init/bool.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/zero_init/bool.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/zero_init/f32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/zero_init/f32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2a46c89
--- /dev/null
+++ b/test/tint/var/override/numbered/zero_init/f32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (true) {
+  }
+}
diff --git a/test/tint/var/override/numbered/zero_init/i32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/zero_init/i32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/zero_init/i32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}
diff --git a/test/tint/var/override/numbered/zero_init/u32.wgsl.expected.ir.msl b/test/tint/var/override/numbered/zero_init/u32.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d054575d4
--- /dev/null
+++ b/test/tint/var/override/numbered/zero_init/u32.wgsl.expected.ir.msl
@@ -0,0 +1,9 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void tint_symbol() {
+  if (false) {
+  }
+}