diff --git a/src/transform/glsl.cc b/src/transform/glsl.cc
index 5c24e3a..29b10d4 100644
--- a/src/transform/glsl.cc
+++ b/src/transform/glsl.cc
@@ -20,7 +20,6 @@
 #include "src/transform/add_empty_entry_point.h"
 #include "src/transform/add_spirv_block_attribute.h"
 #include "src/transform/binding_remapper.h"
-#include "src/transform/calculate_array_length.h"
 #include "src/transform/canonicalize_entry_point_io.h"
 #include "src/transform/combine_samplers.h"
 #include "src/transform/decompose_memory_access.h"
@@ -86,7 +85,6 @@
     BindingRemapper::AccessControls ac;
     data.Add<BindingRemapper::Remappings>(bp, ac, /* mayCollide */ true);
   }
-  manager.Add<CalculateArrayLength>();
   manager.Add<ExternalTextureTransform>();
 
   data.Add<PromoteSideEffectsToDecl::Config>(
diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc
index c982ffe..3215086 100644
--- a/src/writer/glsl/generator_impl.cc
+++ b/src/writer/glsl/generator_impl.cc
@@ -44,7 +44,6 @@
 #include "src/sem/type_constructor.h"
 #include "src/sem/type_conversion.h"
 #include "src/sem/variable.h"
-#include "src/transform/calculate_array_length.h"
 #include "src/transform/glsl.h"
 #include "src/utils/defer.h"
 #include "src/utils/map.h"
@@ -467,8 +466,8 @@
   auto* call = builder_.Sem().Get(expr);
   auto* target = call->Target();
 
-  if (auto* func = target->As<sem::Function>()) {
-    return EmitFunctionCall(out, call, func);
+  if (target->Is<sem::Function>()) {
+    return EmitFunctionCall(out, call);
   }
   if (auto* builtin = target->As<sem::Builtin>()) {
     return EmitBuiltinCall(out, call, builtin);
@@ -484,9 +483,7 @@
   return false;
 }
 
-bool GeneratorImpl::EmitFunctionCall(std::ostream& out,
-                                     const sem::Call* call,
-                                     const sem::Function* func) {
+bool GeneratorImpl::EmitFunctionCall(std::ostream& out, const sem::Call* call) {
   const auto& args = call->Arguments();
   auto* decl = call->Declaration();
   auto* ident = decl->target.name;
@@ -494,21 +491,6 @@
   auto name = builder_.Symbols().NameFor(ident->symbol);
   auto caller_sym = ident->symbol;
 
-  if (ast::HasAttribute<transform::CalculateArrayLength::BufferSizeIntrinsic>(
-          func->Declaration()->attributes)) {
-    // Special function generated by the CalculateArrayLength transform for
-    // calling X.GetDimensions(Y)
-    if (!EmitExpression(out, args[0]->Declaration())) {
-      return false;
-    }
-    out << ".GetDimensions(";
-    if (!EmitExpression(out, args[1]->Declaration())) {
-      return false;
-    }
-    out << ")";
-    return true;
-  }
-
   out << name << "(";
 
   bool first = true;
@@ -555,6 +537,9 @@
   if (builtin->Type() == sem::BuiltinType::kRadians) {
     return EmitRadiansCall(out, expr, builtin);
   }
+  if (builtin->Type() == sem::BuiltinType::kArrayLength) {
+    return EmitArrayLength(out, expr);
+  }
   if (builtin->IsDataPacking()) {
     return EmitDataPackingCall(out, expr, builtin);
   }
@@ -754,6 +739,16 @@
   return false;
 }
 
+bool GeneratorImpl::EmitArrayLength(std::ostream& out,
+                                    const ast::CallExpression* expr) {
+  out << "uint(";
+  if (!EmitExpression(out, expr->args[0])) {
+    return false;
+  }
+  out << ".length())";
+  return true;
+}
+
 bool GeneratorImpl::EmitSelectCall(std::ostream& out,
                                    const ast::CallExpression* expr) {
   auto* expr_false = expr->args[0];
diff --git a/src/writer/glsl/generator_impl.h b/src/writer/glsl/generator_impl.h
index 92667d1..3f71501 100644
--- a/src/writer/glsl/generator_impl.h
+++ b/src/writer/glsl/generator_impl.h
@@ -111,11 +111,8 @@
   /// Handles generating a function call expression
   /// @param out the output of the expression stream
   /// @param call the call expression
-  /// @param function the function being called
   /// @returns true if the expression is emitted
-  bool EmitFunctionCall(std::ostream& out,
-                        const sem::Call* call,
-                        const sem::Function* function);
+  bool EmitFunctionCall(std::ostream& out, const sem::Call* call);
   /// Handles generating a builtin call expression
   /// @param out the output of the expression stream
   /// @param call the call expression
@@ -162,6 +159,11 @@
   bool EmitWorkgroupAtomicCall(std::ostream& out,
                                const ast::CallExpression* expr,
                                const sem::Builtin* builtin);
+  /// Handles generating an array.length() call
+  /// @param out the output of the expression stream
+  /// @param expr the call expression
+  /// @returns true if the array length expression is emitted
+  bool EmitArrayLength(std::ostream& out, const ast::CallExpression* expr);
   /// Handles generating a call to a texture function (`textureSample`,
   /// `textureSampleGrad`, etc)
   /// @param out the output of the expression stream
diff --git a/src/writer/glsl/generator_impl_sanitizer_test.cc b/src/writer/glsl/generator_impl_sanitizer_test.cc
index 2b663d1..0329bc0 100644
--- a/src/writer/glsl/generator_impl_sanitizer_test.cc
+++ b/src/writer/glsl/generator_impl_sanitizer_test.cc
@@ -55,10 +55,7 @@
   float a[];
 } b;
 void a_func() {
-  uint tint_symbol_1 = 0u;
-  b.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint len = tint_symbol_2;
+  uint len = uint(b.a.length());
 }
 
 void main() {
@@ -104,10 +101,7 @@
   float a[];
 } b;
 void a_func() {
-  uint tint_symbol_1 = 0u;
-  b.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 4u) / 4u);
-  uint len = tint_symbol_2;
+  uint len = uint(b.a.length());
 }
 
 void main() {
@@ -154,10 +148,7 @@
   float a[];
 } b;
 void a_func() {
-  uint tint_symbol_1 = 0u;
-  b.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint len = tint_symbol_2;
+  uint len = uint(b.a.length());
 }
 
 void main() {
diff --git a/test/bug/chromium/1290107.wgsl.expected.glsl b/test/bug/chromium/1290107.wgsl.expected.glsl
index a68fe94..c60fe6c 100644
--- a/test/bug/chromium/1290107.wgsl.expected.glsl
+++ b/test/bug/chromium/1290107.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -11,10 +9,7 @@
   S inner[];
 } arr;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  arr.inner.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = (tint_symbol_2 / 4u);
-  uint len = tint_symbol_3;
+  uint len = uint(arr.inner.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -22,10 +17,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:13: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:13: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/complex_via_let.wgsl.expected.glsl b/test/builtins/arrayLength/complex_via_let.wgsl.expected.glsl
index 6f43d16..e2d85d0 100644
--- a/test/builtins/arrayLength/complex_via_let.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/complex_via_let.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int a[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
-  uint l1 = tint_symbol_3;
+  uint l1 = uint(G.a.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -18,10 +13,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl b/test/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl
index 2df0269..f962064 100644
--- a/test/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int inner[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.inner.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = (tint_symbol_2 / 4u);
-  uint l1 = tint_symbol_3;
+  uint l1 = uint(G.inner.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -18,10 +13,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/deprecated.wgsl.expected.glsl b/test/builtins/arrayLength/deprecated.wgsl.expected.glsl
index d447f38..c45f59b 100644
--- a/test/builtins/arrayLength/deprecated.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/deprecated.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,11 +5,8 @@
   int a[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
-  uint l1 = tint_symbol_3;
-  uint l2 = tint_symbol_3;
+  uint l1 = uint(G.a.length());
+  uint l2 = uint(G.a.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -19,10 +14,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/simple.wgsl.expected.glsl b/test/builtins/arrayLength/simple.wgsl.expected.glsl
index 6f43d16..e2d85d0 100644
--- a/test/builtins/arrayLength/simple.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/simple.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int a[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
-  uint l1 = tint_symbol_3;
+  uint l1 = uint(G.a.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -18,10 +13,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/simple_no_struct.wgsl.expected.glsl b/test/builtins/arrayLength/simple_no_struct.wgsl.expected.glsl
index 2df0269..f962064 100644
--- a/test/builtins/arrayLength/simple_no_struct.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/simple_no_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int inner[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.inner.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = (tint_symbol_2 / 4u);
-  uint l1 = tint_symbol_3;
+  uint l1 = uint(G.inner.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -18,10 +13,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/via_let.wgsl.expected.glsl b/test/builtins/arrayLength/via_let.wgsl.expected.glsl
index 6f43d16..e2d85d0 100644
--- a/test/builtins/arrayLength/via_let.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/via_let.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int a[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
-  uint l1 = tint_symbol_3;
+  uint l1 = uint(G.a.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -18,10 +13,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/via_let_complex.wgsl.expected.glsl b/test/builtins/arrayLength/via_let_complex.wgsl.expected.glsl
index 6f43d16..e2d85d0 100644
--- a/test/builtins/arrayLength/via_let_complex.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/via_let_complex.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int a[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
-  uint l1 = tint_symbol_3;
+  uint l1 = uint(G.a.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -18,10 +13,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl b/test/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl
index 2df0269..f962064 100644
--- a/test/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int inner[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.inner.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = (tint_symbol_2 / 4u);
-  uint l1 = tint_symbol_3;
+  uint l1 = uint(G.inner.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -18,10 +13,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/arrayLength/via_let_no_struct.wgsl.expected.glsl b/test/builtins/arrayLength/via_let_no_struct.wgsl.expected.glsl
index 2df0269..f962064 100644
--- a/test/builtins/arrayLength/via_let_no_struct.wgsl.expected.glsl
+++ b/test/builtins/arrayLength/via_let_no_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int inner[];
 } G;
 void tint_symbol() {
-  uint tint_symbol_2 = 0u;
-  G.inner.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = (tint_symbol_2 / 4u);
-  uint l1 = tint_symbol_3;
+  uint l1 = uint(G.inner.length());
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -18,10 +13,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/arrayLength/1588cd.wgsl.expected.glsl b/test/builtins/gen/arrayLength/1588cd.wgsl.expected.glsl
index af7a607..6c55ac3 100644
--- a/test/builtins/gen/arrayLength/1588cd.wgsl.expected.glsl
+++ b/test/builtins/gen/arrayLength/1588cd.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int arg_0[];
 } sb_ro;
 void arrayLength_1588cd() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 vec4 vertex_main() {
@@ -25,13 +20,6 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,10 +27,7 @@
   int arg_0[];
 } sb_ro;
 void arrayLength_1588cd() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 void fragment_main() {
@@ -53,13 +38,6 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -67,10 +45,7 @@
   int arg_0[];
 } sb_ro;
 void arrayLength_1588cd() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 void compute_main() {
@@ -82,10 +57,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/arrayLength/61b1c7.wgsl.expected.glsl b/test/builtins/gen/arrayLength/61b1c7.wgsl.expected.glsl
index c8e824f..a5d0229 100644
--- a/test/builtins/gen/arrayLength/61b1c7.wgsl.expected.glsl
+++ b/test/builtins/gen/arrayLength/61b1c7.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   int arg_0[];
 } sb_rw;
 void arrayLength_61b1c7() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 vec4 vertex_main() {
@@ -25,13 +20,6 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,10 +27,7 @@
   int arg_0[];
 } sb_rw;
 void arrayLength_61b1c7() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 void fragment_main() {
@@ -53,13 +38,6 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -67,10 +45,7 @@
   int arg_0[];
 } sb_rw;
 void arrayLength_61b1c7() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 void compute_main() {
@@ -82,10 +57,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/arrayLength/a0f5ca.wgsl.expected.glsl b/test/builtins/gen/arrayLength/a0f5ca.wgsl.expected.glsl
index 730e08d..d0bf4a5 100644
--- a/test/builtins/gen/arrayLength/a0f5ca.wgsl.expected.glsl
+++ b/test/builtins/gen/arrayLength/a0f5ca.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   float arg_0[];
 } sb_ro;
 void arrayLength_a0f5ca() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 vec4 vertex_main() {
@@ -25,13 +20,6 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,10 +27,7 @@
   float arg_0[];
 } sb_ro;
 void arrayLength_a0f5ca() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 void fragment_main() {
@@ -53,13 +38,6 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -67,10 +45,7 @@
   float arg_0[];
 } sb_ro;
 void arrayLength_a0f5ca() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 void compute_main() {
@@ -82,10 +57,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/arrayLength/cdd123.wgsl.expected.glsl b/test/builtins/gen/arrayLength/cdd123.wgsl.expected.glsl
index 3367d5b..92e73df 100644
--- a/test/builtins/gen/arrayLength/cdd123.wgsl.expected.glsl
+++ b/test/builtins/gen/arrayLength/cdd123.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   float arg_0[];
 } sb_rw;
 void arrayLength_cdd123() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 vec4 vertex_main() {
@@ -25,13 +20,6 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,10 +27,7 @@
   float arg_0[];
 } sb_rw;
 void arrayLength_cdd123() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 void fragment_main() {
@@ -53,13 +38,6 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -67,10 +45,7 @@
   float arg_0[];
 } sb_rw;
 void arrayLength_cdd123() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 void compute_main() {
@@ -82,10 +57,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/arrayLength/cfca0a.wgsl.expected.glsl b/test/builtins/gen/arrayLength/cfca0a.wgsl.expected.glsl
index 55bfb57..99cab31 100644
--- a/test/builtins/gen/arrayLength/cfca0a.wgsl.expected.glsl
+++ b/test/builtins/gen/arrayLength/cfca0a.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   uint arg_0[];
 } sb_ro;
 void arrayLength_cfca0a() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 vec4 vertex_main() {
@@ -25,13 +20,6 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,10 +27,7 @@
   uint arg_0[];
 } sb_ro;
 void arrayLength_cfca0a() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 void fragment_main() {
@@ -53,13 +38,6 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -67,10 +45,7 @@
   uint arg_0[];
 } sb_ro;
 void arrayLength_cfca0a() {
-  uint tint_symbol_1 = 0u;
-  sb_ro.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_ro.arg_0.length());
 }
 
 void compute_main() {
@@ -82,10 +57,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/arrayLength/eb510f.wgsl.expected.glsl b/test/builtins/gen/arrayLength/eb510f.wgsl.expected.glsl
index e48d0cf..52cd14e 100644
--- a/test/builtins/gen/arrayLength/eb510f.wgsl.expected.glsl
+++ b/test/builtins/gen/arrayLength/eb510f.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -7,10 +5,7 @@
   uint arg_0[];
 } sb_rw;
 void arrayLength_eb510f() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 vec4 vertex_main() {
@@ -25,13 +20,6 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,10 +27,7 @@
   uint arg_0[];
 } sb_rw;
 void arrayLength_eb510f() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 void fragment_main() {
@@ -53,13 +38,6 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -67,10 +45,7 @@
   uint arg_0[];
 } sb_rw;
 void arrayLength_eb510f() {
-  uint tint_symbol_1 = 0u;
-  sb_rw.GetDimensions(tint_symbol_1);
-  uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u);
-  uint res = tint_symbol_2;
+  uint res = uint(sb_rw.arg_0.length());
 }
 
 void compute_main() {
@@ -82,10 +57,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:9: 'GetDimensions' : no such field in structure 
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl
index 2e8e85b..644c948 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl
@@ -13,10 +13,7 @@
   uint rtarr[];
 } myvar;
 void main_1() {
-  uint tint_symbol_2 = 0u;
-  myvar.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = ((tint_symbol_2 - 4u) / 4u);
-  uint x_1 = tint_symbol_3;
+  uint x_1 = uint(myvar.rtarr.length());
   return;
 }
 
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl
index 2e8e85b..644c948 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl
@@ -13,10 +13,7 @@
   uint rtarr[];
 } myvar;
 void main_1() {
-  uint tint_symbol_2 = 0u;
-  myvar.GetDimensions(tint_symbol_2);
-  uint tint_symbol_3 = ((tint_symbol_2 - 4u) / 4u);
-  uint x_1 = tint_symbol_3;
+  uint x_1 = uint(myvar.rtarr.length());
   return;
 }
 
