diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc
index c5a8253..f1e726b 100644
--- a/src/writer/glsl/generator_impl.cc
+++ b/src/writer/glsl/generator_impl.cc
@@ -124,9 +124,6 @@
 GeneratorImpl::~GeneratorImpl() = default;
 
 bool GeneratorImpl::Generate() {
-  const TypeInfo* last_kind = nullptr;
-  size_t last_padding_line = 0;
-
   line() << "#version 310 es";
   line() << "precision mediump float;";
 
@@ -139,17 +136,6 @@
       continue;  // Ignore aliases.
     }
 
-    // Emit a new line between declarations if the type of declaration has
-    // changed, or we're about to emit a function
-    auto* kind = &decl->TypeInfo();
-    if (current_buffer_->lines.size() != last_padding_line) {
-      if (last_kind && (last_kind != kind || decl->Is<ast::Function>())) {
-        line();
-        last_padding_line = current_buffer_->lines.size();
-      }
-    }
-    last_kind = kind;
-
     if (auto* global = decl->As<ast::Variable>()) {
       if (!EmitGlobalVariable(global)) {
         return false;
@@ -1632,6 +1618,7 @@
   }
 
   line() << "}";
+  line();
 
   return true;
 }
@@ -1677,6 +1664,7 @@
   EmitStructMembers(current_buffer_, str);
   auto name = builder_.Symbols().NameFor(decl->symbol);
   line() << "} " << name << ";";
+  line();
 
   return true;
 }
@@ -1891,36 +1879,37 @@
 bool GeneratorImpl::EmitEntryPointFunction(const ast::Function* func) {
   auto* func_sem = builder_.Sem().Get(func);
 
+  if (func->PipelineStage() == ast::PipelineStage::kCompute) {
+    auto out = line();
+    // Emit the layout(local_size) attributes.
+    auto wgsize = func_sem->WorkgroupSize();
+    out << "layout(";
+    for (int i = 0; i < 3; i++) {
+      if (i > 0) {
+        out << ", ";
+      }
+      out << "local_size_" << (i == 0 ? "x" : i == 1 ? "y" : "z") << " = ";
+
+      if (wgsize[i].overridable_const) {
+        auto* global = builder_.Sem().Get<sem::GlobalVariable>(
+            wgsize[i].overridable_const);
+        if (!global->IsOverridable()) {
+          TINT_ICE(Writer, builder_.Diagnostics())
+              << "expected a pipeline-overridable constant";
+        }
+        out << kSpecConstantPrefix << global->ConstantId();
+      } else {
+        out << std::to_string(wgsize[i].value);
+      }
+    }
+    out << ") in;";
+  }
+
+  // Emit original entry point signature
   {
     auto out = line();
-    if (func->PipelineStage() == ast::PipelineStage::kCompute) {
-      // Emit the layout(local_size) attributes.
-      auto wgsize = func_sem->WorkgroupSize();
-      out << "layout(";
-      for (int i = 0; i < 3; i++) {
-        if (i > 0) {
-          out << ", ";
-        }
-        out << "local_size_" << (i == 0 ? "x" : i == 1 ? "y" : "z") << " = ";
-
-        if (wgsize[i].overridable_const) {
-          auto* global = builder_.Sem().Get<sem::GlobalVariable>(
-              wgsize[i].overridable_const);
-          if (!global->IsOverridable()) {
-            TINT_ICE(Writer, builder_.Diagnostics())
-                << "expected a pipeline-overridable constant";
-          }
-          out << kSpecConstantPrefix << global->ConstantId();
-        } else {
-          out << std::to_string(wgsize[i].value);
-        }
-      }
-      out << ") in;" << std::endl;
-    }
-
-    out << func->return_type->FriendlyName(builder_.Symbols());
-
-    out << " " << builder_.Symbols().NameFor(func->symbol) << "(";
+    out << func->return_type->FriendlyName(builder_.Symbols()) << " "
+        << builder_.Symbols().NameFor(func->symbol) << "(";
 
     bool first = true;
 
@@ -1949,6 +1938,7 @@
     out << ") {";
   }
 
+  // Emit original entry point function body
   {
     ScopedIndent si(this);
 
@@ -1966,13 +1956,13 @@
 
   line() << "}";
 
-  auto out = line();
-
   // Declare entry point input variables
   for (auto* var : func->params) {
     auto* sem = builder_.Sem().Get(var);
     auto* str = sem->Type()->As<sem::Struct>();
     for (auto* member : str->Members()) {
+      auto out = line();
+
       auto decorations = member->Declaration()->decorations;
       if (ast::HasDecoration<ast::BuiltinDecoration>(decorations)) {
         continue;
@@ -1990,7 +1980,7 @@
               builder_.Symbols().NameFor(member->Declaration()->symbol))) {
         return false;
       }
-      out << ";" << std::endl;
+      out << ";";
     }
   }
 
@@ -1998,6 +1988,7 @@
   auto* return_type = func_sem->ReturnType()->As<sem::Struct>();
   if (return_type) {
     for (auto* member : return_type->Members()) {
+      auto out = line();
       auto decorations = member->Declaration()->decorations;
       if (ast::HasDecoration<ast::BuiltinDecoration>(decorations)) {
         continue;
@@ -2015,82 +2006,93 @@
               builder_.Symbols().NameFor(member->Declaration()->symbol))) {
         return false;
       }
-      out << ";" << std::endl;
+      out << ";";
     }
   }
+  line();
 
   // Create a main() function which calls the entry point.
-  out << "void main() {" << std::endl;
-  std::string printed_name;
-  for (auto* var : func->params) {
-    out << "  ";
-    auto* sem = builder_.Sem().Get(var);
-    if (!EmitTypeAndName(out, sem->Type(), sem->StorageClass(), sem->Access(),
-                         "inputs")) {
-      return false;
-    }
-    out << ";" << std::endl;
-    auto* type = sem->Type();
-    auto* str = type->As<sem::Struct>();
-    for (auto* member : str->Members()) {
-      std::string name =
-          builder_.Symbols().NameFor(member->Declaration()->symbol);
-      out << "  inputs." << name << " = ";
-      if (auto* builtin = ast::GetDecoration<ast::BuiltinDecoration>(
-              member->Declaration()->decorations)) {
-        if (builtin_type(builtin->builtin) != member->Type()) {
-          if (!EmitType(out, member->Type(), ast::StorageClass::kNone,
-                        ast::Access::kReadWrite, "")) {
-            return false;
-          }
-          out << "(";
-          out << builtin_to_string(builtin->builtin, func->PipelineStage());
-          out << ")";
-        } else {
-          out << builtin_to_string(builtin->builtin, func->PipelineStage());
+  line() << "void main() {";
+
+  // Emit main function body
+  {
+    ScopedIndent si(this);
+    for (auto* var : func->params) {
+      auto* sem = builder_.Sem().Get(var);
+      auto* type = sem->Type();
+      {
+        auto out = line();
+        if (!EmitTypeAndName(out, type, sem->StorageClass(), sem->Access(),
+                             "inputs")) {
+          return false;
         }
-      } else {
-        out << name;
+        out << ";";
       }
-      out << ";" << std::endl;
+      auto* str = type->As<sem::Struct>();
+      for (auto* member : str->Members()) {
+        auto out = line();
+        std::string name =
+            builder_.Symbols().NameFor(member->Declaration()->symbol);
+        out << "inputs." << name << " = ";
+        if (auto* builtin = ast::GetDecoration<ast::BuiltinDecoration>(
+                member->Declaration()->decorations)) {
+          if (builtin_type(builtin->builtin) != member->Type()) {
+            if (!EmitType(out, member->Type(), ast::StorageClass::kNone,
+                          ast::Access::kReadWrite, "")) {
+              return false;
+            }
+            out << "(";
+            out << builtin_to_string(builtin->builtin, func->PipelineStage());
+            out << ")";
+          } else {
+            out << builtin_to_string(builtin->builtin, func->PipelineStage());
+          }
+        } else {
+          out << name;
+        }
+        out << ";";
+      }
+    }
+
+    if (return_type) {
+      line() << return_type->FriendlyName(builder_.Symbols()) << " outputs;";
+    }
+    {
+      auto out = line();
+      if (return_type) {
+        out << "outputs = ";
+      }
+      out << builder_.Symbols().NameFor(func->symbol);
+      if (func->params.empty()) {
+        out << "()";
+      } else {
+        out << "(inputs)";
+      }
+      out << ";";
+    }
+
+    auto* str = func_sem->ReturnType()->As<sem::Struct>();
+    if (str) {
+      for (auto* member : str->Members()) {
+        auto out = line();
+        std::string name =
+            builder_.Symbols().NameFor(member->Declaration()->symbol);
+        if (auto* builtin = ast::GetDecoration<ast::BuiltinDecoration>(
+                member->Declaration()->decorations)) {
+          out << builtin_to_string(builtin->builtin, func->PipelineStage());
+        } else {
+          out << name;
+        }
+        out << " = outputs." << name << ";";
+      }
+    }
+    if (func->PipelineStage() == ast::PipelineStage::kVertex) {
+      line() << "gl_Position.z = 2.0 * gl_Position.z - gl_Position.w;";
+      line() << "gl_Position.y = -gl_Position.y;";
     }
   }
-  out << "  ";
-  if (return_type) {
-    out << return_type->FriendlyName(builder_.Symbols()) << " "
-        << "outputs;" << std::endl;
-    out << "  outputs = ";
-  }
-  out << builder_.Symbols().NameFor(func->symbol);
-  if (func->params.empty()) {
-    out << "()";
-  } else {
-    out << "(inputs)";
-  }
-  out << ";" << std::endl;
-
-  auto* str = func_sem->ReturnType()->As<sem::Struct>();
-  if (str) {
-    for (auto* member : str->Members()) {
-      std::string name =
-          builder_.Symbols().NameFor(member->Declaration()->symbol);
-      out << "  ";
-      if (auto* builtin = ast::GetDecoration<ast::BuiltinDecoration>(
-              member->Declaration()->decorations)) {
-        out << builtin_to_string(builtin->builtin, func->PipelineStage());
-      } else {
-        out << name;
-      }
-      out << " = outputs." << name << ";" << std::endl;
-    }
-  }
-  if (func->PipelineStage() == ast::PipelineStage::kVertex) {
-    out << "  gl_Position.z = 2.0 * gl_Position.z - gl_Position.w;"
-        << std::endl;
-    out << "  gl_Position.y = -gl_Position.y;" << std::endl;
-  }
-
-  out << "}" << std::endl << std::endl;
+  line() << "}";
+  line();
 
   return true;
 }
@@ -2611,6 +2613,7 @@
   line(b) << "struct " << StructName(str) << " {";
   EmitStructMembers(b, str);
   line(b) << "};";
+  line(b);
 
   return true;
 }
diff --git a/src/writer/glsl/generator_impl_function_test.cc b/src/writer/glsl/generator_impl_function_test.cc
index b6e9fe7..c4bc9bb 100644
--- a/src/writer/glsl/generator_impl_function_test.cc
+++ b/src/writer/glsl/generator_impl_function_test.cc
@@ -45,6 +45,7 @@
   void my_func() {
     return;
   }
+
 )");
 }
 
@@ -82,6 +83,7 @@
   void my_func(float a, int b) {
     return;
   }
+
 )");
 }
 
@@ -101,11 +103,11 @@
 void func() {
   return;
 }
+
 void main() {
   func();
 }
 
-
 )");
 }
 
@@ -143,6 +145,7 @@
 struct tint_symbol_1 {
   float foo;
 };
+
 struct tint_symbol_2 {
   float value;
 };
@@ -159,6 +162,7 @@
 }
 layout(location = 0) in float foo;
 layout(location = 1) out float value;
+
 void main() {
   tint_symbol_1 inputs;
   inputs.foo = foo;
@@ -167,7 +171,6 @@
   value = outputs.value;
 }
 
-
 )");
 }
 
@@ -192,6 +195,7 @@
 struct tint_symbol_1 {
   vec4 coord;
 };
+
 struct tint_symbol_2 {
   float value;
 };
@@ -206,6 +210,9 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.coord = gl_FragCoord;
@@ -214,7 +221,6 @@
   gl_FragDepth = outputs.value;
 }
 
-
 )");
 }
 
@@ -265,6 +271,7 @@
   float col1;
   float col2;
 };
+
 struct tint_symbol {
   float col1;
   float col2;
@@ -286,6 +293,8 @@
 }
 layout(location = 1) out float col1;
 layout(location = 2) out float col2;
+
+
 void main() {
   tint_symbol outputs;
   outputs = vert_main();
@@ -296,8 +305,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
-
 struct tint_symbol_2 {
   float col1;
   float col2;
@@ -317,6 +324,8 @@
 }
 layout(location = 1) in float col1;
 layout(location = 2) in float col2;
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.col1 = col1;
@@ -325,7 +334,6 @@
   frag_main(inputs);
 }
 
-
 )");
 }
 
@@ -451,11 +459,11 @@
   float v = sub_func(1.0f);
   return;
 }
+
 void main() {
   frag_main();
 }
 
-
 )");
 }
 
@@ -500,11 +508,11 @@
   float v = uniforms.coord.x;
   return;
 }
+
 void main() {
   frag_main();
 }
 
-
 )");
 }
 
@@ -551,16 +559,15 @@
   int a;
   float b;
 } coord;
-
 void frag_main() {
   float v = coord.b;
   return;
 }
+
 void main() {
   frag_main();
 }
 
-
 )");
 }
 
@@ -607,16 +614,15 @@
   int a;
   float b;
 } coord;
-
 void frag_main() {
   float v = coord.b;
   return;
 }
+
 void main() {
   frag_main();
 }
 
-
 )");
 }
 
@@ -659,16 +665,15 @@
   int a;
   float b;
 } coord;
-
 void frag_main() {
   coord.b = 2.0f;
   return;
 }
+
 void main() {
   frag_main();
 }
 
-
 )");
 }
 
@@ -712,16 +717,15 @@
   int a;
   float b;
 } coord;
-
 void frag_main() {
   coord.b = 2.0f;
   return;
 }
+
 void main() {
   frag_main();
 }
 
-
 )");
 }
 
@@ -774,11 +778,11 @@
   float v = sub_func(1.0f);
   return;
 }
+
 void main() {
   frag_main();
 }
 
-
 )");
 }
 
@@ -824,7 +828,6 @@
 layout(binding = 0) buffer S_1 {
   float x;
 } coord;
-
 float sub_func(float param) {
   return coord.x;
 }
@@ -833,11 +836,11 @@
   float v = sub_func(1.0f);
   return;
 }
+
 void main() {
   frag_main();
 }
 
-
 )");
 }
 
@@ -857,11 +860,11 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )");
 }
 
@@ -882,11 +885,11 @@
 void main() {
   return;
 }
+
 void main() {
   main();
 }
 
-
 )");
 }
 
@@ -908,11 +911,11 @@
 void main() {
   return;
 }
+
 void main() {
   main();
 }
 
-
 )");
 }
 
@@ -936,16 +939,15 @@
 const int width = int(2);
 const int height = int(3);
 const int depth = int(4);
-
 layout(local_size_x = 2, local_size_y = 3, local_size_z = 4) in;
 void main() {
   return;
 }
+
 void main() {
   main();
 }
 
-
 )");
 }
 
@@ -978,16 +980,15 @@
 #define WGSL_SPEC_CONSTANT_9 int(4)
 #endif
 const int depth = WGSL_SPEC_CONSTANT_9;
-
 layout(local_size_x = WGSL_SPEC_CONSTANT_7, local_size_y = WGSL_SPEC_CONSTANT_8, local_size_z = WGSL_SPEC_CONSTANT_9) in;
 void main() {
   return;
 }
+
 void main() {
   main();
 }
 
-
 )");
 }
 
@@ -1006,6 +1007,7 @@
 void my_func(float a[5]) {
   return;
 }
+
 )");
 }
 
@@ -1024,6 +1026,7 @@
 float[5] my_func() {
   return float[5](0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
 )");
 }
 
@@ -1093,28 +1096,26 @@
 layout(binding = 0) buffer Data_1 {
   float d;
 } data;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void a() {
   float v = data.d;
   return;
 }
+
 void main() {
   a();
 }
 
-
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void b() {
   float v = data.d;
   return;
 }
+
 void main() {
   b();
 }
 
-
 )");
 }
 
diff --git a/src/writer/glsl/generator_impl_intrinsic_test.cc b/src/writer/glsl/generator_impl_intrinsic_test.cc
index 102f7c3..6a14bf9 100644
--- a/src/writer/glsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/glsl/generator_impl_intrinsic_test.cc
@@ -405,11 +405,11 @@
   float tint_symbol = tint_degrees(val);
   return;
 }
+
 void main() {
   test_function();
 }
 
-
 )");
 }
 
@@ -435,11 +435,11 @@
   vec3 tint_symbol = tint_degrees(val);
   return;
 }
+
 void main() {
   test_function();
 }
 
-
 )");
 }
 
@@ -465,11 +465,11 @@
   float tint_symbol = tint_radians(val);
   return;
 }
+
 void main() {
   test_function();
 }
 
-
 )");
 }
 
@@ -495,11 +495,11 @@
   vec3 tint_symbol = tint_radians(val);
   return;
 }
+
 void main() {
   test_function();
 }
 
-
 )");
 }
 
@@ -736,17 +736,16 @@
 }
 
 ivec3 v = ivec3(0, 0, 0);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void test_function() {
   tint_int_dot(v, v);
   return;
 }
+
 void main() {
   test_function();
 }
 
-
 )");
 }
 
@@ -765,17 +764,16 @@
 }
 
 uvec3 v = uvec3(0u, 0u, 0u);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void test_function() {
   tint_int_dot(v, v);
   return;
 }
+
 void main() {
   test_function();
 }
 
-
 )");
 }
 
diff --git a/src/writer/glsl/generator_impl_member_accessor_test.cc b/src/writer/glsl/generator_impl_member_accessor_test.cc
index cef3da6..6a5f5a8 100644
--- a/src/writer/glsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/glsl/generator_impl_member_accessor_test.cc
@@ -140,17 +140,16 @@
 };
 
 Data str = Data(0.0f);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void test_function() {
   float expr = str.mem;
   return;
 }
+
 void main() {
   test_function();
 }
 
-
 )");
 }
 
@@ -305,16 +304,15 @@
   int a;
   mat2x3 b;
 } data;
-
 void tint_symbol() {
   data.b = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -355,16 +353,15 @@
   float z;
   mat4x3 a;
 } data;
-
 void tint_symbol() {
   float x = data.a[2][1];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -403,16 +400,15 @@
   float z;
   int a[5];
 } data;
-
 void tint_symbol() {
   int x = data.a[2];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -452,16 +448,15 @@
   float z;
   int a[5];
 } data;
-
 void tint_symbol() {
   int x = data.a[((2 + 4) - 3)];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -498,16 +493,15 @@
   float z;
   int a[5];
 } data;
-
 void tint_symbol() {
   data.a[2] = 2;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -550,6 +544,7 @@
   vec3 a;
   vec3 b;
 };
+
 struct Data {
   Inner c[4];
 };
@@ -557,16 +552,15 @@
 layout(binding = 0) buffer Data_1 {
   Inner c[4];
 } data;
-
 void tint_symbol() {
   vec3 x = data.c[2].b;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -612,6 +606,7 @@
   vec3 a;
   vec3 b;
 };
+
 struct Data {
   Inner c[4];
 };
@@ -619,16 +614,15 @@
 layout(binding = 0) buffer Data_1 {
   Inner c[4];
 } data;
-
 void tint_symbol() {
   vec2 x = data.c[2].b.xy;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -674,6 +668,7 @@
   vec3 a;
   vec3 b;
 };
+
 struct Data {
   Inner c[4];
 };
@@ -681,16 +676,15 @@
 layout(binding = 0) buffer Data_1 {
   Inner c[4];
 } data;
-
 void tint_symbol() {
   float x = data.c[2].b.g;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -736,6 +730,7 @@
   vec3 a;
   vec3 b;
 };
+
 struct Data {
   Inner c[4];
 };
@@ -743,16 +738,15 @@
 layout(binding = 0) buffer Data_1 {
   Inner c[4];
 } data;
-
 void tint_symbol() {
   float x = data.c[2].b[1];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -794,6 +788,7 @@
   vec3 a;
   vec3 b;
 };
+
 struct Data {
   Inner c[4];
 };
@@ -801,16 +796,15 @@
 layout(binding = 0) buffer Data_1 {
   Inner c[4];
 } data;
-
 void tint_symbol() {
   data.c[2].b = vec3(1.0f, 2.0f, 3.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
@@ -856,6 +850,7 @@
   ivec3 a;
   vec3 b;
 };
+
 struct Data {
   Inner c[4];
 };
@@ -863,16 +858,15 @@
 layout(binding = 0) buffer Data_1 {
   Inner c[4];
 } data;
-
 void tint_symbol() {
   data.c[2].b.y = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(gen.result(), expected);
 }
diff --git a/src/writer/glsl/generator_impl_sanitizer_test.cc b/src/writer/glsl/generator_impl_sanitizer_test.cc
index a3e272d..abf7783 100644
--- a/src/writer/glsl/generator_impl_sanitizer_test.cc
+++ b/src/writer/glsl/generator_impl_sanitizer_test.cc
@@ -51,11 +51,9 @@
   auto* expect = R"(#version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer my_struct_1 {
   float a[];
 } b;
-
 void a_func() {
   uint tint_symbol_1 = 0u;
   b.GetDimensions(tint_symbol_1);
@@ -63,11 +61,11 @@
   uint len = tint_symbol_2;
   return;
 }
+
 void main() {
   a_func();
 }
 
-
 )";
   EXPECT_EQ(expect, got);
 }
@@ -102,12 +100,10 @@
   auto* expect = R"(#version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer my_struct_1 {
   float z;
   float a[];
 } b;
-
 void a_func() {
   uint tint_symbol_1 = 0u;
   b.GetDimensions(tint_symbol_1);
@@ -115,11 +111,11 @@
   uint len = tint_symbol_2;
   return;
 }
+
 void main() {
   a_func();
 }
 
-
 )";
 
   EXPECT_EQ(expect, got);
@@ -156,11 +152,9 @@
   auto* expect = R"(#version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer my_struct_1 {
   float a[];
 } b;
-
 void a_func() {
   uint tint_symbol_1 = 0u;
   b.GetDimensions(tint_symbol_1);
@@ -168,11 +162,11 @@
   uint len = tint_symbol_2;
   return;
 }
+
 void main() {
   a_func();
 }
 
-
 )";
 
   EXPECT_EQ(expect, got);
@@ -204,11 +198,11 @@
   int pos = tint_symbol_1[3];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(expect, got);
 }
@@ -251,11 +245,11 @@
   vec3 pos = tint_symbol_1.b;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(expect, got);
 }
@@ -292,11 +286,11 @@
   int x = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(expect, got);
 }
@@ -345,11 +339,11 @@
   vec4 v = a[3][2];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 )";
   EXPECT_EQ(expect, got);
 }
diff --git a/src/writer/glsl/generator_impl_test.cc b/src/writer/glsl/generator_impl_test.cc
index 1f9db55..d264afb 100644
--- a/src/writer/glsl/generator_impl_test.cc
+++ b/src/writer/glsl/generator_impl_test.cc
@@ -33,6 +33,7 @@
 
 void my_func() {
 }
+
 )");
 }
 
diff --git a/src/writer/glsl/generator_impl_type_test.cc b/src/writer/glsl/generator_impl_type_test.cc
index 2a042cd..9ab92a2 100644
--- a/src/writer/glsl/generator_impl_type_test.cc
+++ b/src/writer/glsl/generator_impl_type_test.cc
@@ -180,6 +180,7 @@
   int a;
   float b;
 };
+
 )");
 }
 
@@ -235,6 +236,7 @@
   int a;
   float b;
 };
+
 )");
 }
 
diff --git a/test/access/let/matrix.spvasm.expected.glsl b/test/access/let/matrix.spvasm.expected.glsl
index cde810e..09bbe7d 100644
--- a/test/access/let/matrix.spvasm.expected.glsl
+++ b/test/access/let/matrix.spvasm.expected.glsl
@@ -11,8 +11,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/access/let/matrix.wgsl.expected.glsl b/test/access/let/matrix.wgsl.expected.glsl
index 69e59d1..e1c125d 100644
--- a/test/access/let/matrix.wgsl.expected.glsl
+++ b/test/access/let/matrix.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   float f = v[1];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/access/let/vector.spvasm.expected.glsl b/test/access/let/vector.spvasm.expected.glsl
index 9f6a084..8d9f092 100644
--- a/test/access/let/vector.spvasm.expected.glsl
+++ b/test/access/let/vector.spvasm.expected.glsl
@@ -13,8 +13,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/access/let/vector.wgsl.expected.glsl b/test/access/let/vector.wgsl.expected.glsl
index fe1e88c..31cc9c0 100644
--- a/test/access/let/vector.wgsl.expected.glsl
+++ b/test/access/let/vector.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   vec3 swizzle3 = v.xzy;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/access/var/matrix.spvasm.expected.glsl b/test/access/var/matrix.spvasm.expected.glsl
index de758b0..b906e9a 100644
--- a/test/access/var/matrix.spvasm.expected.glsl
+++ b/test/access/var/matrix.spvasm.expected.glsl
@@ -13,8 +13,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/access/var/matrix.wgsl.expected.glsl b/test/access/var/matrix.wgsl.expected.glsl
index 8416591..42db3dd 100644
--- a/test/access/var/matrix.wgsl.expected.glsl
+++ b/test/access/var/matrix.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   float f = v[1];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/access/var/vector.spvasm.expected.glsl b/test/access/var/vector.spvasm.expected.glsl
index 076fbef..05991e5 100644
--- a/test/access/var/vector.spvasm.expected.glsl
+++ b/test/access/var/vector.spvasm.expected.glsl
@@ -16,8 +16,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/access/var/vector.wgsl.expected.glsl b/test/access/var/vector.wgsl.expected.glsl
index 545f673..0d3c233 100644
--- a/test/access/var/vector.wgsl.expected.glsl
+++ b/test/access/var/vector.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   vec3 swizzle3 = v.xzy;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/array/assign_to_function_var.wgsl.expected.glsl b/test/array/assign_to_function_var.wgsl.expected.glsl
index 18b10dd..54f1d21 100644
--- a/test/array/assign_to_function_var.wgsl.expected.glsl
+++ b/test/array/assign_to_function_var.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   ivec4 arr[4];
 };
@@ -20,10 +19,10 @@
 layout(binding = 0) uniform S_1 {
   ivec4 arr[4];
 } src_uniform;
+
 layout(binding = 1) buffer S_2 {
   ivec4 arr[4];
 } src_storage;
-
 ivec4[4] ret_arr() {
   ivec4 tint_symbol[4] = ivec4[4](ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
   return tint_symbol;
@@ -53,3 +52,4 @@
   int src_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
   dst_nested = src_nested;
 }
+
diff --git a/test/array/assign_to_private_var.wgsl.expected.glsl b/test/array/assign_to_private_var.wgsl.expected.glsl
index bbda26a..f3898a9 100644
--- a/test/array/assign_to_private_var.wgsl.expected.glsl
+++ b/test/array/assign_to_private_var.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   ivec4 arr[4];
 };
@@ -20,12 +19,12 @@
 layout(binding = 0) uniform S_1 {
   ivec4 arr[4];
 } src_uniform;
+
 layout(binding = 1) buffer S_2 {
   ivec4 arr[4];
 } src_storage;
 ivec4 dst[4] = ivec4[4](ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
 int dst_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
-
 ivec4[4] ret_arr() {
   ivec4 tint_symbol[4] = ivec4[4](ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
   return tint_symbol;
@@ -53,3 +52,4 @@
   int src_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
   dst_nested = src_nested;
 }
+
diff --git a/test/array/assign_to_storage_var.wgsl.expected.glsl b/test/array/assign_to_storage_var.wgsl.expected.glsl
index 3cb45d2..3ef6d59 100644
--- a/test/array/assign_to_storage_var.wgsl.expected.glsl
+++ b/test/array/assign_to_storage_var.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   ivec4 arr[4];
 };
+
 struct S_nested {
   int arr[4][3][2];
 };
@@ -23,6 +23,7 @@
 layout(binding = 0) uniform S_1 {
   ivec4 arr[4];
 } src_uniform;
+
 layout(binding = 1) buffer S_2 {
   ivec4 arr[4];
 } src_storage;
@@ -32,7 +33,6 @@
 layout(binding = 3) buffer S_nested_1 {
   int arr[4][3][2];
 } dst_nested;
-
 ivec4[4] ret_arr() {
   ivec4 tint_symbol[4] = ivec4[4](ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
   return tint_symbol;
@@ -60,3 +60,4 @@
   int src_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
   dst_nested.arr = src_nested;
 }
+
diff --git a/test/array/assign_to_subexpr.wgsl.expected.glsl b/test/array/assign_to_subexpr.wgsl.expected.glsl
index 13e1690..0bec242 100644
--- a/test/array/assign_to_subexpr.wgsl.expected.glsl
+++ b/test/array/assign_to_subexpr.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   int arr[4];
 };
@@ -26,3 +25,4 @@
   dst_struct.arr = src;
   dst_array[0] = src;
 }
+
diff --git a/test/array/assign_to_workgroup_var.wgsl.expected.glsl b/test/array/assign_to_workgroup_var.wgsl.expected.glsl
index 3f88a39..9cc8828 100644
--- a/test/array/assign_to_workgroup_var.wgsl.expected.glsl
+++ b/test/array/assign_to_workgroup_var.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   ivec4 arr[4];
 };
@@ -20,12 +19,12 @@
 layout(binding = 0) uniform S_1 {
   ivec4 arr[4];
 } src_uniform;
+
 layout(binding = 1) buffer S_2 {
   ivec4 arr[4];
 } src_storage;
 shared ivec4 dst[4];
 shared int dst_nested[4][3][2];
-
 ivec4[4] ret_arr() {
   ivec4 tint_symbol[4] = ivec4[4](ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
   return tint_symbol;
@@ -53,3 +52,4 @@
   int src_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
   dst_nested = src_nested;
 }
+
diff --git a/test/array/function_parameter.wgsl.expected.glsl b/test/array/function_parameter.wgsl.expected.glsl
index 9164984..2005298 100644
--- a/test/array/function_parameter.wgsl.expected.glsl
+++ b/test/array/function_parameter.wgsl.expected.glsl
@@ -23,8 +23,8 @@
   float v3 = f3(a3);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/array/function_return_type.wgsl.expected.glsl b/test/array/function_return_type.wgsl.expected.glsl
index 1a9b8b1..565b3ce 100644
--- a/test/array/function_return_type.wgsl.expected.glsl
+++ b/test/array/function_return_type.wgsl.expected.glsl
@@ -23,8 +23,8 @@
   float a3[2][3][4] = f3();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/array/size.wgsl.expected.glsl b/test/array/size.wgsl.expected.glsl
index 3f28448..080117c 100644
--- a/test/array/size.wgsl.expected.glsl
+++ b/test/array/size.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 const int slen = 4;
 const uint ulen = 4u;
-
 void tint_symbol() {
   float signed_literal[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
   float unsigned_literal[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
@@ -13,8 +12,8 @@
   signed_constant = unsigned_literal;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/array/type_constructor.wgsl.expected.glsl b/test/array/type_constructor.wgsl.expected.glsl
index 25c35d3..7f3f884 100644
--- a/test/array/type_constructor.wgsl.expected.glsl
+++ b/test/array/type_constructor.wgsl.expected.glsl
@@ -38,8 +38,8 @@
   int subexpr_nested_nonempty_with_expr[4] = tint_symbol_20[1];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/benchmark/animometer.wgsl.expected.glsl b/test/benchmark/animometer.wgsl.expected.glsl
index 976115f..3a6d303 100644
--- a/test/benchmark/animometer.wgsl.expected.glsl
+++ b/test/benchmark/animometer.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 struct Time {
   float value;
 };
+
 struct Uniforms {
   float scale;
   float offsetX;
@@ -17,6 +18,7 @@
 layout(binding = 0) uniform Time_1 {
   float value;
 } time;
+
 layout(binding = 1) uniform Uniforms_1 {
   float scale;
   float offsetX;
@@ -29,10 +31,12 @@
   vec4 Position;
   vec4 v_color;
 };
+
 struct tint_symbol_2 {
   vec4 position;
   vec4 color;
 };
+
 struct tint_symbol_3 {
   vec4 v_color;
   vec4 Position;
@@ -61,6 +65,7 @@
 struct tint_symbol_5 {
   vec4 v_color;
 };
+
 struct tint_symbol_6 {
   vec4 value;
 };
@@ -75,6 +80,8 @@
 layout(location = 0) in vec4 position;
 layout(location = 1) in vec4 color;
 layout(location = 0) out vec4 v_color;
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.position = position;
@@ -87,10 +94,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:40: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' const float' (or there is no acceptable conversion)
-ERROR: 0:40: '' : compilation terminated 
+ERROR: 0:44: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:44: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -101,6 +107,7 @@
 struct Time {
   float value;
 };
+
 struct Uniforms {
   float scale;
   float offsetX;
@@ -108,21 +115,26 @@
   float scalar;
   float scalarOffset;
 };
+
 struct VertexOutput {
   vec4 Position;
   vec4 v_color;
 };
+
 struct tint_symbol_2 {
   vec4 position;
   vec4 color;
 };
+
 struct tint_symbol_3 {
   vec4 v_color;
   vec4 Position;
 };
+
 struct tint_symbol_5 {
   vec4 v_color;
 };
+
 struct tint_symbol_6 {
   vec4 value;
 };
@@ -139,6 +151,7 @@
 }
 layout(location = 0) in vec4 v_color;
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_5 inputs;
   inputs.v_color = v_color;
@@ -147,4 +160,3 @@
   value = outputs.value;
 }
 
-
diff --git a/test/benchmark/particles.wgsl.expected.glsl b/test/benchmark/particles.wgsl.expected.glsl
index 8319db1..1491dca 100644
--- a/test/benchmark/particles.wgsl.expected.glsl
+++ b/test/benchmark/particles.wgsl.expected.glsl
@@ -20,16 +20,19 @@
   vec4 color;
   vec2 quad_pos;
 };
+
 struct VertexOutput {
   vec4 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_4 {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_5 {
   vec4 color;
   vec2 quad_pos;
@@ -51,28 +54,35 @@
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_8 {
   vec4 value;
 };
+
 struct SimulationParams {
   float deltaTime;
   vec4 seed;
 };
+
 struct Particle {
   vec3 position;
   float lifetime;
   vec4 color;
   vec3 velocity;
 };
+
 struct tint_symbol_10 {
   uvec3 GlobalInvocationID;
 };
+
 struct UBO {
   uint width;
 };
+
 struct tint_symbol_12 {
   uvec3 coord;
 };
+
 struct tint_symbol_14 {
   uvec3 coord;
 };
@@ -91,6 +101,8 @@
 layout(location = 2) in vec2 quad_pos;
 layout(location = 0) out vec4 color;
 layout(location = 1) out vec2 quad_pos;
+
+
 void main() {
   tint_symbol_4 inputs;
   inputs.position = position;
@@ -105,9 +117,8 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:90: 'color' : redefinition 
+ERROR: 0:100: 'color' : redefinition 
 ERROR: 1 compilation errors.  No code generated.
 
 
@@ -120,31 +131,37 @@
   vec3 right;
   vec3 up;
 };
+
 struct VertexInput {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct VertexOutput {
   vec4 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_4 {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_5 {
   vec4 color;
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_7 {
   vec4 color;
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_8 {
   vec4 value;
 };
@@ -159,21 +176,26 @@
   float deltaTime;
   vec4 seed;
 };
+
 struct Particle {
   vec3 position;
   float lifetime;
   vec4 color;
   vec3 velocity;
 };
+
 struct tint_symbol_10 {
   uvec3 GlobalInvocationID;
 };
+
 struct UBO {
   uint width;
 };
+
 struct tint_symbol_12 {
   uvec3 coord;
 };
+
 struct tint_symbol_14 {
   uvec3 coord;
 };
@@ -187,7 +209,9 @@
 }
 layout(location = 0) in vec4 color;
 layout(location = 1) in vec2 quad_pos;
+
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_7 inputs;
   inputs.color = color;
@@ -198,12 +222,10 @@
   value = outputs.value;
 }
 
-
 #version 310 es
 precision mediump float;
 
 vec2 rand_seed = vec2(0.0f, 0.0f);
-
 float rand() {
   rand_seed.x = frac((cos(dot(rand_seed, vec2(23.140779495f, 232.616897583f))) * 136.816802979f));
   rand_seed.y = frac((cos(dot(rand_seed, vec2(54.478565216f, 345.841522217f))) * 534.764526367f));
@@ -215,38 +237,46 @@
   vec3 right;
   vec3 up;
 };
+
 struct VertexInput {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct VertexOutput {
   vec4 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_4 {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_5 {
   vec4 color;
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_7 {
   vec4 color;
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_8 {
   vec4 value;
 };
+
 struct SimulationParams {
   float deltaTime;
   vec4 seed;
 };
+
 struct Particle {
   vec3 position;
   float lifetime;
@@ -258,16 +288,15 @@
   float deltaTime;
   vec4 seed;
 } sim_params;
+
 layout(binding = 1) buffer Particles_1 {
   Particle particles[];
 } data;
-
 struct tint_symbol_10 {
   uvec3 GlobalInvocationID;
 };
 
 uniform highp sampler2D tint_symbol_2_1;
-
 void simulate_inner(uvec3 GlobalInvocationID) {
   rand_seed = ((sim_params.seed.xy + vec2(GlobalInvocationID.xy)) * sim_params.seed.zw);
   uint idx = GlobalInvocationID.x;
@@ -302,9 +331,11 @@
 struct UBO {
   uint width;
 };
+
 struct tint_symbol_12 {
   uvec3 coord;
 };
+
 struct tint_symbol_14 {
   uvec3 coord;
 };
@@ -314,16 +345,17 @@
   simulate_inner(tint_symbol_9.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_10 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   simulate(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'frac' : no matching overloaded function found 
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'frac' : no matching overloaded function found 
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -336,47 +368,57 @@
   vec3 right;
   vec3 up;
 };
+
 struct VertexInput {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct VertexOutput {
   vec4 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_4 {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_5 {
   vec4 color;
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_7 {
   vec4 color;
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_8 {
   vec4 value;
 };
+
 struct SimulationParams {
   float deltaTime;
   vec4 seed;
 };
+
 struct Particle {
   vec3 position;
   float lifetime;
   vec4 color;
   vec3 velocity;
 };
+
 struct tint_symbol_10 {
   uvec3 GlobalInvocationID;
 };
+
 struct UBO {
   uint width;
 };
@@ -384,19 +426,18 @@
 layout(binding = 3) uniform UBO_1 {
   uint width;
 } ubo;
+
 layout(binding = 4) buffer Buffer_1 {
   float weights[];
 } buf_in;
 layout(binding = 5) buffer Buffer_2 {
   float weights[];
 } buf_out;
-
 struct tint_symbol_12 {
   uvec3 coord;
 };
 
 uniform highp sampler2D tex_in_1;
-
 void import_level_inner(uvec3 coord) {
   uint offset = (coord.x + (coord.y * ubo.width));
   buf_out.weights[offset] = texelFetch(tex_in_1, ivec2(coord.xy), 0).w;
@@ -411,13 +452,14 @@
   import_level_inner(tint_symbol_11.coord);
   return;
 }
+
+
 void main() {
   tint_symbol_12 inputs;
   inputs.coord = gl_GlobalInvocationID;
   import_level(inputs);
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -426,47 +468,57 @@
   vec3 right;
   vec3 up;
 };
+
 struct VertexInput {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct VertexOutput {
   vec4 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_4 {
   vec3 position;
   vec4 color;
   vec2 quad_pos;
 };
+
 struct tint_symbol_5 {
   vec4 color;
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_7 {
   vec4 color;
   vec2 quad_pos;
   vec4 position;
 };
+
 struct tint_symbol_8 {
   vec4 value;
 };
+
 struct SimulationParams {
   float deltaTime;
   vec4 seed;
 };
+
 struct Particle {
   vec3 position;
   float lifetime;
   vec4 color;
   vec3 velocity;
 };
+
 struct tint_symbol_10 {
   uvec3 GlobalInvocationID;
 };
+
 struct UBO {
   uint width;
 };
@@ -474,22 +526,22 @@
 layout(binding = 3) uniform UBO_1 {
   uint width;
 } ubo;
+
 layout(binding = 4) buffer Buffer_1 {
   float weights[];
 } buf_in;
 layout(binding = 5) buffer Buffer_2 {
   float weights[];
 } buf_out;
-
 struct tint_symbol_12 {
   uvec3 coord;
 };
+
 struct tint_symbol_14 {
   uvec3 coord;
 };
 
 layout(rgba8) uniform highp writeonly image2D tex_out_1;
-
 void export_level_inner(uvec3 coord) {
   if (all(lessThan(coord.xy, uvec2(imageSize(tex_out_1))))) {
     uint dst_offset = (coord.x + (coord.y * ubo.width));
@@ -510,10 +562,11 @@
   export_level_inner(tint_symbol_13.coord);
   return;
 }
+
+
 void main() {
   tint_symbol_14 inputs;
   inputs.coord = gl_GlobalInvocationID;
   export_level(inputs);
 }
 
-
diff --git a/test/benchmark/shadow-fragment.wgsl.expected.glsl b/test/benchmark/shadow-fragment.wgsl.expected.glsl
index 2e9b3f4..42f8da0 100644
--- a/test/benchmark/shadow-fragment.wgsl.expected.glsl
+++ b/test/benchmark/shadow-fragment.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 const float shadowDepthTextureSize = 1024.0f;
-
 struct Scene {
   mat4 lightViewProjMatrix;
   mat4 cameraViewProjMatrix;
@@ -25,19 +24,18 @@
 
 const vec3 albedo = vec3(0.899999976f, 0.899999976f, 0.899999976f);
 const float ambientFactor = 0.200000003f;
-
 struct tint_symbol_3 {
   vec3 shadowPos;
   vec3 fragPos;
   vec3 fragNorm;
 };
+
 struct tint_symbol_4 {
   vec4 value;
 };
 
 uniform highp sampler2D shadowMap_shadowSampler;
 
-
 vec4 tint_symbol_inner(FragmentInput tint_symbol_1) {
   float visibility = 0.0f;
   float oneOverShadowDepthTextureSize = (1.0f / shadowDepthTextureSize);
@@ -68,6 +66,7 @@
 layout(location = 1) in vec3 fragPos;
 layout(location = 2) in vec3 fragNorm;
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_3 inputs;
   inputs.shadowPos = shadowPos;
@@ -78,10 +77,9 @@
   value = outputs.value;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:47: 'assign' :  cannot convert from ' temp highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:47: '' : compilation terminated 
+ERROR: 0:45: 'assign' :  cannot convert from ' temp highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:45: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/benchmark/simple-fragment.wgsl.expected.glsl b/test/benchmark/simple-fragment.wgsl.expected.glsl
index c168e70..34e40b5 100644
--- a/test/benchmark/simple-fragment.wgsl.expected.glsl
+++ b/test/benchmark/simple-fragment.wgsl.expected.glsl
@@ -6,12 +6,15 @@
 struct Input {
   vec4 color;
 };
+
 struct Output {
   vec4 color;
 };
+
 struct tint_symbol_3 {
   vec4 color;
 };
+
 struct tint_symbol_4 {
   vec4 color;
 };
@@ -30,6 +33,7 @@
 }
 layout(location = 0) in vec4 color;
 layout(location = 0) out vec4 color;
+
 void main() {
   tint_symbol_3 inputs;
   inputs.color = color;
@@ -38,9 +42,8 @@
   color = outputs.color;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:30: 'color' : redefinition 
+ERROR: 0:33: 'color' : redefinition 
 ERROR: 1 compilation errors.  No code generated.
 
 
diff --git a/test/benchmark/skinned-shadowed-pbr-fragment.wgsl.expected.glsl b/test/benchmark/skinned-shadowed-pbr-fragment.wgsl.expected.glsl
index c00b6b6..c12d1f1 100644
--- a/test/benchmark/skinned-shadowed-pbr-fragment.wgsl.expected.glsl
+++ b/test/benchmark/skinned-shadowed-pbr-fragment.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 precision mediump float;
 
 const float GAMMA = 2.200000048f;
-
 vec3 linearTosRGB(vec3 linear) {
   float INV_GAMMA = (1.0f / GAMMA);
   return pow(linear, vec3(INV_GAMMA));
@@ -40,6 +39,7 @@
   uint offset;
   uint count;
 };
+
 struct ClusterLightGroup {
   uint offset;
   ClusterLights lights[27648];
@@ -51,7 +51,6 @@
   ClusterLights lights[27648];
   uint indices[1769472];
 } clusterLights;
-
 struct Light {
   vec3 position;
   float range;
@@ -68,7 +67,6 @@
   Light lights[];
 } globalLights;
 const uvec3 tileCount = uvec3(32u, 18u, 48u);
-
 float linearDepth(float depthSample) {
   return ((camera.zFar * camera.zNear) / mad(depthSample, (camera.zNear - camera.zFar), camera.zFar));
 }
@@ -90,7 +88,6 @@
 } lightShadowTable;
 vec2 shadowSampleOffsets[16] = vec2[16](vec2(-1.5f, -1.5f), vec2(-1.5f, -0.5f), vec2(-1.5f, 0.5f), vec2(-1.5f, 1.5f), vec2(-0.5f, -1.5f), vec2(-0.5f, -0.5f), vec2(-0.5f, 0.5f), vec2(-0.5f, 1.5f), vec2(0.5f, -1.5f), vec2(0.5f, -0.5f), vec2(0.5f, 0.5f), vec2(0.5f, 1.5f), vec2(1.5f, -1.5f), vec2(1.5f, -0.5f), vec2(1.5f, 0.5f), vec2(1.5f, 1.5f));
 const uint shadowSampleCount = 16u;
-
 struct ShadowProperties {
   vec4 viewport;
   mat4 viewProj;
@@ -102,7 +99,6 @@
 uniform highp sampler2D shadowTexture_1;
 uniform highp sampler2D shadowTexture_shadowSampler;
 
-
 float dirLightVisibility(vec3 worldPos) {
   int shadowIndex = lightShadowTable.light[0u];
   if ((shadowIndex == -1)) {
@@ -180,6 +176,7 @@
   vec3 tangent;
   vec3 bitangent;
 };
+
 struct Material {
   vec4 baseColorFactor;
   vec3 emissiveFactor;
@@ -214,7 +211,6 @@
 uniform highp sampler2D occlusionTexture_occlusionSampler;
 uniform highp sampler2D emissiveTexture_emissiveSampler;
 
-
 SurfaceInfo GetSurfaceInfo(VertexOutput tint_symbol) {
   SurfaceInfo surface = SurfaceInfo(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), 0.0f, 0.0f, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), 0.0f, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
   surface.v = normalize(tint_symbol.view);
@@ -247,7 +243,6 @@
 const float PI = 3.141592741f;
 const uint LightType_Point = 0u;
 const uint LightType_Directional = 2u;
-
 struct PuctualLight {
   uint lightType;
   vec3 pointToLight;
@@ -316,6 +311,7 @@
   vec4 color;
   vec4 emissive;
 };
+
 struct tint_symbol_4 {
   vec3 worldPos;
   vec3 view;
@@ -328,6 +324,7 @@
   vec3 bitangent;
   vec4 position;
 };
+
 struct tint_symbol_5 {
   vec4 color;
   vec4 emissive;
@@ -335,7 +332,6 @@
 
 uniform highp sampler2D ssaoTexture_1;
 uniform highp sampler2D ssaoTexture_defaultSampler;
-
 FragmentOutput fragmentMain_inner(VertexOutput tint_symbol) {
   SurfaceInfo surface = GetSurfaceInfo(tint_symbol);
   vec3 Lo = vec3(0.0f, 0.0f, 0.0f);
@@ -391,8 +387,10 @@
 layout(location = 6) in vec3 normal;
 layout(location = 7) in vec3 tangent;
 layout(location = 8) in vec3 bitangent;
+
 layout(location = 0) out vec4 color;
 layout(location = 1) out vec4 emissive;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.worldPos = worldPos;
@@ -411,10 +409,9 @@
   emissive = outputs.emissive;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:67: 'mad' : no matching overloaded function found 
-ERROR: 0:67: '' : compilation terminated 
+ERROR: 0:65: 'mad' : no matching overloaded function found 
+ERROR: 0:65: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/benchmark/skinned-shadowed-pbr-vertex.wgsl.expected.glsl b/test/benchmark/skinned-shadowed-pbr-vertex.wgsl.expected.glsl
index 582fcd8..ae182b5 100644
--- a/test/benchmark/skinned-shadowed-pbr-vertex.wgsl.expected.glsl
+++ b/test/benchmark/skinned-shadowed-pbr-vertex.wgsl.expected.glsl
@@ -16,6 +16,7 @@
   vec4 instance3;
   vec4 instanceColor;
 };
+
 struct VertexOutput {
   vec4 position;
   vec3 worldPos;
@@ -28,6 +29,7 @@
   vec3 tangent;
   vec3 bitangent;
 };
+
 struct Camera {
   mat4 projection;
   mat4 inverseProjection;
@@ -56,7 +58,6 @@
 layout(binding = 2) buffer Joints_2 {
   mat4 matrices[];
 } inverseBind;
-
 mat4 getSkinMatrix(VertexInput tint_symbol) {
   mat4 joint0 = (joint.matrices[tint_symbol.joints.x] * inverseBind.matrices[tint_symbol.joints.x]);
   mat4 joint1 = (joint.matrices[tint_symbol.joints.y] * inverseBind.matrices[tint_symbol.joints.y]);
@@ -79,6 +80,7 @@
   vec4 instance3;
   vec4 instanceColor;
 };
+
 struct tint_symbol_4 {
   vec3 worldPos;
   vec3 view;
@@ -144,6 +146,8 @@
 layout(location = 6) out vec3 normal;
 layout(location = 7) out vec3 tangent;
 layout(location = 8) out vec3 bitangent;
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.position = position;
@@ -173,9 +177,8 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:138: 'texcoord' : redefinition 
+ERROR: 0:140: 'texcoord' : redefinition 
 ERROR: 1 compilation errors.  No code generated.
 
 
diff --git a/test/buffer/storage/dynamic_index/read.wgsl.expected.glsl b/test/buffer/storage/dynamic_index/read.wgsl.expected.glsl
index d468eae..def30db 100644
--- a/test/buffer/storage/dynamic_index/read.wgsl.expected.glsl
+++ b/test/buffer/storage/dynamic_index/read.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 0) buffer S_1 {
   Inner arr[];
 } s;
-
 struct tint_symbol_2 {
   uint idx;
 };
@@ -38,10 +37,11 @@
   tint_symbol_inner(tint_symbol_1.idx);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.idx = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/buffer/storage/dynamic_index/write.wgsl.expected.glsl b/test/buffer/storage/dynamic_index/write.wgsl.expected.glsl
index 0921b4d..3ef8428 100644
--- a/test/buffer/storage/dynamic_index/write.wgsl.expected.glsl
+++ b/test/buffer/storage/dynamic_index/write.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 0) buffer S_1 {
   Inner arr[];
 } s;
-
 struct tint_symbol_2 {
   uint idx;
 };
@@ -39,10 +38,11 @@
   tint_symbol_inner(tint_symbol_1.idx);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.idx = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/buffer/storage/static_index/read.wgsl.expected.glsl b/test/buffer/storage/static_index/read.wgsl.expected.glsl
index 4924c0e..f467253 100644
--- a/test/buffer/storage/static_index/read.wgsl.expected.glsl
+++ b/test/buffer/storage/static_index/read.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Inner {
   int x;
 };
+
 struct S {
   ivec3 a;
   int b;
@@ -29,7 +30,6 @@
   Inner i;
   Inner j[4];
 } s;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   ivec3 a = s.a;
@@ -44,8 +44,8 @@
   Inner j[4] = s.j;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/storage/static_index/write.wgsl.expected.glsl b/test/buffer/storage/static_index/write.wgsl.expected.glsl
index f57337c..364b4f0 100644
--- a/test/buffer/storage/static_index/write.wgsl.expected.glsl
+++ b/test/buffer/storage/static_index/write.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Inner {
   int x;
 };
+
 struct S {
   ivec3 a;
   int b;
@@ -29,7 +30,6 @@
   Inner i;
   Inner j[4];
 } s;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   s.a = ivec3(0, 0, 0);
@@ -46,8 +46,8 @@
   s.j = tint_symbol_2;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/storage/types/array.wgsl.expected.glsl b/test/buffer/storage/types/array.wgsl.expected.glsl
index 50ce2f2..183882d 100644
--- a/test/buffer/storage/types/array.wgsl.expected.glsl
+++ b/test/buffer/storage/types/array.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   float inner[4];
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/f32.wgsl.expected.glsl b/test/buffer/storage/types/f32.wgsl.expected.glsl
index bc9f222..40d99f7 100644
--- a/test/buffer/storage/types/f32.wgsl.expected.glsl
+++ b/test/buffer/storage/types/f32.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   float inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/i32.wgsl.expected.glsl b/test/buffer/storage/types/i32.wgsl.expected.glsl
index 69ccc1d..976c2b2 100644
--- a/test/buffer/storage/types/i32.wgsl.expected.glsl
+++ b/test/buffer/storage/types/i32.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   int inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/mat2x2.wgsl.expected.glsl b/test/buffer/storage/types/mat2x2.wgsl.expected.glsl
index 7f2232e..2e8b06a 100644
--- a/test/buffer/storage/types/mat2x2.wgsl.expected.glsl
+++ b/test/buffer/storage/types/mat2x2.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   mat2 inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/mat2x3.wgsl.expected.glsl b/test/buffer/storage/types/mat2x3.wgsl.expected.glsl
index 0b414b2..c4b7348 100644
--- a/test/buffer/storage/types/mat2x3.wgsl.expected.glsl
+++ b/test/buffer/storage/types/mat2x3.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   mat2x3 inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/mat3x2.wgsl.expected.glsl b/test/buffer/storage/types/mat3x2.wgsl.expected.glsl
index 6fd97af..0ec9fd8 100644
--- a/test/buffer/storage/types/mat3x2.wgsl.expected.glsl
+++ b/test/buffer/storage/types/mat3x2.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   mat3x2 inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/mat4x4.wgsl.expected.glsl b/test/buffer/storage/types/mat4x4.wgsl.expected.glsl
index 955e50a..4a1756a 100644
--- a/test/buffer/storage/types/mat4x4.wgsl.expected.glsl
+++ b/test/buffer/storage/types/mat4x4.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   mat4 inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/runtime_array.wgsl.expected.glsl b/test/buffer/storage/types/runtime_array.wgsl.expected.glsl
index b32c622..2a4f200 100644
--- a/test/buffer/storage/types/runtime_array.wgsl.expected.glsl
+++ b/test/buffer/storage/types/runtime_array.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   S inner[];
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner[0] = tint_symbol.inner[0];
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/struct.wgsl.expected.glsl b/test/buffer/storage/types/struct.wgsl.expected.glsl
index 74106b6..bc5bf85 100644
--- a/test/buffer/storage/types/struct.wgsl.expected.glsl
+++ b/test/buffer/storage/types/struct.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 struct Inner {
   float f;
 };
+
 struct S {
   Inner inner;
 };
@@ -16,17 +17,16 @@
 layout(binding = 1) buffer S_2 {
   Inner inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1 = tint_symbol;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:20: 'assign' :  cannot convert from 'layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer structure{ global mediump float f} inner}' to 'layout( binding=1 column_major shared) buffer block{layout( column_major shared) buffer structure{ global mediump float f} inner}'
 ERROR: 0:20: '' : compilation terminated 
diff --git a/test/buffer/storage/types/u32.wgsl.expected.glsl b/test/buffer/storage/types/u32.wgsl.expected.glsl
index 553d522..6736a08 100644
--- a/test/buffer/storage/types/u32.wgsl.expected.glsl
+++ b/test/buffer/storage/types/u32.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   uint inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/vec2.wgsl.expected.glsl b/test/buffer/storage/types/vec2.wgsl.expected.glsl
index ed93d72..ddcb7fe 100644
--- a/test/buffer/storage/types/vec2.wgsl.expected.glsl
+++ b/test/buffer/storage/types/vec2.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   ivec2 inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/vec3.wgsl.expected.glsl b/test/buffer/storage/types/vec3.wgsl.expected.glsl
index f98bac9..f780c9a 100644
--- a/test/buffer/storage/types/vec3.wgsl.expected.glsl
+++ b/test/buffer/storage/types/vec3.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   uvec3 inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/storage/types/vec4.wgsl.expected.glsl b/test/buffer/storage/types/vec4.wgsl.expected.glsl
index 36e0d15..414bc4a 100644
--- a/test/buffer/storage/types/vec4.wgsl.expected.glsl
+++ b/test/buffer/storage/types/vec4.wgsl.expected.glsl
@@ -11,14 +11,13 @@
 layout(binding = 1) buffer tint_symbol_block_2 {
   vec4 inner;
 } tint_symbol_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol_2() {
   tint_symbol_1.inner = tint_symbol.inner;
   return;
 }
+
 void main() {
   tint_symbol_2();
 }
 
-
diff --git a/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl b/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
index c6520d4..975e418 100644
--- a/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
+++ b/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
@@ -14,6 +14,7 @@
   mat3x2 j;
   ivec4 k[4];
 };
+
 struct S {
   Inner arr[8];
 };
@@ -45,10 +46,11 @@
   tint_symbol_inner(tint_symbol_1.idx);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.idx = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/buffer/uniform/static_index/read.wgsl.expected.glsl b/test/buffer/uniform/static_index/read.wgsl.expected.glsl
index eebf1ed..e23579c 100644
--- a/test/buffer/uniform/static_index/read.wgsl.expected.glsl
+++ b/test/buffer/uniform/static_index/read.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Inner {
   int x;
 };
+
 struct S {
   ivec3 a;
   int b;
@@ -50,8 +51,8 @@
   Inner l[4] = s.l;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/array.wgsl.expected.glsl b/test/buffer/uniform/types/array.wgsl.expected.glsl
index d4fe506..514ba1f 100644
--- a/test/buffer/uniform/types/array.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/array.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   vec4 x[4] = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/f32.wgsl.expected.glsl b/test/buffer/uniform/types/f32.wgsl.expected.glsl
index e8ce6d9..e3b3589 100644
--- a/test/buffer/uniform/types/f32.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/f32.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   float x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/i32.wgsl.expected.glsl b/test/buffer/uniform/types/i32.wgsl.expected.glsl
index 067e517..6ae3def 100644
--- a/test/buffer/uniform/types/i32.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/i32.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   int x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/mat2x2.wgsl.expected.glsl b/test/buffer/uniform/types/mat2x2.wgsl.expected.glsl
index 48639af..e09403c 100644
--- a/test/buffer/uniform/types/mat2x2.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/mat2x2.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   mat2 x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/mat2x3.wgsl.expected.glsl b/test/buffer/uniform/types/mat2x3.wgsl.expected.glsl
index be95287..fe7ef52 100644
--- a/test/buffer/uniform/types/mat2x3.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/mat2x3.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   mat2x3 x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/mat3x2.wgsl.expected.glsl b/test/buffer/uniform/types/mat3x2.wgsl.expected.glsl
index d8529c9..4b742e1 100644
--- a/test/buffer/uniform/types/mat3x2.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/mat3x2.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   mat3x2 x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/mat4x4.wgsl.expected.glsl b/test/buffer/uniform/types/mat4x4.wgsl.expected.glsl
index 616ab56..0305478 100644
--- a/test/buffer/uniform/types/mat4x4.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/mat4x4.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   mat4 x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/struct.wgsl.expected.glsl b/test/buffer/uniform/types/struct.wgsl.expected.glsl
index 9fac48e..c684ea2 100644
--- a/test/buffer/uniform/types/struct.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/struct.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 struct Inner {
   float f;
 };
+
 struct S {
   Inner inner;
 };
@@ -19,14 +20,14 @@
   S x = u;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:17: '=' :  cannot convert from 'layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform structure{ global mediump float f} inner}' to ' temp structure{ global structure{ global mediump float f} inner}'
-ERROR: 0:17: '' : compilation terminated 
+ERROR: 0:18: '=' :  cannot convert from 'layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform structure{ global mediump float f} inner}' to ' temp structure{ global structure{ global mediump float f} inner}'
+ERROR: 0:18: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/buffer/uniform/types/u32.wgsl.expected.glsl b/test/buffer/uniform/types/u32.wgsl.expected.glsl
index f2aa4ce..8096438 100644
--- a/test/buffer/uniform/types/u32.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/u32.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   uint x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/vec2.wgsl.expected.glsl b/test/buffer/uniform/types/vec2.wgsl.expected.glsl
index 4ebdfe0..7ca9b13 100644
--- a/test/buffer/uniform/types/vec2.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/vec2.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   ivec2 x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/vec3.wgsl.expected.glsl b/test/buffer/uniform/types/vec3.wgsl.expected.glsl
index 5174f95..0aba38a 100644
--- a/test/buffer/uniform/types/vec3.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/vec3.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   uvec3 x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/buffer/uniform/types/vec4.wgsl.expected.glsl b/test/buffer/uniform/types/vec4.wgsl.expected.glsl
index ae5afea..1cbcd11 100644
--- a/test/buffer/uniform/types/vec4.wgsl.expected.glsl
+++ b/test/buffer/uniform/types/vec4.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   vec4 x = u.inner;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/chromium/1221120.wgsl.expected.glsl b/test/bug/chromium/1221120.wgsl.expected.glsl
index fed5e26..eea151a 100644
--- a/test/bug/chromium/1221120.wgsl.expected.glsl
+++ b/test/bug/chromium/1221120.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const int H = 1;
diff --git a/test/bug/chromium/1236161.wgsl.expected.glsl b/test/bug/chromium/1236161.wgsl.expected.glsl
index 87dbeff..fbc61f8 100644
--- a/test/bug/chromium/1236161.wgsl.expected.glsl
+++ b/test/bug/chromium/1236161.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float fract;
   float whole;
 };
+
 modf_result tint_modf(float param_0) {
   float whole;
   float fract = modf(param_0, whole);
@@ -19,18 +20,18 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void i() {
   float s = tint_modf(1.0f).whole;
 }
+
 Error parsing GLSL shader:
-ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:12: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/bug/chromium/1251009.wgsl.expected.glsl b/test/bug/chromium/1251009.wgsl.expected.glsl
index 1087196..ab20360 100644
--- a/test/bug/chromium/1251009.wgsl.expected.glsl
+++ b/test/bug/chromium/1251009.wgsl.expected.glsl
@@ -5,10 +5,12 @@
   uint vertex_index;
   int loc0;
 };
+
 struct VertexInputs1 {
   uint loc1;
   vec4 loc3;
 };
+
 struct tint_symbol_2 {
   int loc0;
   uint loc1;
@@ -17,6 +19,7 @@
   uint vertex_index;
   uint instance_index;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -38,6 +41,10 @@
 layout(location = 1) in uint loc1;
 layout(location = 2) in uint loc1_1;
 layout(location = 3) in vec4 loc3;
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.loc0 = loc0;
@@ -53,4 +60,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/bug/chromium/1273230.wgsl.expected.glsl b/test/bug/chromium/1273230.wgsl.expected.glsl
index 4eca6df..f05e2a2 100644
--- a/test/bug/chromium/1273230.wgsl.expected.glsl
+++ b/test/bug/chromium/1273230.wgsl.expected.glsl
@@ -29,6 +29,7 @@
   vec3 bbMin;
   vec3 bbMax;
 };
+
 struct Dbg {
   uint offsetCounter;
   uint pad0;
@@ -52,6 +53,7 @@
   vec3 bbMin;
   vec3 bbMax;
 } uniforms;
+
 layout(binding = 10) buffer U32s_1 {
   uint values[];
 } indices;
@@ -78,7 +80,6 @@
   float value_f32_2;
   float value_f32_3;
 } dbg;
-
 vec3 toVoxelPos(vec3 position) {
   vec3 bbMin = vec3(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
   vec3 bbMax = vec3(uniforms.bbMax.x, uniforms.bbMax.y, uniforms.bbMax.z);
@@ -137,10 +138,11 @@
   main_count_inner(tint_symbol.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   main_count(inputs);
 }
 
-
diff --git a/test/bug/chromium/1273451.wgsl.expected.glsl b/test/bug/chromium/1273451.wgsl.expected.glsl
index 90a906d..7024728 100644
--- a/test/bug/chromium/1273451.wgsl.expected.glsl
+++ b/test/bug/chromium/1273451.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct A {
   int a;
 };
+
 struct B {
   int b;
 };
@@ -22,3 +22,4 @@
   B tint_symbol = B(0);
   return tint_symbol;
 }
+
diff --git a/test/bug/dawn/947.wgsl.expected.glsl b/test/bug/dawn/947.wgsl.expected.glsl
index e203e69..5bb2e86 100644
--- a/test/bug/dawn/947.wgsl.expected.glsl
+++ b/test/bug/dawn/947.wgsl.expected.glsl
@@ -15,9 +15,11 @@
   vec2 texcoords;
   vec4 position;
 };
+
 struct tint_symbol_2 {
   uint VertexIndex;
 };
+
 struct tint_symbol_3 {
   vec2 texcoords;
   vec4 position;
@@ -39,6 +41,7 @@
 struct tint_symbol_5 {
   vec2 texcoord;
 };
+
 struct tint_symbol_6 {
   vec4 value;
 };
@@ -50,7 +53,10 @@
   wrapper_result.position = inner_result.position;
   return wrapper_result;
 }
+
 layout(location = 0) out vec2 texcoords;
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.VertexIndex = uint(gl_VertexID);
@@ -62,7 +68,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -70,27 +75,31 @@
   vec2 u_scale;
   vec2 u_offset;
 };
+
 struct VertexOutputs {
   vec2 texcoords;
   vec4 position;
 };
+
 struct tint_symbol_2 {
   uint VertexIndex;
 };
+
 struct tint_symbol_3 {
   vec2 texcoords;
   vec4 position;
 };
+
 struct tint_symbol_5 {
   vec2 texcoord;
 };
+
 struct tint_symbol_6 {
   vec4 value;
 };
 
 uniform highp sampler2D myTexture_mySampler;
 
-
 vec4 fs_main_inner(vec2 texcoord) {
   vec2 clampedTexcoord = clamp(texcoord, vec2(0.0f, 0.0f), vec2(1.0f, 1.0f));
   if (!(all(equal(clampedTexcoord, texcoord)))) {
@@ -108,6 +117,7 @@
 }
 layout(location = 0) in vec2 texcoord;
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_5 inputs;
   inputs.texcoord = texcoord;
@@ -116,4 +126,3 @@
   value = outputs.value;
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.glsl
index 32d13a8..38dd9fb 100644
--- a/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.glsl
@@ -12,6 +12,7 @@
 struct S {
   int data[64];
 };
+
 struct Result {
   int tint_symbol;
 };
@@ -19,15 +20,14 @@
 layout(binding = 1) buffer Result_1 {
   int tint_symbol;
 } result;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void f() {
   S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
   result.tint_symbol = s.data[ubo.dynamic_idx];
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.glsl
index 67d37d3..63c16e0 100644
--- a/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.glsl
@@ -12,6 +12,7 @@
 struct S {
   int data[64];
 };
+
 struct Result {
   int tint_symbol;
 };
@@ -20,14 +21,13 @@
   int tint_symbol;
 } result;
 S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void f() {
   result.tint_symbol = s.data[ubo.dynamic_idx];
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.glsl
index 3719b7e..1bc7ef2 100644
--- a/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 2) buffer Result_1 {
   int tint_symbol;
 } result;
-
 struct SSBO {
   int data[4];
 };
@@ -24,14 +23,13 @@
 layout(binding = 1) buffer SSBO_1 {
   int data[4];
 } ssbo;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void f() {
   result.tint_symbol = ssbo.data[ubo.dynamic_idx];
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.glsl
index 2ff97ae..118dd73 100644
--- a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.glsl
@@ -18,14 +18,13 @@
 layout(binding = 2) buffer Result_1 {
   int tint_symbol;
 } result;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void f() {
   result.tint_symbol = ubo.data[ubo.dynamic_idx].x;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl
index 955289b..b3052dd 100644
--- a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl
@@ -12,6 +12,7 @@
 struct S {
   int data[64];
 };
+
 struct Result {
   int tint_symbol;
 };
@@ -20,7 +21,6 @@
   int tint_symbol;
 } result;
 shared S s;
-
 struct tint_symbol_2 {
   uint local_invocation_index;
 };
@@ -41,10 +41,11 @@
   f_inner(tint_symbol_1.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   f(inputs);
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.glsl
index 335f1db..3be6198 100644
--- a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.glsl
@@ -12,6 +12,7 @@
 struct S {
   int data[64];
 };
+
 struct Result {
   int tint_symbol;
 };
@@ -19,7 +20,6 @@
 layout(binding = 1) buffer Result_1 {
   int tint_symbol;
 } result;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void f() {
   S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
@@ -27,8 +27,8 @@
   result.tint_symbol = s.data[3];
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.glsl
index dd49354..ead018c 100644
--- a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.glsl
@@ -12,6 +12,7 @@
 struct S {
   int data[64];
 };
+
 struct Result {
   int tint_symbol;
 };
@@ -19,7 +20,6 @@
 layout(binding = 1) buffer Result_1 {
   int tint_symbol;
 } result;
-
 void x(inout S p) {
   p.data[ubo.dynamic_idx] = 1;
 }
@@ -31,8 +31,8 @@
   result.tint_symbol = s.data[3];
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.glsl
index b10480f..18c763b 100644
--- a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.glsl
@@ -12,6 +12,7 @@
 struct S {
   int data[64];
 };
+
 struct Result {
   int tint_symbol;
 };
@@ -20,15 +21,14 @@
   int tint_symbol;
 } result;
 S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void f() {
   s.data[ubo.dynamic_idx] = 1;
   result.tint_symbol = s.data[3];
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.glsl
index fa73642..61e4347 100644
--- a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.glsl
@@ -12,6 +12,7 @@
 struct S {
   int data[64];
 };
+
 struct Result {
   int tint_symbol;
 };
@@ -20,7 +21,6 @@
   int tint_symbol;
 } result;
 S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
-
 void x(inout S p) {
   p.data[ubo.dynamic_idx] = 1;
 }
@@ -31,8 +31,8 @@
   result.tint_symbol = s.data[3];
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.glsl
index 01f9ff4..279d1cd 100644
--- a/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 2) buffer Result_1 {
   int tint_symbol;
 } result;
-
 struct SSBO {
   int data[4];
 };
@@ -24,15 +23,14 @@
 layout(binding = 1) buffer SSBO_1 {
   int data[4];
 } ssbo;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void f() {
   ssbo.data[ubo.dynamic_idx] = 1;
   result.tint_symbol = ssbo.data[3];
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl
index 7f4537e..2a4d1c0 100644
--- a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl
@@ -12,6 +12,7 @@
 struct S {
   int data[64];
 };
+
 struct Result {
   int tint_symbol;
 };
@@ -20,7 +21,6 @@
   int tint_symbol;
 } result;
 shared S s;
-
 struct tint_symbol_2 {
   uint local_invocation_index;
 };
@@ -42,10 +42,11 @@
   f_inner(tint_symbol_1.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   f(inputs);
 }
 
-
diff --git a/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.glsl b/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.glsl
index 254e486..d63995b 100644
--- a/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.glsl
+++ b/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct tint_symbol_2 {
   vec2 vUV;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -11,7 +12,6 @@
 uniform highp sampler2D randomTexture_Sampler;
 uniform highp sampler2D depthTexture_Sampler;
 
-
 vec4 tint_symbol_inner(vec2 vUV) {
   vec3 random = texture(randomTexture_Sampler, vUV).rgb;
   int i = 0;
@@ -51,6 +51,7 @@
 }
 layout(location = 0) in vec2 vUV;
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.vUV = vUV;
@@ -59,4 +60,3 @@
   value = outputs.value;
 }
 
-
diff --git a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.glsl b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.glsl
index 642b7e3..131bb21 100644
--- a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.glsl
+++ b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Simulation {
   uint i;
 };
+
 struct Particle {
   vec3 position[8];
   float lifetime;
@@ -24,8 +25,8 @@
   particle.position[sim.i] = particle.position[sim.i];
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.glsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.glsl
index 48e49e1..74dc588 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.glsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.glsl
@@ -17,8 +17,8 @@
   m1[uniforms.i][0] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.glsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.glsl
index 039fbe9..b7701f1 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.glsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.glsl
@@ -17,8 +17,8 @@
   m1[uniforms.i][uniforms.j] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.glsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.glsl
index 79409bb..31fe4d4 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.glsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.glsl
@@ -10,15 +10,15 @@
   uint i;
   uint j;
 } uniforms;
-mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 
+mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   m1[0][uniforms.j] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.glsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.glsl
index 405f246..021a595 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.glsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.glsl
@@ -17,8 +17,8 @@
   m1[uniforms.i] = vec4(1.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.glsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.glsl
index 38587f2..0cf6f23 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.glsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.glsl
@@ -10,15 +10,15 @@
   uint i;
   uint j;
 } uniforms;
-mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 
+mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   m1[uniforms.i][0] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.glsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.glsl
index a588d37..8d28577 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.glsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.glsl
@@ -10,15 +10,15 @@
   uint i;
   uint j;
 } uniforms;
-mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 
+mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   m1[uniforms.i][uniforms.j] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.glsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.glsl
index 79409bb..31fe4d4 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.glsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.glsl
@@ -10,15 +10,15 @@
   uint i;
   uint j;
 } uniforms;
-mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 
+mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   m1[0][uniforms.j] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.glsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.glsl
index fb3492b..3f2bbc0 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.glsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.glsl
@@ -10,15 +10,15 @@
   uint i;
   uint j;
 } uniforms;
-mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 
+mat2x4 m1 = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   m1[uniforms.i] = vec4(1.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.glsl
index dcde12e..73303a1 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.glsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 ivec3 v3i = ivec3(0, 0, 0);
 uvec4 v4u = uvec4(0u, 0u, 0u, 0u);
 bvec2 v2b = bvec2(false, false);
-
 void foo() {
   {
     for(int i = 0; (i < 2); i = (i + 1)) {
@@ -26,8 +25,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.glsl
index 680bcaa..66cdf90 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.glsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 ivec3 v3i = ivec3(0, 0, 0);
 uvec4 v4u = uvec4(0u, 0u, 0u, 0u);
 bvec2 v2b = bvec2(false, false);
-
 void foo() {
   int i = 0;
   v2f[i] = 1.0f;
@@ -23,8 +22,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.glsl
index ad1e7e7..d577a0b 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.glsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.glsl
@@ -33,8 +33,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.glsl
index 8154232..70a28f6 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.glsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.glsl
@@ -25,8 +25,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.glsl
index 7211d43..1c080e3 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.glsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.glsl
@@ -34,8 +34,8 @@
   v4b[i] = true;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.glsl
index b81b3b6..32a381e 100644
--- a/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.glsl
+++ b/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.glsl
@@ -30,8 +30,8 @@
   v4b[i] = true;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/1046.wgsl.expected.glsl b/test/bug/tint/1046.wgsl.expected.glsl
index cfa646a..aff09cb 100644
--- a/test/bug/tint/1046.wgsl.expected.glsl
+++ b/test/bug/tint/1046.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 struct PointLight {
   vec4 position;
 };
+
 struct Uniforms {
   mat4 worldView;
   mat4 proj;
@@ -21,10 +22,10 @@
   uint color_source;
   vec4 color;
 } uniforms;
+
 layout(binding = 1) buffer PointLights_1 {
   PointLight values[];
 } pointLights;
-
 struct FragmentInput {
   vec4 position;
   vec4 view_position;
@@ -32,9 +33,11 @@
   vec2 uv;
   vec4 color;
 };
+
 struct FragmentOutput {
   vec4 color;
 };
+
 struct tint_symbol_3 {
   vec4 view_position;
   vec4 normal;
@@ -42,6 +45,7 @@
   vec4 color;
   vec4 position;
 };
+
 struct tint_symbol_4 {
   vec4 color;
 };
@@ -63,7 +67,9 @@
 layout(location = 1) in vec4 normal;
 layout(location = 2) in vec2 uv;
 layout(location = 3) in vec4 color;
+
 layout(location = 0) out vec4 color;
+
 void main() {
   tint_symbol_3 inputs;
   inputs.view_position = view_position;
@@ -76,9 +82,8 @@
   color = outputs.color;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:64: 'color' : redefinition 
+ERROR: 0:69: 'color' : redefinition 
 ERROR: 1 compilation errors.  No code generated.
 
 
diff --git a/test/bug/tint/1064.wgsl.expected.glsl b/test/bug/tint/1064.wgsl.expected.glsl
index c93c639..2f81388 100644
--- a/test/bug/tint/1064.wgsl.expected.glsl
+++ b/test/bug/tint/1064.wgsl.expected.glsl
@@ -16,8 +16,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/1076.wgsl.expected.glsl b/test/bug/tint/1076.wgsl.expected.glsl
index 659072c..e79fb56 100644
--- a/test/bug/tint/1076.wgsl.expected.glsl
+++ b/test/bug/tint/1076.wgsl.expected.glsl
@@ -7,11 +7,13 @@
   float a;
   uint mask;
 };
+
 struct tint_symbol_3 {
   float a;
   float b;
   uint mask;
 };
+
 struct tint_symbol_4 {
   float a;
   uint mask;
@@ -35,7 +37,10 @@
 }
 layout(location = 0) in float a;
 layout(location = 1) in float b;
+
 layout(location = 0) out float a;
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.a = a;
@@ -47,9 +52,8 @@
   gl_SampleMask = outputs.mask;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:36: 'a' : redefinition 
+ERROR: 0:39: 'a' : redefinition 
 ERROR: 1 compilation errors.  No code generated.
 
 
diff --git a/test/bug/tint/1081.wgsl.expected.glsl b/test/bug/tint/1081.wgsl.expected.glsl
index a0b53fa..57544d7 100644
--- a/test/bug/tint/1081.wgsl.expected.glsl
+++ b/test/bug/tint/1081.wgsl.expected.glsl
@@ -11,6 +11,7 @@
 struct tint_symbol_2 {
   ivec3 x;
 };
+
 struct tint_symbol_3 {
   int value;
 };
@@ -34,6 +35,7 @@
 }
 layout(location = 1) flat in ivec3 x;
 layout(location = 2) out int value;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x = x;
@@ -42,4 +44,3 @@
   value = outputs.value;
 }
 
-
diff --git a/test/bug/tint/1083.wgsl.expected.glsl b/test/bug/tint/1083.wgsl.expected.glsl
index 96a62a0..8c230a2 100644
--- a/test/bug/tint/1083.wgsl.expected.glsl
+++ b/test/bug/tint/1083.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int c = (1 / 0);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/tint/1086.wgsl.expected.glsl b/test/bug/tint/1086.wgsl.expected.glsl
index 23d3599..0c69c4f 100644
--- a/test/bug/tint/1086.wgsl.expected.glsl
+++ b/test/bug/tint/1086.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 float v = 0.0f;
-
 void x(inout float p) {
   p = 0.0f;
 }
@@ -15,8 +14,8 @@
   g();
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/tint/1088.spvasm.expected.glsl b/test/bug/tint/1088.spvasm.expected.glsl
index 9deb3a6..c665add 100644
--- a/test/bug/tint/1088.spvasm.expected.glsl
+++ b/test/bug/tint/1088.spvasm.expected.glsl
@@ -4,6 +4,7 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct LeftOver {
   mat4 worldViewProjection;
   float time;
@@ -18,11 +19,11 @@
   mat4 test2[2];
   tint_padded_array_element test[4];
 } x_14;
+
 vec2 vUV = vec2(0.0f, 0.0f);
 vec2 uv = vec2(0.0f, 0.0f);
 vec3 normal = vec3(0.0f, 0.0f, 0.0f);
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   vec4 q = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   vec3 p = vec3(0.0f, 0.0f, 0.0f);
@@ -51,11 +52,13 @@
   vec4 tint_symbol;
   vec2 vUV_1;
 };
+
 struct tint_symbol_3 {
   vec3 position_param;
   vec3 normal_param;
   vec2 uv_param;
 };
+
 struct tint_symbol_4 {
   vec2 vUV_1;
   vec4 tint_symbol;
@@ -81,6 +84,8 @@
 layout(location = 1) in vec3 normal_param;
 layout(location = 2) in vec2 uv_param;
 layout(location = 0) out vec2 vUV_1;
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.position_param = position_param;
@@ -94,4 +99,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/bug/tint/1113.wgsl.expected.glsl b/test/bug/tint/1113.wgsl.expected.glsl
index f4dcd18..1fbe960 100644
--- a/test/bug/tint/1113.wgsl.expected.glsl
+++ b/test/bug/tint/1113.wgsl.expected.glsl
@@ -9,6 +9,7 @@
   vec3 bbMin;
   vec3 bbMax;
 };
+
 struct Dbg {
   uint offsetCounter;
   uint pad0;
@@ -32,6 +33,7 @@
   vec3 bbMin;
   vec3 bbMax;
 } uniforms;
+
 layout(binding = 10) buffer U32s_1 {
   uint values[];
 } indices;
@@ -58,7 +60,6 @@
   float value_f32_2;
   float value_f32_3;
 } dbg;
-
 vec3 toVoxelPos(vec3 position) {
   vec3 bbMin = vec3(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
   vec3 bbMax = vec3(uniforms.bbMax.x, uniforms.bbMax.y, uniforms.bbMax.z);
@@ -121,6 +122,7 @@
 struct tint_symbol_3 {
   uvec3 GlobalInvocationID;
 };
+
 struct tint_symbol_5 {
   uvec3 GlobalInvocationID;
 };
@@ -130,13 +132,14 @@
   main_count_inner(tint_symbol.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   main_count(inputs);
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -148,6 +151,7 @@
   vec3 bbMin;
   vec3 bbMax;
 };
+
 struct Dbg {
   uint offsetCounter;
   uint pad0;
@@ -171,6 +175,7 @@
   vec3 bbMin;
   vec3 bbMax;
 } uniforms;
+
 layout(binding = 10) buffer U32s_1 {
   uint values[];
 } indices;
@@ -197,7 +202,6 @@
   float value_f32_2;
   float value_f32_3;
 } dbg;
-
 void doIgnore() {
   uint g42 = uniforms.numTriangles;
   uint kj6 = dbg.value1;
@@ -210,6 +214,7 @@
 struct tint_symbol_1 {
   uvec3 GlobalInvocationID;
 };
+
 struct tint_symbol_3 {
   uvec3 GlobalInvocationID;
 };
@@ -238,13 +243,14 @@
   main_create_lut_inner(tint_symbol_2.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   main_create_lut(inputs);
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -256,6 +262,7 @@
   vec3 bbMin;
   vec3 bbMax;
 };
+
 struct Dbg {
   uint offsetCounter;
   uint pad0;
@@ -279,6 +286,7 @@
   vec3 bbMin;
   vec3 bbMax;
 } uniforms;
+
 layout(binding = 10) buffer U32s_1 {
   uint values[];
 } indices;
@@ -305,7 +313,6 @@
   float value_f32_2;
   float value_f32_3;
 } dbg;
-
 vec3 toVoxelPos(vec3 position) {
   vec3 bbMin = vec3(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
   vec3 bbMax = vec3(uniforms.bbMax.x, uniforms.bbMax.y, uniforms.bbMax.z);
@@ -340,9 +347,11 @@
 struct tint_symbol_1 {
   uvec3 GlobalInvocationID;
 };
+
 struct tint_symbol_3 {
   uvec3 GlobalInvocationID;
 };
+
 struct tint_symbol_5 {
   uvec3 GlobalInvocationID;
 };
@@ -370,10 +379,11 @@
   main_sort_triangles_inner(tint_symbol_4.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_5 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   main_sort_triangles(inputs);
 }
 
-
diff --git a/test/bug/tint/1121.wgsl.expected.glsl b/test/bug/tint/1121.wgsl.expected.glsl
index 7796c15..c656693 100644
--- a/test/bug/tint/1121.wgsl.expected.glsl
+++ b/test/bug/tint/1121.wgsl.expected.glsl
@@ -10,11 +10,11 @@
 layout(binding = 0) buffer LightsBuffer_1 {
   LightData lights[];
 } lightsBuffer;
-
 struct TileLightIdData {
   uint count;
   uint lightId[64];
 };
+
 struct Tiles {
   TileLightIdData data[4];
 };
@@ -22,7 +22,6 @@
 layout(binding = 0) buffer Tiles_1 {
   TileLightIdData data[4];
 } tileLightId;
-
 struct Config {
   uint numLights;
   uint numTiles;
@@ -146,10 +145,11 @@
   tint_symbol_2_inner(tint_symbol_3.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_4 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   tint_symbol_2(inputs);
 }
 
-
diff --git a/test/bug/tint/1136.wgsl.expected.glsl b/test/bug/tint/1136.wgsl.expected.glsl
index 670b1e6..67d68ec 100644
--- a/test/bug/tint/1136.wgsl.expected.glsl
+++ b/test/bug/tint/1136.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct Buffer {
   uint data;
 };
@@ -18,7 +17,7 @@
 layout(binding = 0) buffer Buffer_1 {
   uint data;
 } tint_symbol;
-
 void tint_symbol_1() {
   tint_symbol.data = (tint_symbol.data + 1u);
 }
+
diff --git a/test/bug/tint/1321.wgsl.expected.glsl b/test/bug/tint/1321.wgsl.expected.glsl
index 30ed395..6bff13a 100644
--- a/test/bug/tint/1321.wgsl.expected.glsl
+++ b/test/bug/tint/1321.wgsl.expected.glsl
@@ -16,8 +16,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/1369.wgsl.expected.glsl b/test/bug/tint/1369.wgsl.expected.glsl
index e167ca9..bb2aa75 100644
--- a/test/bug/tint/1369.wgsl.expected.glsl
+++ b/test/bug/tint/1369.wgsl.expected.glsl
@@ -19,8 +19,8 @@
   bool also_unreachable = false;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/bug/tint/1385.wgsl.expected.glsl b/test/bug/tint/1385.wgsl.expected.glsl
index 52becb3..9edbf0d 100644
--- a/test/bug/tint/1385.wgsl.expected.glsl
+++ b/test/bug/tint/1385.wgsl.expected.glsl
@@ -1,11 +1,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer data_block_1 {
   int inner[];
 } data;
-
 int foo() {
   return data.inner[0];
 }
@@ -15,8 +13,8 @@
   foo();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/219.spvasm.expected.glsl b/test/bug/tint/219.spvasm.expected.glsl
index 2eeb7d1..cd71522 100644
--- a/test/bug/tint/219.spvasm.expected.glsl
+++ b/test/bug/tint/219.spvasm.expected.glsl
@@ -17,8 +17,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/221.wgsl.expected.glsl b/test/bug/tint/221.wgsl.expected.glsl
index a6dab15..1c037d0 100644
--- a/test/bug/tint/221.wgsl.expected.glsl
+++ b/test/bug/tint/221.wgsl.expected.glsl
@@ -10,7 +10,6 @@
   uint count;
   uint data[50];
 } b;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint i = 0u;
@@ -34,8 +33,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/292.wgsl.expected.glsl b/test/bug/tint/292.wgsl.expected.glsl
index e43a4bb..8b91111 100644
--- a/test/bug/tint/292.wgsl.expected.glsl
+++ b/test/bug/tint/292.wgsl.expected.glsl
@@ -17,6 +17,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -25,4 +27,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/bug/tint/294.wgsl.expected.glsl b/test/bug/tint/294.wgsl.expected.glsl
index 0aa593b..4132290 100644
--- a/test/bug/tint/294.wgsl.expected.glsl
+++ b/test/bug/tint/294.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct Light {
   vec3 position;
   vec3 colour;
diff --git a/test/bug/tint/369.wgsl.expected.glsl b/test/bug/tint/369.wgsl.expected.glsl
index a21973d..2e41e93 100644
--- a/test/bug/tint/369.wgsl.expected.glsl
+++ b/test/bug/tint/369.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   mat2 m;
 };
@@ -21,3 +20,4 @@
 layout(binding = 0) uniform S_2 {
   mat2 m;
 } UBO;
+
diff --git a/test/bug/tint/403.wgsl.expected.glsl b/test/bug/tint/403.wgsl.expected.glsl
index ec211c6..a0a75b1 100644
--- a/test/bug/tint/403.wgsl.expected.glsl
+++ b/test/bug/tint/403.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct vertexUniformBuffer1 {
   mat2 transform1;
 };
+
 struct vertexUniformBuffer2 {
   mat2 transform2;
 };
@@ -11,6 +12,7 @@
 layout(binding = 0) uniform vertexUniformBuffer1_1 {
   mat2 transform1;
 } x_20;
+
 layout(binding = 0) uniform vertexUniformBuffer2_1 {
   mat2 transform2;
 } x_26;
@@ -18,6 +20,7 @@
 struct tint_symbol_3 {
   uint tint_symbol_1;
 };
+
 struct tint_symbol_4 {
   vec4 value;
 };
@@ -40,6 +43,9 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.tint_symbol_1 = uint(gl_VertexID);
@@ -50,4 +56,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/bug/tint/413.spvasm.expected.glsl b/test/bug/tint/413.spvasm.expected.glsl
index 35e2e10..5b7a5dd 100644
--- a/test/bug/tint/413.spvasm.expected.glsl
+++ b/test/bug/tint/413.spvasm.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2D Src_1;
 layout(r32ui) uniform highp writeonly uimage2D Dst_1;
-
 void main_1() {
   uvec4 srcValue = uvec4(0u, 0u, 0u, 0u);
   uvec4 x_18 = texelFetch(Src_1, ivec2(0, 0), 0);
@@ -19,8 +18,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/453.wgsl.expected.glsl b/test/bug/tint/453.wgsl.expected.glsl
index f1478dd..2fca5d8 100644
--- a/test/bug/tint/453.wgsl.expected.glsl
+++ b/test/bug/tint/453.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2D Src_1;
 layout(r32ui) uniform highp writeonly uimage2D Dst_1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uvec4 srcValue = uvec4(0u, 0u, 0u, 0u);
@@ -14,8 +13,8 @@
   imageStore(Dst_1, ivec2(0, 0), srcValue.xxxx);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/492.wgsl.expected.glsl b/test/bug/tint/492.wgsl.expected.glsl
index 31dca81..ecec574 100644
--- a/test/bug/tint/492.wgsl.expected.glsl
+++ b/test/bug/tint/492.wgsl.expected.glsl
@@ -8,14 +8,13 @@
 layout(binding = 0) buffer S_1 {
   int a;
 } buf;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   buf.a = 12;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/534.wgsl.expected.glsl b/test/bug/tint/534.wgsl.expected.glsl
index b8c0f43..d7ae9be 100644
--- a/test/bug/tint/534.wgsl.expected.glsl
+++ b/test/bug/tint/534.wgsl.expected.glsl
@@ -28,7 +28,6 @@
 
 uniform highp sampler2D src_1;
 uniform highp sampler2D dst_1;
-
 void tint_symbol_1_inner(uvec3 GlobalInvocationID) {
   ivec2 size = textureSize(src_1, 0);
   ivec2 dstTexCoord = ivec2(GlobalInvocationID.xy);
@@ -64,10 +63,11 @@
   tint_symbol_1_inner(tint_symbol_2.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   tint_symbol_1(inputs);
 }
 
-
diff --git a/test/bug/tint/744.wgsl.expected.glsl b/test/bug/tint/744.wgsl.expected.glsl
index bab0034..37a6a7d 100644
--- a/test/bug/tint/744.wgsl.expected.glsl
+++ b/test/bug/tint/744.wgsl.expected.glsl
@@ -47,10 +47,11 @@
   tint_symbol_inner(tint_symbol_1.global_id);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.global_id = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
diff --git a/test/bug/tint/749.spvasm.expected.glsl b/test/bug/tint/749.spvasm.expected.glsl
index 95eeb34..816362b 100644
--- a/test/bug/tint/749.spvasm.expected.glsl
+++ b/test/bug/tint/749.spvasm.expected.glsl
@@ -4,6 +4,7 @@
 struct QuicksortObject {
   int numbers[10];
 };
+
 struct buf0 {
   vec2 resolution;
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_188;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void swap_i1_i1_(inout int i, inout int j) {
   int temp = 0;
   int x_932 = temp;
@@ -1546,9 +1547,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -1566,7 +1569,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -1575,4 +1580,3 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
diff --git a/test/bug/tint/757.wgsl.expected.glsl b/test/bug/tint/757.wgsl.expected.glsl
index b6776b2..ffa7615 100644
--- a/test/bug/tint/757.wgsl.expected.glsl
+++ b/test/bug/tint/757.wgsl.expected.glsl
@@ -8,13 +8,11 @@
 layout(binding = 3) buffer Result_1 {
   float values[];
 } result;
-
 struct tint_symbol_2 {
   uvec3 GlobalInvocationID;
 };
 
 uniform highp sampler2DArray myTexture_1;
-
 void tint_symbol_inner(uvec3 GlobalInvocationID) {
   uint flatIndex = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
   flatIndex = (flatIndex * 1u);
@@ -31,10 +29,11 @@
   tint_symbol_inner(tint_symbol_1.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
diff --git a/test/bug/tint/764.wgsl.expected.glsl b/test/bug/tint/764.wgsl.expected.glsl
index 61aaa72..b2546df 100644
--- a/test/bug/tint/764.wgsl.expected.glsl
+++ b/test/bug/tint/764.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat4 m = mat4(vec4(1.0f, 1.0f, 1.0f, 1.0f), vec4(1.0f, 1.0f, 1.0f, 1.0f), vec4(1.0f, 1.0f, 1.0f, 1.0f), vec4(1.0f, 1.0f, 1.0f, 1.0f));
   vec4 v1 = m[0];
   float a = v1[0];
 }
+
diff --git a/test/bug/tint/782.wgsl.expected.glsl b/test/bug/tint/782.wgsl.expected.glsl
index 946b9f4..0b8c375 100644
--- a/test/bug/tint/782.wgsl.expected.glsl
+++ b/test/bug/tint/782.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void foo() {
   int explicit[2] = int[2](0, 0);
   int implict[2] = int[2](0, 0);
   implict = explicit;
 }
+
diff --git a/test/bug/tint/824.wgsl.expected.glsl b/test/bug/tint/824.wgsl.expected.glsl
index 121d097..43a5596 100644
--- a/test/bug/tint/824.wgsl.expected.glsl
+++ b/test/bug/tint/824.wgsl.expected.glsl
@@ -5,10 +5,12 @@
   vec4 Position;
   vec4 color;
 };
+
 struct tint_symbol_3 {
   uint VertexIndex;
   uint InstanceIndex;
 };
+
 struct tint_symbol_4 {
   vec4 color;
   vec4 Position;
@@ -31,7 +33,11 @@
   wrapper_result.color = inner_result.color;
   return wrapper_result;
 }
+
+
 layout(location = 0) out vec4 color;
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.VertexIndex = uint(gl_VertexID);
@@ -44,4 +50,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/bug/tint/825.wgsl.expected.glsl b/test/bug/tint/825.wgsl.expected.glsl
index 3132ef8..e1d52ca 100644
--- a/test/bug/tint/825.wgsl.expected.glsl
+++ b/test/bug/tint/825.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int i = 0;
   int j = 0;
   mat2 m = mat2(vec2(1.0f, 2.0f), vec2(3.0f, 4.0f));
   float f_1 = m[i][j];
 }
+
diff --git a/test/bug/tint/827.wgsl.expected.glsl b/test/bug/tint/827.wgsl.expected.glsl
index 43f7189..72c1e8d 100644
--- a/test/bug/tint/827.wgsl.expected.glsl
+++ b/test/bug/tint/827.wgsl.expected.glsl
@@ -1,18 +1,15 @@
 #version 310 es
 precision mediump float;
 
-
 const uint width = 128u;
 layout(binding = 1) buffer Result_1 {
   float values[];
 } result;
-
 struct tint_symbol_2 {
   uvec3 GlobalInvocationId;
 };
 
 uniform highp sampler2D tex_1;
-
 void tint_symbol_inner(uvec3 GlobalInvocationId) {
   result.values[((GlobalInvocationId.y * width) + GlobalInvocationId.x)] = texelFetch(tex_1, ivec2(int(GlobalInvocationId.x), int(GlobalInvocationId.y)), 0).x;
 }
@@ -22,10 +19,11 @@
   tint_symbol_inner(tint_symbol_1.GlobalInvocationId);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.GlobalInvocationId = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
diff --git a/test/bug/tint/870.spvasm.expected.glsl b/test/bug/tint/870.spvasm.expected.glsl
index 479def4..b6579fa 100644
--- a/test/bug/tint/870.spvasm.expected.glsl
+++ b/test/bug/tint/870.spvasm.expected.glsl
@@ -7,6 +7,7 @@
   int essence;
   int orientation[6];
 };
+
 struct x_B4_BuildInformation {
   sspp962805860buildInformationS passthru;
 };
@@ -14,7 +15,6 @@
 layout(binding = 2) buffer x_B4_BuildInformation_1 {
   sspp962805860buildInformationS passthru;
 } sspp962805860buildInformation;
-
 void main_1() {
   int orientation[6] = int[6](0, 0, 0, 0, 0, 0);
   int x_23[6] = sspp962805860buildInformation.passthru.orientation;
@@ -31,8 +31,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/913.wgsl.expected.glsl b/test/bug/tint/913.wgsl.expected.glsl
index 06b7211..5535fd9 100644
--- a/test/bug/tint/913.wgsl.expected.glsl
+++ b/test/bug/tint/913.wgsl.expected.glsl
@@ -30,7 +30,6 @@
 
 uniform highp sampler2D src_1;
 uniform highp sampler2D dst_1;
-
 void tint_symbol_1_inner(uvec3 GlobalInvocationID) {
   ivec2 srcSize = textureSize(src_1, 0);
   ivec2 dstSize = textureSize(dst_1, 0);
@@ -105,10 +104,11 @@
   tint_symbol_1_inner(tint_symbol_2.GlobalInvocationID);
   return;
 }
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.GlobalInvocationID = gl_GlobalInvocationID;
   tint_symbol_1(inputs);
 }
 
-
diff --git a/test/bug/tint/914.wgsl.expected.glsl b/test/bug/tint/914.wgsl.expected.glsl
index efacf5c..2c7faa5 100644
--- a/test/bug/tint/914.wgsl.expected.glsl
+++ b/test/bug/tint/914.wgsl.expected.glsl
@@ -62,7 +62,6 @@
 const uint TileInner = 64u;
 shared float mm_Asub[64][64];
 shared float mm_Bsub[64][64];
-
 struct tint_symbol_2 {
   uvec3 local_id;
   uint local_invocation_index;
@@ -161,6 +160,10 @@
   tint_symbol_inner(tint_symbol_1.local_id, tint_symbol_1.global_id, tint_symbol_1.local_invocation_index);
   return;
 }
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_id = gl_LocalInvocationID;
@@ -169,4 +172,3 @@
   tint_symbol(inputs);
 }
 
-
diff --git a/test/bug/tint/922.wgsl.expected.glsl b/test/bug/tint/922.wgsl.expected.glsl
index 4aab100..da0e4c7 100644
--- a/test/bug/tint/922.wgsl.expected.glsl
+++ b/test/bug/tint/922.wgsl.expected.glsl
@@ -9,25 +9,31 @@
   vec4 mz;
   vec4 mw;
 };
+
 struct Mat4x3_ {
   vec4 mx;
   vec4 my;
   vec4 mz;
 };
+
 struct Mat4x2_ {
   vec4 mx;
   vec4 my;
 };
+
 struct ub_SceneParams {
   Mat4x4_ u_Projection;
 };
+
 struct ub_MaterialParams {
   Mat4x2_ u_TexMtx[1];
   vec4 u_Misc0_;
 };
+
 struct ub_PacketParams {
   Mat4x3_ u_PosMtx[32];
 };
+
 struct VertexOutput {
   vec4 v_Color;
   vec2 v_TexCoord;
@@ -37,13 +43,16 @@
 layout(binding = 0) uniform ub_SceneParams_1 {
   Mat4x4_ u_Projection;
 } global;
+
 layout(binding = 1) uniform ub_MaterialParams_1 {
   Mat4x2_ u_TexMtx[1];
   vec4 u_Misc0_;
 } global1;
+
 layout(binding = 2) uniform ub_PacketParams_1 {
   Mat4x3_ u_PosMtx[32];
 } global2;
+
 vec3 a_Position1 = vec3(0.0f, 0.0f, 0.0f);
 vec2 a_UV1 = vec2(0.0f, 0.0f);
 vec4 a_Color1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -52,7 +61,6 @@
 vec4 v_Color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec2 v_TexCoord = vec2(0.0f, 0.0f);
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 vec4 Mul(Mat4x4_ m8, vec4 v) {
   Mat4x4_ m9 = Mat4x4_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -136,6 +144,7 @@
   vec3 a_Normal;
   float a_PosMtxIdx;
 };
+
 struct tint_symbol_4 {
   vec4 v_Color;
   vec2 v_TexCoord;
@@ -168,6 +177,8 @@
 layout(location = 4) in float a_PosMtxIdx;
 layout(location = 0) out vec4 v_Color;
 layout(location = 1) out vec2 v_TexCoord;
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.a_Position = a_Position;
@@ -184,9 +195,8 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:167: 'v_Color' : redefinition 
+ERROR: 0:176: 'v_Color' : redefinition 
 ERROR: 1 compilation errors.  No code generated.
 
 
diff --git a/test/bug/tint/926.wgsl.expected.glsl b/test/bug/tint/926.wgsl.expected.glsl
index ff825f6..525f25f 100644
--- a/test/bug/tint/926.wgsl.expected.glsl
+++ b/test/bug/tint/926.wgsl.expected.glsl
@@ -9,7 +9,6 @@
   uint vertexCount;
 } drawOut;
 uint cubeVerts = 0u;
-
 struct tint_symbol_1 {
   uvec3 global_id;
 };
@@ -23,10 +22,11 @@
   computeMain_inner(tint_symbol.global_id);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.global_id = gl_GlobalInvocationID;
   computeMain(inputs);
 }
 
-
diff --git a/test/bug/tint/942.wgsl.expected.glsl b/test/bug/tint/942.wgsl.expected.glsl
index a3bc1dd..e665621 100644
--- a/test/bug/tint/942.wgsl.expected.glsl
+++ b/test/bug/tint/942.wgsl.expected.glsl
@@ -18,8 +18,8 @@
 layout(binding = 3) uniform Flip_1 {
   uint value;
 } flip;
-shared vec3 tile[4][256];
 
+shared vec3 tile[4][256];
 struct tint_symbol_2 {
   uvec3 LocalInvocationID;
   uint local_invocation_index;
@@ -30,7 +30,6 @@
 uniform highp sampler2D inputTex_samp;
 layout(rgba8) uniform highp writeonly image2D outputTex_1;
 
-
 void tint_symbol_inner(uvec3 WorkGroupID, uvec3 LocalInvocationID, uint local_invocation_index) {
   {
     for(uint idx = local_invocation_index; (idx < 1024u); idx = (idx + 64u)) {
@@ -95,6 +94,10 @@
   tint_symbol_inner(tint_symbol_1.WorkGroupID, tint_symbol_1.LocalInvocationID, tint_symbol_1.local_invocation_index);
   return;
 }
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.LocalInvocationID = gl_LocalInvocationID;
@@ -103,4 +106,3 @@
   tint_symbol(inputs);
 }
 
-
diff --git a/test/bug/tint/943.spvasm.expected.glsl b/test/bug/tint/943.spvasm.expected.glsl
index eddfd9d..a834d1f 100644
--- a/test/bug/tint/943.spvasm.expected.glsl
+++ b/test/bug/tint/943.spvasm.expected.glsl
@@ -10,12 +10,15 @@
   ivec3 outShape;
   ivec2 outShapeStrides;
 };
+
 struct ssbOut {
   float result[];
 };
+
 struct ssbA {
   float A[];
 };
+
 struct ssbB {
   float B[];
 };
@@ -28,6 +31,7 @@
   ivec3 outShape;
   ivec2 outShapeStrides;
 } x_48;
+
 int dimInner_1 = 0;
 int dimBOuter_1 = 0;
 layout(binding = 0) buffer ssbOut_1 {
@@ -44,7 +48,6 @@
 layout(binding = 2) buffer ssbB_1 {
   float B[];
 } x_185;
-
 bool coordsInBounds_vi2_vi2_(inout ivec2 coord, inout ivec2 shape) {
   bool x_87 = false;
   bool x_88_phi = false;
@@ -401,6 +404,10 @@
   tint_symbol_2_inner(tint_symbol_5.tint_symbol_3, tint_symbol_5.tint_symbol_4, tint_symbol_5.local_invocation_index);
   return;
 }
+
+
+
+
 void main() {
   tint_symbol_6 inputs;
   inputs.tint_symbol_3 = gl_LocalInvocationID;
@@ -409,10 +416,9 @@
   tint_symbol_2(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: '' : array size required 
-ERROR: 0:13: '' : compilation terminated 
+ERROR: 0:13: '' : array size required 
+ERROR: 0:14: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/bug/tint/948.wgsl.expected.glsl b/test/bug/tint/948.wgsl.expected.glsl
index b619e1c..759dcf5 100644
--- a/test/bug/tint/948.wgsl.expected.glsl
+++ b/test/bug/tint/948.wgsl.expected.glsl
@@ -26,6 +26,7 @@
   float spriteCount;
   vec3 colorMul;
 } x_20;
+
 vec2 tUV = vec2(0.0f, 0.0f);
 float mt = 0.0f;
 vec4 glFragColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -36,7 +37,6 @@
 vec2 vUV = vec2(0.0f, 0.0f);
 uniform highp sampler2D frameMapTexture_frameMapSampler;
 
-
 mat4 getFrameData_f1_(inout float frameID) {
   float fX = 0.0f;
   float x_15 = frameID;
@@ -52,7 +52,6 @@
 uniform highp sampler2D tileMapsTexture0_tileMapsSampler;
 uniform highp sampler2D animationMapTexture_animationMapSampler;
 uniform highp sampler2D spriteSheetTexture_spriteSheetSampler;
-
 void main_1() {
   vec4 color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   vec2 tileUV = vec2(0.0f, 0.0f);
@@ -175,6 +174,7 @@
 struct main_out {
   vec4 glFragColor_1;
 };
+
 struct tint_symbol_2 {
   vec3 vPosition_param;
   vec2 vUV_param;
@@ -183,6 +183,7 @@
   vec2 levelUnits_param;
   vec2 tileID_1_param;
 };
+
 struct tint_symbol_3 {
   vec4 glFragColor_1;
 };
@@ -212,6 +213,7 @@
 layout(location = 4) in vec2 levelUnits_param;
 layout(location = 5) in vec2 tileID_1_param;
 layout(location = 0) out vec4 glFragColor_1;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.vPosition_param = vPosition_param;
@@ -225,11 +227,10 @@
   glFragColor_1 = outputs.glFragColor_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:74: 'frac' : no matching overloaded function found 
-ERROR: 0:74: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:74: '' : compilation terminated 
+ERROR: 0:73: 'frac' : no matching overloaded function found 
+ERROR: 0:73: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
+ERROR: 0:73: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/bug/tint/949.wgsl.expected.glsl b/test/bug/tint/949.wgsl.expected.glsl
index 50e1728..a77020e 100644
--- a/test/bug/tint/949.wgsl.expected.glsl
+++ b/test/bug/tint/949.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec3 diffuse;
   vec3 specular;
 };
+
 struct LeftOver {
   mat4 u_World;
   mat4 u_ViewProjection;
@@ -18,6 +19,7 @@
   uint padding_1;
   vec2 tangentSpaceParameter0;
 };
+
 struct Light0 {
   vec4 vLightData;
   vec4 vLightDiffuse;
@@ -42,6 +44,7 @@
   uint padding_1;
   vec2 tangentSpaceParameter0;
 } x_269;
+
 vec4 v_output1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 bool tint_symbol = false;
 vec2 v_uv = vec2(0.0f, 0.0f);
@@ -55,8 +58,8 @@
   vec4 shadowsInfo;
   vec2 depthValues;
 } light0;
-vec4 glFragColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 glFragColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 mat3 cotangent_frame_vf3_vf3_vf2_vf2_(inout vec3 normal_1, inout vec3 p, inout vec2 uv, inout vec2 tangentSpaceParams) {
   vec3 dp1 = vec3(0.0f, 0.0f, 0.0f);
   vec3 dp2 = vec3(0.0f, 0.0f, 0.0f);
@@ -177,7 +180,6 @@
 uniform highp sampler2D TextureSamplerTexture_TextureSamplerSampler;
 uniform highp sampler2D TextureSampler1Texture_TextureSampler1Sampler;
 
-
 void main_1() {
   vec4 tempTextureRead = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   vec3 rgb = vec3(0.0f, 0.0f, 0.0f);
@@ -350,6 +352,7 @@
 struct main_out {
   vec4 glFragColor_1;
 };
+
 struct tint_symbol_4 {
   vec4 v_output1_param;
   vec2 vMainuv_param;
@@ -357,6 +360,7 @@
   vec2 v_uv_param;
   bool tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 glFragColor_1;
 };
@@ -382,7 +386,9 @@
 layout(location = 1) in vec2 vMainuv_param;
 layout(location = 2) in vec4 v_output2_param;
 layout(location = 3) in vec2 v_uv_param;
+
 layout(location = 0) out vec4 glFragColor_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.v_output1_param = v_output1_param;
@@ -395,11 +401,10 @@
   glFragColor_1 = outputs.glFragColor_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:69: 'ddx' : no matching overloaded function found 
-ERROR: 0:69: 'assign' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:69: '' : compilation terminated 
+ERROR: 0:72: 'ddx' : no matching overloaded function found 
+ERROR: 0:72: 'assign' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
+ERROR: 0:72: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/bug/tint/951.spvasm.expected.glsl b/test/bug/tint/951.spvasm.expected.glsl
index 96a555d..bee1da4 100644
--- a/test/bug/tint/951.spvasm.expected.glsl
+++ b/test/bug/tint/951.spvasm.expected.glsl
@@ -6,9 +6,11 @@
 struct ssbOut {
   float result[];
 };
+
 struct ssbA {
   float A[];
 };
+
 struct Uniforms {
   float NAN;
   int aShape;
@@ -90,13 +92,14 @@
   tint_symbol_1_inner(tint_symbol_3.tint_symbol_2);
   return;
 }
+
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_GlobalInvocationID;
   tint_symbol_1(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/bug/tint/959.wgsl.expected.glsl b/test/bug/tint/959.wgsl.expected.glsl
index addc2c2..388ba36 100644
--- a/test/bug/tint/959.wgsl.expected.glsl
+++ b/test/bug/tint/959.wgsl.expected.glsl
@@ -32,24 +32,31 @@
 layout(binding = 1) uniform S_9 {
   float a;
 } b8;
+
 layout(binding = 1) uniform S_10 {
   float a;
 } b9;
+
 layout(binding = 1) uniform S_11 {
   float a;
 } b10;
+
 layout(binding = 1) uniform S_12 {
   float a;
 } b11;
+
 layout(binding = 1) uniform S_13 {
   float a;
 } b12;
+
 layout(binding = 1) uniform S_14 {
   float a;
 } b13;
+
 layout(binding = 1) uniform S_15 {
   float a;
 } b14;
+
 layout(binding = 1) uniform S_16 {
   float a;
 } b15;
@@ -57,8 +64,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/977.spvasm.expected.glsl b/test/bug/tint/977.spvasm.expected.glsl
index 1b19349..0cfd8e3 100644
--- a/test/bug/tint/977.spvasm.expected.glsl
+++ b/test/bug/tint/977.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct ResultMatrix {
   float numbers[];
 };
+
 struct FirstMatrix {
   float numbers[];
 };
+
 struct SecondMatrix {
   float numbers[];
 };
+
 struct Uniforms {
   float NAN;
   int sizeA;
@@ -22,7 +25,6 @@
 layout(binding = 2) buffer ResultMatrix_1 {
   float numbers[];
 } resultMatrix;
-
 float binaryOperation_f1_f1_(inout float a, inout float b) {
   float x_26 = 0.0f;
   float x_13 = b;
@@ -73,13 +75,14 @@
   tint_symbol_1_inner(tint_symbol_3.tint_symbol_2);
   return;
 }
+
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_GlobalInvocationID;
   tint_symbol_1(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/bug/tint/978.wgsl.expected.glsl b/test/bug/tint/978.wgsl.expected.glsl
index 3f9b60f..e9785e7 100644
--- a/test/bug/tint/978.wgsl.expected.glsl
+++ b/test/bug/tint/978.wgsl.expected.glsl
@@ -4,19 +4,21 @@
 struct FragmentInput {
   vec2 vUv;
 };
+
 struct FragmentOutput {
   vec4 color;
 };
+
 struct tint_symbol_3 {
   vec2 vUv;
 };
+
 struct tint_symbol_4 {
   vec4 color;
 };
 
 uniform highp sampler2D depthMap_texSampler;
 
-
 FragmentOutput tint_symbol_inner(FragmentInput fIn) {
   float tint_symbol_1 = texture(depthMap_texSampler, fIn.vUv).x;
   vec3 color = vec3(tint_symbol_1, tint_symbol_1, tint_symbol_1);
@@ -34,6 +36,7 @@
 }
 layout(location = 2) in vec2 vUv;
 layout(location = 0) out vec4 color;
+
 void main() {
   tint_symbol_3 inputs;
   inputs.vUv = vUv;
@@ -42,4 +45,3 @@
   color = outputs.color;
 }
 
-
diff --git a/test/bug/tint/980.wgsl.expected.glsl b/test/bug/tint/980.wgsl.expected.glsl
index f21bafb..26f1552 100644
--- a/test/bug/tint/980.wgsl.expected.glsl
+++ b/test/bug/tint/980.wgsl.expected.glsl
@@ -16,7 +16,6 @@
   vec3 v;
   uint i;
 } io;
-
 struct tint_symbol_2 {
   uint idx;
 };
@@ -30,10 +29,11 @@
   tint_symbol_inner(tint_symbol_1.idx);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.idx = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/bug/tint/990.wgsl.expected.glsl b/test/bug/tint/990.wgsl.expected.glsl
index d9b7b77..8a446ee 100644
--- a/test/bug/tint/990.wgsl.expected.glsl
+++ b/test/bug/tint/990.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int i = 0;
   {
@@ -18,3 +17,4 @@
     }
   }
 }
+
diff --git a/test/bug/tint/992.wgsl.expected.glsl b/test/bug/tint/992.wgsl.expected.glsl
index 569029a..19b9edf 100644
--- a/test/bug/tint/992.wgsl.expected.glsl
+++ b/test/bug/tint/992.wgsl.expected.glsl
@@ -18,10 +18,10 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol outputs;
   outputs = frag_main();
   value = outputs.value;
 }
 
-
diff --git a/test/bug/tint/993.wgsl.expected.glsl b/test/bug/tint/993.wgsl.expected.glsl
index 3c7ba42..67a394a 100644
--- a/test/bug/tint/993.wgsl.expected.glsl
+++ b/test/bug/tint/993.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 1) buffer Result_1 {
   uint value;
 } result;
-
 struct TestData {
   int data[3];
 };
@@ -24,7 +23,6 @@
 layout(binding = 0) buffer TestData_1 {
   int data[3];
 } s;
-
 int runTest() {
   return atomicOr(s.data[(0u + uint(constants.zero))], 0);
 }
@@ -34,8 +32,8 @@
   result.value = uint(runTest());
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/bug/tint/998.wgsl.expected.glsl b/test/bug/tint/998.wgsl.expected.glsl
index 1717c91..62e80ae 100644
--- a/test/bug/tint/998.wgsl.expected.glsl
+++ b/test/bug/tint/998.wgsl.expected.glsl
@@ -12,19 +12,19 @@
 struct Result {
   uint value;
 };
+
 struct S {
   uint data[3];
 };
 
 S s = S(uint[3](0u, 0u, 0u));
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   s.data[constants.zero] = 0u;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl
index 034c499..88b1b8f 100644
--- a/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   mat3 r = (a + b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
index a11adca..0b90ef1 100644
--- a/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   float r = (1.0f + 2.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
index 4390508..5803fdc 100644
--- a/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 + 2);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
index 5e1db81..a7ec957 100644
--- a/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u + 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl
index 0655ac2..e54fe43 100644
--- a/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a + b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl
index ea0ed84..a9808d1 100644
--- a/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a + b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl
index 0fe0f75..6144b34 100644
--- a/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a + b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
index e7a2730..63461e9 100644
--- a/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   vec3 r = (a + 4.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
index 7882f3b..b13d477 100644
--- a/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 r = (a + 4);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
index 160e65c..b1d217c 100644
--- a/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 r = (a + 4u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl
index 7bd2c34..5afc728 100644
--- a/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a + b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl
index 0b48495..14f55b4 100644
--- a/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a + b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl
index bff24ce..9956af3 100644
--- a/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a + b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
index ea9a02a..4e33041 100644
--- a/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 & 2);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
index f46f9cd..ae4149d 100644
--- a/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u & 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl
index d03945b..1091a53 100644
--- a/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a & b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl
index 1fc4c7f..d594442 100644
--- a/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a & b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
index 519f411..db2479f 100644
--- a/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 | 2);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
index 52ae9c0..38b5d66 100644
--- a/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u | 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl
index a16e26d..37b3d5f 100644
--- a/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a | b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl
index 887fc52..e938edb 100644
--- a/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a | b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
index 05cd2f1..0bf5a9e 100644
--- a/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 ^ 2);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
index 284867d..5509458 100644
--- a/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u ^ 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl
index 8b212ba..386ff24 100644
--- a/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a ^ b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl
index 59b5058..4b18413 100644
--- a/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a ^ b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
index 7db6fa7..9ce3552 100644
--- a/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   float r = (1.0f / 2.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
index f0efa17..04a161e 100644
--- a/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 / 2);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
index d5d5366..16baff5 100644
--- a/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u / 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl
index 6512ba3..968e319 100644
--- a/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl
index 08c20db..0a2c8b3 100644
--- a/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl
index 1ee9726..c5ab59f 100644
--- a/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
index 28eea80..ce2532e 100644
--- a/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   vec3 r = (a / 4.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
index 126af32..9d8ce73 100644
--- a/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 r = (a / 4);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
index 6442c2c..05c23d9 100644
--- a/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 r = (a / 4u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl
index 4c1e415..03e4822 100644
--- a/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl
index 18991b5..b25a8ae 100644
--- a/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl
index 8b8ddcb..faac292 100644
--- a/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
index a07511d..a9f5867 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   float r = (1.0f / 0.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
index 0eb418f..5aecc10 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 / 0);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
index d45aa3d..9a9100c 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u / 0u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.glsl
index 2043793..296587e 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.glsl
index f2e29a8..19372fd 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.glsl
index ab8795d..2ca5062 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.glsl
index 1b67029..4e2085b 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   vec3 r = (a / 0.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
index 7eccb90..47945cb 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 r = (a / 0);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
index 2b5b406..0c9cf4c 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 r = (a / 0u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.glsl
index a92210d..fe6684d 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.glsl
index eb947d2..d20b10d 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.glsl
index 607c183..3fc99d1 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.glsl
index 5c949fc..1410729 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   float r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.glsl
index 2677dda..53c8ba4 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   int r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.glsl
index 3db6a58..7b857f9 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uint r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.glsl
index d4073b3..709ea3b 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.glsl
index b6fc980..b9172f6 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.glsl
index f8a5911..9b2455b 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.glsl
index b9a0d2c..c98f287 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.glsl
index 383f01b..3178cf2 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.glsl
index ef21236..00dd875 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.glsl
index b60c041..7f66bc7 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.glsl
index 4908466..ff1cd8d 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.glsl
index d97e26c..328c0a2 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.glsl
index 7c9bba5..09ba0c8 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   float r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.glsl
index c4ef3a3..f545f0b 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   int r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.glsl
index 09fa79e..37ae046 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uint r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.glsl
index 2043793..296587e 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.glsl
index f2e29a8..19372fd 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.glsl
index ab8795d..2ca5062 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.glsl
index b3a53e9..ffa9909 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.glsl
index 0be07ba..58899fd 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.glsl
index c872141..b1bcc1c 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.glsl
index a92210d..fe6684d 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.glsl
index eb947d2..d20b10d 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.glsl
index 607c183..3fc99d1 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a / b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
index 11e2270..f57ae36 100644
--- a/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 << 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
index 8c7242c..4d0d3ce 100644
--- a/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u << 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl b/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl
index 71fa7c5..db0ef8f 100644
--- a/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a << b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl b/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl
index e7cf54f..f886625 100644
--- a/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a << b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
index e0fd1be..7587ea3 100644
--- a/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
@@ -8,11 +8,11 @@
   float r = (1.0f % 2.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
index 5c42789..506196a 100644
--- a/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 % 2);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
index 0015a14..0040d2b 100644
--- a/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u % 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl
index 602ca02..fbf2962 100644
--- a/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl
@@ -10,11 +10,11 @@
   vec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:8: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump 3-component vector of float' and a right operand of type ' temp mediump 3-component vector of float' (or there is no acceptable conversion)
 ERROR: 0:8: '' : compilation terminated 
diff --git a/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl
index 7fa186b..685f89d 100644
--- a/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl
index 101e545..fe2fe88 100644
--- a/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
index 34e9cf4..6d3d71d 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.glsl
@@ -8,11 +8,11 @@
   float r = (1.0f % 0.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
index bec5c24..6bef751 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 % 0);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
index 2d2b907..56ac547 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u % 0u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.glsl
index 2f83124..589fb87 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.glsl
index 6d65fc6..a4b1c80 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
index a2fb916..1c492a5 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 r = (a % 0);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
index 4fad4fb..6a048ef 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 r = (a % 0u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.glsl
index d75e8d6..9a5fc61 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.glsl
@@ -10,11 +10,11 @@
   vec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:8: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump 3-component vector of float' and a right operand of type ' temp mediump 3-component vector of float' (or there is no acceptable conversion)
 ERROR: 0:8: '' : compilation terminated 
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.glsl
index 6fa1fb7..d7abe79 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.glsl
index ed6faa1..dd411f1 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.glsl
index 0090c86..14d3b41 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.glsl
@@ -10,11 +10,11 @@
   float r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:8: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' temp mediump float' (or there is no acceptable conversion)
 ERROR: 0:8: '' : compilation terminated 
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.glsl
index 053101e..501dc92 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   int r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.glsl
index 85af6af..988e967 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uint r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.glsl
index ebb12f2..97ce0fa 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.glsl
index d7da750..9bd7ffb 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.glsl
index 60e75ff..e0a0c05 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.glsl
index 0c1b086..7e5a571 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.glsl
index 88ca6ba..4c2f21f 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.glsl
@@ -10,11 +10,11 @@
   vec3 r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:8: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump 3-component vector of float' and a right operand of type ' temp mediump 3-component vector of float' (or there is no acceptable conversion)
 ERROR: 0:8: '' : compilation terminated 
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.glsl
index 0c114a5..70a09f5 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.glsl
index c2619d8..aea8897 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % (b + b));
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.glsl
index 6611689..29fd5fe 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.glsl
@@ -10,11 +10,11 @@
   float r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:8: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' temp mediump float' (or there is no acceptable conversion)
 ERROR: 0:8: '' : compilation terminated 
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.glsl
index fcbb1c3..1b64b4a 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   int r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.glsl
index 8e628f4..eca91f8 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uint r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.glsl
index 2f83124..589fb87 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.glsl
index 6d65fc6..a4b1c80 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.glsl
index 49d0cc0..797a0d7 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.glsl
index 3e616b3..241eab3 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.glsl
index d75e8d6..9a5fc61 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.glsl
@@ -10,11 +10,11 @@
   vec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:8: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump 3-component vector of float' and a right operand of type ' temp mediump 3-component vector of float' (or there is no acceptable conversion)
 ERROR: 0:8: '' : compilation terminated 
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.glsl
index 6fa1fb7..d7abe79 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.glsl
index ed6faa1..dd411f1 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a % b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl
index 36ae96a..e37618d 100644
--- a/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   mat4 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl
index e494482..16350dc 100644
--- a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl
@@ -15,8 +15,8 @@
   vec2 x = (data.matrix * data.vector);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl
index 924136f..dec5c80 100644
--- a/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   mat3 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl
index b1959cb..65c991c 100644
--- a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl
@@ -15,8 +15,8 @@
   vec3 x = (data.matrix * data.vector);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl
index 2596862..92bdac6 100644
--- a/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   mat2 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
index 1629327..094d946 100644
--- a/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   float r = (1.0f * 2.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
index 917ae68..6fcda38 100644
--- a/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 * 2);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
index 22b2997..6bc6361 100644
--- a/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u * 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl
index 9c4bb5b..1e77318 100644
--- a/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl
index b3e5917..9ccdf10 100644
--- a/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl
index 2d2fbf7..95d55a2 100644
--- a/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl
index 3603b2e..19b9f42 100644
--- a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl
@@ -15,8 +15,8 @@
   vec3 x = (data.vector * data.matrix);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl
index 2805876..889c660 100644
--- a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl
@@ -15,8 +15,8 @@
   vec4 x = (data.vector * data.matrix);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
index 68aadcc..a96dd5b 100644
--- a/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   vec3 r = (a * 4.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
index 7e33049..83736fb 100644
--- a/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 r = (a * 4);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
index 9c19c28..d08bd4a 100644
--- a/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 r = (a * 4u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl
index fdfb8b4..e99d96f 100644
--- a/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl
index bd7f2b7..2af834d 100644
--- a/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl
index 20ed770..889cd57 100644
--- a/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a * b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
index 040542f..6d118f1 100644
--- a/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 >> 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
index 7eeeb71..bd44d7d 100644
--- a/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u >> 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl b/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl
index eb2f2ed..1429a39 100644
--- a/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a >> b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl b/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl
index e62bc29..7c63c6d 100644
--- a/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a >> b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl
index 358b664..92c2f6c 100644
--- a/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   mat3 r = (a - b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
index 116ab47..7b84b8f 100644
--- a/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   float r = (1.0f - 2.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
index 01bf2df..f0334a1 100644
--- a/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int r = (1 - 2);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
index 682d1bf..d4f1aff 100644
--- a/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint r = (1u - 2u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl
index 67f29c6..9e497a0 100644
--- a/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a - b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl
index 66d19e2..f655d71 100644
--- a/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a - b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl
index e23b5c6..1474d6c 100644
--- a/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a - b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
index b2a2318..dbfdc78 100644
--- a/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   vec3 r = (a - 4.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
index 225c732..1d34062 100644
--- a/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 r = (a - 4);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
index 23e6c8a..35eed7d 100644
--- a/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 r = (a - 4u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl
index 88ca974..2f73e34 100644
--- a/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   vec3 r = (a - b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl
index 13aca0a8..8869edf 100644
--- a/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   ivec3 r = (a - b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl
index 5495326..64053c8 100644
--- a/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   uvec3 r = (a - b);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl
index 5d6e5d0..16f1b89 100644
--- a/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   float b = 1.0f;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl
index 33b530b..2b27534 100644
--- a/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int b = floatBitsToInt(1.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl
index f2f8061..e73f2a1 100644
--- a/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint b = floatBitsToUint(1.0f);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl
index 7f8a6e5..1dc97ed 100644
--- a/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   float b = intBitsToFloat(1);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl
index 6675356..5b18f96 100644
--- a/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int b = 1;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl
index 5adfadd..d17ef1b 100644
--- a/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint b = uint(1);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.glsl
index faefd2d..fe0dbfb 100644
--- a/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint b = uint(-2147483648);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl
index dd904cd..35a3458 100644
--- a/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   float b = uintBitsToFloat(1u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl
index 6ca4979..8a04668 100644
--- a/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int b = int(1u);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl
index fb6eff6..2e0049a 100644
--- a/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   uint b = 1u;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/f32-f32.wgsl.expected.glsl b/test/expressions/bitcast/vector/f32-f32.wgsl.expected.glsl
index 6ace57f..79506a2 100644
--- a/test/expressions/bitcast/vector/f32-f32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/f32-f32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   vec3 b = a;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/f32-i32.wgsl.expected.glsl b/test/expressions/bitcast/vector/f32-i32.wgsl.expected.glsl
index 3ada590..8905d2c 100644
--- a/test/expressions/bitcast/vector/f32-i32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/f32-i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 b = floatBitsToInt(a);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/f32-u32.wgsl.expected.glsl b/test/expressions/bitcast/vector/f32-u32.wgsl.expected.glsl
index 69e07dc..3df55ec 100644
--- a/test/expressions/bitcast/vector/f32-u32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/f32-u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 b = floatBitsToUint(a);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/i32-f32.wgsl.expected.glsl b/test/expressions/bitcast/vector/i32-f32.wgsl.expected.glsl
index 9efb6f6..7b652bf 100644
--- a/test/expressions/bitcast/vector/i32-f32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/i32-f32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   vec3 b = intBitsToFloat(a);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/i32-i32.wgsl.expected.glsl b/test/expressions/bitcast/vector/i32-i32.wgsl.expected.glsl
index f951aae..1c28025 100644
--- a/test/expressions/bitcast/vector/i32-i32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/i32-i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 b = a;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/i32-u32.wgsl.expected.glsl b/test/expressions/bitcast/vector/i32-u32.wgsl.expected.glsl
index ecc1fd4..9115f4a 100644
--- a/test/expressions/bitcast/vector/i32-u32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/i32-u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 b = uvec3(a);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/u32-f32.wgsl.expected.glsl b/test/expressions/bitcast/vector/u32-f32.wgsl.expected.glsl
index 77ee422..9d1ac80 100644
--- a/test/expressions/bitcast/vector/u32-f32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/u32-f32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   vec3 b = uintBitsToFloat(a);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/u32-i32.wgsl.expected.glsl b/test/expressions/bitcast/vector/u32-i32.wgsl.expected.glsl
index 0e98c52..fec2255 100644
--- a/test/expressions/bitcast/vector/u32-i32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/u32-i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   ivec3 b = ivec3(a);
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/bitcast/vector/u32-u32.wgsl.expected.glsl b/test/expressions/bitcast/vector/u32-u32.wgsl.expected.glsl
index 615f2f0..da18fc0 100644
--- a/test/expressions/bitcast/vector/u32-u32.wgsl.expected.glsl
+++ b/test/expressions/bitcast/vector/u32-u32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   uvec3 b = a;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/expressions/index/let/let/literal/array.wgsl.expected.glsl b/test/expressions/index/let/let/literal/array.wgsl.expected.glsl
index 2f0abd5..2225238 100644
--- a/test/expressions/index/let/let/literal/array.wgsl.expected.glsl
+++ b/test/expressions/index/let/let/literal/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[1];
 }
+
diff --git a/test/expressions/index/let/let/literal/matrix.wgsl.expected.glsl b/test/expressions/index/let/let/literal/matrix.wgsl.expected.glsl
index cd0f7ba..a0ebffd 100644
--- a/test/expressions/index/let/let/literal/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/let/let/literal/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f() {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[1];
 }
+
diff --git a/test/expressions/index/let/let/literal/vector.wgsl.expected.glsl b/test/expressions/index/let/let/literal/vector.wgsl.expected.glsl
index 1db8e0b..5d98a76 100644
--- a/test/expressions/index/let/let/literal/vector.wgsl.expected.glsl
+++ b/test/expressions/index/let/let/literal/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[1];
 }
+
diff --git a/test/expressions/index/let/let/param/array.wgsl.expected.glsl b/test/expressions/index/let/let/param/array.wgsl.expected.glsl
index ea27712..88547d5 100644
--- a/test/expressions/index/let/let/param/array.wgsl.expected.glsl
+++ b/test/expressions/index/let/let/param/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f(int x) {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[x];
 }
+
diff --git a/test/expressions/index/let/let/param/matrix.wgsl.expected.glsl b/test/expressions/index/let/let/param/matrix.wgsl.expected.glsl
index a9ae0fd..32e6a8b 100644
--- a/test/expressions/index/let/let/param/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/let/let/param/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f(int x) {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[x];
 }
+
diff --git a/test/expressions/index/let/let/param/vector.wgsl.expected.glsl b/test/expressions/index/let/let/param/vector.wgsl.expected.glsl
index 0a3af1c..cad5646 100644
--- a/test/expressions/index/let/let/param/vector.wgsl.expected.glsl
+++ b/test/expressions/index/let/let/param/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f(int x) {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[x];
 }
+
diff --git a/test/expressions/index/let/literal/array.wgsl.expected.glsl b/test/expressions/index/let/literal/array.wgsl.expected.glsl
index 2f0abd5..2225238 100644
--- a/test/expressions/index/let/literal/array.wgsl.expected.glsl
+++ b/test/expressions/index/let/literal/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[1];
 }
+
diff --git a/test/expressions/index/let/literal/matrix.wgsl.expected.glsl b/test/expressions/index/let/literal/matrix.wgsl.expected.glsl
index cd0f7ba..a0ebffd 100644
--- a/test/expressions/index/let/literal/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/let/literal/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f() {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[1];
 }
+
diff --git a/test/expressions/index/let/literal/vector.wgsl.expected.glsl b/test/expressions/index/let/literal/vector.wgsl.expected.glsl
index 1db8e0b..5d98a76 100644
--- a/test/expressions/index/let/literal/vector.wgsl.expected.glsl
+++ b/test/expressions/index/let/literal/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[1];
 }
+
diff --git a/test/expressions/index/let/param/array.wgsl.expected.glsl b/test/expressions/index/let/param/array.wgsl.expected.glsl
index 1d881bf..17f4054 100644
--- a/test/expressions/index/let/param/array.wgsl.expected.glsl
+++ b/test/expressions/index/let/param/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f(int i) {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[i];
 }
+
diff --git a/test/expressions/index/let/param/matrix.wgsl.expected.glsl b/test/expressions/index/let/param/matrix.wgsl.expected.glsl
index d4a28b3..e150094 100644
--- a/test/expressions/index/let/param/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/let/param/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f(int i) {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[i];
 }
+
diff --git a/test/expressions/index/let/param/vector.wgsl.expected.glsl b/test/expressions/index/let/param/vector.wgsl.expected.glsl
index 6a2d0bf..e4da58c 100644
--- a/test/expressions/index/let/param/vector.wgsl.expected.glsl
+++ b/test/expressions/index/let/param/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f(int i) {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[i];
 }
+
diff --git a/test/expressions/index/let/var/literal/array.wgsl.expected.glsl b/test/expressions/index/let/var/literal/array.wgsl.expected.glsl
index 2f0abd5..2225238 100644
--- a/test/expressions/index/let/var/literal/array.wgsl.expected.glsl
+++ b/test/expressions/index/let/var/literal/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[1];
 }
+
diff --git a/test/expressions/index/let/var/literal/matrix.wgsl.expected.glsl b/test/expressions/index/let/var/literal/matrix.wgsl.expected.glsl
index cd0f7ba..a0ebffd 100644
--- a/test/expressions/index/let/var/literal/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/let/var/literal/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f() {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[1];
 }
+
diff --git a/test/expressions/index/let/var/literal/vector.wgsl.expected.glsl b/test/expressions/index/let/var/literal/vector.wgsl.expected.glsl
index 1db8e0b..5d98a76 100644
--- a/test/expressions/index/let/var/literal/vector.wgsl.expected.glsl
+++ b/test/expressions/index/let/var/literal/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[1];
 }
+
diff --git a/test/expressions/index/var/let/literal/array.wgsl.expected.glsl b/test/expressions/index/var/let/literal/array.wgsl.expected.glsl
index 2f0abd5..2225238 100644
--- a/test/expressions/index/var/let/literal/array.wgsl.expected.glsl
+++ b/test/expressions/index/var/let/literal/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[1];
 }
+
diff --git a/test/expressions/index/var/let/literal/matrix.wgsl.expected.glsl b/test/expressions/index/var/let/literal/matrix.wgsl.expected.glsl
index cd0f7ba..a0ebffd 100644
--- a/test/expressions/index/var/let/literal/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/var/let/literal/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f() {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[1];
 }
+
diff --git a/test/expressions/index/var/let/literal/vector.wgsl.expected.glsl b/test/expressions/index/var/let/literal/vector.wgsl.expected.glsl
index 1db8e0b..5d98a76 100644
--- a/test/expressions/index/var/let/literal/vector.wgsl.expected.glsl
+++ b/test/expressions/index/var/let/literal/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[1];
 }
+
diff --git a/test/expressions/index/var/let/param/array.wgsl.expected.glsl b/test/expressions/index/var/let/param/array.wgsl.expected.glsl
index ea27712..88547d5 100644
--- a/test/expressions/index/var/let/param/array.wgsl.expected.glsl
+++ b/test/expressions/index/var/let/param/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f(int x) {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[x];
 }
+
diff --git a/test/expressions/index/var/let/param/matrix.wgsl.expected.glsl b/test/expressions/index/var/let/param/matrix.wgsl.expected.glsl
index a9ae0fd..32e6a8b 100644
--- a/test/expressions/index/var/let/param/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/var/let/param/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f(int x) {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[x];
 }
+
diff --git a/test/expressions/index/var/let/param/vector.wgsl.expected.glsl b/test/expressions/index/var/let/param/vector.wgsl.expected.glsl
index 0a3af1c..cad5646 100644
--- a/test/expressions/index/var/let/param/vector.wgsl.expected.glsl
+++ b/test/expressions/index/var/let/param/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f(int x) {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[x];
 }
+
diff --git a/test/expressions/index/var/literal/array.wgsl.expected.glsl b/test/expressions/index/var/literal/array.wgsl.expected.glsl
index 2f0abd5..2225238 100644
--- a/test/expressions/index/var/literal/array.wgsl.expected.glsl
+++ b/test/expressions/index/var/literal/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[1];
 }
+
diff --git a/test/expressions/index/var/literal/matrix.wgsl.expected.glsl b/test/expressions/index/var/literal/matrix.wgsl.expected.glsl
index cd0f7ba..a0ebffd 100644
--- a/test/expressions/index/var/literal/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/var/literal/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f() {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[1];
 }
+
diff --git a/test/expressions/index/var/literal/vector.wgsl.expected.glsl b/test/expressions/index/var/literal/vector.wgsl.expected.glsl
index 1db8e0b..5d98a76 100644
--- a/test/expressions/index/var/literal/vector.wgsl.expected.glsl
+++ b/test/expressions/index/var/literal/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f() {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[1];
 }
+
diff --git a/test/expressions/index/var/param/array.wgsl.expected.glsl b/test/expressions/index/var/param/array.wgsl.expected.glsl
index 1d881bf..17f4054 100644
--- a/test/expressions/index/var/param/array.wgsl.expected.glsl
+++ b/test/expressions/index/var/param/array.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f(int i) {
   int a[8] = int[8](1, 2, 3, 4, 5, 6, 7, 8);
   return a[i];
 }
+
diff --git a/test/expressions/index/var/param/matrix.wgsl.expected.glsl b/test/expressions/index/var/param/matrix.wgsl.expected.glsl
index d4a28b3..e150094 100644
--- a/test/expressions/index/var/param/matrix.wgsl.expected.glsl
+++ b/test/expressions/index/var/param/matrix.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 vec3 f(int i) {
   mat3 m = mat3(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
   return m[i];
 }
+
diff --git a/test/expressions/index/var/param/vector.wgsl.expected.glsl b/test/expressions/index/var/param/vector.wgsl.expected.glsl
index 6a2d0bf..e4da58c 100644
--- a/test/expressions/index/var/param/vector.wgsl.expected.glsl
+++ b/test/expressions/index/var/param/vector.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float f(int i) {
   vec3 v = vec3(1.0f, 2.0f, 3.0f);
   return v[i];
 }
+
diff --git a/test/expressions/literals/-inf.spvasm.expected.glsl b/test/expressions/literals/-inf.spvasm.expected.glsl
index 77a7f64..78232f1 100644
--- a/test/expressions/literals/-inf.spvasm.expected.glsl
+++ b/test/expressions/literals/-inf.spvasm.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   out_var_SV_TARGET = vec4(uintBitsToFloat(0xff800000u), uintBitsToFloat(0xff800000u), uintBitsToFloat(0xff800000u), uintBitsToFloat(0xff800000u));
   return;
@@ -11,6 +10,7 @@
 struct main_out {
   vec4 out_var_SV_TARGET_1;
 };
+
 struct tint_symbol_1 {
   vec4 out_var_SV_TARGET_1;
 };
@@ -28,10 +28,10 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 out_var_SV_TARGET_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   out_var_SV_TARGET_1 = outputs.out_var_SV_TARGET_1;
 }
 
-
diff --git a/test/expressions/literals/inf.spvasm.expected.glsl b/test/expressions/literals/inf.spvasm.expected.glsl
index 9c7b69f..022c655 100644
--- a/test/expressions/literals/inf.spvasm.expected.glsl
+++ b/test/expressions/literals/inf.spvasm.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   out_var_SV_TARGET = vec4(uintBitsToFloat(0x7f800000u), uintBitsToFloat(0x7f800000u), uintBitsToFloat(0x7f800000u), uintBitsToFloat(0x7f800000u));
   return;
@@ -11,6 +10,7 @@
 struct main_out {
   vec4 out_var_SV_TARGET_1;
 };
+
 struct tint_symbol_1 {
   vec4 out_var_SV_TARGET_1;
 };
@@ -28,10 +28,10 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 out_var_SV_TARGET_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   out_var_SV_TARGET_1 = outputs.out_var_SV_TARGET_1;
 }
 
-
diff --git a/test/expressions/literals/intmin.wgsl.expected.glsl b/test/expressions/literals/intmin.wgsl.expected.glsl
index 0fcbd6e..89d8f8f 100644
--- a/test/expressions/literals/intmin.wgsl.expected.glsl
+++ b/test/expressions/literals/intmin.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int add_int_min_explicit() {
   int a = -2147483648;
   int b = (a + 1);
   int c = (-2147483648 + 1);
   return c;
 }
+
diff --git a/test/expressions/literals/nan.spvasm.expected.glsl b/test/expressions/literals/nan.spvasm.expected.glsl
index a09810e..96d9709 100644
--- a/test/expressions/literals/nan.spvasm.expected.glsl
+++ b/test/expressions/literals/nan.spvasm.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   out_var_SV_TARGET = vec4(uintBitsToFloat(0x7fc00000u), uintBitsToFloat(0x7fc00000u), uintBitsToFloat(0x7fc00000u), uintBitsToFloat(0x7fc00000u));
   return;
@@ -11,6 +10,7 @@
 struct main_out {
   vec4 out_var_SV_TARGET_1;
 };
+
 struct tint_symbol_1 {
   vec4 out_var_SV_TARGET_1;
 };
@@ -28,10 +28,10 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 out_var_SV_TARGET_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   out_var_SV_TARGET_1 = outputs.out_var_SV_TARGET_1;
 }
 
-
diff --git a/test/expressions/splat/call/bool.wgsl.expected.glsl b/test/expressions/splat/call/bool.wgsl.expected.glsl
index 7088506..02056af 100644
--- a/test/expressions/splat/call/bool.wgsl.expected.glsl
+++ b/test/expressions/splat/call/bool.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 bool get_bool() {
   return true;
 }
@@ -20,3 +19,4 @@
   bvec3 v3 = bvec3(get_bool());
   bvec4 v4 = bvec4(get_bool());
 }
+
diff --git a/test/expressions/splat/call/f32.wgsl.expected.glsl b/test/expressions/splat/call/f32.wgsl.expected.glsl
index cfd01c6..3bd3b4d 100644
--- a/test/expressions/splat/call/f32.wgsl.expected.glsl
+++ b/test/expressions/splat/call/f32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 float get_f32() {
   return 1.0f;
 }
@@ -20,3 +19,4 @@
   vec3 v3 = vec3(get_f32());
   vec4 v4 = vec4(get_f32());
 }
+
diff --git a/test/expressions/splat/call/i32.wgsl.expected.glsl b/test/expressions/splat/call/i32.wgsl.expected.glsl
index 0f8a5bc..03c2a0c 100644
--- a/test/expressions/splat/call/i32.wgsl.expected.glsl
+++ b/test/expressions/splat/call/i32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int get_i32() {
   return 1;
 }
@@ -20,3 +19,4 @@
   ivec3 v3 = ivec3(get_i32());
   ivec4 v4 = ivec4(get_i32());
 }
+
diff --git a/test/expressions/splat/call/u32.wgsl.expected.glsl b/test/expressions/splat/call/u32.wgsl.expected.glsl
index 78d1b6a..62f5fe2 100644
--- a/test/expressions/splat/call/u32.wgsl.expected.glsl
+++ b/test/expressions/splat/call/u32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 uint get_u32() {
   return 1u;
 }
@@ -20,3 +19,4 @@
   uvec3 v3 = uvec3(get_u32());
   uvec4 v4 = uvec4(get_u32());
 }
+
diff --git a/test/expressions/splat/expression/bool.wgsl.expected.glsl b/test/expressions/splat/expression/bool.wgsl.expected.glsl
index 63b1d0f..d9c81de 100644
--- a/test/expressions/splat/expression/bool.wgsl.expected.glsl
+++ b/test/expressions/splat/expression/bool.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   bool tint_tmp = true;
   if (!tint_tmp) {
@@ -28,3 +27,4 @@
   }
   bvec4 v4 = bvec4((tint_tmp_2));
 }
+
diff --git a/test/expressions/splat/expression/f32.wgsl.expected.glsl b/test/expressions/splat/expression/f32.wgsl.expected.glsl
index 572896e..3facaa3 100644
--- a/test/expressions/splat/expression/f32.wgsl.expected.glsl
+++ b/test/expressions/splat/expression/f32.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   vec2 v2 = vec2((1.0f + 2.0f));
   vec3 v3 = vec3((1.0f + 2.0f));
   vec4 v4 = vec4((1.0f + 2.0f));
 }
+
diff --git a/test/expressions/splat/expression/i32.wgsl.expected.glsl b/test/expressions/splat/expression/i32.wgsl.expected.glsl
index c577b3c..cf07c63 100644
--- a/test/expressions/splat/expression/i32.wgsl.expected.glsl
+++ b/test/expressions/splat/expression/i32.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   ivec2 v2 = ivec2((1 + 2));
   ivec3 v3 = ivec3((1 + 2));
   ivec4 v4 = ivec4((1 + 2));
 }
+
diff --git a/test/expressions/splat/expression/u32.wgsl.expected.glsl b/test/expressions/splat/expression/u32.wgsl.expected.glsl
index d1a6597..2b80e5f 100644
--- a/test/expressions/splat/expression/u32.wgsl.expected.glsl
+++ b/test/expressions/splat/expression/u32.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   uvec2 v2 = uvec2((1u + 2u));
   uvec3 v3 = uvec3((1u + 2u));
   uvec4 v4 = uvec4((1u + 2u));
 }
+
diff --git a/test/expressions/splat/immediate/bool.wgsl.expected.glsl b/test/expressions/splat/immediate/bool.wgsl.expected.glsl
index 01f1069..fb64865 100644
--- a/test/expressions/splat/immediate/bool.wgsl.expected.glsl
+++ b/test/expressions/splat/immediate/bool.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   bvec2 v2 = bvec2(true);
   bvec3 v3 = bvec3(true);
   bvec4 v4 = bvec4(true);
 }
+
diff --git a/test/expressions/splat/immediate/f32.wgsl.expected.glsl b/test/expressions/splat/immediate/f32.wgsl.expected.glsl
index 25d356c..e5bd309 100644
--- a/test/expressions/splat/immediate/f32.wgsl.expected.glsl
+++ b/test/expressions/splat/immediate/f32.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   vec2 v2 = vec2(1.0f);
   vec3 v3 = vec3(1.0f);
   vec4 v4 = vec4(1.0f);
 }
+
diff --git a/test/expressions/splat/immediate/i32.wgsl.expected.glsl b/test/expressions/splat/immediate/i32.wgsl.expected.glsl
index 9610fe1..a693e22 100644
--- a/test/expressions/splat/immediate/i32.wgsl.expected.glsl
+++ b/test/expressions/splat/immediate/i32.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   ivec2 v2 = ivec2(1);
   ivec3 v3 = ivec3(1);
   ivec4 v4 = ivec4(1);
 }
+
diff --git a/test/expressions/splat/immediate/u32.wgsl.expected.glsl b/test/expressions/splat/immediate/u32.wgsl.expected.glsl
index ecc9601..b0a88ab 100644
--- a/test/expressions/splat/immediate/u32.wgsl.expected.glsl
+++ b/test/expressions/splat/immediate/u32.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   uvec2 v2 = uvec2(1u);
   uvec3 v3 = uvec3(1u);
   uvec4 v4 = uvec4(1u);
 }
+
diff --git a/test/expressions/splat/var/bool.wgsl.expected.glsl b/test/expressions/splat/var/bool.wgsl.expected.glsl
index 643b38c..e0488a1 100644
--- a/test/expressions/splat/var/bool.wgsl.expected.glsl
+++ b/test/expressions/splat/var/bool.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   bool tint_tmp = true;
   if (!tint_tmp) {
@@ -21,3 +20,4 @@
   bvec3 v3 = bvec3(v);
   bvec4 v4 = bvec4(v);
 }
+
diff --git a/test/expressions/splat/var/f32.wgsl.expected.glsl b/test/expressions/splat/var/f32.wgsl.expected.glsl
index 82daaee..92b82c8 100644
--- a/test/expressions/splat/var/f32.wgsl.expected.glsl
+++ b/test/expressions/splat/var/f32.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   float v = (1.0f + 2.0f);
   vec2 v2 = vec2(v);
   vec3 v3 = vec3(v);
   vec4 v4 = vec4(v);
 }
+
diff --git a/test/expressions/splat/var/i32.wgsl.expected.glsl b/test/expressions/splat/var/i32.wgsl.expected.glsl
index 74374ba..e55c53b 100644
--- a/test/expressions/splat/var/i32.wgsl.expected.glsl
+++ b/test/expressions/splat/var/i32.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int v = (1 + 2);
   ivec2 v2 = ivec2(v);
   ivec3 v3 = ivec3(v);
   ivec4 v4 = ivec4(v);
 }
+
diff --git a/test/expressions/splat/var/u32.wgsl.expected.glsl b/test/expressions/splat/var/u32.wgsl.expected.glsl
index 2ec3ca5..5b0bdfd 100644
--- a/test/expressions/splat/var/u32.wgsl.expected.glsl
+++ b/test/expressions/splat/var/u32.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   uint v = (1u + 2u);
   uvec2 v2 = uvec2(v);
   uvec3 v3 = uvec3(v);
   uvec4 v4 = uvec4(v);
 }
+
diff --git a/test/expressions/splat/with_swizzle/f32.wgsl.expected.glsl b/test/expressions/splat/with_swizzle/f32.wgsl.expected.glsl
index b1bd888..6bfa65d 100644
--- a/test/expressions/splat/with_swizzle/f32.wgsl.expected.glsl
+++ b/test/expressions/splat/with_swizzle/f32.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   float a = vec2(1.0f).y;
   float b = vec3(1.0f).z;
   float c = vec4(1.0f).w;
 }
+
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.glsl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.glsl
index 42a3628..7d88333 100644
--- a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   vec3 v;
 };
@@ -142,3 +141,4 @@
   vec4 zzzy = U.v.zzzy;
   vec4 zzzz = U.v.zzzz;
 }
+
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.glsl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.glsl
index ceac2a9..2f1d6f3 100644
--- a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   ivec3 v;
 };
@@ -142,3 +141,4 @@
   ivec4 zzzy = U.v.zzzy;
   ivec4 zzzz = U.v.zzzz;
 }
+
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.glsl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.glsl
index 843a272..b26c59b 100644
--- a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   uvec3 v;
 };
@@ -142,3 +141,4 @@
   uvec4 zzzy = U.v.zzzy;
   uvec4 zzzz = U.v.zzzz;
 }
+
diff --git a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.glsl b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.glsl
index 8ca7c27..b4a8307 100644
--- a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.glsl
@@ -5,18 +5,16 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   vec3 v;
 };
 
 S P = S(vec3(0.0f, 0.0f, 0.0f));
-
 void f() {
   vec3 v = P.v;
   float x = P.v.x;
@@ -140,3 +138,4 @@
   vec4 zzzy = P.v.zzzy;
   vec4 zzzz = P.v.zzzz;
 }
+
diff --git a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.glsl b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.glsl
index 65df566..9418255 100644
--- a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.glsl
@@ -5,18 +5,16 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   ivec3 v;
 };
 
 S P = S(ivec3(0, 0, 0));
-
 void f() {
   ivec3 v = P.v;
   int x = P.v.x;
@@ -140,3 +138,4 @@
   ivec4 zzzy = P.v.zzzy;
   ivec4 zzzz = P.v.zzzz;
 }
+
diff --git a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.glsl b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.glsl
index 5616b2f..6b8eddc 100644
--- a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.glsl
@@ -5,18 +5,16 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   uvec3 v;
 };
 
 S P = S(uvec3(0u, 0u, 0u));
-
 void f() {
   uvec3 v = P.v;
   uint x = P.v.x;
@@ -140,3 +138,4 @@
   uvec4 zzzy = P.v.zzzy;
   uvec4 zzzz = P.v.zzzz;
 }
+
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.glsl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.glsl
index 7b0238a..4aa813a 100644
--- a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   vec3 v;
 };
@@ -18,10 +17,10 @@
 layout(binding = 0) buffer S_1 {
   vec3 v;
 } U;
-
 void f() {
   U.v = vec3(1.0f, 2.0f, 3.0f);
   U.v.x = 1.0f;
   U.v.y = 2.0f;
   U.v.z = 3.0f;
 }
+
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.glsl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.glsl
index 6a11c23..8eafeb8 100644
--- a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   ivec3 v;
 };
@@ -18,10 +17,10 @@
 layout(binding = 0) buffer S_1 {
   ivec3 v;
 } U;
-
 void f() {
   U.v = ivec3(1, 2, 3);
   U.v.x = 1;
   U.v.y = 2;
   U.v.z = 3;
 }
+
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.glsl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.glsl
index 7cbf102..741633c 100644
--- a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   uvec3 v;
 };
@@ -18,10 +17,10 @@
 layout(binding = 0) buffer S_1 {
   uvec3 v;
 } U;
-
 void f() {
   U.v = uvec3(1u, 2u, 3u);
   U.v.x = 1u;
   U.v.y = 2u;
   U.v.z = 3u;
 }
+
diff --git a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.glsl b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.glsl
index 5cf34f4..cee44ac 100644
--- a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.glsl
@@ -5,21 +5,20 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   vec3 v;
 };
 
 S P = S(vec3(0.0f, 0.0f, 0.0f));
-
 void f() {
   P.v = vec3(1.0f, 2.0f, 3.0f);
   P.v.x = 1.0f;
   P.v.y = 2.0f;
   P.v.z = 3.0f;
 }
+
diff --git a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.glsl b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.glsl
index 5780025..112ae41 100644
--- a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.glsl
@@ -5,21 +5,20 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   ivec3 v;
 };
 
 S P = S(ivec3(0, 0, 0));
-
 void f() {
   P.v = ivec3(1, 2, 3);
   P.v.x = 1;
   P.v.y = 2;
   P.v.z = 3;
 }
+
diff --git a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.glsl b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.glsl
index 053311a..436eff0 100644
--- a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.glsl
@@ -5,21 +5,20 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   uvec3 v;
 };
 
 S P = S(uvec3(0u, 0u, 0u));
-
 void f() {
   P.v = uvec3(1u, 2u, 3u);
   P.v.x = 1u;
   P.v.y = 2u;
   P.v.z = 3u;
 }
+
diff --git a/test/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.glsl
index ce52794..f2b52ac 100644
--- a/test/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2 m = mat2(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.glsl
index 1b41ea2..06c93e9 100644
--- a/test/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
diff --git a/test/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.glsl
index ce52794..f2b52ac 100644
--- a/test/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2 m = mat2(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.glsl
index 1b41ea2..06c93e9 100644
--- a/test/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2 m = mat2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f));
diff --git a/test/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.glsl
index 57f04b5..04b32b6 100644
--- a/test/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2x3 m = mat2x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
diff --git a/test/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.glsl
index 7c1c90b..c78cd8d 100644
--- a/test/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
diff --git a/test/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.glsl
index 57f04b5..04b32b6 100644
--- a/test/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2x3 m = mat2x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
diff --git a/test/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.glsl
index 7c1c90b..c78cd8d 100644
--- a/test/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2x3 m = mat2x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f));
diff --git a/test/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.glsl
index a487bc8..122dc44 100644
--- a/test/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2x4 m = mat2x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.glsl
index ceca1c8..801356a 100644
--- a/test/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.glsl
index a487bc8..122dc44 100644
--- a/test/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2x4 m = mat2x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.glsl
index ceca1c8..801356a 100644
--- a/test/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat2x4 m = mat2x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f));
diff --git a/test/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.glsl
index 1f1bbe1..55235ae 100644
--- a/test/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3x2 m = mat3x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
diff --git a/test/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.glsl
index 19bfb0b..6bedaa5 100644
--- a/test/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
diff --git a/test/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.glsl
index 1f1bbe1..55235ae 100644
--- a/test/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3x2 m = mat3x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
diff --git a/test/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.glsl
index 19bfb0b..6bedaa5 100644
--- a/test/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3x2 m = mat3x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f));
diff --git a/test/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.glsl
index 3657e1d..a712081 100644
--- a/test/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3 m = mat3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
diff --git a/test/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.glsl
index 1a551bb..cbf652b 100644
--- a/test/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
diff --git a/test/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.glsl
index 3657e1d..a712081 100644
--- a/test/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3 m = mat3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
diff --git a/test/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.glsl
index 1a551bb..cbf652b 100644
--- a/test/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3 m = mat3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f));
diff --git a/test/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.glsl
index ef53b66..7cb85e1 100644
--- a/test/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3x4 m = mat3x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.glsl
index 48eb1fa..84ba7f1 100644
--- a/test/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.glsl
index ef53b66..7cb85e1 100644
--- a/test/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3x4 m = mat3x4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.glsl
index 48eb1fa..84ba7f1 100644
--- a/test/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat3x4 m = mat3x4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f));
diff --git a/test/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.glsl
index 503820e..402014f 100644
--- a/test/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4x2 m = mat4x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.glsl
index 17038f0..bae5a65 100644
--- a/test/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
diff --git a/test/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.glsl
index 503820e..402014f 100644
--- a/test/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4x2 m = mat4x2(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
diff --git a/test/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.glsl
index 17038f0..bae5a65 100644
--- a/test/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4x2 m = mat4x2(vec2(0.0f, 1.0f), vec2(2.0f, 3.0f), vec2(4.0f, 5.0f), vec2(6.0f, 7.0f));
diff --git a/test/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.glsl
index 085b370..115a572 100644
--- a/test/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4x3 m = mat4x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.glsl
index 12a476b..f5559a8 100644
--- a/test/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
diff --git a/test/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.glsl
index 085b370..115a572 100644
--- a/test/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4x3 m = mat4x3(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f);
diff --git a/test/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.glsl
index 12a476b..f5559a8 100644
--- a/test/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4x3 m = mat4x3(vec3(0.0f, 1.0f, 2.0f), vec3(3.0f, 4.0f, 5.0f), vec3(6.0f, 7.0f, 8.0f), vec3(9.0f, 10.0f, 11.0f));
diff --git a/test/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.glsl
index 4d57ae1..5a35fce 100644
--- a/test/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4 m = mat4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f);
diff --git a/test/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.glsl
index 0d9377e..155df1e 100644
--- a/test/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.glsl
index 4d57ae1..5a35fce 100644
--- a/test/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4 m = mat4(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f);
diff --git a/test/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.glsl b/test/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.glsl
index 0d9377e..155df1e 100644
--- a/test/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const mat4 m = mat4(vec4(0.0f, 1.0f, 2.0f, 3.0f), vec4(4.0f, 5.0f, 6.0f, 7.0f), vec4(8.0f, 9.0f, 10.0f, 11.0f), vec4(12.0f, 13.0f, 14.0f, 15.0f));
diff --git a/test/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.glsl b/test/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.glsl
index b008ac7..5f0a93c 100644
--- a/test/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const bvec2 v = bvec2(false, true);
diff --git a/test/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.glsl b/test/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.glsl
index c507eb0..82f16fa 100644
--- a/test/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const vec2 v = vec2(0.0f, 1.0f);
diff --git a/test/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.glsl b/test/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.glsl
index eaf0db6..b96b5c7 100644
--- a/test/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const ivec2 v = ivec2(0, 1);
diff --git a/test/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.glsl b/test/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.glsl
index 9bfce2d..682a6c0 100644
--- a/test/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const uvec2 v = uvec2(0u, 1u);
diff --git a/test/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.glsl b/test/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.glsl
index b008ac7..5f0a93c 100644
--- a/test/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const bvec2 v = bvec2(false, true);
diff --git a/test/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.glsl b/test/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.glsl
index c507eb0..82f16fa 100644
--- a/test/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const vec2 v = vec2(0.0f, 1.0f);
diff --git a/test/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.glsl b/test/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.glsl
index eaf0db6..b96b5c7 100644
--- a/test/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const ivec2 v = ivec2(0, 1);
diff --git a/test/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.glsl b/test/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.glsl
index 9bfce2d..682a6c0 100644
--- a/test/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const uvec2 v = uvec2(0u, 1u);
diff --git a/test/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.glsl b/test/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.glsl
index e9a10c1..148321a 100644
--- a/test/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const bvec3 v = bvec3(false, true, false);
diff --git a/test/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.glsl b/test/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.glsl
index 315fe8c..4918115 100644
--- a/test/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const vec3 v = vec3(0.0f, 1.0f, 2.0f);
diff --git a/test/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.glsl b/test/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.glsl
index bbef576..7958518 100644
--- a/test/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const ivec3 v = ivec3(0, 1, 2);
diff --git a/test/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.glsl b/test/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.glsl
index 68d9ed4..aa7de93 100644
--- a/test/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const uvec3 v = uvec3(0u, 1u, 2u);
diff --git a/test/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.glsl b/test/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.glsl
index 47ddaeb..a93f549 100644
--- a/test/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const bvec4 v = bvec4(false, true, false, true);
diff --git a/test/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.glsl b/test/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.glsl
index d5bb0b5..35b45c1 100644
--- a/test/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const vec4 v = vec4(0.0f, 1.0f, 2.0f, 3.0f);
diff --git a/test/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.glsl b/test/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.glsl
index 76fbdd0..a572594 100644
--- a/test/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const ivec4 v = ivec4(0, 1, 2, 3);
diff --git a/test/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.glsl b/test/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.glsl
index 17a431e..aa3aca8 100644
--- a/test/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.glsl
+++ b/test/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.glsl
@@ -5,10 +5,9 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const uvec4 v = uvec4(0u, 1u, 2u, 3u);
diff --git a/test/expressions/unary/complement/complement.wgsl.expected.glsl b/test/expressions/unary/complement/complement.wgsl.expected.glsl
index 9edee88..5bec84b 100644
--- a/test/expressions/unary/complement/complement.wgsl.expected.glsl
+++ b/test/expressions/unary/complement/complement.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int i(int x) {
   return ~(x);
 }
@@ -26,3 +25,4 @@
 uvec4 vu(uvec4 x) {
   return ~(x);
 }
+
diff --git a/test/expressions/unary/negate/negate.wgsl.expected.glsl b/test/expressions/unary/negate/negate.wgsl.expected.glsl
index b2ace9d..d964058 100644
--- a/test/expressions/unary/negate/negate.wgsl.expected.glsl
+++ b/test/expressions/unary/negate/negate.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int i(int x) {
   return -(x);
 }
@@ -18,3 +17,4 @@
 ivec4 vi(ivec4 x) {
   return -(x);
 }
+
diff --git a/test/expressions/zero_init/array/bool.wgsl.expected.glsl b/test/expressions/zero_init/array/bool.wgsl.expected.glsl
index 57b69ce..2d7cab4 100644
--- a/test/expressions/zero_init/array/bool.wgsl.expected.glsl
+++ b/test/expressions/zero_init/array/bool.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   bool v[4] = bool[4](false, false, false, false);
 }
+
diff --git a/test/expressions/zero_init/array/f32.wgsl.expected.glsl b/test/expressions/zero_init/array/f32.wgsl.expected.glsl
index 622b0ba..7022024 100644
--- a/test/expressions/zero_init/array/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/array/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   float v[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/array/i32.wgsl.expected.glsl b/test/expressions/zero_init/array/i32.wgsl.expected.glsl
index 5d2d392..41cfbb6 100644
--- a/test/expressions/zero_init/array/i32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/array/i32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int v[4] = int[4](0, 0, 0, 0);
 }
+
diff --git a/test/expressions/zero_init/array/struct.wgsl.expected.glsl b/test/expressions/zero_init/array/struct.wgsl.expected.glsl
index 65d0490..89eed92 100644
--- a/test/expressions/zero_init/array/struct.wgsl.expected.glsl
+++ b/test/expressions/zero_init/array/struct.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   int i;
   uint u;
@@ -21,3 +20,4 @@
 void f() {
   S v[4] = S[4](S(0, 0u, 0.0f, false), S(0, 0u, 0.0f, false), S(0, 0u, 0.0f, false), S(0, 0u, 0.0f, false));
 }
+
diff --git a/test/expressions/zero_init/array/u32.wgsl.expected.glsl b/test/expressions/zero_init/array/u32.wgsl.expected.glsl
index 6a20609..f78daa6 100644
--- a/test/expressions/zero_init/array/u32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/array/u32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   uint v[4] = uint[4](0u, 0u, 0u, 0u);
 }
+
diff --git a/test/expressions/zero_init/mat2x2/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat2x2/f32.wgsl.expected.glsl
index d333532..517a2a7 100644
--- a/test/expressions/zero_init/mat2x2/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat2x2/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat2 v = mat2(0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/mat2x3/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat2x3/f32.wgsl.expected.glsl
index b836b1a..7fa2090 100644
--- a/test/expressions/zero_init/mat2x3/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat2x3/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat2x3 v = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/mat2x4/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat2x4/f32.wgsl.expected.glsl
index b575ffd..1abeed6 100644
--- a/test/expressions/zero_init/mat2x4/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat2x4/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat2x4 v = mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/mat3x2/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat3x2/f32.wgsl.expected.glsl
index a5ee363..40e1a7f 100644
--- a/test/expressions/zero_init/mat3x2/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat3x2/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat3x2 v = mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/mat3x3/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat3x3/f32.wgsl.expected.glsl
index e283116..cfd03bb 100644
--- a/test/expressions/zero_init/mat3x3/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat3x3/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat3 v = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/mat3x4/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat3x4/f32.wgsl.expected.glsl
index a9af0e9..979ea88 100644
--- a/test/expressions/zero_init/mat3x4/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat3x4/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat3x4 v = mat3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/mat4x2/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat4x2/f32.wgsl.expected.glsl
index 22cca40..2d5d77a 100644
--- a/test/expressions/zero_init/mat4x2/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat4x2/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat4x2 v = mat4x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/mat4x3/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat4x3/f32.wgsl.expected.glsl
index 2dc748e..7a71b37 100644
--- a/test/expressions/zero_init/mat4x3/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat4x3/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat4x3 v = mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/mat4x4/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat4x4/f32.wgsl.expected.glsl
index 70b877a..1f94079 100644
--- a/test/expressions/zero_init/mat4x4/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/mat4x4/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   mat4 v = mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/scalar/bool.wgsl.expected.glsl b/test/expressions/zero_init/scalar/bool.wgsl.expected.glsl
index e8ff5f5..a7f7c2d 100644
--- a/test/expressions/zero_init/scalar/bool.wgsl.expected.glsl
+++ b/test/expressions/zero_init/scalar/bool.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   bool v = false;
 }
+
diff --git a/test/expressions/zero_init/scalar/f32.wgsl.expected.glsl b/test/expressions/zero_init/scalar/f32.wgsl.expected.glsl
index 73fd41c..e0fa8af 100644
--- a/test/expressions/zero_init/scalar/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/scalar/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   float v = 0.0f;
 }
+
diff --git a/test/expressions/zero_init/scalar/i32.wgsl.expected.glsl b/test/expressions/zero_init/scalar/i32.wgsl.expected.glsl
index 37ec2a1..e2e115e 100644
--- a/test/expressions/zero_init/scalar/i32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/scalar/i32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int v = 0;
 }
+
diff --git a/test/expressions/zero_init/scalar/u32.wgsl.expected.glsl b/test/expressions/zero_init/scalar/u32.wgsl.expected.glsl
index 8b743c5..29a2c66 100644
--- a/test/expressions/zero_init/scalar/u32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/scalar/u32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   uint v = 0u;
 }
+
diff --git a/test/expressions/zero_init/struct/array.wgsl.expected.glsl b/test/expressions/zero_init/struct/array.wgsl.expected.glsl
index eb0a146..b51d09b 100644
--- a/test/expressions/zero_init/struct/array.wgsl.expected.glsl
+++ b/test/expressions/zero_init/struct/array.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   float a[4];
 };
@@ -18,3 +17,4 @@
 void f() {
   S v = S(float[4](0.0f, 0.0f, 0.0f, 0.0f));
 }
+
diff --git a/test/expressions/zero_init/struct/scalar.wgsl.expected.glsl b/test/expressions/zero_init/struct/scalar.wgsl.expected.glsl
index 1aaa3c6..7c2cf98 100644
--- a/test/expressions/zero_init/struct/scalar.wgsl.expected.glsl
+++ b/test/expressions/zero_init/struct/scalar.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   int i;
   uint u;
@@ -21,3 +20,4 @@
 void f() {
   S v = S(0, 0u, 0.0f, false);
 }
+
diff --git a/test/expressions/zero_init/vec2/bool.wgsl.expected.glsl b/test/expressions/zero_init/vec2/bool.wgsl.expected.glsl
index 564132f..73bbf51 100644
--- a/test/expressions/zero_init/vec2/bool.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec2/bool.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   bvec2 v = bvec2(false, false);
 }
+
diff --git a/test/expressions/zero_init/vec2/f32.wgsl.expected.glsl b/test/expressions/zero_init/vec2/f32.wgsl.expected.glsl
index 777431c..7e16662 100644
--- a/test/expressions/zero_init/vec2/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec2/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   vec2 v = vec2(0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/vec2/i32.wgsl.expected.glsl b/test/expressions/zero_init/vec2/i32.wgsl.expected.glsl
index 63ced7c..7d201b3 100644
--- a/test/expressions/zero_init/vec2/i32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec2/i32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   ivec2 v = ivec2(0, 0);
 }
+
diff --git a/test/expressions/zero_init/vec2/u32.wgsl.expected.glsl b/test/expressions/zero_init/vec2/u32.wgsl.expected.glsl
index 9952538..eb07fe3 100644
--- a/test/expressions/zero_init/vec2/u32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec2/u32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   uvec2 v = uvec2(0u, 0u);
 }
+
diff --git a/test/expressions/zero_init/vec3/bool.wgsl.expected.glsl b/test/expressions/zero_init/vec3/bool.wgsl.expected.glsl
index 8da4d24..fe62845 100644
--- a/test/expressions/zero_init/vec3/bool.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec3/bool.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   bvec3 v = bvec3(false, false, false);
 }
+
diff --git a/test/expressions/zero_init/vec3/f32.wgsl.expected.glsl b/test/expressions/zero_init/vec3/f32.wgsl.expected.glsl
index 9bf7e46..03af60b 100644
--- a/test/expressions/zero_init/vec3/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec3/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   vec3 v = vec3(0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/vec3/i32.wgsl.expected.glsl b/test/expressions/zero_init/vec3/i32.wgsl.expected.glsl
index 85ff26b..c99c12d 100644
--- a/test/expressions/zero_init/vec3/i32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec3/i32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   ivec3 v = ivec3(0, 0, 0);
 }
+
diff --git a/test/expressions/zero_init/vec3/u32.wgsl.expected.glsl b/test/expressions/zero_init/vec3/u32.wgsl.expected.glsl
index 9618466..9ea7708 100644
--- a/test/expressions/zero_init/vec3/u32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec3/u32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   uvec3 v = uvec3(0u, 0u, 0u);
 }
+
diff --git a/test/expressions/zero_init/vec4/bool.wgsl.expected.glsl b/test/expressions/zero_init/vec4/bool.wgsl.expected.glsl
index 486e93f..31e837d 100644
--- a/test/expressions/zero_init/vec4/bool.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec4/bool.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   bvec4 v = bvec4(false, false, false, false);
 }
+
diff --git a/test/expressions/zero_init/vec4/f32.wgsl.expected.glsl b/test/expressions/zero_init/vec4/f32.wgsl.expected.glsl
index a80e2f4..049ff23 100644
--- a/test/expressions/zero_init/vec4/f32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec4/f32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 }
+
diff --git a/test/expressions/zero_init/vec4/i32.wgsl.expected.glsl b/test/expressions/zero_init/vec4/i32.wgsl.expected.glsl
index de96120..354ec54 100644
--- a/test/expressions/zero_init/vec4/i32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec4/i32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   ivec4 v = ivec4(0, 0, 0, 0);
 }
+
diff --git a/test/expressions/zero_init/vec4/u32.wgsl.expected.glsl b/test/expressions/zero_init/vec4/u32.wgsl.expected.glsl
index f83dbc4..d2e1db5 100644
--- a/test/expressions/zero_init/vec4/u32.wgsl.expected.glsl
+++ b/test/expressions/zero_init/vec4/u32.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   uvec4 v = uvec4(0u, 0u, 0u, 0u);
 }
+
diff --git a/test/identifiers/underscore/double/alias.wgsl.expected.glsl b/test/identifiers/underscore/double/alias.wgsl.expected.glsl
index 53fcf10..e4a9a6b 100644
--- a/test/identifiers/underscore/double/alias.wgsl.expected.glsl
+++ b/test/identifiers/underscore/double/alias.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int c = 0;
   int d = 0;
 }
+
diff --git a/test/identifiers/underscore/double/fn.wgsl.expected.glsl b/test/identifiers/underscore/double/fn.wgsl.expected.glsl
index 7b2cd08..7db0e21 100644
--- a/test/identifiers/underscore/double/fn.wgsl.expected.glsl
+++ b/test/identifiers/underscore/double/fn.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void a() {
 }
 
@@ -24,3 +23,4 @@
 void b__() {
   a__();
 }
+
diff --git a/test/identifiers/underscore/double/let.wgsl.expected.glsl b/test/identifiers/underscore/double/let.wgsl.expected.glsl
index 8930f1d..78fedf7 100644
--- a/test/identifiers/underscore/double/let.wgsl.expected.glsl
+++ b/test/identifiers/underscore/double/let.wgsl.expected.glsl
@@ -5,16 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const int a = 1;
 const int a__ = 2;
-
 void f() {
   int b = a;
   int b__ = a__;
 }
+
diff --git a/test/identifiers/underscore/double/parameter.wgsl.expected.glsl b/test/identifiers/underscore/double/parameter.wgsl.expected.glsl
index 3fb63a8..e1b6103 100644
--- a/test/identifiers/underscore/double/parameter.wgsl.expected.glsl
+++ b/test/identifiers/underscore/double/parameter.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f(int a__) {
   int b = a__;
 }
+
diff --git a/test/identifiers/underscore/double/struct.wgsl.expected.glsl b/test/identifiers/underscore/double/struct.wgsl.expected.glsl
index 42b0567..55043eb 100644
--- a/test/identifiers/underscore/double/struct.wgsl.expected.glsl
+++ b/test/identifiers/underscore/double/struct.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct a {
   int b;
 };
+
 struct a__ {
   int b__;
 };
@@ -22,3 +22,4 @@
   a__ c = a__(0);
   int d = c.b__;
 }
+
diff --git a/test/identifiers/underscore/double/var.wgsl.expected.glsl b/test/identifiers/underscore/double/var.wgsl.expected.glsl
index 5ce98aa..0a28a9e 100644
--- a/test/identifiers/underscore/double/var.wgsl.expected.glsl
+++ b/test/identifiers/underscore/double/var.wgsl.expected.glsl
@@ -5,16 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int a = 1;
 int a__ = 2;
-
 void f() {
   int b = a;
   int b__ = a__;
 }
+
diff --git a/test/identifiers/underscore/prefix/lower/alias.wgsl.expected.glsl b/test/identifiers/underscore/prefix/lower/alias.wgsl.expected.glsl
index 53fcf10..e4a9a6b 100644
--- a/test/identifiers/underscore/prefix/lower/alias.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/lower/alias.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int c = 0;
   int d = 0;
 }
+
diff --git a/test/identifiers/underscore/prefix/lower/fn.wgsl.expected.glsl b/test/identifiers/underscore/prefix/lower/fn.wgsl.expected.glsl
index 1160ea6..17482fd 100644
--- a/test/identifiers/underscore/prefix/lower/fn.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/lower/fn.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void a() {
 }
 
@@ -24,3 +23,4 @@
 void _b() {
   _a();
 }
+
diff --git a/test/identifiers/underscore/prefix/lower/let.wgsl.expected.glsl b/test/identifiers/underscore/prefix/lower/let.wgsl.expected.glsl
index 8f043f1..f4f4bea 100644
--- a/test/identifiers/underscore/prefix/lower/let.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/lower/let.wgsl.expected.glsl
@@ -5,16 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const int a = 1;
 const int _a = 2;
-
 void f() {
   int b = a;
   int _b = _a;
 }
+
diff --git a/test/identifiers/underscore/prefix/lower/parameter.wgsl.expected.glsl b/test/identifiers/underscore/prefix/lower/parameter.wgsl.expected.glsl
index 670f017..e87ca0b 100644
--- a/test/identifiers/underscore/prefix/lower/parameter.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/lower/parameter.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f(int _a) {
   int b = _a;
 }
+
diff --git a/test/identifiers/underscore/prefix/lower/struct.wgsl.expected.glsl b/test/identifiers/underscore/prefix/lower/struct.wgsl.expected.glsl
index ca7b774..1ff7bdc 100644
--- a/test/identifiers/underscore/prefix/lower/struct.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/lower/struct.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct a {
   int b;
 };
+
 struct _a {
   int _b;
 };
@@ -22,3 +22,4 @@
   _a c = _a(0);
   int d = c._b;
 }
+
diff --git a/test/identifiers/underscore/prefix/lower/var.wgsl.expected.glsl b/test/identifiers/underscore/prefix/lower/var.wgsl.expected.glsl
index 677a81e..db69473 100644
--- a/test/identifiers/underscore/prefix/lower/var.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/lower/var.wgsl.expected.glsl
@@ -5,16 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int a = 1;
 int _a = 2;
-
 void f() {
   int b = a;
   int _b = _a;
 }
+
diff --git a/test/identifiers/underscore/prefix/upper/alias.wgsl.expected.glsl b/test/identifiers/underscore/prefix/upper/alias.wgsl.expected.glsl
index 53fcf10..e4a9a6b 100644
--- a/test/identifiers/underscore/prefix/upper/alias.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/upper/alias.wgsl.expected.glsl
@@ -5,13 +5,13 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int c = 0;
   int d = 0;
 }
+
diff --git a/test/identifiers/underscore/prefix/upper/fn.wgsl.expected.glsl b/test/identifiers/underscore/prefix/upper/fn.wgsl.expected.glsl
index aad927e..3088dd6 100644
--- a/test/identifiers/underscore/prefix/upper/fn.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/upper/fn.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void A() {
 }
 
@@ -24,3 +23,4 @@
 void _B() {
   _A();
 }
+
diff --git a/test/identifiers/underscore/prefix/upper/let.wgsl.expected.glsl b/test/identifiers/underscore/prefix/upper/let.wgsl.expected.glsl
index 6d5f7d2..de02479 100644
--- a/test/identifiers/underscore/prefix/upper/let.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/upper/let.wgsl.expected.glsl
@@ -5,16 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 const int A = 1;
 const int _A = 2;
-
 void f() {
   int B = A;
   int _B = _A;
 }
+
diff --git a/test/identifiers/underscore/prefix/upper/parameter.wgsl.expected.glsl b/test/identifiers/underscore/prefix/upper/parameter.wgsl.expected.glsl
index 6bed49e..7b37d8f 100644
--- a/test/identifiers/underscore/prefix/upper/parameter.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/upper/parameter.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f(int _A) {
   int B = _A;
 }
+
diff --git a/test/identifiers/underscore/prefix/upper/struct.wgsl.expected.glsl b/test/identifiers/underscore/prefix/upper/struct.wgsl.expected.glsl
index 05d196e..8334244 100644
--- a/test/identifiers/underscore/prefix/upper/struct.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/upper/struct.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct A {
   int B;
 };
+
 struct _A {
   int _B;
 };
@@ -22,3 +22,4 @@
   _A c = _A(0);
   int d = c._B;
 }
+
diff --git a/test/identifiers/underscore/prefix/upper/var.wgsl.expected.glsl b/test/identifiers/underscore/prefix/upper/var.wgsl.expected.glsl
index 96d1732..8285b2a 100644
--- a/test/identifiers/underscore/prefix/upper/var.wgsl.expected.glsl
+++ b/test/identifiers/underscore/prefix/upper/var.wgsl.expected.glsl
@@ -5,16 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int A = 1;
 int _A = 2;
-
 void f() {
   int B = A;
   int _B = _A;
 }
+
diff --git a/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.glsl b/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.glsl
index 1768180..b3f0b74 100644
--- a/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer S_1 {
   int a[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -16,14 +14,14 @@
   uint l1 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: 'GetDimensions' : no such field in structure 
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: 'GetDimensions' : no such field in structure 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl b/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl
index 068c081..36ad7bd 100644
--- a/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer G_block_1 {
   int inner[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -16,14 +14,14 @@
   uint l1 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: '.' : cannot apply to an array: GetDimensions
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/arrayLength/deprecated.wgsl.expected.glsl b/test/intrinsics/arrayLength/deprecated.wgsl.expected.glsl
index fa23904..86ee59c 100644
--- a/test/intrinsics/arrayLength/deprecated.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/deprecated.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer S_1 {
   int a[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -17,14 +15,14 @@
   uint l2 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: 'GetDimensions' : no such field in structure 
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: 'GetDimensions' : no such field in structure 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/arrayLength/simple.wgsl.expected.glsl b/test/intrinsics/arrayLength/simple.wgsl.expected.glsl
index 1768180..b3f0b74 100644
--- a/test/intrinsics/arrayLength/simple.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/simple.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer S_1 {
   int a[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -16,14 +14,14 @@
   uint l1 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: 'GetDimensions' : no such field in structure 
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: 'GetDimensions' : no such field in structure 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.glsl b/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.glsl
index 068c081..36ad7bd 100644
--- a/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer G_block_1 {
   int inner[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -16,14 +14,14 @@
   uint l1 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: '.' : cannot apply to an array: GetDimensions
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/arrayLength/via_let.wgsl.expected.glsl b/test/intrinsics/arrayLength/via_let.wgsl.expected.glsl
index 1768180..b3f0b74 100644
--- a/test/intrinsics/arrayLength/via_let.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/via_let.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer S_1 {
   int a[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -16,14 +14,14 @@
   uint l1 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: 'GetDimensions' : no such field in structure 
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: 'GetDimensions' : no such field in structure 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.glsl b/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.glsl
index 1768180..b3f0b74 100644
--- a/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer S_1 {
   int a[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -16,14 +14,14 @@
   uint l1 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: 'GetDimensions' : no such field in structure 
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: 'GetDimensions' : no such field in structure 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl b/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl
index 068c081..36ad7bd 100644
--- a/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer G_block_1 {
   int inner[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -16,14 +14,14 @@
   uint l1 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: '.' : cannot apply to an array: GetDimensions
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.glsl b/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.glsl
index 068c081..36ad7bd 100644
--- a/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.glsl
+++ b/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer G_block_1 {
   int inner[];
 } G;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   uint tint_symbol_2 = 0u;
@@ -16,14 +14,14 @@
   uint l1 = tint_symbol_3;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: '.' : cannot apply to an array: GetDimensions
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:10: '.' : cannot apply to an array: GetDimensions
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/degrees.spvasm.expected.glsl b/test/intrinsics/degrees.spvasm.expected.glsl
index 2069052..7512959 100644
--- a/test/intrinsics/degrees.spvasm.expected.glsl
+++ b/test/intrinsics/degrees.spvasm.expected.glsl
@@ -19,8 +19,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/frexp.wgsl.expected.glsl b/test/intrinsics/frexp.wgsl.expected.glsl
index a0d5cde..cf882c2 100644
--- a/test/intrinsics/frexp.wgsl.expected.glsl
+++ b/test/intrinsics/frexp.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float sig;
   int exp;
 };
+
 frexp_result tint_frexp(float param_0) {
   float exp;
   float sig = frexp(param_0, exp);
@@ -22,14 +23,14 @@
   float sig = res.sig;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:10: 'frexp' : no matching overloaded function found 
-ERROR: 0:10: '' : compilation terminated 
+ERROR: 0:11: 'frexp' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/abs/002533.wgsl.expected.glsl b/test/intrinsics/gen/abs/002533.wgsl.expected.glsl
index a9d9604..7506230 100644
--- a/test/intrinsics/gen/abs/002533.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/002533.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_002533();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_002533();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/005174.wgsl.expected.glsl b/test/intrinsics/gen/abs/005174.wgsl.expected.glsl
index 71f22f8..937d4f0 100644
--- a/test/intrinsics/gen/abs/005174.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/005174.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_005174();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_005174();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl b/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl
index 1f4097a..d3ffa08 100644
--- a/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
@@ -54,11 +55,11 @@
   abs_1ce782();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
@@ -83,11 +84,11 @@
   abs_1ce782();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
diff --git a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl
index cabdd21..5fdaf61 100644
--- a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_1e9d53();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_1e9d53();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl b/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl
index 219081c..fe400bb 100644
--- a/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
@@ -54,11 +55,11 @@
   abs_467cd1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
@@ -83,11 +84,11 @@
   abs_467cd1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl b/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl
index d13d663..8e23912 100644
--- a/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_4ad288();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_4ad288();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl
index 87e4f31..3c90e55 100644
--- a/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_5ad50a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_5ad50a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl b/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl
index cba64f1..149dfb5 100644
--- a/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
@@ -54,11 +55,11 @@
   abs_7326de();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of uint'
@@ -83,11 +84,11 @@
   abs_7326de();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
diff --git a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl
index 4040568..61a6d18 100644
--- a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
@@ -54,11 +55,11 @@
   abs_7f28e6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of uint'
@@ -83,11 +84,11 @@
   abs_7f28e6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
diff --git a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl
index 5937ef3..668bba9 100644
--- a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_7faa9e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_7faa9e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl
index 0d7c01a..c396532 100644
--- a/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_9c80a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_9c80a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl b/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl
index 09f3cae..f5d5e91 100644
--- a/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_b96037();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_b96037();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/acos/489247.wgsl.expected.glsl b/test/intrinsics/gen/acos/489247.wgsl.expected.glsl
index a70ce0b..9b74954 100644
--- a/test/intrinsics/gen/acos/489247.wgsl.expected.glsl
+++ b/test/intrinsics/gen/acos/489247.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   acos_489247();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   acos_489247();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl
index 6022d54..e6d69bd 100644
--- a/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   acos_8e2acf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   acos_8e2acf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl b/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl
index 80ccb9b..20c61a6 100644
--- a/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   acos_a610c4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   acos_a610c4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl b/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl
index 1c696f0..5d54b67 100644
--- a/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl
+++ b/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   acos_dfc915();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   acos_dfc915();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl b/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl
index 5873a4a..293dff0 100644
--- a/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'all' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -54,11 +55,11 @@
   all_353d6a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'all' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -83,11 +84,11 @@
   all_353d6a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'all' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
diff --git a/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl b/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl
index 9da0a90..0e91cf6 100644
--- a/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   all_986c7b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   all_986c7b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl b/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl
index f8de1d2..111a40a 100644
--- a/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   all_bd2dba();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   all_bd2dba();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/all/f46790.wgsl.expected.glsl b/test/intrinsics/gen/all/f46790.wgsl.expected.glsl
index d3bc0fe..ca1909a 100644
--- a/test/intrinsics/gen/all/f46790.wgsl.expected.glsl
+++ b/test/intrinsics/gen/all/f46790.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   all_f46790();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   all_f46790();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/any/083428.wgsl.expected.glsl b/test/intrinsics/gen/any/083428.wgsl.expected.glsl
index 168f1d3..0e3b9ab 100644
--- a/test/intrinsics/gen/any/083428.wgsl.expected.glsl
+++ b/test/intrinsics/gen/any/083428.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   any_083428();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   any_083428();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl b/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl
index 22a2676..e2b9708 100644
--- a/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl
+++ b/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   any_0e3e58();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   any_0e3e58();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl b/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl
index eecacd1..fcfa374 100644
--- a/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'any' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -54,11 +55,11 @@
   any_2ab91a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'any' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -83,11 +84,11 @@
   any_2ab91a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'any' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
diff --git a/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl b/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl
index c07e8ae..a729c5c 100644
--- a/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   any_e755c1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   any_e755c1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl
index 79b0117..6b1d6e3 100644
--- a/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   int arg_0[];
 } sb_ro;
-
 void arrayLength_1588cd() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   int arg_0[];
 } sb_ro;
-
 void arrayLength_1588cd() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_1588cd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   int arg_0[];
 } sb_ro;
-
 void arrayLength_1588cd() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_1588cd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+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/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl
index 39316b0..452afab 100644
--- a/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0[];
 } sb_rw;
-
 void arrayLength_61b1c7() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0[];
 } sb_rw;
-
 void arrayLength_61b1c7() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_61b1c7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0[];
 } sb_rw;
-
 void arrayLength_61b1c7() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_61b1c7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+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/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl
index 98c7ec5..8c76c14 100644
--- a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   float arg_0[];
 } sb_ro;
-
 void arrayLength_a0f5ca() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   float arg_0[];
 } sb_ro;
-
 void arrayLength_a0f5ca() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_a0f5ca();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   float arg_0[];
 } sb_ro;
-
 void arrayLength_a0f5ca() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_a0f5ca();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+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/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl
index 5b23df4..fa58e97 100644
--- a/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   float arg_0[];
 } sb_rw;
-
 void arrayLength_cdd123() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   float arg_0[];
 } sb_rw;
-
 void arrayLength_cdd123() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_cdd123();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   float arg_0[];
 } sb_rw;
-
 void arrayLength_cdd123() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_cdd123();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+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/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl
index a482ec8..5ac52d7 100644
--- a/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   uint arg_0[];
 } sb_ro;
-
 void arrayLength_cfca0a() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   uint arg_0[];
 } sb_ro;
-
 void arrayLength_cfca0a() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_cfca0a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   uint arg_0[];
 } sb_ro;
-
 void arrayLength_cfca0a() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_cfca0a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+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/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl
index 54ac47a..006963f 100644
--- a/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0[];
 } sb_rw;
-
 void arrayLength_eb510f() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0[];
 } sb_rw;
-
 void arrayLength_eb510f() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_eb510f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0[];
 } sb_rw;
-
 void arrayLength_eb510f() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_eb510f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+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/intrinsics/gen/asin/064953.wgsl.expected.glsl b/test/intrinsics/gen/asin/064953.wgsl.expected.glsl
index 77c5c16..6f9fb5f 100644
--- a/test/intrinsics/gen/asin/064953.wgsl.expected.glsl
+++ b/test/intrinsics/gen/asin/064953.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   asin_064953();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   asin_064953();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl
index eb9d035..3cb463d 100644
--- a/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl
+++ b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   asin_7b6a44();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   asin_7b6a44();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl
index 74f5c46..26ae968 100644
--- a/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   asin_8cd9c9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   asin_8cd9c9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl b/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl
index 3b4521e..46b4799 100644
--- a/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl
+++ b/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   asin_c0c272();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   asin_c0c272();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl b/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl
index 6c7de9b..db1ced4 100644
--- a/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan_02979a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan_02979a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl b/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl
index dfd43f2..1f9b3f4 100644
--- a/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan_331e6d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan_331e6d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl b/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl
index 4adb5b2..68eeb28 100644
--- a/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan_a8b696();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan_a8b696();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl
index 7f0420a..80f0885 100644
--- a/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan_ad96e4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan_ad96e4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl
index 26eca58..c81d3b3 100644
--- a/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan2_57fb13();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan2_57fb13();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl b/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl
index ab55de0..12b8b57 100644
--- a/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan2_96057c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan2_96057c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl
index 49d65c5..ca014e6 100644
--- a/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan2_a70d0d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan2_a70d0d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl
index e0bcc8a..58481e6 100644
--- a/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan2_ae713e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan2_ae713e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
index 55ffa25..715d36d 100644
--- a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicAdd_794055() {
   int res = atomicAdd(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
index a25340d..a718035 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicAdd_8a199a() {
   uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicAdd_8a199a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicAdd_8a199a() {
   uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicAdd_8a199a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
index 17d866b..6f142ad 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicAdd_d32fe4() {
   int res = atomicAdd(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicAdd_d32fe4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicAdd_d32fe4() {
   int res = atomicAdd(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicAdd_d32fe4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
index 9a3d9a1..77ff3cc 100644
--- a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicAdd_d5db1d() {
   uint res = atomicAdd(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
index 1bcff31..cb8b590 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicAnd_152966() {
   int res = atomicAnd(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicAnd_152966();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicAnd_152966() {
   int res = atomicAnd(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicAnd_152966();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
index 8ab60de..893ba81 100644
--- a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicAnd_34edd3() {
   uint res = atomicAnd(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
index af28d89..29566d1 100644
--- a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicAnd_45a819() {
   int res = atomicAnd(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
index 7a483e0..9260151 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicAnd_85a8d9() {
   uint res = atomicAnd(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicAnd_85a8d9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicAnd_85a8d9() {
   uint res = atomicAnd(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicAnd_85a8d9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
index 00386ca..3d91ea5 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicCompareExchangeWeak_12871c() {
   ivec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1, 1);
 }
@@ -25,11 +24,11 @@
   atomicCompareExchangeWeak_12871c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,7 +47,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicCompareExchangeWeak_12871c() {
   ivec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1, 1);
 }
@@ -58,8 +56,8 @@
   atomicCompareExchangeWeak_12871c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
index 7b5dda5..dd307ae 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicCompareExchangeWeak_6673da() {
   uvec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1u, 1u);
 }
@@ -25,11 +24,11 @@
   atomicCompareExchangeWeak_6673da();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,7 +47,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicCompareExchangeWeak_6673da() {
   uvec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1u, 1u);
 }
@@ -58,8 +56,8 @@
   atomicCompareExchangeWeak_6673da();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
index aaaf177..fc9c6e6 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
@@ -10,7 +10,6 @@
 
 
 shared int arg_0;
-
 void atomicCompareExchangeWeak_89ea3b() {
   ivec2 res = tint_atomicCompareExchangeWeak(arg_0, 1, 1);
 }
@@ -32,10 +31,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
index 03b6857..01162d8 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
@@ -10,7 +10,6 @@
 
 
 shared uint arg_0;
-
 void atomicCompareExchangeWeak_b2ab2c() {
   uvec2 res = tint_atomicCompareExchangeWeak(arg_0, 1u, 1u);
 }
@@ -32,10 +31,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
index c97fd12..ceb8f2c 100644
--- a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicExchange_0a5dca() {
   uint res = atomicExchange(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
index 93c7eb6..c8aeb19 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicExchange_d59712() {
   uint res = atomicExchange(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicExchange_d59712();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicExchange_d59712() {
   uint res = atomicExchange(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicExchange_d59712();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
index 52ae007..02874fa 100644
--- a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicExchange_e114ba() {
   int res = atomicExchange(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
index 1491b52..89206eb 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicExchange_f2e22f() {
   int res = atomicExchange(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicExchange_f2e22f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicExchange_f2e22f() {
   int res = atomicExchange(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicExchange_f2e22f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
index 649a8e5..e8ec1aa 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicLoad_0806ad() {
   int res = atomicOr(sb_rw.arg_0, 0);
 }
@@ -17,11 +16,11 @@
   atomicLoad_0806ad();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicLoad_0806ad() {
   int res = atomicOr(sb_rw.arg_0, 0);
 }
@@ -42,8 +40,8 @@
   atomicLoad_0806ad();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
index de8c6c6..ec67ef6 100644
--- a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicLoad_361bf1() {
   uint res = atomicOr(arg_0, 0u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
index 3f9ee82..f4c5fdc 100644
--- a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicLoad_afcc03() {
   int res = atomicOr(arg_0, 0);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
index 71fe30f..315bfe3 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicLoad_fe6cc3() {
   uint res = atomicOr(sb_rw.arg_0, 0u);
 }
@@ -17,11 +16,11 @@
   atomicLoad_fe6cc3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicLoad_fe6cc3() {
   uint res = atomicOr(sb_rw.arg_0, 0u);
 }
@@ -42,8 +40,8 @@
   atomicLoad_fe6cc3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
index e638604..2a92b96 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicMax_51b9be() {
   uint res = atomicMax(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicMax_51b9be();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicMax_51b9be() {
   uint res = atomicMax(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicMax_51b9be();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
index f51238d..953c280 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicMax_92aa72() {
   int res = atomicMax(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicMax_92aa72();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicMax_92aa72() {
   int res = atomicMax(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicMax_92aa72();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
index 8a4aadd..bda8cf5 100644
--- a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicMax_a89cc3() {
   int res = atomicMax(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
index 085ee2e..7ff699c 100644
--- a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicMax_beccfc() {
   uint res = atomicMax(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
index a3e2d3b..924c3e5 100644
--- a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicMin_278235() {
   int res = atomicMin(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
index 10e70a6..f872cf3 100644
--- a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicMin_69d383() {
   uint res = atomicMin(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
index edfeb6e..3ef1cad 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicMin_8e38dc() {
   int res = atomicMin(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicMin_8e38dc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicMin_8e38dc() {
   int res = atomicMin(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicMin_8e38dc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
index 247ed1e..007cfa1 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicMin_c67a74() {
   uint res = atomicMin(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicMin_c67a74();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicMin_c67a74() {
   uint res = atomicMin(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicMin_c67a74();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
index 9fd6dfb..2da57b8 100644
--- a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicOr_5e3d61() {
   uint res = atomicOr(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
index 905360c..e0066d7 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicOr_5e95d4() {
   uint res = atomicOr(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicOr_5e95d4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicOr_5e95d4() {
   uint res = atomicOr(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicOr_5e95d4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
index 5da969c..6e2be73 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicOr_8d96a0() {
   int res = atomicOr(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicOr_8d96a0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicOr_8d96a0() {
   int res = atomicOr(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicOr_8d96a0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
index 1bd396d..c2ab6ca 100644
--- a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicOr_d09248() {
   int res = atomicOr(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
index 1539167..4810df6 100644
--- a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicStore_726882() {
   atomicExchange(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
index d338acc..5c11b81 100644
--- a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicStore_8bea94() {
   atomicExchange(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
index 7c31721..1e0429d 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicStore_cdc29e() {
   atomicExchange(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicStore_cdc29e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicStore_cdc29e() {
   atomicExchange(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicStore_cdc29e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
index c2ab929..ac7fa98 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicStore_d1e9a6() {
   atomicExchange(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicStore_d1e9a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicStore_d1e9a6() {
   atomicExchange(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicStore_d1e9a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
index 3294fbd..bc8a2ee 100644
--- a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicSub_051100() {
   int res = atomicAdd(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicSub_051100();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicSub_051100() {
   int res = atomicAdd(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicSub_051100();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
index b0bddda..f17a4f3 100644
--- a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicSub_0d26c2() {
   uint res = atomicAdd(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
index 537de87..118bced 100644
--- a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicSub_15bfc9() {
   uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicSub_15bfc9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicSub_15bfc9() {
   uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicSub_15bfc9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
index 9c70e99..c8331da 100644
--- a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicSub_77883a() {
   int res = atomicAdd(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
index e32e6b0..931dcf1 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicXor_54510e() {
   uint res = atomicXor(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicXor_54510e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicXor_54510e() {
   uint res = atomicXor(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicXor_54510e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
index 9917356..464b9e7 100644
--- a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicXor_75dc95() {
   int res = atomicXor(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
index ce68be5..f91c27b 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicXor_c1b78c() {
   int res = atomicXor(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicXor_c1b78c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicXor_c1b78c() {
   int res = atomicXor(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicXor_c1b78c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
index bcc49d9..209ec0b 100644
--- a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicXor_c8e6be() {
   uint res = atomicXor(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl b/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl
index 956a395..7fb4dc5 100644
--- a/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ceil_34064b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ceil_34064b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl b/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl
index 31d306d..bf97f96 100644
--- a/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ceil_678655();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ceil_678655();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl b/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl
index d917e31..52ced7b 100644
--- a/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ceil_96f597();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ceil_96f597();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl
index 79d3a3c..1a3cac6 100644
--- a/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ceil_b74c16();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ceil_b74c16();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl
index 8ed088e..103572c 100644
--- a/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_0acf8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_0acf8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl
index 2efad4d..a2abc65 100644
--- a/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_1a32e3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_1a32e3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl
index a443a31..73faf97 100644
--- a/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_2bd567();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_2bd567();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl
index 3546e04..ed22707 100644
--- a/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_2bde41();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_2bde41();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl
index 389d818..9bdda9e 100644
--- a/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_548fc7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_548fc7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl
index dc61fb7..42ae5f6 100644
--- a/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_5f0819();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_5f0819();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl
index 5f2a0ec..37b11b6 100644
--- a/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_6c1749();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_6c1749();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl
index 614bb6a..2b225ed 100644
--- a/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_7706d7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_7706d7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl b/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl
index 6b6fa98..7f078f6 100644
--- a/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_867397();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_867397();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl
index e644d9a..dc2ca1e 100644
--- a/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_a2de25();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_a2de25();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl
index 393f284..a9e6199 100644
--- a/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_b07c65();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_b07c65();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl
index 22e0ec0..8cde9f3 100644
--- a/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_bd43ce();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_bd43ce();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl b/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl
index d97825f..68bc55b 100644
--- a/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cos_16dc15();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cos_16dc15();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl b/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl
index f80a3a3..775dbf3 100644
--- a/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cos_29d66d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cos_29d66d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl b/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl
index 0718e00..49b902e 100644
--- a/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cos_c3b486();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cos_c3b486();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl
index acd2840..bd2d098 100644
--- a/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cos_c5c28e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cos_c5c28e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl b/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl
index 3fe5c6a..7771255 100644
--- a/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cosh_377652();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cosh_377652();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl b/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl
index 8feca51..475471e 100644
--- a/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cosh_c13756();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cosh_c13756();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl
index afbc396..76744dd 100644
--- a/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cosh_da92dd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cosh_da92dd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl
index 25ccf66..7e6890e 100644
--- a/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cosh_e0c1de();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cosh_e0c1de();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl
index 11b663d..dec129c 100644
--- a/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
@@ -54,11 +55,11 @@
   countOneBits_0d0e46();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
@@ -83,11 +84,11 @@
   countOneBits_0d0e46();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
diff --git a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl
index 053ca57..15fdfff 100644
--- a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
@@ -54,11 +55,11 @@
   countOneBits_0f7980();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of int'
@@ -83,11 +84,11 @@
   countOneBits_0f7980();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
diff --git a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl
index f910a7f..7baeb62 100644
--- a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
@@ -54,11 +55,11 @@
   countOneBits_65d2ae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
@@ -83,11 +84,11 @@
   countOneBits_65d2ae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
diff --git a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl
index 1387754..c876810 100644
--- a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
@@ -54,11 +55,11 @@
   countOneBits_690cfc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of uint'
@@ -83,11 +84,11 @@
   countOneBits_690cfc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
diff --git a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl
index 4cc6288..08a12e8 100644
--- a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
@@ -54,11 +55,11 @@
   countOneBits_94fd81();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of uint'
@@ -83,11 +84,11 @@
   countOneBits_94fd81();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
diff --git a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl
index 55d89f8..851ae33 100644
--- a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
@@ -54,11 +55,11 @@
   countOneBits_ae44f9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
@@ -83,11 +84,11 @@
   countOneBits_ae44f9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl
index e907fc3..80fe35e 100644
--- a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
@@ -54,11 +55,11 @@
   countOneBits_af90e2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
@@ -83,11 +84,11 @@
   countOneBits_af90e2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
diff --git a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl
index 40ac27a..0ef55de 100644
--- a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp int'
@@ -54,11 +55,11 @@
   countOneBits_fd88b2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump int'
@@ -83,11 +84,11 @@
   countOneBits_fd88b2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp int'
diff --git a/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl b/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl
index 6d93cb0..64fad74 100644
--- a/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cross_041cb0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cross_041cb0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/degrees/0d170c.wgsl.expected.glsl b/test/intrinsics/gen/degrees/0d170c.wgsl.expected.glsl
index 684f3fb..55c0c7a 100644
--- a/test/intrinsics/gen/degrees/0d170c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/degrees/0d170c.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   degrees_0d170c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   degrees_0d170c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.glsl b/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.glsl
index 8d35b2d..dd18b3b 100644
--- a/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.glsl
+++ b/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   degrees_1ad5df();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   degrees_1ad5df();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/degrees/2af623.wgsl.expected.glsl b/test/intrinsics/gen/degrees/2af623.wgsl.expected.glsl
index 2f1c095..447c798 100644
--- a/test/intrinsics/gen/degrees/2af623.wgsl.expected.glsl
+++ b/test/intrinsics/gen/degrees/2af623.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   degrees_2af623();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   degrees_2af623();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/degrees/51f705.wgsl.expected.glsl b/test/intrinsics/gen/degrees/51f705.wgsl.expected.glsl
index c576030..5135deb 100644
--- a/test/intrinsics/gen/degrees/51f705.wgsl.expected.glsl
+++ b/test/intrinsics/gen/degrees/51f705.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   degrees_51f705();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   degrees_51f705();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl
index 1adff1a..b72337e 100644
--- a/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   determinant_2b62ba();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   determinant_2b62ba();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl
index 8b716ef..f8b510f 100644
--- a/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   determinant_a0a87c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   determinant_a0a87c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl b/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl
index 2e2e0d0..fc32243 100644
--- a/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl
+++ b/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   determinant_e19305();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   determinant_e19305();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl b/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl
index 4fb7b3d..a3c576e 100644
--- a/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   distance_0657d4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   distance_0657d4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl b/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl
index a0773a8..0924832 100644
--- a/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl
+++ b/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   distance_9646ea();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   distance_9646ea();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl b/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl
index cc3cdc4..9d95357 100644
--- a/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl
+++ b/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   distance_aa4055();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   distance_aa4055();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl b/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl
index a38a90c..5b5a6bf 100644
--- a/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl
+++ b/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   distance_cfed73();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   distance_cfed73();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl b/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl
index 69e5674..27d3e7a 100644
--- a/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   dot_0c577b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   dot_0c577b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl b/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl
index 22594ab..66d877d 100644
--- a/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_7548a0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_7548a0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl b/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl
index 263b33d..f58fa99 100644
--- a/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   dot_883f0e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   dot_883f0e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl b/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl
index ad17ac2..090d242 100644
--- a/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_97c7ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_97c7ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl b/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl
index 3a4cec1..f8c73a8 100644
--- a/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   dot_ba4246();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   dot_ba4246();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl b/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl
index 9ee8ab2..058ea47 100644
--- a/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_e994c7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_e994c7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl b/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl
index 31c5cef..da0f7b0 100644
--- a/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_ef6b1d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_ef6b1d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl b/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl
index 3e0d1f8..66e776e 100644
--- a/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_f1312c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_f1312c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl b/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl
index 22d0dd2..3397372 100644
--- a/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_fc5f7c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_fc5f7c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl
index b2c3e88..3751632 100644
--- a/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdx_0763f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl
index b147755..3ed75b4 100644
--- a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdx_99edb1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl
index 3201da8..3c5dee0 100644
--- a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdx_c487fa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl
index 8d27891..9748587 100644
--- a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdx_e263de();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl
index 712cb2e..312c91d 100644
--- a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxCoarse_029152();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
index ca3f444..5144cdc 100644
--- a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxCoarse_9581cf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl
index d748693..316a740 100644
--- a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxCoarse_c28641();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
index 568db44..165c98a 100644
--- a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxCoarse_f64d7b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl
index 1f79d0e..9849f53 100644
--- a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxFine_8c5069();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl
index 5890767..1b7f55c 100644
--- a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxFine_9631de();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl
index 99c60ca..e808df6 100644
--- a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxFine_f401a2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl
index 3e8c68f..4148812 100644
--- a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxFine_f92fb6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl
index b235c27..5af0963 100644
--- a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdy_699a05();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl
index 7c20e0f..83f9149 100644
--- a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdy_7f8d84();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl
index 82667ce..77cb336 100644
--- a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdy_a8b56e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl
index baf086e..93993fb 100644
--- a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdy_feb40f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
index a4f7518..acc10ce 100644
--- a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyCoarse_3e1ab4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl
index 3872654..faccad9 100644
--- a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyCoarse_445d24();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
index e650118..42ddd72 100644
--- a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyCoarse_870a7e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
index b76372c..9d4bb1c 100644
--- a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyCoarse_ae1873();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
index 903fba0..339d386 100644
--- a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyFine_1fb7ab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl
index 4aafeb0..f616661 100644
--- a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyFine_6eb673();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl
index 532ff81..ad75956 100644
--- a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyFine_d0a648();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl
index 89a7b2c..c0cad99 100644
--- a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyFine_df33aa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl
index 5af098b..14b34b1 100644
--- a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp_0f70eb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp_0f70eb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl b/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl
index e4384a7..62d16d5 100644
--- a/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp_1951e7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp_1951e7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl b/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl
index 7d9ef49..721e5dc 100644
--- a/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp_771fd2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp_771fd2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl b/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl
index c40ee7e..acca67d 100644
--- a/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp_d98450();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp_d98450();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl
index e9ecb77..a05fac6 100644
--- a/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp2_1f8680();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp2_1f8680();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl
index 6194f99..0a6862d 100644
--- a/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp2_a9d0a7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp2_a9d0a7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl
index e3d32d5..6cdab4d 100644
--- a/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp2_d6777c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp2_d6777c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl b/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl
index c6d84db..f929267 100644
--- a/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp2_dea523();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp2_dea523();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl
index 5dbbc6d..4a9bdc4 100644
--- a/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   faceForward_5afbd5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   faceForward_5afbd5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl
index e488435..6fccb43 100644
--- a/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   faceForward_b316e5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   faceForward_b316e5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl
index 14d0f5d..80375c8 100644
--- a/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   faceForward_e6908b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   faceForward_e6908b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl
index 1552c45..e3ece5a 100644
--- a/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   floor_3bccc4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   floor_3bccc4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl
index 8255234..d0cfbad 100644
--- a/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl
+++ b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   floor_5fc9ac();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   floor_5fc9ac();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl
index 234af63..25c718c 100644
--- a/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl
+++ b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   floor_60d7ea();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   floor_60d7ea();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl b/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl
index 8b00479..708bc06 100644
--- a/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl
+++ b/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   floor_66f154();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   floor_66f154();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl
index 65e2184..6a1c015 100644
--- a/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -54,11 +55,11 @@
   fma_26a7a9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -83,11 +84,11 @@
   fma_26a7a9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl b/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl
index 7436355..8b2530b 100644
--- a/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -54,11 +55,11 @@
   fma_6a3283();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -83,11 +84,11 @@
   fma_6a3283();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl
index 30e2d14..0d07f7b 100644
--- a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   fma_c10ba3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   fma_c10ba3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl
index 7c0248e..a380e52 100644
--- a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -54,11 +55,11 @@
   fma_e17c5c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -83,11 +84,11 @@
   fma_e17c5c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl
index 0375ada..a8aa370 100644
--- a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -54,11 +55,11 @@
   fract_8bc1e9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -83,11 +84,11 @@
   fract_8bc1e9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl b/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl
index 61ab739..3940b2d 100644
--- a/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -54,11 +55,11 @@
   fract_943cb1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -83,11 +84,11 @@
   fract_943cb1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl b/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl
index 156d5e9..5204443 100644
--- a/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -54,11 +55,11 @@
   fract_a49758();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -83,11 +84,11 @@
   fract_a49758();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl
index 3f97c82..3fadefa 100644
--- a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   fract_fa5c71();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   fract_fa5c71();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/frexp/368997.wgsl.expected.glsl b/test/intrinsics/gen/frexp/368997.wgsl.expected.glsl
index 1506936..a1f31ea 100644
--- a/test/intrinsics/gen/frexp/368997.wgsl.expected.glsl
+++ b/test/intrinsics/gen/frexp/368997.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec3 sig;
   ivec3 exp;
 };
+
 frexp_result_vec3 tint_frexp(vec3 param_0) {
   float3 exp;
   float3 sig = frexp(param_0, exp);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec3 sig;
   ivec3 exp;
 };
+
 frexp_result_vec3 tint_frexp(vec3 param_0) {
   float3 exp;
   float3 sig = frexp(param_0, exp);
@@ -77,14 +80,14 @@
   frexp_368997();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec3 sig;
   ivec3 exp;
 };
+
 frexp_result_vec3 tint_frexp(vec3 param_0) {
   float3 exp;
   float3 sig = frexp(param_0, exp);
@@ -117,14 +121,14 @@
   frexp_368997();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.glsl b/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.glsl
index bf14350..8e0f6fd 100644
--- a/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.glsl
+++ b/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec4 sig;
   ivec4 exp;
 };
+
 frexp_result_vec4 tint_frexp(vec4 param_0) {
   float4 exp;
   float4 sig = frexp(param_0, exp);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec4 sig;
   ivec4 exp;
 };
+
 frexp_result_vec4 tint_frexp(vec4 param_0) {
   float4 exp;
   float4 sig = frexp(param_0, exp);
@@ -77,14 +80,14 @@
   frexp_3c4f48();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec4 sig;
   ivec4 exp;
 };
+
 frexp_result_vec4 tint_frexp(vec4 param_0) {
   float4 exp;
   float4 sig = frexp(param_0, exp);
@@ -117,14 +121,14 @@
   frexp_3c4f48();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.glsl b/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.glsl
index ff8402c..2acbc9f 100644
--- a/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec2 sig;
   ivec2 exp;
 };
+
 frexp_result_vec2 tint_frexp(vec2 param_0) {
   float2 exp;
   float2 sig = frexp(param_0, exp);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec2 sig;
   ivec2 exp;
 };
+
 frexp_result_vec2 tint_frexp(vec2 param_0) {
   float2 exp;
   float2 sig = frexp(param_0, exp);
@@ -77,14 +80,14 @@
   frexp_4bdfc7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec2 sig;
   ivec2 exp;
 };
+
 frexp_result_vec2 tint_frexp(vec2 param_0) {
   float2 exp;
   float2 sig = frexp(param_0, exp);
@@ -117,14 +121,14 @@
   frexp_4bdfc7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/frexp/eabd40.wgsl.expected.glsl b/test/intrinsics/gen/frexp/eabd40.wgsl.expected.glsl
index e16cc08..6892c1a 100644
--- a/test/intrinsics/gen/frexp/eabd40.wgsl.expected.glsl
+++ b/test/intrinsics/gen/frexp/eabd40.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float sig;
   int exp;
 };
+
 frexp_result tint_frexp(float param_0) {
   float exp;
   float sig = frexp(param_0, exp);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:10: 'frexp' : no matching overloaded function found 
-ERROR: 0:10: '' : compilation terminated 
+ERROR: 0:11: 'frexp' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   float sig;
   int exp;
 };
+
 frexp_result tint_frexp(float param_0) {
   float exp;
   float sig = frexp(param_0, exp);
@@ -77,14 +80,14 @@
   frexp_eabd40();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:10: 'frexp' : no matching overloaded function found 
-ERROR: 0:10: '' : compilation terminated 
+ERROR: 0:11: 'frexp' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   float sig;
   int exp;
 };
+
 frexp_result tint_frexp(float param_0) {
   float exp;
   float sig = frexp(param_0, exp);
@@ -117,14 +121,14 @@
   frexp_eabd40();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:10: 'frexp' : no matching overloaded function found 
-ERROR: 0:10: '' : compilation terminated 
+ERROR: 0:11: 'frexp' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl
index a0affd9..34122c5 100644
--- a/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidth_5d1b39();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl
index 3a38177..ec1ced8 100644
--- a/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidth_b83ebb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl
index 6d23f98..91563b7 100644
--- a/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidth_d2ab9a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl
index fa13be7..43676d1 100644
--- a/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidth_df38ef();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl
index 0fa8940..135ec35 100644
--- a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthCoarse_159c8a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl
index 13b779c..62de671 100644
--- a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthCoarse_1e59d9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl
index 6f6634b..a7780a7 100644
--- a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthCoarse_4e4fc4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl
index 48db5ee..27c6a7c 100644
--- a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthCoarse_e653f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl
index 46ed62a..456f35c 100644
--- a/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthFine_523fdc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl
index ce3dbad..871b6a6 100644
--- a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthFine_68f4ef();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl
index 4441b46..8244f2f 100644
--- a/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthFine_f1742d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl
index bf921e2..7fc286d 100644
--- a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthFine_ff6aa0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl b/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl
index a9d7595..9fbab2c 100644
--- a/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   ignore_51aeb7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   ignore_51aeb7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl b/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl
index d3e5912..455f5b2 100644
--- a/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   ignore_6698df();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   ignore_6698df();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl b/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl
index 4f16889..c68bffc 100644
--- a/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   ignore_d91a2f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   ignore_d91a2f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl b/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl
index 7e976a5..63c111f 100644
--- a/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   ignore_f414a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   ignore_f414a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl
index 790d03b..64218af 100644
--- a/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   inverseSqrt_84407e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   inverseSqrt_84407e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl
index bb7a249..2e339a4 100644
--- a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -54,11 +55,11 @@
   inverseSqrt_8f2bd2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -83,11 +84,11 @@
   inverseSqrt_8f2bd2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl
index d4f4e54..44afdde 100644
--- a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -54,11 +55,11 @@
   inverseSqrt_b197b1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -83,11 +84,11 @@
   inverseSqrt_b197b1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl
index 6725af4..f9371f7 100644
--- a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl
+++ b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -54,11 +55,11 @@
   inverseSqrt_c22347();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -83,11 +84,11 @@
   inverseSqrt_c22347();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl
index 0d46074..9c34884 100644
--- a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl
@@ -26,6 +26,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -34,7 +36,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 2-component vector of bool'
@@ -58,11 +59,11 @@
   isFinite_34d32b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 2-component vector of bool'
@@ -87,11 +88,11 @@
   isFinite_34d32b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 2-component vector of bool'
diff --git a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl
index 2fd72b3..47a43a4 100644
--- a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl
@@ -26,6 +26,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -34,7 +36,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -58,11 +59,11 @@
   isFinite_426f9f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -87,11 +88,11 @@
   isFinite_426f9f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
diff --git a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl
index 91124f9..8486ac9 100644
--- a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl
@@ -26,6 +26,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -34,7 +36,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 3-component vector of bool'
@@ -58,11 +59,11 @@
   isFinite_8a23ad();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 3-component vector of bool'
@@ -87,11 +88,11 @@
   isFinite_8a23ad();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 3-component vector of bool'
diff --git a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl
index 395c892..a2870a9 100644
--- a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl
@@ -26,6 +26,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -34,7 +36,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
@@ -58,11 +59,11 @@
   isFinite_f31987();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
@@ -87,11 +88,11 @@
   isFinite_f31987();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
diff --git a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl
index 870a48f..36f99fe 100644
--- a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isInf_666f2a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isInf_666f2a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl
index bb37301..56e4d76 100644
--- a/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isInf_7bd98f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isInf_7bd98f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl
index 77035e8..a1c971a 100644
--- a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isInf_7e81b5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isInf_7e81b5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl
index 2bb0f8c..7c0559f 100644
--- a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isInf_a46d6f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isInf_a46d6f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl
index 3e392cc..9221d99 100644
--- a/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isNan_1280ab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isNan_1280ab();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl
index 0da055c..ea662da 100644
--- a/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isNan_4d280d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isNan_4d280d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl
index e7ec27b..5fae942 100644
--- a/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isNan_67ecd3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isNan_67ecd3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl
index 8033cb1..81a59da 100644
--- a/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isNan_e4978e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isNan_e4978e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl
index 23d8edf..6b4953e 100644
--- a/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -41,7 +43,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -71,11 +72,11 @@
   isNormal_863dcd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -106,11 +107,11 @@
   isNormal_863dcd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl
index 53e9308..09a02d1 100644
--- a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -41,7 +43,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -71,11 +72,11 @@
   isNormal_b00ab1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -106,11 +107,11 @@
   isNormal_b00ab1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl
index fdd976b..959e3d4 100644
--- a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -41,7 +43,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint3' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -71,11 +72,11 @@
   isNormal_c286b7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint3' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -106,11 +107,11 @@
   isNormal_c286b7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint3' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl
index 58fb928..047b030 100644
--- a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -41,7 +43,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'asuint' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
@@ -72,11 +73,11 @@
   isNormal_c6e880();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'asuint' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
@@ -108,11 +109,11 @@
   isNormal_c6e880();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'asuint' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl
index 2ce0179..52421d5 100644
--- a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ldexp_a31cdc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ldexp_a31cdc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl
index d331a20..517e258 100644
--- a/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ldexp_abd718();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ldexp_abd718();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl
index 38cd6b5..24485b4 100644
--- a/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ldexp_cc9cde();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ldexp_cc9cde();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl
index c34ebd0..113b4c3 100644
--- a/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ldexp_db8b49();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ldexp_db8b49();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/length/056071.wgsl.expected.glsl b/test/intrinsics/gen/length/056071.wgsl.expected.glsl
index 1316030..3b119de 100644
--- a/test/intrinsics/gen/length/056071.wgsl.expected.glsl
+++ b/test/intrinsics/gen/length/056071.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   length_056071();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   length_056071();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/length/602a17.wgsl.expected.glsl b/test/intrinsics/gen/length/602a17.wgsl.expected.glsl
index 59c2009..ce4b832 100644
--- a/test/intrinsics/gen/length/602a17.wgsl.expected.glsl
+++ b/test/intrinsics/gen/length/602a17.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   length_602a17();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   length_602a17();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl b/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl
index c59c8834..d86ccd3 100644
--- a/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   length_afde8b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   length_afde8b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/length/becebf.wgsl.expected.glsl b/test/intrinsics/gen/length/becebf.wgsl.expected.glsl
index 9d9618c..7486516 100644
--- a/test/intrinsics/gen/length/becebf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/length/becebf.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   length_becebf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   length_becebf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl b/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl
index 234a002..1bc35fb 100644
--- a/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log_3da25a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log_3da25a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl b/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl
index a24f791..46d72a1 100644
--- a/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log_7114a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log_7114a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl b/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl
index f93a0bc..aa63407 100644
--- a/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log_b2ce28();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log_b2ce28();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl b/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl
index 0256c6c..2171e83 100644
--- a/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log_f4c570();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log_f4c570();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl b/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl
index 7eda0dd..a3cbb0d 100644
--- a/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log2_4036ed();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log2_4036ed();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log2/902988.wgsl.expected.glsl b/test/intrinsics/gen/log2/902988.wgsl.expected.glsl
index f62ea98..23d35bc 100644
--- a/test/intrinsics/gen/log2/902988.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log2/902988.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log2_902988();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log2_902988();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl b/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl
index 1c68e82..5cc3c47 100644
--- a/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log2_adb233();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log2_adb233();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl b/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl
index da187fe..ad3b77a 100644
--- a/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log2_aea659();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log2_aea659();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl b/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl
index 26b2d96..63560d0 100644
--- a/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_0c0aae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_0c0aae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl b/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl
index 936d5e6..730e3d3 100644
--- a/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_25eafe();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_25eafe();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/320815.wgsl.expected.glsl b/test/intrinsics/gen/max/320815.wgsl.expected.glsl
index e72fe51..8e21639 100644
--- a/test/intrinsics/gen/max/320815.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/320815.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_320815();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_320815();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl b/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl
index 1b72e31..2d87a72 100644
--- a/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_44a39d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_44a39d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/453e04.wgsl.expected.glsl b/test/intrinsics/gen/max/453e04.wgsl.expected.glsl
index 19e7f1f..f0127c4 100644
--- a/test/intrinsics/gen/max/453e04.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/453e04.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_453e04();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_453e04();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/462050.wgsl.expected.glsl b/test/intrinsics/gen/max/462050.wgsl.expected.glsl
index 0c680c9..db7e098 100644
--- a/test/intrinsics/gen/max/462050.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/462050.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_462050();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_462050();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl b/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl
index f1fe35a..e418b79 100644
--- a/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_4883ac();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_4883ac();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl b/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl
index 8c916c8..662db4e 100644
--- a/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_85e6bc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_85e6bc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/a93419.wgsl.expected.glsl b/test/intrinsics/gen/max/a93419.wgsl.expected.glsl
index ba1ee86..d39362b 100644
--- a/test/intrinsics/gen/max/a93419.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/a93419.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_a93419();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_a93419();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl b/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl
index e4a3b6d..bad55c7 100644
--- a/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_b1b73a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_b1b73a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl b/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl
index 4221ecd..e9496f3 100644
--- a/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_ce7c30();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_ce7c30();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl b/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl
index 14fc550..eead06e 100644
--- a/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_e8192f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_e8192f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl b/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl
index f92e9cb..21670e2 100644
--- a/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_03c7e3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_03c7e3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl b/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl
index 980a701..23d6a58 100644
--- a/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_0dc614();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_0dc614();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl b/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl
index 6f40cd9..5df9bdc 100644
--- a/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_3941e1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_3941e1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl b/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl
index 72f91a5..138a485 100644
--- a/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_46c5d3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_46c5d3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl b/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl
index e3845f7..c1d244a 100644
--- a/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_82b28f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_82b28f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl b/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl
index dc784fd..ea51f49 100644
--- a/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_93cfc4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_93cfc4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/a45171.wgsl.expected.glsl b/test/intrinsics/gen/min/a45171.wgsl.expected.glsl
index e8b51fd..43bee8b 100644
--- a/test/intrinsics/gen/min/a45171.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/a45171.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_a45171();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_a45171();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl b/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl
index 95169e0..eb5a4b0 100644
--- a/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_aa28ad();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_aa28ad();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/af326d.wgsl.expected.glsl b/test/intrinsics/gen/min/af326d.wgsl.expected.glsl
index 23e2ce1..1090dab 100644
--- a/test/intrinsics/gen/min/af326d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/af326d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_af326d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_af326d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl b/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl
index ce53401..09ecc63 100644
--- a/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_c70bb7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_c70bb7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/c73147.wgsl.expected.glsl b/test/intrinsics/gen/min/c73147.wgsl.expected.glsl
index 747e2ed..914a4b3 100644
--- a/test/intrinsics/gen/min/c73147.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/c73147.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_c73147();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_c73147();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl b/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl
index 07477ab..a6b8d73 100644
--- a/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_c76fa6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_c76fa6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl
index 27d05de..5d2c8c9 100644
--- a/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_0c8c33();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_0c8c33();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl b/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl
index 6ebd051..baca38f 100644
--- a/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_1faeb1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_1faeb1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl b/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl
index e8f7679..9267428 100644
--- a/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_2fadab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_2fadab();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/315264.wgsl.expected.glsl b/test/intrinsics/gen/mix/315264.wgsl.expected.glsl
index 3bdb9d0..474594f 100644
--- a/test/intrinsics/gen/mix/315264.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/315264.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_315264();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_315264();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl
index 2c2bb45..df22fe4 100644
--- a/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_4f0b5e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_4f0b5e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl
index 49ff4c3..0d74119 100644
--- a/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_6f8adc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_6f8adc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl b/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl
index cb6d7e3..69908a3 100644
--- a/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_c37ede();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_c37ede();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/modf/180fed.wgsl.expected.glsl b/test/intrinsics/gen/modf/180fed.wgsl.expected.glsl
index efa2621..7ca9bdf 100644
--- a/test/intrinsics/gen/modf/180fed.wgsl.expected.glsl
+++ b/test/intrinsics/gen/modf/180fed.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float fract;
   float whole;
 };
+
 modf_result tint_modf(float param_0) {
   float whole;
   float fract = modf(param_0, whole);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:12: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   float fract;
   float whole;
 };
+
 modf_result tint_modf(float param_0) {
   float whole;
   float fract = modf(param_0, whole);
@@ -77,14 +80,14 @@
   modf_180fed();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:12: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   float fract;
   float whole;
 };
+
 modf_result tint_modf(float param_0) {
   float whole;
   float fract = modf(param_0, whole);
@@ -117,14 +121,14 @@
   modf_180fed();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:12: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/modf/9b75f7.wgsl.expected.glsl b/test/intrinsics/gen/modf/9b75f7.wgsl.expected.glsl
index 4f22fcf..01bd4b3 100644
--- a/test/intrinsics/gen/modf/9b75f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/modf/9b75f7.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec3 fract;
   vec3 whole;
 };
+
 modf_result_vec3 tint_modf(vec3 param_0) {
   float3 whole;
   float3 fract = modf(param_0, whole);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec3 fract;
   vec3 whole;
 };
+
 modf_result_vec3 tint_modf(vec3 param_0) {
   float3 whole;
   float3 fract = modf(param_0, whole);
@@ -77,14 +80,14 @@
   modf_9b75f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec3 fract;
   vec3 whole;
 };
+
 modf_result_vec3 tint_modf(vec3 param_0) {
   float3 whole;
   float3 fract = modf(param_0, whole);
@@ -117,14 +121,14 @@
   modf_9b75f7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.glsl b/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.glsl
index 0229c44..603abe5 100644
--- a/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec4 fract;
   vec4 whole;
 };
+
 modf_result_vec4 tint_modf(vec4 param_0) {
   float4 whole;
   float4 fract = modf(param_0, whole);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec4 fract;
   vec4 whole;
 };
+
 modf_result_vec4 tint_modf(vec4 param_0) {
   float4 whole;
   float4 fract = modf(param_0, whole);
@@ -77,14 +80,14 @@
   modf_ec2dbc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec4 fract;
   vec4 whole;
 };
+
 modf_result_vec4 tint_modf(vec4 param_0) {
   float4 whole;
   float4 fract = modf(param_0, whole);
@@ -117,14 +121,14 @@
   modf_ec2dbc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/modf/f5f20d.wgsl.expected.glsl b/test/intrinsics/gen/modf/f5f20d.wgsl.expected.glsl
index 4848cee..c3fde70 100644
--- a/test/intrinsics/gen/modf/f5f20d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/modf/f5f20d.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec2 fract;
   vec2 whole;
 };
+
 modf_result_vec2 tint_modf(vec2 param_0) {
   float2 whole;
   float2 fract = modf(param_0, whole);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec2 fract;
   vec2 whole;
 };
+
 modf_result_vec2 tint_modf(vec2 param_0) {
   float2 whole;
   float2 fract = modf(param_0, whole);
@@ -77,14 +80,14 @@
   modf_f5f20d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec2 fract;
   vec2 whole;
 };
+
 modf_result_vec2 tint_modf(vec2 param_0) {
   float2 whole;
   float2 fract = modf(param_0, whole);
@@ -117,14 +121,14 @@
   modf_f5f20d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl
index 50ca5bf..4558248 100644
--- a/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   normalize_64d8c0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   normalize_64d8c0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl
index 02f8bd9..959ddaf 100644
--- a/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   normalize_9a0aab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   normalize_9a0aab();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl
index f0eb1f5..8c9aaef 100644
--- a/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   normalize_fc2ef1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   normalize_fc2ef1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl
index 8335d30..efb873d 100644
--- a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack2x16float_0e97b3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack2x16float_0e97b3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl
index 3e7fe19..f3e88a8 100644
--- a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack2x16snorm_6c169b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack2x16snorm_6c169b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl
index bf3bafb..039d0c5 100644
--- a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack2x16unorm_0f08e4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack2x16unorm_0f08e4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl
index c183181..bdb1fa7 100644
--- a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack4x8snorm_4d22e7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack4x8snorm_4d22e7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl
index 4da2c32..354a8bf 100644
--- a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack4x8unorm_95c456();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack4x8unorm_95c456();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl b/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl
index a336cc9..82ecafa 100644
--- a/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   pow_04a908();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   pow_04a908();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl b/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl
index d70fc2f..da16789 100644
--- a/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   pow_46e029();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   pow_46e029();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl
index 6691e7a..f1c85fc 100644
--- a/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   pow_4a46c9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   pow_4a46c9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl
index df359b2..a52a87f 100644
--- a/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   pow_e60ea5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   pow_e60ea5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/radians/09b7fc.wgsl.expected.glsl b/test/intrinsics/gen/radians/09b7fc.wgsl.expected.glsl
index 270c9d2..fbfd57b 100644
--- a/test/intrinsics/gen/radians/09b7fc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/radians/09b7fc.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   radians_09b7fc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   radians_09b7fc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/radians/61687a.wgsl.expected.glsl b/test/intrinsics/gen/radians/61687a.wgsl.expected.glsl
index f2c469a..0c61f00 100644
--- a/test/intrinsics/gen/radians/61687a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/radians/61687a.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   radians_61687a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   radians_61687a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.glsl b/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.glsl
index 4494c76..48c9109 100644
--- a/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   radians_6b0ff2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   radians_6b0ff2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/radians/f96258.wgsl.expected.glsl b/test/intrinsics/gen/radians/f96258.wgsl.expected.glsl
index 2cf878e..e27a435 100644
--- a/test/intrinsics/gen/radians/f96258.wgsl.expected.glsl
+++ b/test/intrinsics/gen/radians/f96258.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   radians_f96258();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   radians_f96258();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl b/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl
index 7d81f8f..34b7aab7 100644
--- a/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   reflect_05357e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   reflect_05357e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl
index 90303df..423ee1e 100644
--- a/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   reflect_b61e10();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   reflect_b61e10();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl
index e4edf09..32b62a0 100644
--- a/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   reflect_f47fdb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   reflect_f47fdb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl b/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl
index 9f3ea85..c46e333 100644
--- a/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   refract_7e02e6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   refract_7e02e6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl b/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl
index b1361ee..f7e95c4 100644
--- a/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   refract_cbc1d2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   refract_cbc1d2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl b/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl
index 12a9689..0f1a3de 100644
--- a/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   refract_cd905f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   refract_cd905f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl
index 1f240b4..bad1323 100644
--- a/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
@@ -54,11 +55,11 @@
   reverseBits_222177();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
@@ -83,11 +84,11 @@
   reverseBits_222177();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
diff --git a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl
index ca98e70..13f72b8 100644
--- a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
@@ -54,11 +55,11 @@
   reverseBits_35fea9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
@@ -83,11 +84,11 @@
   reverseBits_35fea9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
diff --git a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl
index d6af58f..b512ef1 100644
--- a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
@@ -54,11 +55,11 @@
   reverseBits_4dbd6f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of int'
@@ -83,11 +84,11 @@
   reverseBits_4dbd6f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
diff --git a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl
index 9dcf4bc..b655cf2 100644
--- a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp int'
@@ -54,11 +55,11 @@
   reverseBits_7c4269();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump int'
@@ -83,11 +84,11 @@
   reverseBits_7c4269();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp int'
diff --git a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl
index 54e3baa..5956ce2 100644
--- a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
@@ -54,11 +55,11 @@
   reverseBits_a6ccd4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of uint'
@@ -83,11 +84,11 @@
   reverseBits_a6ccd4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
diff --git a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl
index cf95586..d79516d 100644
--- a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
@@ -54,11 +55,11 @@
   reverseBits_c21bc1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
@@ -83,11 +84,11 @@
   reverseBits_c21bc1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
diff --git a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl
index 9a17b8c..4d22669 100644
--- a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
@@ -54,11 +55,11 @@
   reverseBits_e1f4c1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of uint'
@@ -83,11 +84,11 @@
   reverseBits_e1f4c1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
diff --git a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl
index ff07c39..de78187 100644
--- a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
@@ -54,11 +55,11 @@
   reverseBits_e31adf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
@@ -83,11 +84,11 @@
   reverseBits_e31adf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl b/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl
index 088e98a..543cdfa 100644
--- a/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   round_106c0b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   round_106c0b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl b/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl
index 8a1f931..938fc0a 100644
--- a/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl
+++ b/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   round_1c7897();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   round_1c7897();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl b/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl
index b4bdde7..1747df8 100644
--- a/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   round_52c84d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   round_52c84d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl b/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl
index d42fb3b..faa0f32 100644
--- a/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl
+++ b/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   round_9edc38();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   round_9edc38();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/00b848.wgsl.expected.glsl b/test/intrinsics/gen/select/00b848.wgsl.expected.glsl
index bcdbc9c..a6559e0 100644
--- a/test/intrinsics/gen/select/00b848.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/00b848.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_00b848();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_00b848();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl b/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl
index 8ee7a9c..c414d87 100644
--- a/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_01e2cd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_01e2cd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl b/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl
index 953ba8e..4aac921 100644
--- a/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_087ea4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_087ea4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl b/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl
index bb3b71b..1c22a52 100644
--- a/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_1e960b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_1e960b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/266aff.wgsl.expected.glsl b/test/intrinsics/gen/select/266aff.wgsl.expected.glsl
index 5bb9c40..239efd1 100644
--- a/test/intrinsics/gen/select/266aff.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/266aff.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_266aff();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_266aff();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl b/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl
index 796be36..303c8ee 100644
--- a/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_28a27e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_28a27e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl b/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl
index 3790d14..b89b649 100644
--- a/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_3c25ce();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_3c25ce();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/416e14.wgsl.expected.glsl b/test/intrinsics/gen/select/416e14.wgsl.expected.glsl
index 9d3f859..df0fd7e 100644
--- a/test/intrinsics/gen/select/416e14.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/416e14.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_416e14();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_416e14();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/51b047.wgsl.expected.glsl b/test/intrinsics/gen/select/51b047.wgsl.expected.glsl
index 2bf0d76..e8c162b 100644
--- a/test/intrinsics/gen/select/51b047.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/51b047.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_51b047();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_51b047();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/713567.wgsl.expected.glsl b/test/intrinsics/gen/select/713567.wgsl.expected.glsl
index c46f90e..6c78e34 100644
--- a/test/intrinsics/gen/select/713567.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/713567.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_713567();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_713567();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl b/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl
index d4cbe6a..285c139 100644
--- a/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_78be5f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_78be5f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl b/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl
index 752a9a6..49e4ec5 100644
--- a/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_80a9a9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_80a9a9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl b/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl
index ddd9d4a..fb5d604 100644
--- a/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_8fa62c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_8fa62c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/99f883.wgsl.expected.glsl b/test/intrinsics/gen/select/99f883.wgsl.expected.glsl
index b38da75..c4a5fdb 100644
--- a/test/intrinsics/gen/select/99f883.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/99f883.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_99f883();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_99f883();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl b/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl
index 034f6de..823a57d 100644
--- a/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_a2860e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_a2860e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl b/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl
index 376b4c9..61f2ca1 100644
--- a/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_ab069f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_ab069f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/b04721.wgsl.expected.glsl b/test/intrinsics/gen/select/b04721.wgsl.expected.glsl
index 3f1e5e9..816bbbf 100644
--- a/test/intrinsics/gen/select/b04721.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/b04721.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_b04721();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_b04721();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl b/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl
index d755711..554f56e 100644
--- a/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_bb447f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_bb447f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl b/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl
index 5220945..d2b1607 100644
--- a/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_bb8aae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_bb8aae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl b/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl
index f09b128..8cf102e 100644
--- a/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_bf3d29();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_bf3d29();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl b/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl
index 4055abb..6cc94bc 100644
--- a/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_c31f9e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_c31f9e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl b/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl
index fbd94e1..ca938a8 100644
--- a/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_c41bd1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_c41bd1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl
index d1112ca..ab85b6e 100644
--- a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_c4a4ef();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_c4a4ef();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl b/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl
index f495bf0..89cfd90 100644
--- a/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_cb9301();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_cb9301();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl b/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl
index edd3d6a..88d5c1a 100644
--- a/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_e3e028();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_e3e028();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl b/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl
index 291479b..7158954 100644
--- a/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_ebfea2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_ebfea2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl b/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl
index b5a024e..4e8bed7 100644
--- a/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_ed8a15();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_ed8a15();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl b/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl
index ded66c1..b928a2d 100644
--- a/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_fb7e53();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_fb7e53();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sign/159665.wgsl.expected.glsl b/test/intrinsics/gen/sign/159665.wgsl.expected.glsl
index 594594b..37c7796 100644
--- a/test/intrinsics/gen/sign/159665.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sign/159665.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sign_159665();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sign_159665();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl b/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl
index 231bae2..cd159a8 100644
--- a/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sign_b8f634();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sign_b8f634();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl b/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl
index b9897f1..f19d9da 100644
--- a/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sign_d065d8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sign_d065d8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl b/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl
index cbb2304..4a4a7d1 100644
--- a/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sign_dd790e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sign_dd790e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl b/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl
index 51d31ee..0dcac18 100644
--- a/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sin_01f241();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sin_01f241();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl b/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl
index f34b822..56583fd 100644
--- a/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sin_4e3979();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sin_4e3979();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl b/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl
index d849a11..e4382fa 100644
--- a/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sin_b78c91();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sin_b78c91();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl
index d1e42e7..6a5df55 100644
--- a/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sin_fc8bc4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sin_fc8bc4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl b/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl
index 5401860..81eb153 100644
--- a/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sinh_445e33();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sinh_445e33();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl
index 6c2544d..37ed119 100644
--- a/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sinh_7bb598();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sinh_7bb598();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl
index dff0577..43896ef 100644
--- a/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sinh_b9860e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sinh_b9860e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl
index a6fdb9a..aa91888 100644
--- a/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sinh_c9a5eb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sinh_c9a5eb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl
index e2086a4..8555078 100644
--- a/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   smoothStep_5f615b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   smoothStep_5f615b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl
index 0ed1f2b..3c64b14 100644
--- a/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   smoothStep_658be3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   smoothStep_658be3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl
index f43d9e5..0d3cc99 100644
--- a/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl
+++ b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   smoothStep_c11eef();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   smoothStep_c11eef();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl
index 83171c6..d18d1ff 100644
--- a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   smoothStep_cb0bfb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   smoothStep_cb0bfb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl
index 1a9092b..87e1877 100644
--- a/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sqrt_20c74e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sqrt_20c74e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl
index d6c2d16..9f52b9f 100644
--- a/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sqrt_8c7024();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sqrt_8c7024();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl
index 2f6ae9e..32e6ead 100644
--- a/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sqrt_aa0d7a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sqrt_aa0d7a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl
index 4679c12..d2209a9 100644
--- a/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sqrt_f8c59a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sqrt_f8c59a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl b/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl
index 306bcac..0f72929 100644
--- a/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   step_0b073b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   step_0b073b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/step/19accd.wgsl.expected.glsl b/test/intrinsics/gen/step/19accd.wgsl.expected.glsl
index 87cd641..7d2918f 100644
--- a/test/intrinsics/gen/step/19accd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/step/19accd.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   step_19accd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   step_19accd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/step/334303.wgsl.expected.glsl b/test/intrinsics/gen/step/334303.wgsl.expected.glsl
index 1a62355..f322369 100644
--- a/test/intrinsics/gen/step/334303.wgsl.expected.glsl
+++ b/test/intrinsics/gen/step/334303.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   step_334303();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   step_334303();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl b/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl
index 753b13d..d79c9a9 100644
--- a/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl
+++ b/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   step_e2b337();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   step_e2b337();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
index 289b86f..52d6446 100644
--- a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
+++ b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
@@ -10,8 +10,8 @@
   storageBarrier_d87211();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl b/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl
index 3443c6f..d4c23fb 100644
--- a/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tan_244e2a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tan_244e2a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl b/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl
index 3f9de1a..65b6d14 100644
--- a/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tan_2f030e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tan_2f030e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl b/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl
index 919a434..3725d7b 100644
--- a/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tan_7ea104();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tan_7ea104();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl
index b3aa74d..4e2ce26 100644
--- a/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tan_8ce3e9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tan_8ce3e9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl
index 63f6833..75d7d83 100644
--- a/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tanh_5663c5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tanh_5663c5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl
index a2c5b4e..cfccd02 100644
--- a/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tanh_5724b3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tanh_5724b3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl
index 5973331..0f13e27 100644
--- a/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tanh_9f9fb9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tanh_9f9fb9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl
index a4ef21a..d750eed 100644
--- a/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tanh_c15fdb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tanh_c15fdb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl
index 0f60c4c..14f92e4 100644
--- a/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_002b2a() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_002b2a() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_002b2a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_002b2a() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_002b2a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl
index f593650..2c55d06 100644
--- a/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_012b82() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_012b82() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_012b82();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_012b82() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_012b82();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl
index b044497..48a35aa 100644
--- a/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_08753d() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_08753d() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_08753d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_08753d() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_08753d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl
index 58e3f09..7a591c0 100644
--- a/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_0c4772() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_0c4772() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_0c4772();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_0c4772() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_0c4772();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl
index ac5415c..c22bc6f 100644
--- a/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_0cce40() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_0cce40() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_0cce40();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_0cce40() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_0cce40();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl
index 413b4f8..b469d25 100644
--- a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_0cf2ff() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_0cf2ff() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_0cf2ff();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_0cf2ff() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_0cf2ff();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl
index 1368767..c9e5480 100644
--- a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_0d8b7e() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_0d8b7e() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_0d8b7e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_0d8b7e() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_0d8b7e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl
index ce1b64b..aa2ecfa 100644
--- a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_0e32ee() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_0e32ee() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_0e32ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_0e32ee() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_0e32ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl
index 8fb03be..5c0b2c3 100644
--- a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_0f3c50() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_0f3c50() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_0f3c50();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_0f3c50() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_0f3c50();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl
index 2507c32..4967d80 100644
--- a/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_1191a5() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_1191a5() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_1191a5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_1191a5() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_1191a5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl
index bccba0b..d650570 100644
--- a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_12c9bb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_12c9bb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_12c9bb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_12c9bb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_12c9bb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl
index 33dbdb6..4f4b229 100644
--- a/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_147998() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_147998() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_147998();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_147998() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_147998();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl
index f912185..36e6ad4 100644
--- a/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_16036c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_16036c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_16036c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_16036c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_16036c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl
index a83fbb9..2fd6faa 100644
--- a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_1b71f0() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_1b71f0() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_1b71f0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_1b71f0() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_1b71f0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl
index 56fe634..0da782c 100644
--- a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_1d6c26() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_1d6c26() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_1d6c26();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_1d6c26() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_1d6c26();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl
index 05a17aa..23f9499 100644
--- a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_1e9e39() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_1e9e39() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_1e9e39();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_1e9e39() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_1e9e39();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl
index 5aeb255..5017607 100644
--- a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_1f20c5() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_1f20c5() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_1f20c5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_1f20c5() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_1f20c5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl
index 5ab8cb0..8f243b6 100644
--- a/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_214dd4() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_214dd4() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_214dd4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_214dd4() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_214dd4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl
index 719dfa5..1042e3c 100644
--- a/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_221f22() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_221f22() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_221f22();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_221f22() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_221f22();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl
index 231b3b2..c507366 100644
--- a/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_267788() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_267788() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_267788();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_267788() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_267788();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl
index 0c1b611..41a9191 100644
--- a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_26bdfa() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_26bdfa() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_26bdfa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_26bdfa() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_26bdfa();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl
index 57baecf..2af5f61 100644
--- a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_26ef6c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_26ef6c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_26ef6c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_26ef6c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_26ef6c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl
index 2c47ea9..3022183 100644
--- a/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_2ad087() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_2ad087() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_2ad087();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_2ad087() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_2ad087();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl
index a8a428b..d479f5d 100644
--- a/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_2efa05() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_2efa05() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_2efa05();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_2efa05() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_2efa05();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl
index cd8540d..0e911ec 100644
--- a/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_2f289f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_2f289f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_2f289f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_2f289f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_2f289f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl
index 8a467fb..f5a17e6 100644
--- a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_2fe1cc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_2fe1cc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_2fe1cc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_2fe1cc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_2fe1cc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl
index 74872a4..3398fc9 100644
--- a/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_318ecc() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_318ecc() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_318ecc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_318ecc() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_318ecc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl
index 5be1dd0..fcc1764 100644
--- a/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_340d06() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_340d06() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_340d06();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_340d06() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_340d06();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl
index 854f888..4a6a6ad 100644
--- a/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_398e30() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_398e30() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_398e30();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_398e30() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_398e30();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl
index 73a1b29..883af99 100644
--- a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_3a94ea() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_3a94ea() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_3a94ea();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_3a94ea() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_3a94ea();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl
index 050a238..7af209e 100644
--- a/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_3aca08() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_3aca08() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_3aca08();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_3aca08() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_3aca08();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl
index c3c8c62..e930f20 100644
--- a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_3c5ad8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_3c5ad8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_3c5ad8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_3c5ad8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_3c5ad8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl
index 8dd6ca1..7eb9fe1 100644
--- a/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_4152a6() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_4152a6() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_4152a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_4152a6() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_4152a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl
index a2dbeb6..c0c95d2 100644
--- a/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_423f99() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_423f99() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_423f99();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_423f99() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_423f99();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl
index 6c7255e..7b34430 100644
--- a/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_4267ee() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_4267ee() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_4267ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_4267ee() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_4267ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl
index 4d2620d..ff1dc83 100644
--- a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_42d4e6() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_42d4e6() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_42d4e6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_42d4e6() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_42d4e6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl
index 9581a35..dedc3e5 100644
--- a/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_48cb89() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_48cb89() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_48cb89();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_48cb89() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_48cb89();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl
index d3f8a37..b86ec80 100644
--- a/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_49d274() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_49d274() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -57,11 +56,11 @@
   textureDimensions_49d274();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_49d274() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -87,11 +85,11 @@
   textureDimensions_49d274();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl
index cc416b2..1b3d08f 100644
--- a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_4df9a8() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_4df9a8() {
   int res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_4df9a8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_4df9a8() {
   int res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_4df9a8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl
index 28bcc15..2dc6825 100644
--- a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_50a9ee() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_50a9ee() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_50a9ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_50a9ee() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_50a9ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl
index 5b94938..2322ae5 100644
--- a/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_52045c() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_52045c() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_52045c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_52045c() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_52045c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl
index b0f533c..6edb647 100644
--- a/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_55b23e() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_55b23e() {
   int res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_55b23e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_55b23e() {
   int res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_55b23e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl
index 8b9bec3..bb33254 100644
--- a/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureDimensions_579629() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureDimensions_579629() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_579629();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureDimensions_579629() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_579629();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl
index 7fbf196..a2a5088 100644
--- a/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_57da0b() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_57da0b() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_57da0b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_57da0b() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_57da0b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl
index a243d0c..5703d38 100644
--- a/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_57e28f() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_57e28f() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_57e28f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_57e28f() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_57e28f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl
index 5e4dae7..4705fe6 100644
--- a/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_58a515() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_58a515() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_58a515();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_58a515() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_58a515();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl
index 04e4107..0867e70 100644
--- a/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_5985f3() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_5985f3() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_5985f3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_5985f3() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_5985f3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl
index 97f15c8..aa60bfd1 100644
--- a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_5caa5e() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_5caa5e() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_5caa5e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_5caa5e() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_5caa5e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl
index 0bcace0..c837206 100644
--- a/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_5e295d() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_5e295d() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_5e295d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_5e295d() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_5e295d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl
index d3ac6cc..3487223 100644
--- a/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_60bf54() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_60bf54() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_60bf54();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_60bf54() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_60bf54();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl
index 5c5ffdb..d9953ab 100644
--- a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_63f3cf() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_63f3cf() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_63f3cf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_63f3cf() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_63f3cf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl
index b3d04cc..83013dd 100644
--- a/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_68105c() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_68105c() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_68105c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_68105c() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_68105c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl
index 619ef60..5fdb83d 100644
--- a/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_686ef2() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_686ef2() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_686ef2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_686ef2() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_686ef2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl
index bad1827..a837f74 100644
--- a/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_6adac6() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_6adac6() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_6adac6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_6adac6() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_6adac6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl
index f1c5c1f..d53f89c 100644
--- a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_6ec1b4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_6ec1b4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_6ec1b4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_6ec1b4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_6ec1b4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl
index 070db6d..9f84fac 100644
--- a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_6f0d79() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_6f0d79() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_6f0d79();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_6f0d79() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_6f0d79();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl
index 681147c..dc198d9 100644
--- a/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_702c53() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_702c53() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_702c53();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_702c53() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_702c53();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl
index aa44ad0..b9d8411 100644
--- a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_72e5d6() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_72e5d6() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_72e5d6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_72e5d6() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_72e5d6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl
index c52530f..f149da1 100644
--- a/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_79df87() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_79df87() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_79df87();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_79df87() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_79df87();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl
index 1d2ab40..a66e815 100644
--- a/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_7bf826() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_7bf826() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_7bf826();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_7bf826() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_7bf826();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl
index bbba208..253b2b4 100644
--- a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_7f5c2e() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_7f5c2e() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_7f5c2e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_7f5c2e() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_7f5c2e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl
index f6be5c0..f9c21ce 100644
--- a/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8028f3() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8028f3() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_8028f3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8028f3() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_8028f3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl
index b2c772b..6a6bbb3 100644
--- a/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_811679() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_811679() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_811679();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_811679() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_811679();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl
index 7836f70..3b765b8 100644
--- a/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_820596() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_820596() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_820596();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_820596() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_820596();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl
index 22e223d..24adf97 100644
--- a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_83ee5a() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_83ee5a() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_83ee5a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_83ee5a() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_83ee5a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl
index 4d6dcae..38697f6 100644
--- a/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_85d556() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_85d556() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_85d556();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_85d556() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_85d556();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl
index 820ff02..ddf17b0 100644
--- a/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_88ad17() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_88ad17() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_88ad17();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_88ad17() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_88ad17();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl
index f7b5040..4094696 100644
--- a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_8aa4c4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_8aa4c4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_8aa4c4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_8aa4c4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_8aa4c4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl
index 27de4f3..61106bc 100644
--- a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_8deb5e() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_8deb5e() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_8deb5e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_8deb5e() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_8deb5e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl
index f3a64ba..80db1d7 100644
--- a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_8f20bf() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_8f20bf() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_8f20bf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_8f20bf() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_8f20bf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl
index f4f61cd..8b89fb8 100644
--- a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8fca0f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8fca0f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_8fca0f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8fca0f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_8fca0f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl
index 2c5b144..304f830 100644
--- a/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_90340b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_90340b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_90340b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_90340b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_90340b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl
index 5a8a2b5..d51bdd0 100644
--- a/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_9042ab() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_9042ab() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -57,11 +56,11 @@
   textureDimensions_9042ab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_9042ab() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -87,11 +85,11 @@
   textureDimensions_9042ab();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl
index 3c4c7c4..2641780 100644
--- a/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_9393b0() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_9393b0() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_9393b0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_9393b0() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_9393b0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl
index 55587ff..249f885 100644
--- a/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_939fdb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_939fdb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_939fdb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_939fdb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_939fdb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl
index d6d55f8..0df22f8 100644
--- a/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_962dcd() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_962dcd() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_962dcd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_962dcd() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_962dcd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl
index 0b0ea4a..4466a1d 100644
--- a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_9abfe5() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_9abfe5() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_9abfe5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_9abfe5() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_9abfe5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl
index e51dea9..90cfd47 100644
--- a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_9c9c57() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_9c9c57() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_9c9c57();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_9c9c57() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_9c9c57();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl
index ef5dd49..3282b4c 100644
--- a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_9da9e2() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_9da9e2() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_9da9e2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_9da9e2() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_9da9e2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl
index 1ef74f4..06452a6 100644
--- a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_9eb8d8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_9eb8d8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_9eb8d8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_9eb8d8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_9eb8d8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl
index 79420da..6af3f44 100644
--- a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_9f8e46() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_9f8e46() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_9f8e46();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_9f8e46() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_9f8e46();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl
index df0018f..87c69a8 100644
--- a/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_a01845() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_a01845() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_a01845();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_a01845() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_a01845();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl
index 8eceb21..664e204 100644
--- a/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_a7d565() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_a7d565() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_a7d565();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_a7d565() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_a7d565();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl
index b096907..ff71748 100644
--- a/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_a863f2() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_a863f2() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_a863f2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_a863f2() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_a863f2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl
index dbd5448..3053742 100644
--- a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_a9c9c1() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_a9c9c1() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_a9c9c1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_a9c9c1() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_a9c9c1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl
index 6712c43..ddf7bff 100644
--- a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_b0e16d() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_b0e16d() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_b0e16d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_b0e16d() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_b0e16d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl
index 6e65111..27eddda 100644
--- a/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_b3c954() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_b3c954() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_b3c954();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_b3c954() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_b3c954();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl
index eddf418..ee7fbb6 100644
--- a/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_b3e407() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_b3e407() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_b3e407();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_b3e407() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_b3e407();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl
index b9b2835..942e900 100644
--- a/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_b91240() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_b91240() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_b91240();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_b91240() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_b91240();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl
index 2d337f8..b1a73db 100644
--- a/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_ba1481() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_ba1481() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_ba1481();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_ba1481() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_ba1481();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl
index 9be28c7..d53a4f0 100644
--- a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_bb3dde() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_bb3dde() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_bb3dde();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_bb3dde() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_bb3dde();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl
index c288e25..43dbd13 100644
--- a/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_c30e75() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_c30e75() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_c30e75();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_c30e75() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_c30e75();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl
index cfd945e..a05daa2 100644
--- a/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_c7943d() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_c7943d() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_c7943d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_c7943d() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_c7943d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl
index af1aadb..66c6718 100644
--- a/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_cc968c() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_cc968c() {
   int res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_cc968c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_cc968c() {
   int res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_cc968c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl
index 774aa7a..1023423 100644
--- a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_cccc8f() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_cccc8f() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_cccc8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_cccc8f() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_cccc8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl
index b46987f..9946cc2 100644
--- a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cd76a7() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cd76a7() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_cd76a7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cd76a7() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_cd76a7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl
index d1f95a0..ad02097 100644
--- a/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_cdf473() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_cdf473() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_cdf473();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_cdf473() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_cdf473();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl
index f96f64d..b14fbe8 100644
--- a/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_cec841() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_cec841() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_cec841();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_cec841() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_cec841();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl
index d6a4eeb..a41c319 100644
--- a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cf7e43() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cf7e43() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_cf7e43();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cf7e43() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_cf7e43();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl
index ba73335..9dbf7f4 100644
--- a/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_d125bc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_d125bc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_d125bc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_d125bc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_d125bc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl
index e527f04..d434b3e 100644
--- a/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_d83c45() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_d83c45() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_d83c45();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_d83c45() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_d83c45();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl
index c2f50a6..73f127b 100644
--- a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureDimensions_daf7c0() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureDimensions_daf7c0() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_daf7c0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureDimensions_daf7c0() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_daf7c0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl
index 2abfd3c..b1f94d9 100644
--- a/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_dc2dd0() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_dc2dd0() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_dc2dd0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_dc2dd0() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_dc2dd0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl
index bbd4d76..74761e1 100644
--- a/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_e927be() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_e927be() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_e927be();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_e927be() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_e927be();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl
index 4677c34..cc5eb73 100644
--- a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_e9e96c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_e9e96c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_e9e96c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_e9e96c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_e9e96c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl
index 61798af..e9158de 100644
--- a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_ef5b89() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_ef5b89() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_ef5b89();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_ef5b89() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_ef5b89();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl
index 06ce068..89b3428 100644
--- a/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_efc8a4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_efc8a4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_efc8a4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_efc8a4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_efc8a4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl
index 4aa6080..85626e2 100644
--- a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_f60bdb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_f60bdb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl
index 393b87d..f855aee 100644
--- a/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_f7145b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_f7145b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_f7145b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_f7145b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_f7145b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl
index 7f6d8ed..25889f5 100644
--- a/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_f931c7() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_f931c7() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_f931c7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_f931c7() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_f931c7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl
index ff7510b..853f710 100644
--- a/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_fa9859() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_fa9859() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_fa9859();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_fa9859() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_fa9859();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl
index 0a351e6..a8498fe 100644
--- a/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_fb5670() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_fb5670() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -57,11 +56,11 @@
   textureDimensions_fb5670();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_fb5670() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -87,11 +85,11 @@
   textureDimensions_fb5670();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl
index 9173c69..56f7a39 100644
--- a/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_fcac78() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_fcac78() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_fcac78();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_fcac78() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_fcac78();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/01305f.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/01305f.wgsl.expected.glsl
index 23f98df..9c485b2 100644
--- a/test/intrinsics/gen/textureGather/01305f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/01305f.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_01305f() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_01305f() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_01305f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_01305f() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_01305f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/06030a.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/06030a.wgsl.expected.glsl
index 960aef7..6c84a46 100644
--- a/test/intrinsics/gen/textureGather/06030a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/06030a.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_06030a() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_06030a() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_06030a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_06030a() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_06030a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/10c554.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/10c554.wgsl.expected.glsl
index 2eeb693..073e19e 100644
--- a/test/intrinsics/gen/textureGather/10c554.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/10c554.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGather_10c554() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGather_10c554() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureGather_10c554();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGather_10c554() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureGather_10c554();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.glsl
index 688ba1e..dea7b69 100644
--- a/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_15d79c() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_15d79c() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_15d79c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_15d79c() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_15d79c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.glsl
index 8eb5532..ed998ff 100644
--- a/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_2e0ed5() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_2e0ed5() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureGather_2e0ed5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_2e0ed5() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureGather_2e0ed5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.glsl
index 685d4e1..ffbb04b 100644
--- a/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3112e8() {
   vec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3112e8() {
   vec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -59,11 +58,11 @@
   textureGather_3112e8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3112e8() {
   vec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -90,11 +88,11 @@
   textureGather_3112e8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.glsl
index 86c4e69..ea10f93 100644
--- a/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp usamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3c527e() {
   uvec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp usamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3c527e() {
   uvec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -59,11 +58,11 @@
   textureGather_3c527e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp usamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3c527e() {
   uvec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -90,11 +88,11 @@
   textureGather_3c527e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGather/43025d.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/43025d.wgsl.expected.glsl
index 52d72ac..c770aa5 100644
--- a/test/intrinsics/gen/textureGather/43025d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/43025d.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGather_43025d() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGather_43025d() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)));
 }
@@ -59,11 +58,11 @@
   textureGather_43025d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGather_43025d() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)));
 }
@@ -90,11 +88,11 @@
   textureGather_43025d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.glsl
index ce12d8e..c5f4ab3 100644
--- a/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_4f2350() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_4f2350() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_4f2350();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_4f2350() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_4f2350();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.glsl
index b3cea06..b5cd131 100644
--- a/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_51cf0b() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_51cf0b() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_51cf0b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_51cf0b() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_51cf0b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.glsl
index aee3538..2d6eb3a 100644
--- a/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_53ece6() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_53ece6() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureGather_53ece6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_53ece6() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureGather_53ece6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.glsl
index 263ea24..0b79d64 100644
--- a/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_1_arg_2;
 
-
 void textureGather_57bfc6() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_1_arg_2;
 
-
 void textureGather_57bfc6() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_57bfc6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_1_arg_2;
 
-
 void textureGather_57bfc6() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_57bfc6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.glsl
index b78777d..369cafb 100644
--- a/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_587ba3() {
   ivec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_587ba3() {
   ivec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_587ba3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_587ba3() {
   ivec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_587ba3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.glsl
index f8cbb0f..e862fd5 100644
--- a/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_69e0fb() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_69e0fb() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_69e0fb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_69e0fb() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_69e0fb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/93003d.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/93003d.wgsl.expected.glsl
index 7c39728..57c6303 100644
--- a/test/intrinsics/gen/textureGather/93003d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/93003d.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_93003d() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_93003d() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_93003d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_93003d() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_93003d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.glsl
index d0355b6..e872aa3 100644
--- a/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_9a6358() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_9a6358() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)));
 }
@@ -50,17 +49,16 @@
   textureGather_9a6358();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_9a6358() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)));
 }
@@ -74,8 +72,8 @@
   textureGather_9a6358();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.glsl
index 94e82de..614bd67 100644
--- a/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_9efca2() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_9efca2() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_9efca2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_9efca2() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_9efca2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.glsl
index 9069aed..97371b6 100644
--- a/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_bd0b1e() {
   vec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_bd0b1e() {
   vec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_bd0b1e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_bd0b1e() {
   vec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_bd0b1e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.glsl
index bffbce1..1f317e7 100644
--- a/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_c409ae() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_c409ae() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureGather_c409ae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_c409ae() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureGather_c409ae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/c55822.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/c55822.wgsl.expected.glsl
index e099dcf..8ab7901 100644
--- a/test/intrinsics/gen/textureGather/c55822.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/c55822.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp isamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_c55822() {
   ivec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp isamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_c55822() {
   ivec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -59,11 +58,11 @@
   textureGather_c55822();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp isamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_c55822() {
   ivec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -90,11 +88,11 @@
   textureGather_c55822();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.glsl
index 7f2323e..0f00339 100644
--- a/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usamplerCube arg_1_arg_2;
 
-
 void textureGather_e1b67d() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_1_arg_2;
 
-
 void textureGather_e1b67d() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_e1b67d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_1_arg_2;
 
-
 void textureGather_e1b67d() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_e1b67d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.glsl
index 44ff16a..015e775 100644
--- a/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_e9eff6() {
   uvec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_e9eff6() {
   uvec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_e9eff6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_e9eff6() {
   uvec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_e9eff6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.glsl
index 2549939..e0ab81c 100644
--- a/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_f5f3ba() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_f5f3ba() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_f5f3ba();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_f5f3ba() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_f5f3ba();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.glsl
index 2a173d6..9d745f2 100644
--- a/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isamplerCube arg_1_arg_2;
 
-
 void textureGather_f7995a() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_1_arg_2;
 
-
 void textureGather_f7995a() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_f7995a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_1_arg_2;
 
-
 void textureGather_f7995a() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_f7995a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.glsl
index b4282df..c76101c 100644
--- a/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGatherCompare_182fd4() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGatherCompare_182fd4() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_182fd4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGatherCompare_182fd4() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_182fd4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.glsl
index ff0a64b..94a4141 100644
--- a/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGatherCompare_60d2d1() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGatherCompare_60d2d1() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -59,11 +58,11 @@
   textureGatherCompare_60d2d1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGatherCompare_60d2d1() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -90,11 +88,11 @@
   textureGatherCompare_60d2d1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.glsl
index e408d49..2694554 100644
--- a/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_6d9352() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_6d9352() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_6d9352();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_6d9352() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_6d9352();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.glsl
index 58dd62c..df3b334 100644
--- a/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_6f1267() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_6f1267() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_6f1267();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_6f1267() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_6f1267();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.glsl
index 5a93080..904a0a5 100644
--- a/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_783e65() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_783e65() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_783e65();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_783e65() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_783e65();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.glsl
index f535ee0..0c1fcc2 100644
--- a/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_a5f587() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_a5f587() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_a5f587();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_a5f587() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_a5f587();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl
index b4e2da9..5412f67 100644
--- a/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_19cf87() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 0).x;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_19cf87() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 0).x;
 }
@@ -48,16 +47,15 @@
   textureLoad_19cf87();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_19cf87() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 0).x;
 }
@@ -71,8 +69,8 @@
   textureLoad_19cf87();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl
index 60fca1f..fb511ee 100644
--- a/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureLoad_1b8588() {
   uvec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureLoad_1b8588() {
   uvec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -57,11 +56,11 @@
   textureLoad_1b8588();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureLoad_1b8588() {
   uvec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -87,11 +85,11 @@
   textureLoad_1b8588();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl
index 98ac52a..73e9fa2 100644
--- a/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureLoad_1f2016() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureLoad_1f2016() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_1f2016();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureLoad_1f2016() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_1f2016();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl
index b316707..9682ec0 100644
--- a/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_484344() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_484344() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_484344();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_484344() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_484344();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl
index 9466096..5dd74b9 100644
--- a/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureLoad_4fd803() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureLoad_4fd803() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_4fd803();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureLoad_4fd803() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_4fd803();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl
index ac08abf..e3c138f 100644
--- a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureLoad_5a2f9d() {
   ivec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureLoad_5a2f9d() {
   ivec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -57,11 +56,11 @@
   textureLoad_5a2f9d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureLoad_5a2f9d() {
   ivec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -87,11 +85,11 @@
   textureLoad_5a2f9d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl
index 8964b6c..3470f27 100644
--- a/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureLoad_6154d4() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureLoad_6154d4() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_6154d4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureLoad_6154d4() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_6154d4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl
index f7e9072..527ff52 100644
--- a/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 1).x;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 1).x;
 }
@@ -48,16 +47,15 @@
   textureLoad_6273b1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 1).x;
 }
@@ -71,8 +69,8 @@
   textureLoad_6273b1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl
index 7452a9c..35d4409 100644
--- a/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureLoad_79e697() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureLoad_79e697() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_79e697();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureLoad_79e697() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_79e697();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl
index 2f360e6..87cab79 100644
--- a/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureLoad_7c90e5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureLoad_7c90e5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_7c90e5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureLoad_7c90e5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_7c90e5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl
index 49fbabd..0ae7c91 100644
--- a/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureLoad_81c381() {
   vec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureLoad_81c381() {
   vec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -57,11 +56,11 @@
   textureLoad_81c381();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureLoad_81c381() {
   vec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -87,11 +85,11 @@
   textureLoad_81c381();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl
index 65df325..6240bc6 100644
--- a/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_87be85() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_87be85() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_87be85();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_87be85() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_87be85();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl
index ecb0930..fc14c7a 100644
--- a/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_8acf41() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_8acf41() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_8acf41();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_8acf41() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_8acf41();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl
index fae43f3..78ec7ba 100644
--- a/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_9b2667() {
   float res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0).x;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_9b2667() {
   float res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0).x;
 }
@@ -48,16 +47,15 @@
   textureLoad_9b2667();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_9b2667() {
   float res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0).x;
 }
@@ -71,8 +69,8 @@
   textureLoad_9b2667();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl
index 215da7e..bc1f029 100644
--- a/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_a583c9() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_a583c9() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -48,16 +47,15 @@
   textureLoad_a583c9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_a583c9() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -71,8 +69,8 @@
   textureLoad_a583c9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl
index 4553ca8..40ac768 100644
--- a/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureLoad_a9a9f5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureLoad_a9a9f5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_a9a9f5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureLoad_a9a9f5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_a9a9f5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl
index 3a871ed..2425099 100644
--- a/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureLoad_c2a480() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureLoad_c2a480() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_c2a480();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureLoad_c2a480() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_c2a480();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl
index 83deeea..a5fbbe2 100644
--- a/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureLoad_c378ee() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureLoad_c378ee() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -48,16 +47,15 @@
   textureLoad_c378ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureLoad_c378ee() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -71,8 +69,8 @@
   textureLoad_c378ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl
index fabf333..9aafc24 100644
--- a/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureLoad_e3d2cc() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureLoad_e3d2cc() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -48,16 +47,15 @@
   textureLoad_e3d2cc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureLoad_e3d2cc() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -71,8 +69,8 @@
   textureLoad_e3d2cc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl
index 7ac4790..f67b0d8 100644
--- a/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_024820() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_024820() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_024820();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_024820() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_024820();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl
index 2a991e3..1433d32 100644
--- a/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLayers_053df7() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLayers_053df7() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_053df7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLayers_053df7() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_053df7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl
index 29bd7cf..8120d25 100644
--- a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_058cc3() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_058cc3() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_058cc3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_058cc3() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_058cc3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl
index 656c305..85d6768 100644
--- a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_09d05d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_09d05d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_09d05d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_09d05d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_09d05d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl
index a0e8e7a..0c9751a 100644
--- a/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_13b4ce() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_13b4ce() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_13b4ce();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_13b4ce() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_13b4ce();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl
index f29f856..71288c5 100644
--- a/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_22e53b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_22e53b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_22e53b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_22e53b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_22e53b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl
index 7287b21..edd3653 100644
--- a/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_562013() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_562013() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_562013();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_562013() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_562013();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl
index 7a082d8..6cb0d2d 100644
--- a/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_5d59cd() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_5d59cd() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_5d59cd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_5d59cd() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_5d59cd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl
index 7e4ab5a..2c22d99 100644
--- a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_68a65b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_68a65b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_68a65b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_68a65b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_68a65b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl
index 0a9915d..2dc89f1 100644
--- a/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_778bd1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_778bd1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_778bd1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_778bd1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_778bd1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl
index c7b6605..7951783 100644
--- a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_7f1937() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_7f1937() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_7f1937();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_7f1937() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_7f1937();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl
index c7975e6..00b6c8d 100644
--- a/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLayers_85f980() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLayers_85f980() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_85f980();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLayers_85f980() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_85f980();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl
index 90a5609..835800a 100644
--- a/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLayers_87953e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLayers_87953e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_87953e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLayers_87953e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_87953e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl
index f200d42..9fa11ee 100644
--- a/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLayers_893e7c() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLayers_893e7c() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_893e7c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLayers_893e7c() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_893e7c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl
index 7233f2f..ae57eb4 100644
--- a/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_9700fb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_9700fb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_9700fb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_9700fb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_9700fb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl
index 4c6bf3f..875fca0 100644
--- a/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_a216d2() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_a216d2() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_a216d2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_a216d2() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_a216d2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl
index 69bf230..451e755 100644
--- a/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_cd5dc8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_cd5dc8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_cd5dc8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_cd5dc8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_cd5dc8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl
index a28de70..ab739fc 100644
--- a/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_d5b228() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_d5b228() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_d5b228();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_d5b228() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_d5b228();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl
index dd53e42..2b8859d 100644
--- a/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_e31be1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_e31be1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_e31be1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_e31be1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_e31be1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl
index 003cf83..007b6ac 100644
--- a/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_e653c0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_e653c0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_e653c0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_e653c0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_e653c0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl
index 259f4f6..ab9eb50 100644
--- a/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ee942f() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ee942f() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_ee942f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ee942f() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_ee942f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl
index 5fae35e..3a29646 100644
--- a/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_f33005() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_f33005() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_f33005();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_f33005() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_f33005();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl
index 6114dc7..60679ad 100644
--- a/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_fcec98() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_fcec98() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_fcec98();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_fcec98() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_fcec98();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl
index 264efcb..f662bf5 100644
--- a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ff5e89() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ff5e89() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_ff5e89();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ff5e89() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_ff5e89();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl
index ebffe19..8af1de3 100644
--- a/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_076cb5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_076cb5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_076cb5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_076cb5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_076cb5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl
index f34065a..f5ea75b 100644
--- a/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureNumLevels_080d95() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureNumLevels_080d95() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_080d95();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureNumLevels_080d95() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_080d95();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl
index 0c66620..f014bea 100644
--- a/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureNumLevels_09ddd0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureNumLevels_09ddd0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_09ddd0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureNumLevels_09ddd0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_09ddd0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl
index fc1eb9c..b88b1be 100644
--- a/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_105988() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_105988() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_105988();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_105988() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_105988();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl
index 3480f63..7c231ca 100644
--- a/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureNumLevels_1e6f3b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureNumLevels_1e6f3b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_1e6f3b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureNumLevels_1e6f3b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_1e6f3b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl
index 08f4588..8c20d6e 100644
--- a/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureNumLevels_23f750() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureNumLevels_23f750() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_23f750();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureNumLevels_23f750() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_23f750();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl
index 7e37a9e..b1131a0 100644
--- a/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_2c3575() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_2c3575() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_2c3575();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_2c3575() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_2c3575();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl
index f430b8a..ddc4063 100644
--- a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureNumLevels_32a0ae() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureNumLevels_32a0ae() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_32a0ae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureNumLevels_32a0ae() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_32a0ae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl
index 0177cb0..fcc74f7 100644
--- a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLevels_5101cf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLevels_5101cf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_5101cf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLevels_5101cf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_5101cf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl
index b7da5d4..11b5d55 100644
--- a/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureNumLevels_51b5bb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureNumLevels_51b5bb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_51b5bb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureNumLevels_51b5bb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_51b5bb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl
index 5827c9b..ace3b6d 100644
--- a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_897aaf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_897aaf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_897aaf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_897aaf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_897aaf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl
index aafada5..8fcea69 100644
--- a/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureNumLevels_9da7a5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureNumLevels_9da7a5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_9da7a5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureNumLevels_9da7a5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_9da7a5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl
index 1c5cc0c..8c92d9a 100644
--- a/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLevels_a91c03() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLevels_a91c03() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_a91c03();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLevels_a91c03() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_a91c03();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl
index 0b190ab..00c6865 100644
--- a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_aee7c8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_aee7c8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_aee7c8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_aee7c8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_aee7c8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl
index 8c7223c..9516878 100644
--- a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_b1b12b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_b1b12b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_b1b12b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_b1b12b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_b1b12b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl
index cd0d70f..d103725 100644
--- a/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureNumLevels_b4f5ea() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureNumLevels_b4f5ea() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_b4f5ea();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureNumLevels_b4f5ea() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_b4f5ea();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl
index 30de2c6..aa22cc7 100644
--- a/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLevels_d004a9() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLevels_d004a9() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_d004a9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLevels_d004a9() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_d004a9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl
index 9868029..565b95f 100644
--- a/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureNumLevels_dca09e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureNumLevels_dca09e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_dca09e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureNumLevels_dca09e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_dca09e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl
index 44e6b39..c955cb2 100644
--- a/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_e67231() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_e67231() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_e67231();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_e67231() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_e67231();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl
index eb232ea..77747c5 100644
--- a/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureNumLevels_ed078b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureNumLevels_ed078b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_ed078b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureNumLevels_ed078b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_ed078b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl
index 4636ea7..9d7d150 100644
--- a/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLevels_f46ec6() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLevels_f46ec6() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_f46ec6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLevels_f46ec6() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_f46ec6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl
index c808844..3924bda 100644
--- a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_f5828d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_f5828d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_f5828d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_f5828d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_f5828d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl
index 2679239..81de2d0 100644
--- a/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_2c6f14() {
   int res = textureSamples(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_2c6f14() {
   int res = textureSamples(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumSamples_2c6f14();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_2c6f14() {
   int res = textureSamples(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumSamples_2c6f14();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl
index 4edac8a..bb0a17a 100644
--- a/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureNumSamples_42f8bb() {
   int res = textureSamples(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureNumSamples_42f8bb() {
   int res = textureSamples(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumSamples_42f8bb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureNumSamples_42f8bb() {
   int res = textureSamples(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumSamples_42f8bb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl b/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl
index 2a6a32a..98c556a 100644
--- a/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureNumSamples_449d23() {
   int res = textureSamples(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureNumSamples_449d23() {
   int res = textureSamples(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumSamples_449d23();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureNumSamples_449d23() {
   int res = textureSamples(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumSamples_449d23();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl
index 3ac2707..1e01150 100644
--- a/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = textureSamples(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = textureSamples(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumSamples_a3c8a0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = textureSamples(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumSamples_a3c8a0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl
index 3be69b9..77a763e 100644
--- a/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSample_02aa9b() {
   vec4 res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
 }
@@ -12,8 +11,8 @@
   textureSample_02aa9b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl
index 1215f7d..cf23155 100644
--- a/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSample_100dc0() {
   vec4 res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
 }
@@ -12,8 +11,8 @@
   textureSample_100dc0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl
index e2a25d5..4541476 100644
--- a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSample_38bbb9() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f)).x;
 }
@@ -12,8 +11,8 @@
   textureSample_38bbb9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl
index d41bb79..04c2dab 100644
--- a/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSample_3b50bd() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -12,8 +11,8 @@
   textureSample_3b50bd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl
index 9ef770e..0c0a8bb 100644
--- a/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSample_4dd1bf() {
   vec4 res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)));
 }
@@ -14,11 +13,11 @@
   textureSample_4dd1bf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl
index f55a6ad..fa29227 100644
--- a/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSample_51b514() {
   vec4 res = texture(arg_0_arg_1, vec2(0.0f, 0.0f));
 }
@@ -12,8 +11,8 @@
   textureSample_51b514();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl
index 8e0be0b..def5be6 100644
--- a/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSample_667d76() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0)).x;
 }
@@ -12,8 +11,8 @@
   textureSample_667d76();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl
index 06284d4..6189a03 100644
--- a/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSample_6717ca() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)));
 }
@@ -12,8 +11,8 @@
   textureSample_6717ca();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl
index 0c8a04b..1bf2893 100644
--- a/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler1D arg_0_arg_1;
 
-
 void textureSample_6e64fb() {
   vec4 res = texture(arg_0_arg_1, 1.0f);
 }
@@ -14,11 +13,11 @@
   textureSample_6e64fb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl
index 78556ad..4058d9b 100644
--- a/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSample_7c3baa() {
   vec4 res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -12,8 +11,8 @@
   textureSample_7c3baa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl
index e2e2ddd..ebd7720 100644
--- a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSample_7e9ffd() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1))).x;
 }
@@ -12,8 +11,8 @@
   textureSample_7e9ffd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl
index 116b359..68f3566 100644
--- a/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSample_8522e7() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0)).x;
 }
@@ -12,8 +11,8 @@
   textureSample_8522e7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl
index 76d4a08..54e6cbd 100644
--- a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSample_c2f4e8() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1))).x;
 }
@@ -14,11 +13,11 @@
   textureSample_c2f4e8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl
index acb4c23..c014268 100644
--- a/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSample_e53267() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -12,8 +11,8 @@
   textureSample_e53267();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl
index 8f10fda..8006955 100644
--- a/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSample_ea7030() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f)).x;
 }
@@ -12,8 +11,8 @@
   textureSample_ea7030();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl
index 326544d..fb0329d 100644
--- a/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleBias_53b9f7() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_53b9f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl
index 923d6d0..1091395 100644
--- a/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleBias_65ac50() {
   vec4 res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_65ac50();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl
index 8963a2b..d920205 100644
--- a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleBias_6a9113() {
   vec4 res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_6a9113();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl
index 0a16afa..1d24e97 100644
--- a/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleBias_80e579() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_80e579();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl
index 7acf4f6..eceb366 100644
--- a/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleBias_81c19a() {
   vec4 res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_81c19a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl
index 1707cd8..84c7017 100644
--- a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleBias_d3fa1b() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_d3fa1b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl
index c643170..478b320 100644
--- a/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleBias_df91bb() {
   vec4 res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_df91bb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl
index ab89f32..086831e 100644
--- a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleBias_eed7c4() {
   vec4 res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -14,11 +13,11 @@
   textureSampleBias_eed7c4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl
index 7d60a48..1231a76 100644
--- a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompare_25fcd1() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_25fcd1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl
index 3afff8b..7c2b7a6 100644
--- a/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompare_3a5923() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_3a5923();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl
index 49d1c57..66c6f93 100644
--- a/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleCompare_63fb83() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_63fb83();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl
index feff3b4..c0ae874 100644
--- a/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompare_98b85c() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_98b85c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl
index 924fac9..c7d428c 100644
--- a/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleCompare_a3ca7e() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -14,11 +13,11 @@
   textureSampleCompare_a3ca7e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl
index 2642223..8c04e11 100644
--- a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompare_dd431d() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_dd431d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl
index fa864b0..7f8280e 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_011a8f() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_011a8f() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_011a8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_011a8f() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_011a8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl
index e9e93c1..a994097 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1116ed() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'texture' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'texture' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1116ed() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_1116ed();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1116ed() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_1116ed();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl
index e4784a2..5ec997d 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1568e3() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'texture' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'texture' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1568e3() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_1568e3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1568e3() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_1568e3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl
index 7a934c1..b3a2099 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_2ad2b1() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'texture' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'texture' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_2ad2b1() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_2ad2b1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_2ad2b1() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_2ad2b1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl
index 6f116fe..bdbfe50 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_4cf3a2() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_4cf3a2() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -59,11 +58,11 @@
   textureSampleCompareLevel_4cf3a2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_4cf3a2() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -90,11 +88,11 @@
   textureSampleCompareLevel_4cf3a2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl
index 40a07de..da1ac6c 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_f8121c() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_f8121c() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_f8121c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_f8121c() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_f8121c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl
index dd3d506..7b9b193 100644
--- a/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_21402b() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_21402b() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_21402b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_21402b() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_21402b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl
index a29e182..3a47f0d 100644
--- a/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_2ecd8f() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_2ecd8f() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_2ecd8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_2ecd8f() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_2ecd8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl
index 93a50fe..107a45f 100644
--- a/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_468f88() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_468f88() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_468f88();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_468f88() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_468f88();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl
index 139e8a1..bfed096 100644
--- a/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_521263() {
   vec4 res = textureGrad(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_521263() {
   vec4 res = textureGrad(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_521263();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_521263() {
   vec4 res = textureGrad(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_521263();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl
index c8bf7a0..c740f15 100644
--- a/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleGrad_5312f4() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleGrad_5312f4() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_5312f4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleGrad_5312f4() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_5312f4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl
index 50eb21e..b8527be 100644
--- a/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_872f00() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_872f00() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_872f00();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_872f00() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_872f00();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl
index 0053fca..331edfe 100644
--- a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleGrad_e383db() {
   vec4 res = textureGrad(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleGrad_e383db() {
   vec4 res = textureGrad(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -59,11 +58,11 @@
   textureSampleGrad_e383db();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleGrad_e383db() {
   vec4 res = textureGrad(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -90,11 +88,11 @@
   textureSampleGrad_e383db();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl
index fb59338..ef27adf 100644
--- a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_e9a2f7() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_e9a2f7() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_e9a2f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_e9a2f7() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_e9a2f7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl
index 3eca5d3..cb419ca 100644
--- a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_02be59() {
   float res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_02be59() {
   float res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_02be59();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_02be59() {
   float res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_02be59();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl
index ba6f146..dbc1453 100644
--- a/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_0bdd9a() {
   vec4 res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_0bdd9a() {
   vec4 res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -59,11 +58,11 @@
   textureSampleLevel_0bdd9a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_0bdd9a() {
   vec4 res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -90,11 +88,11 @@
   textureSampleLevel_0bdd9a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl
index 888e5c0..7722303 100644
--- a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_1b0291() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 0).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_1b0291() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 0).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_1b0291();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_1b0291() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 0).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_1b0291();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl
index b04ff20..c383326 100644
--- a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_1bf73e() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_1bf73e() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_1bf73e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_1bf73e() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_1bf73e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl
index 7f799d2..394a15c 100644
--- a/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_302be4() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_302be4() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_302be4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_302be4() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_302be4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl
index 5df230a..50c9e1e 100644
--- a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_47daa4() {
   float res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_47daa4() {
   float res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_47daa4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_47daa4() {
   float res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_47daa4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl
index 2e13b34..7bff4d0 100644
--- a/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_690d95() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_690d95() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_690d95();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_690d95() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_690d95();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl
index 6e452b8..2484ec5 100644
--- a/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_979816() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_979816() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_979816();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_979816() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_979816();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl
index c46fd86..e660e98 100644
--- a/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_9bd37b() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_9bd37b() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_9bd37b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_9bd37b() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_9bd37b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl
index df5321c..2a2dadc 100644
--- a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_a4af26() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_a4af26() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_a4af26();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_a4af26() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_a4af26();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl
index 89cb1f2..2c839e5 100644
--- a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_abfcc0() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_abfcc0() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_abfcc0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_abfcc0() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_abfcc0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl
index d4ae3fe..f6c7b8a 100644
--- a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_ae5e39() {
   float res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_ae5e39() {
   float res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
 }
@@ -59,11 +58,11 @@
   textureSampleLevel_ae5e39();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_ae5e39() {
   float res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
 }
@@ -90,11 +88,11 @@
   textureSampleLevel_ae5e39();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl
index ed6448c..cfdb547 100644
--- a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_ba93b3() {
   float res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_ba93b3() {
   float res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_ba93b3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_ba93b3() {
   float res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_ba93b3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl
index f65d6f6..97a3f72 100644
--- a/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_c32df7() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_c32df7() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_c32df7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_c32df7() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_c32df7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl
index ddb00ef..c4375e5 100644
--- a/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_c6aca6() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_c6aca6() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_c6aca6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_c6aca6() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_c6aca6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl
index 93076e8..37a91f0 100644
--- a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_05ce15() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_05ce15() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_05ce15();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_05ce15() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_05ce15();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl
index af34f02..19110db 100644
--- a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_064c7f() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_064c7f() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -57,11 +56,11 @@
   textureStore_064c7f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_064c7f() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -87,11 +85,11 @@
   textureStore_064c7f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl
index 97a4082..85d4b9f 100644
--- a/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_068641() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_068641() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_068641();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_068641() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_068641();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl
index d49a59a..e127986 100644
--- a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_0af6b5() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_0af6b5() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_0af6b5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_0af6b5() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_0af6b5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl
index 1c04a33..cdd5c97 100644
--- a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_0c3dff() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_0c3dff() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_0c3dff();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_0c3dff() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_0c3dff();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl
index 23bcd0b..f893594 100644
--- a/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_102722() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_102722() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -58,11 +57,11 @@
   textureStore_102722();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_102722() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -89,11 +87,11 @@
   textureStore_102722();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl
index dcca257..231d6ff 100644
--- a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_1bbd08() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_1bbd08() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_1bbd08();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_1bbd08() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_1bbd08();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl
index 3661048..906d185 100644
--- a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_1c02e7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_1c02e7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_1c02e7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_1c02e7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_1c02e7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl
index d6b90eb..6de31ca 100644
--- a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_22d955() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_22d955() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_22d955();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_22d955() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_22d955();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl
index efe7756..9398a7e 100644
--- a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_26bf70() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_26bf70() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_26bf70();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_26bf70() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_26bf70();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl
index 17f4bc9..9c2d7ff 100644
--- a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_2796b4() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_2796b4() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -57,11 +56,11 @@
   textureStore_2796b4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_2796b4() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -87,11 +85,11 @@
   textureStore_2796b4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl
index 8e2b8c4..4b15eaa 100644
--- a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ac6c7() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ac6c7() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_2ac6c7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ac6c7() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_2ac6c7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl
index 6e8f226..de17a70 100644
--- a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_2eb2a4() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_2eb2a4() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -58,11 +57,11 @@
   textureStore_2eb2a4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_2eb2a4() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -89,11 +87,11 @@
   textureStore_2eb2a4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl
index 6403f80..6c5f37e 100644
--- a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ed2a3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ed2a3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_2ed2a3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ed2a3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_2ed2a3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl
index 4defeef..cc698dc 100644
--- a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_31745b() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_31745b() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -57,11 +56,11 @@
   textureStore_31745b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_31745b() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -87,11 +85,11 @@
   textureStore_31745b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl
index 0271e9c..226f284 100644
--- a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_32f368() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_32f368() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_32f368();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_32f368() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_32f368();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl
index 0803632..0a51372 100644
--- a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_331aee() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_331aee() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_331aee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_331aee() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_331aee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl
index 8b8affc..2a5a1be 100644
--- a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_38e8d7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_38e8d7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_38e8d7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_38e8d7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_38e8d7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl
index c89eb91..9534df4 100644
--- a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_3a52ac() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_3a52ac() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_3a52ac();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_3a52ac() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_3a52ac();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl
index 8f114f9..6dccb92 100644
--- a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_3bb7a1() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_3bb7a1() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_3bb7a1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_3bb7a1() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_3bb7a1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl
index 1cb628c..dc7578c 100644
--- a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_3bec15() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_3bec15() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -58,11 +57,11 @@
   textureStore_3bec15();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_3bec15() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -89,11 +87,11 @@
   textureStore_3bec15();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl
index a8dff3e..4051914 100644
--- a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_441ba8() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_441ba8() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_441ba8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_441ba8() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_441ba8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl
index 0359847..848ecfb 100644
--- a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_4fc057() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_4fc057() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_4fc057();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_4fc057() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_4fc057();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl
index edaf329..7c355c2 100644
--- a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_5a2f8f() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_5a2f8f() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -58,11 +57,11 @@
   textureStore_5a2f8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_5a2f8f() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -89,11 +87,11 @@
   textureStore_5a2f8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl
index 8990d5e..2f11b81 100644
--- a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_60975f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_60975f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_60975f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_60975f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_60975f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl
index 15e66fc..05c42da 100644
--- a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_682fd6() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_682fd6() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -57,11 +56,11 @@
   textureStore_682fd6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_682fd6() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -87,11 +85,11 @@
   textureStore_682fd6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl
index 668e90c..40e7774 100644
--- a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_6b75c3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_6b75c3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_6b75c3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_6b75c3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_6b75c3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl
index 0993568..648d740 100644
--- a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_6b80d2() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_6b80d2() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -58,11 +57,11 @@
   textureStore_6b80d2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_6b80d2() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -89,11 +87,11 @@
   textureStore_6b80d2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl
index 95cd722..e42d2a7 100644
--- a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_6cff2e() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_6cff2e() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_6cff2e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_6cff2e() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_6cff2e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl
index 1946796..40998d2 100644
--- a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_6da692() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_6da692() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_6da692();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_6da692() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_6da692();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl
index e528e3f..85c9f9f 100644
--- a/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_731349() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_731349() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_731349();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_731349() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_731349();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl
index 69c93ef..b752f92 100644
--- a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_752da6() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_752da6() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_752da6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_752da6() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_752da6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl
index eecdcaa..90de71e 100644
--- a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_77c0ae() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_77c0ae() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_77c0ae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_77c0ae() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_77c0ae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl
index b67042b..aaa1cde 100644
--- a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_7cec8d() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_7cec8d() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_7cec8d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_7cec8d() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_7cec8d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl
index c36928a..ca11490 100644
--- a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_7f7fae() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_7f7fae() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_7f7fae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_7f7fae() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_7f7fae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl
index b7b0580..96b4132 100644
--- a/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_804942() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_804942() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_804942();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_804942() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_804942();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl
index 88e7036..c3a8b69 100644
--- a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_805dae() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_805dae() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_805dae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_805dae() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_805dae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl
index 1d2ea07..78ab18d 100644
--- a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_83bcc1() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_83bcc1() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -57,11 +56,11 @@
   textureStore_83bcc1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_83bcc1() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -87,11 +85,11 @@
   textureStore_83bcc1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl
index ed49302..a0a3487 100644
--- a/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_872747() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_872747() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -57,11 +56,11 @@
   textureStore_872747();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_872747() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -87,11 +85,11 @@
   textureStore_872747();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl
index 67e1537..0a9786f 100644
--- a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_8e0479() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_8e0479() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_8e0479();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_8e0479() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_8e0479();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl
index 633eaa4..13f51c8 100644
--- a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_8f71a1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_8f71a1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_8f71a1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_8f71a1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_8f71a1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl
index d6d0f3c..e72df96 100644
--- a/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_969534() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_969534() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -58,11 +57,11 @@
   textureStore_969534();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_969534() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -89,11 +87,11 @@
   textureStore_969534();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl
index ba254e6..6cf74ae 100644
--- a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_9a3ecc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_9a3ecc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_9a3ecc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_9a3ecc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_9a3ecc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl
index 17f8574..84d3e1d 100644
--- a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_9d9cd5() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_9d9cd5() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_9d9cd5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_9d9cd5() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_9d9cd5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl
index e42de05..3c61f8d 100644
--- a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_9e3ec5() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_9e3ec5() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_9e3ec5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_9e3ec5() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_9e3ec5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl
index cf92f73..9aa0f0a 100644
--- a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ac67aa() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ac67aa() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -57,11 +56,11 @@
   textureStore_ac67aa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ac67aa() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -87,11 +85,11 @@
   textureStore_ac67aa();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl
index ddedb0f..005a4b0 100644
--- a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_b706b1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_b706b1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_b706b1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_b706b1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_b706b1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl
index c2606c1..2444cd8 100644
--- a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_bbcb7f() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_bbcb7f() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_bbcb7f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_bbcb7f() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_bbcb7f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl
index 982658a..191c3d8 100644
--- a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_be6e30() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_be6e30() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_be6e30();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_be6e30() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_be6e30();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl
index de8414d..cd820c6 100644
--- a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_bf775c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_bf775c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -58,11 +57,11 @@
   textureStore_bf775c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_bf775c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -89,11 +87,11 @@
   textureStore_bf775c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl
index e513d6a..41ebd4f 100644
--- a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_c5af1e() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_c5af1e() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_c5af1e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_c5af1e() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_c5af1e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl
index 056432f..1b134c9 100644
--- a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_c863be() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_c863be() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -57,11 +56,11 @@
   textureStore_c863be();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_c863be() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -87,11 +85,11 @@
   textureStore_c863be();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl
index dbb4a12..f5e63f8 100644
--- a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_d73b5c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_d73b5c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -57,11 +56,11 @@
   textureStore_d73b5c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_d73b5c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -87,11 +85,11 @@
   textureStore_d73b5c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl
index d8946a4..a03d447 100644
--- a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_dd7d81() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_dd7d81() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_dd7d81();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_dd7d81() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_dd7d81();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl
index 05b042f..22bef32 100644
--- a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_dde364() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_dde364() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -57,11 +56,11 @@
   textureStore_dde364();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_dde364() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -87,11 +85,11 @@
   textureStore_dde364();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl
index d9d00e6..fb1e77d 100644
--- a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_e885e8() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_e885e8() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_e885e8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_e885e8() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_e885e8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl
index cd5619d..614d7fd 100644
--- a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_eb702f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_eb702f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_eb702f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_eb702f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_eb702f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl
index 4d0dd64..e86a52f 100644
--- a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_eb78b9() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_eb78b9() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_eb78b9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_eb78b9() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_eb78b9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl
index 39fc638..d61f674 100644
--- a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_ee6acc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_ee6acc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -57,11 +56,11 @@
   textureStore_ee6acc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_ee6acc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -87,11 +85,11 @@
   textureStore_ee6acc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl
index 50cd686..9947cb5 100644
--- a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ef9f2f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ef9f2f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_ef9f2f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ef9f2f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_ef9f2f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl
index f8cc2ce..d8adbad 100644
--- a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_f8dead() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_f8dead() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_f8dead();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_f8dead() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_f8dead();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl
index f188d4a..7947908 100644
--- a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_f9be83() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_f9be83() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -57,11 +56,11 @@
   textureStore_f9be83();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_f9be83() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -87,11 +85,11 @@
   textureStore_f9be83();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl
index b9c043d..4c10233 100644
--- a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_fb9a8f() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_fb9a8f() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -58,11 +57,11 @@
   textureStore_fb9a8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_fb9a8f() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -89,11 +87,11 @@
   textureStore_fb9a8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl
index c8c16c9..1a0cd07 100644
--- a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_fbf53f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_fbf53f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_fbf53f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_fbf53f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_fbf53f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl
index d526e53..cdac204 100644
--- a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_2585cd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_2585cd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl b/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl
index 690387c..006212b 100644
--- a/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_31d679();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_31d679();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl
index ec4cdee..0b22417 100644
--- a/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_31e37e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_31e37e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl
index 7651b41f..56568c4 100644
--- a/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_4ce359();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_4ce359();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl
index 7a5f776..4a9f2d1 100644
--- a/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_4dc9a1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_4dc9a1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl b/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl
index 78e72ea..10e90c4 100644
--- a/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_854336();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_854336();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl
index 8944817..6f8842b 100644
--- a/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_c1b600();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_c1b600();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl
index 1efffd4..99f51a5 100644
--- a/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_d8f8ba();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_d8f8ba();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl
index 80ab4e8..d608809 100644
--- a/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_ed4bdc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_ed4bdc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl b/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl
index cdc4839..7c0765d 100644
--- a/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl
+++ b/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   trunc_562d05();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   trunc_562d05();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl
index 0d50be7..dedadcc 100644
--- a/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   trunc_e183aa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   trunc_e183aa();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl
index 9bb7a77..7ebd607 100644
--- a/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl
+++ b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   trunc_eb83df();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   trunc_eb83df();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl
index 653a58c..feddb14 100644
--- a/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   trunc_f370d3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   trunc_f370d3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl
index be890b1..7dfd286 100644
--- a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp highp uint' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
@@ -65,11 +66,11 @@
   unpack2x16float_32a5cf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp mediump uint' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
@@ -99,11 +100,11 @@
   unpack2x16float_32a5cf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp highp uint' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl
index ed824f9..70c2c61 100644
--- a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl
@@ -29,6 +29,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -37,7 +39,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -67,11 +68,11 @@
   unpack2x16snorm_b4aea6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -102,11 +103,11 @@
   unpack2x16snorm_b4aea6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl
index 0e3d558..7b78901 100644
--- a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl
@@ -29,6 +29,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -37,7 +39,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -67,11 +68,11 @@
   unpack2x16unorm_7699c0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -102,11 +103,11 @@
   unpack2x16unorm_7699c0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl
index b95e186..6a7ff11 100644
--- a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl
@@ -29,6 +29,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -37,7 +39,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -67,11 +68,11 @@
   unpack4x8snorm_523fb3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -102,11 +103,11 @@
   unpack4x8snorm_523fb3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl
index 3c80c76..ab15ddd 100644
--- a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl
@@ -29,6 +29,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -37,7 +39,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -67,11 +68,11 @@
   unpack4x8unorm_750c74();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -102,11 +103,11 @@
   unpack4x8unorm_750c74();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
index c099196..0ce18a6 100644
--- a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
@@ -10,8 +10,8 @@
   workgroupBarrier_a17f7f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/ignore/call.wgsl.expected.glsl b/test/intrinsics/ignore/call.wgsl.expected.glsl
index ce8e2b7..d74ad98 100644
--- a/test/intrinsics/ignore/call.wgsl.expected.glsl
+++ b/test/intrinsics/ignore/call.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   f(1, 2, 3);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/ignore/runtime_array.wgsl.expected.glsl b/test/intrinsics/ignore/runtime_array.wgsl.expected.glsl
index 79a70ea..679f1cb 100644
--- a/test/intrinsics/ignore/runtime_array.wgsl.expected.glsl
+++ b/test/intrinsics/ignore/runtime_array.wgsl.expected.glsl
@@ -5,18 +5,16 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer S_1 {
   int arr[];
 } s;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   s.arr;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/ignore/storage_buffer.wgsl.expected.glsl b/test/intrinsics/ignore/storage_buffer.wgsl.expected.glsl
index 1f86391..42d9060 100644
--- a/test/intrinsics/ignore/storage_buffer.wgsl.expected.glsl
+++ b/test/intrinsics/ignore/storage_buffer.wgsl.expected.glsl
@@ -16,15 +16,14 @@
 layout(binding = 0) buffer S_1 {
   int i;
 } s;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   s;
   s.i;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/ignore/uniform_buffer.wgsl.expected.glsl b/test/intrinsics/ignore/uniform_buffer.wgsl.expected.glsl
index 0470473..1bd914a 100644
--- a/test/intrinsics/ignore/uniform_buffer.wgsl.expected.glsl
+++ b/test/intrinsics/ignore/uniform_buffer.wgsl.expected.glsl
@@ -23,8 +23,8 @@
   u.i;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/modf.wgsl.expected.glsl b/test/intrinsics/modf.wgsl.expected.glsl
index 82a4213..b258447 100644
--- a/test/intrinsics/modf.wgsl.expected.glsl
+++ b/test/intrinsics/modf.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float fract;
   float whole;
 };
+
 modf_result tint_modf(float param_0) {
   float whole;
   float fract = modf(param_0, whole);
@@ -22,14 +23,14 @@
   float whole = res.whole;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:12: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/radians.spvasm.expected.glsl b/test/intrinsics/radians.spvasm.expected.glsl
index 4db477f..9941550 100644
--- a/test/intrinsics/radians.spvasm.expected.glsl
+++ b/test/intrinsics/radians.spvasm.expected.glsl
@@ -19,8 +19,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/repeated_use.wgsl.expected.glsl b/test/intrinsics/repeated_use.wgsl.expected.glsl
index 417fe25..78014c0 100644
--- a/test/intrinsics/repeated_use.wgsl.expected.glsl
+++ b/test/intrinsics/repeated_use.wgsl.expected.glsl
@@ -92,11 +92,11 @@
   tint_isNormal_3(3.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.glsl b/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.glsl
index d4520c4..1f3b12f 100644
--- a/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.glsl
+++ b/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.glsl
@@ -3,7 +3,6 @@
 
 vec4 tint_symbol_1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = ivec2(0, 0);
   ivec2 x_16 = ivec2(textureSize(arg_0_1));
@@ -25,6 +24,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -41,6 +41,8 @@
   wrapper_result.tint_symbol_1_1 = inner_result.tint_symbol_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_3 outputs;
   outputs = vertex_main();
@@ -49,12 +51,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = ivec2(0, 0);
   ivec2 x_16 = ivec2(textureSize(arg_0_1));
@@ -65,6 +65,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -78,16 +79,15 @@
   fragment_main_1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = ivec2(0, 0);
   ivec2 x_16 = ivec2(textureSize(arg_0_1));
@@ -98,6 +98,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -112,8 +113,8 @@
   compute_main_1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/textureGather/f32/alpha.wgsl.expected.glsl b/test/intrinsics/textureGather/f32/alpha.wgsl.expected.glsl
index d66b162..a33d0bd 100644
--- a/test/intrinsics/textureGather/f32/alpha.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/f32/alpha.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp sampler2D t_s;
 
-
 void tint_symbol() {
   vec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 3);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/f32/blue.wgsl.expected.glsl b/test/intrinsics/textureGather/f32/blue.wgsl.expected.glsl
index 23d9bf9..924fd2c 100644
--- a/test/intrinsics/textureGather/f32/blue.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/f32/blue.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp sampler2D t_s;
 
-
 void tint_symbol() {
   vec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 2);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/f32/green.wgsl.expected.glsl b/test/intrinsics/textureGather/f32/green.wgsl.expected.glsl
index 0510c4c..cc9b7d1 100644
--- a/test/intrinsics/textureGather/f32/green.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/f32/green.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp sampler2D t_s;
 
-
 void tint_symbol() {
   vec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/f32/red.wgsl.expected.glsl b/test/intrinsics/textureGather/f32/red.wgsl.expected.glsl
index f3ae667..231dce5 100644
--- a/test/intrinsics/textureGather/f32/red.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/f32/red.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp sampler2D t_s;
 
-
 void tint_symbol() {
   vec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 0);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/i32/alpha.wgsl.expected.glsl b/test/intrinsics/textureGather/i32/alpha.wgsl.expected.glsl
index 3c6bc40..320f50f 100644
--- a/test/intrinsics/textureGather/i32/alpha.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/i32/alpha.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp isampler2D t_s;
 
-
 void tint_symbol() {
   ivec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 3);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/i32/blue.wgsl.expected.glsl b/test/intrinsics/textureGather/i32/blue.wgsl.expected.glsl
index ca61900..200e7e5 100644
--- a/test/intrinsics/textureGather/i32/blue.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/i32/blue.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp isampler2D t_s;
 
-
 void tint_symbol() {
   ivec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 2);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/i32/green.wgsl.expected.glsl b/test/intrinsics/textureGather/i32/green.wgsl.expected.glsl
index 86f861a..02ab2d5 100644
--- a/test/intrinsics/textureGather/i32/green.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/i32/green.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp isampler2D t_s;
 
-
 void tint_symbol() {
   ivec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/i32/red.wgsl.expected.glsl b/test/intrinsics/textureGather/i32/red.wgsl.expected.glsl
index da5037b..6c7d9a0 100644
--- a/test/intrinsics/textureGather/i32/red.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/i32/red.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp isampler2D t_s;
 
-
 void tint_symbol() {
   ivec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 0);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/u32/alpha.wgsl.expected.glsl b/test/intrinsics/textureGather/u32/alpha.wgsl.expected.glsl
index e172b37..58ca174 100644
--- a/test/intrinsics/textureGather/u32/alpha.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/u32/alpha.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp usampler2D t_s;
 
-
 void tint_symbol() {
   uvec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 3);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/u32/blue.wgsl.expected.glsl b/test/intrinsics/textureGather/u32/blue.wgsl.expected.glsl
index b5fb696..ec6b81a 100644
--- a/test/intrinsics/textureGather/u32/blue.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/u32/blue.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp usampler2D t_s;
 
-
 void tint_symbol() {
   uvec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 2);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/u32/green.wgsl.expected.glsl b/test/intrinsics/textureGather/u32/green.wgsl.expected.glsl
index a9e95b4..235a063 100644
--- a/test/intrinsics/textureGather/u32/green.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/u32/green.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp usampler2D t_s;
 
-
 void tint_symbol() {
   uvec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureGather/u32/red.wgsl.expected.glsl b/test/intrinsics/textureGather/u32/red.wgsl.expected.glsl
index 4a21368..8791f6e 100644
--- a/test/intrinsics/textureGather/u32/red.wgsl.expected.glsl
+++ b/test/intrinsics/textureGather/u32/red.wgsl.expected.glsl
@@ -3,13 +3,12 @@
 
 uniform highp usampler2D t_s;
 
-
 void tint_symbol() {
   uvec4 res = textureGather(t_s, vec2(0.0f, 0.0f), 0);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.glsl b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.glsl
index c94cc72..d492ec7 100644
--- a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.glsl
+++ b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.glsl
@@ -3,7 +3,6 @@
 
 vec4 tint_symbol_1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = 0.0f;
   vec4 x_17 = vec4(texelFetch(arg_0_1, ivec2(0, 0), 1).x, 0.0f, 0.0f, 0.0f);
@@ -25,6 +24,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -41,6 +41,8 @@
   wrapper_result.tint_symbol_1_1 = inner_result.tint_symbol_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_3 outputs;
   outputs = vertex_main();
@@ -49,12 +51,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = 0.0f;
   vec4 x_17 = vec4(texelFetch(arg_0_1, ivec2(0, 0), 1).x, 0.0f, 0.0f, 0.0f);
@@ -65,6 +65,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -78,16 +79,15 @@
   fragment_main_1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = 0.0f;
   vec4 x_17 = vec4(texelFetch(arg_0_1, ivec2(0, 0), 1).x, 0.0f, 0.0f, 0.0f);
@@ -98,6 +98,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -112,8 +113,8 @@
   compute_main_1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.glsl b/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.glsl
index 6b066d1..037730f 100644
--- a/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.glsl
+++ b/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 vec4 tint_symbol_1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = 0;
   int x_16 = textureSamples(arg_0_1);;
@@ -27,6 +26,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -43,6 +43,8 @@
   wrapper_result.tint_symbol_1_1 = inner_result.tint_symbol_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_3 outputs;
   outputs = vertex_main();
@@ -51,11 +53,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:8: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:8: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -64,7 +65,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = 0;
   int x_16 = textureSamples(arg_0_1);;
@@ -75,6 +75,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -88,15 +89,15 @@
   fragment_main_1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -105,7 +106,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = 0;
   int x_16 = textureSamples(arg_0_1);;
@@ -116,6 +116,7 @@
 struct vertex_main_out {
   vec4 tint_symbol_1_1;
 };
+
 struct tint_symbol_3 {
   vec4 tint_symbol_1_1;
 };
@@ -130,15 +131,15 @@
   compute_main_1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/layout/storage/mat2x2/f32.wgsl.expected.glsl b/test/layout/storage/mat2x2/f32.wgsl.expected.glsl
index 852cff9..e5f8b53 100644
--- a/test/layout/storage/mat2x2/f32.wgsl.expected.glsl
+++ b/test/layout/storage/mat2x2/f32.wgsl.expected.glsl
@@ -8,15 +8,14 @@
 layout(binding = 0) buffer SSBO_1 {
   mat2 m;
 } ssbo;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void f() {
   mat2 v = ssbo.m;
   ssbo.m = v;
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/layout/storage/mat2x2/stride/16.spvasm.expected.glsl b/test/layout/storage/mat2x2/stride/16.spvasm.expected.glsl
index 2c56258..e125413 100644
--- a/test/layout/storage/mat2x2/stride/16.spvasm.expected.glsl
+++ b/test/layout/storage/mat2x2/stride/16.spvasm.expected.glsl
@@ -4,6 +4,7 @@
 struct tint_padded_array_element {
   vec2 el;
 };
+
 struct SSBO {
   tint_padded_array_element m[2];
 };
@@ -11,7 +12,6 @@
 layout(binding = 0) buffer SSBO_1 {
   tint_padded_array_element m[2];
 } ssbo;
-
 mat2 arr_to_mat2x2_stride_16(tint_padded_array_element arr[2]) {
   return mat2(arr[0u].el, arr[1u].el);
 }
@@ -32,8 +32,8 @@
   f_1();
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/let/global/global.wgsl.expected.glsl b/test/let/global/global.wgsl.expected.glsl
index 247d694..ec327ce 100644
--- a/test/let/global/global.wgsl.expected.glsl
+++ b/test/let/global/global.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct MyStruct {
   float f1;
 };
+
 struct tint_symbol_1 {
   vec4 value;
 };
@@ -19,10 +20,10 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   value = outputs.value;
 }
 
-
diff --git a/test/let/inferred/function.wgsl.expected.glsl b/test/let/inferred/function.wgsl.expected.glsl
index 247d694..ec327ce 100644
--- a/test/let/inferred/function.wgsl.expected.glsl
+++ b/test/let/inferred/function.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct MyStruct {
   float f1;
 };
+
 struct tint_symbol_1 {
   vec4 value;
 };
@@ -19,10 +20,10 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   value = outputs.value;
 }
 
-
diff --git a/test/loops/continue_in_switch.wgsl.expected.glsl b/test/loops/continue_in_switch.wgsl.expected.glsl
index f339404..2b26425 100644
--- a/test/loops/continue_in_switch.wgsl.expected.glsl
+++ b/test/loops/continue_in_switch.wgsl.expected.glsl
@@ -18,8 +18,8 @@
   }
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/loops/loop.wgsl.expected.glsl b/test/loops/loop.wgsl.expected.glsl
index e0d9330..81b6873 100644
--- a/test/loops/loop.wgsl.expected.glsl
+++ b/test/loops/loop.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int i = 0;
   while (true) {
@@ -20,3 +19,4 @@
     }
   }
 }
+
diff --git a/test/loops/loop_with_continuing.wgsl.expected.glsl b/test/loops/loop_with_continuing.wgsl.expected.glsl
index 2510e3d..768d31a 100644
--- a/test/loops/loop_with_continuing.wgsl.expected.glsl
+++ b/test/loops/loop_with_continuing.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int i = 0;
   while (true) {
@@ -22,3 +21,4 @@
     }
   }
 }
+
diff --git a/test/loops/nested_loops.wgsl.expected.glsl b/test/loops/nested_loops.wgsl.expected.glsl
index f6a4153..56fcb75 100644
--- a/test/loops/nested_loops.wgsl.expected.glsl
+++ b/test/loops/nested_loops.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int i = 0;
   int j = 0;
@@ -27,3 +26,4 @@
     }
   }
 }
+
diff --git a/test/loops/nested_loops_with_continuing.wgsl.expected.glsl b/test/loops/nested_loops_with_continuing.wgsl.expected.glsl
index 23b0e70..67fbaf7 100644
--- a/test/loops/nested_loops_with_continuing.wgsl.expected.glsl
+++ b/test/loops/nested_loops_with_continuing.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 int f() {
   int i = 0;
   int j = 0;
@@ -31,3 +30,4 @@
     }
   }
 }
+
diff --git a/test/ptr_ref/access/matrix.spvasm.expected.glsl b/test/ptr_ref/access/matrix.spvasm.expected.glsl
index 132104a..f6f2359 100644
--- a/test/ptr_ref/access/matrix.spvasm.expected.glsl
+++ b/test/ptr_ref/access/matrix.spvasm.expected.glsl
@@ -13,8 +13,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/access/matrix.wgsl.expected.glsl b/test/ptr_ref/access/matrix.wgsl.expected.glsl
index e76a7fd..f08f729 100644
--- a/test/ptr_ref/access/matrix.wgsl.expected.glsl
+++ b/test/ptr_ref/access/matrix.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   m[1] = vec3(5.0f, 5.0f, 5.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/copy/ptr_copy.spvasm.expected.glsl b/test/ptr_ref/copy/ptr_copy.spvasm.expected.glsl
index 8c4e0ce..9fa5aa1 100644
--- a/test/ptr_ref/copy/ptr_copy.spvasm.expected.glsl
+++ b/test/ptr_ref/copy/ptr_copy.spvasm.expected.glsl
@@ -11,8 +11,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/global/i32.spvasm.expected.glsl b/test/ptr_ref/load/global/i32.spvasm.expected.glsl
index e3ffc25..0d72c7d 100644
--- a/test/ptr_ref/load/global/i32.spvasm.expected.glsl
+++ b/test/ptr_ref/load/global/i32.spvasm.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 int I = 0;
-
 void main_1() {
   int x_11 = (I + 1);
   return;
@@ -13,8 +12,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/global/i32.wgsl.expected.glsl b/test/ptr_ref/load/global/i32.wgsl.expected.glsl
index 1e87672..42d0134 100644
--- a/test/ptr_ref/load/global/i32.wgsl.expected.glsl
+++ b/test/ptr_ref/load/global/i32.wgsl.expected.glsl
@@ -2,14 +2,13 @@
 precision mediump float;
 
 int I = 0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   int use = (I + 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.glsl b/test/ptr_ref/load/global/struct_field.spvasm.expected.glsl
index 631eeb8..e3cb845 100644
--- a/test/ptr_ref/load/global/struct_field.spvasm.expected.glsl
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.glsl
@@ -6,7 +6,6 @@
 };
 
 S V = S(0);
-
 void main_1() {
   int i = 0;
   int x_15 = V.i;
@@ -19,8 +18,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/global/struct_field.wgsl.expected.glsl b/test/ptr_ref/load/global/struct_field.wgsl.expected.glsl
index 5451a7a..5248de8 100644
--- a/test/ptr_ref/load/global/struct_field.wgsl.expected.glsl
+++ b/test/ptr_ref/load/global/struct_field.wgsl.expected.glsl
@@ -6,14 +6,13 @@
 };
 
 S V = S(0);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   int i = V.i;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/local/i32.spvasm.expected.glsl b/test/ptr_ref/load/local/i32.spvasm.expected.glsl
index 848563f..0d7cd53 100644
--- a/test/ptr_ref/load/local/i32.spvasm.expected.glsl
+++ b/test/ptr_ref/load/local/i32.spvasm.expected.glsl
@@ -13,8 +13,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/local/i32.wgsl.expected.glsl b/test/ptr_ref/load/local/i32.wgsl.expected.glsl
index 87a16da..d810e0a 100644
--- a/test/ptr_ref/load/local/i32.wgsl.expected.glsl
+++ b/test/ptr_ref/load/local/i32.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   int use = (i + 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/local/ptr_function.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_function.wgsl.expected.glsl
index 87a16da..d810e0a 100644
--- a/test/ptr_ref/load/local/ptr_function.wgsl.expected.glsl
+++ b/test/ptr_ref/load/local/ptr_function.wgsl.expected.glsl
@@ -7,8 +7,8 @@
   int use = (i + 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/local/ptr_private.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_private.wgsl.expected.glsl
index 87e4b5e..4cc2e08 100644
--- a/test/ptr_ref/load/local/ptr_private.wgsl.expected.glsl
+++ b/test/ptr_ref/load/local/ptr_private.wgsl.expected.glsl
@@ -2,14 +2,13 @@
 precision mediump float;
 
 int i = 123;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   int use = (i + 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.glsl
index dc2e8ca..ec7a6ae 100644
--- a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.glsl
+++ b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.glsl
@@ -8,14 +8,13 @@
 layout(binding = 0) buffer S_1 {
   int a;
 } v;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   int use = (v.a + 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.glsl
index 7b5f1a5..664cbb1 100644
--- a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.glsl
+++ b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   int use = (v.a + 1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
index 9fbac12..8e17712 100644
--- a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
+++ b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int i;
-
 struct tint_symbol_2 {
   uint local_invocation_index;
 };
@@ -21,10 +20,11 @@
   tint_symbol_inner(tint_symbol_1.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/ptr_ref/load/local/struct_field.spvasm.expected.glsl b/test/ptr_ref/load/local/struct_field.spvasm.expected.glsl
index 9a7994a..ca5baef 100644
--- a/test/ptr_ref/load/local/struct_field.spvasm.expected.glsl
+++ b/test/ptr_ref/load/local/struct_field.spvasm.expected.glsl
@@ -18,8 +18,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/local/struct_field.wgsl.expected.glsl b/test/ptr_ref/load/local/struct_field.wgsl.expected.glsl
index 9e372f3..bffaaf1 100644
--- a/test/ptr_ref/load/local/struct_field.wgsl.expected.glsl
+++ b/test/ptr_ref/load/local/struct_field.wgsl.expected.glsl
@@ -11,8 +11,8 @@
   int i = V.i;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/param/ptr.spvasm.expected.glsl b/test/ptr_ref/load/param/ptr.spvasm.expected.glsl
index 847dadd..7ed789b 100644
--- a/test/ptr_ref/load/param/ptr.spvasm.expected.glsl
+++ b/test/ptr_ref/load/param/ptr.spvasm.expected.glsl
@@ -18,8 +18,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/load/param/ptr.wgsl.expected.glsl b/test/ptr_ref/load/param/ptr.wgsl.expected.glsl
index 2323a1c..c55ebb3 100644
--- a/test/ptr_ref/load/param/ptr.wgsl.expected.glsl
+++ b/test/ptr_ref/load/param/ptr.wgsl.expected.glsl
@@ -11,8 +11,8 @@
   int r = func(i, i);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/store/global/i32.spvasm.expected.glsl b/test/ptr_ref/store/global/i32.spvasm.expected.glsl
index 12117ac..502f0c8 100644
--- a/test/ptr_ref/store/global/i32.spvasm.expected.glsl
+++ b/test/ptr_ref/store/global/i32.spvasm.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 int I = 0;
-
 void main_1() {
   I = 123;
   I = ((100 + 20) + 3);
@@ -14,8 +13,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/store/global/i32.wgsl.expected.glsl b/test/ptr_ref/store/global/i32.wgsl.expected.glsl
index fec11c1..7935a1b 100644
--- a/test/ptr_ref/store/global/i32.wgsl.expected.glsl
+++ b/test/ptr_ref/store/global/i32.wgsl.expected.glsl
@@ -2,15 +2,14 @@
 precision mediump float;
 
 int I = 0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   I = 123;
   I = ((100 + 20) + 3);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.glsl b/test/ptr_ref/store/global/struct_field.spvasm.expected.glsl
index 75f6126..e298bd8 100644
--- a/test/ptr_ref/store/global/struct_field.spvasm.expected.glsl
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.glsl
@@ -6,7 +6,6 @@
 };
 
 S V = S(0);
-
 void main_1() {
   V.i = 5;
   return;
@@ -17,8 +16,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/store/local/i32.spvasm.expected.glsl b/test/ptr_ref/store/local/i32.spvasm.expected.glsl
index fcf6afb..61d339c 100644
--- a/test/ptr_ref/store/local/i32.spvasm.expected.glsl
+++ b/test/ptr_ref/store/local/i32.spvasm.expected.glsl
@@ -14,8 +14,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/store/local/i32.wgsl.expected.glsl b/test/ptr_ref/store/local/i32.wgsl.expected.glsl
index 0364846..4adf704 100644
--- a/test/ptr_ref/store/local/i32.wgsl.expected.glsl
+++ b/test/ptr_ref/store/local/i32.wgsl.expected.glsl
@@ -8,8 +8,8 @@
   i = ((100 + 20) + 3);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/store/local/struct_field.spvasm.expected.glsl b/test/ptr_ref/store/local/struct_field.spvasm.expected.glsl
index d7921f1..8cab3a7 100644
--- a/test/ptr_ref/store/local/struct_field.spvasm.expected.glsl
+++ b/test/ptr_ref/store/local/struct_field.spvasm.expected.glsl
@@ -16,8 +16,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/store/param/ptr.spvasm.expected.glsl b/test/ptr_ref/store/param/ptr.spvasm.expected.glsl
index cd8b75c..807ddc6 100644
--- a/test/ptr_ref/store/param/ptr.spvasm.expected.glsl
+++ b/test/ptr_ref/store/param/ptr.spvasm.expected.glsl
@@ -18,8 +18,8 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/ptr_ref/store/param/ptr.wgsl.expected.glsl b/test/ptr_ref/store/param/ptr.wgsl.expected.glsl
index 9e4326c..02abe63 100644
--- a/test/ptr_ref/store/param/ptr.wgsl.expected.glsl
+++ b/test/ptr_ref/store/param/ptr.wgsl.expected.glsl
@@ -11,8 +11,8 @@
   func(123, i);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/samples/compute_boids.wgsl.expected.glsl b/test/samples/compute_boids.wgsl.expected.glsl
index 10299a1..e96bfa7 100644
--- a/test/samples/compute_boids.wgsl.expected.glsl
+++ b/test/samples/compute_boids.wgsl.expected.glsl
@@ -6,6 +6,7 @@
   vec2 a_particleVel;
   vec2 a_pos;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -19,10 +20,12 @@
 struct tint_symbol_4 {
   vec4 value;
 };
+
 struct Particle {
   vec2 pos;
   vec2 vel;
 };
+
 struct SimParams {
   float deltaT;
   float rule1Distance;
@@ -32,9 +35,11 @@
   float rule2Scale;
   float rule3Scale;
 };
+
 struct Particles {
   Particle particles[5];
 };
+
 struct tint_symbol_6 {
   uvec3 tint_symbol;
 };
@@ -48,6 +53,8 @@
 layout(location = 0) in vec2 a_particlePos;
 layout(location = 1) in vec2 a_particleVel;
 layout(location = 2) in vec2 a_pos;
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.a_particlePos = a_particlePos;
@@ -60,7 +67,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,9 +75,11 @@
   vec2 a_particleVel;
   vec2 a_pos;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
+
 struct tint_symbol_4 {
   vec4 value;
 };
@@ -84,6 +92,7 @@
   vec2 pos;
   vec2 vel;
 };
+
 struct SimParams {
   float deltaT;
   float rule1Distance;
@@ -93,9 +102,11 @@
   float rule2Scale;
   float rule3Scale;
 };
+
 struct Particles {
   Particle particles[5];
 };
+
 struct tint_symbol_6 {
   uvec3 tint_symbol;
 };
@@ -107,13 +118,13 @@
   return wrapper_result_1;
 }
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_4 outputs;
   outputs = frag_main();
   value = outputs.value;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -122,16 +133,20 @@
   vec2 a_particleVel;
   vec2 a_pos;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
+
 struct tint_symbol_4 {
   vec4 value;
 };
+
 struct Particle {
   vec2 pos;
   vec2 vel;
 };
+
 struct SimParams {
   float deltaT;
   float rule1Distance;
@@ -141,6 +156,7 @@
   float rule2Scale;
   float rule3Scale;
 };
+
 struct Particles {
   Particle particles[5];
 };
@@ -154,13 +170,13 @@
   float rule2Scale;
   float rule3Scale;
 } params;
+
 layout(binding = 1) buffer Particles_1 {
   Particle particles[5];
 } particlesA;
 layout(binding = 2) buffer Particles_2 {
   Particle particles[5];
 } particlesB;
-
 struct tint_symbol_6 {
   uvec3 tint_symbol;
 };
@@ -229,10 +245,11 @@
   comp_main_inner(tint_symbol_5.tint_symbol);
   return;
 }
+
+
 void main() {
   tint_symbol_6 inputs;
   inputs.tint_symbol = gl_GlobalInvocationID;
   comp_main(inputs);
 }
 
-
diff --git a/test/samples/cube.wgsl.expected.glsl b/test/samples/cube.wgsl.expected.glsl
index 67ede84..4e7e02e 100644
--- a/test/samples/cube.wgsl.expected.glsl
+++ b/test/samples/cube.wgsl.expected.glsl
@@ -13,14 +13,17 @@
   vec4 cur_position;
   vec4 color;
 };
+
 struct VertexOutput {
   vec4 vtxFragColor;
   vec4 Position;
 };
+
 struct tint_symbol_3 {
   vec4 cur_position;
   vec4 color;
 };
+
 struct tint_symbol_4 {
   vec4 vtxFragColor;
   vec4 Position;
@@ -36,6 +39,7 @@
 struct tint_symbol_6 {
   vec4 fragColor;
 };
+
 struct tint_symbol_7 {
   vec4 value;
 };
@@ -51,6 +55,8 @@
 layout(location = 0) in vec4 cur_position;
 layout(location = 1) in vec4 color;
 layout(location = 0) out vec4 vtxFragColor;
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.cur_position = cur_position;
@@ -63,32 +69,37 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 struct Uniforms {
   mat4 modelViewProjectionMatrix;
 };
+
 struct VertexInput {
   vec4 cur_position;
   vec4 color;
 };
+
 struct VertexOutput {
   vec4 vtxFragColor;
   vec4 Position;
 };
+
 struct tint_symbol_3 {
   vec4 cur_position;
   vec4 color;
 };
+
 struct tint_symbol_4 {
   vec4 vtxFragColor;
   vec4 Position;
 };
+
 struct tint_symbol_6 {
   vec4 fragColor;
 };
+
 struct tint_symbol_7 {
   vec4 value;
 };
@@ -105,6 +116,7 @@
 }
 layout(location = 0) in vec4 fragColor;
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_6 inputs;
   inputs.fragColor = fragColor;
@@ -113,4 +125,3 @@
   value = outputs.value;
 }
 
-
diff --git a/test/samples/function.wgsl.expected.glsl b/test/samples/function.wgsl.expected.glsl
index 4a81677..7f72a2a 100644
--- a/test/samples/function.wgsl.expected.glsl
+++ b/test/samples/function.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void ep() {
   return;
 }
+
 void main() {
   ep();
 }
 
-
diff --git a/test/samples/simple.wgsl.expected.glsl b/test/samples/simple.wgsl.expected.glsl
index 66efb9e..d84bf76 100644
--- a/test/samples/simple.wgsl.expected.glsl
+++ b/test/samples/simple.wgsl.expected.glsl
@@ -21,10 +21,10 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   value = outputs.value;
 }
 
-
diff --git a/test/samples/simple_vertex.spvasm.expected.glsl b/test/samples/simple_vertex.spvasm.expected.glsl
index 70dfb18..818a292 100644
--- a/test/samples/simple_vertex.spvasm.expected.glsl
+++ b/test/samples/simple_vertex.spvasm.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   return;
@@ -11,6 +10,7 @@
 struct main_out {
   vec4 tint_symbol;
 };
+
 struct tint_symbol_2 {
   vec4 tint_symbol;
 };
@@ -27,6 +27,8 @@
   wrapper_result.tint_symbol = inner_result.tint_symbol;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_2 outputs;
   outputs = tint_symbol_1();
@@ -35,4 +37,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/samples/triangle.wgsl.expected.glsl b/test/samples/triangle.wgsl.expected.glsl
index 8cb735c..012baae 100644
--- a/test/samples/triangle.wgsl.expected.glsl
+++ b/test/samples/triangle.wgsl.expected.glsl
@@ -2,10 +2,10 @@
 precision mediump float;
 
 const vec2 pos[3] = vec2[3](vec2(0.0f, 0.5f), vec2(-0.5f, -0.5f), vec2(0.5f, -0.5f));
-
 struct tint_symbol_1 {
   uint VertexIndex;
 };
+
 struct tint_symbol_2 {
   vec4 value;
 };
@@ -24,6 +24,9 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.VertexIndex = uint(gl_VertexID);
@@ -34,16 +37,17 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 struct tint_symbol_1 {
   uint VertexIndex;
 };
+
 struct tint_symbol_2 {
   vec4 value;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -59,10 +63,10 @@
   return wrapper_result_1;
 }
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_3 outputs;
   outputs = frag_main();
   value = outputs.value;
 }
 
-
diff --git a/test/shader_io/compute_input_builtins.wgsl.expected.glsl b/test/shader_io/compute_input_builtins.wgsl.expected.glsl
index d69da6d..fe53acf 100644
--- a/test/shader_io/compute_input_builtins.wgsl.expected.glsl
+++ b/test/shader_io/compute_input_builtins.wgsl.expected.glsl
@@ -18,6 +18,12 @@
   tint_symbol_inner(tint_symbol_1.local_invocation_id, tint_symbol_1.local_invocation_index, tint_symbol_1.global_invocation_id, tint_symbol_1.workgroup_id, tint_symbol_1.num_workgroups);
   return;
 }
+
+
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_id = gl_LocalInvocationID;
@@ -28,4 +34,3 @@
   tint_symbol(inputs);
 }
 
-
diff --git a/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl b/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl
index 51de3da..3c72c78 100644
--- a/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl
+++ b/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl
@@ -8,6 +8,7 @@
   uvec3 workgroup_id;
   uvec3 num_workgroups;
 };
+
 struct tint_symbol_2 {
   uvec3 local_invocation_id;
   uint local_invocation_index;
@@ -26,6 +27,12 @@
   tint_symbol_inner(tint_symbol_3);
   return;
 }
+
+
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_id = gl_LocalInvocationID;
@@ -36,4 +43,3 @@
   tint_symbol(inputs);
 }
 
-
diff --git a/test/shader_io/compute_input_mixed.wgsl.expected.glsl b/test/shader_io/compute_input_mixed.wgsl.expected.glsl
index 763d31e..5ce9f38 100644
--- a/test/shader_io/compute_input_mixed.wgsl.expected.glsl
+++ b/test/shader_io/compute_input_mixed.wgsl.expected.glsl
@@ -4,9 +4,11 @@
 struct ComputeInputs0 {
   uvec3 local_invocation_id;
 };
+
 struct ComputeInputs1 {
   uvec3 workgroup_id;
 };
+
 struct tint_symbol_2 {
   uvec3 local_invocation_id;
   uint local_invocation_index;
@@ -25,6 +27,11 @@
   tint_symbol_inner(tint_symbol_3, tint_symbol_1.local_invocation_index, tint_symbol_1.global_invocation_id, tint_symbol_4);
   return;
 }
+
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_id = gl_LocalInvocationID;
@@ -34,4 +41,3 @@
   tint_symbol(inputs);
 }
 
-
diff --git a/test/shader_io/fragment_input_builtins.wgsl.expected.glsl b/test/shader_io/fragment_input_builtins.wgsl.expected.glsl
index cef02b4..68435f1 100644
--- a/test/shader_io/fragment_input_builtins.wgsl.expected.glsl
+++ b/test/shader_io/fragment_input_builtins.wgsl.expected.glsl
@@ -21,6 +21,11 @@
   tint_symbol_inner(tint_symbol_1.position, tint_symbol_1.front_facing, tint_symbol_1.sample_index, tint_symbol_1.sample_mask);
   return;
 }
+
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.position = gl_FragCoord;
@@ -30,10 +35,9 @@
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:31: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:31: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl
index a7299c1..f53cb11 100644
--- a/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl
+++ b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl
@@ -9,6 +9,7 @@
   uint sample_index;
   uint sample_mask;
 };
+
 struct tint_symbol_2 {
   vec4 position;
   bool front_facing;
@@ -28,6 +29,11 @@
   tint_symbol_inner(tint_symbol_3);
   return;
 }
+
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.position = gl_FragCoord;
@@ -37,10 +43,9 @@
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:39: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:39: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/shader_io/fragment_input_locations.wgsl.expected.glsl b/test/shader_io/fragment_input_locations.wgsl.expected.glsl
index 8f91796..bd55ab7 100644
--- a/test/shader_io/fragment_input_locations.wgsl.expected.glsl
+++ b/test/shader_io/fragment_input_locations.wgsl.expected.glsl
@@ -23,6 +23,7 @@
 layout(location = 1) flat in uint loc1;
 layout(location = 2) in float loc2;
 layout(location = 3) in vec4 loc3;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.loc0 = loc0;
@@ -32,4 +33,3 @@
   tint_symbol(inputs);
 }
 
-
diff --git a/test/shader_io/fragment_input_locations_struct.wgsl.expected.glsl b/test/shader_io/fragment_input_locations_struct.wgsl.expected.glsl
index a187ac5..fd2ae1c 100644
--- a/test/shader_io/fragment_input_locations_struct.wgsl.expected.glsl
+++ b/test/shader_io/fragment_input_locations_struct.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float loc2;
   vec4 loc3;
 };
+
 struct tint_symbol_2 {
   int loc0;
   uint loc1;
@@ -30,6 +31,7 @@
 layout(location = 1) flat in uint loc1;
 layout(location = 2) in float loc2;
 layout(location = 3) in vec4 loc3;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.loc0 = loc0;
@@ -39,4 +41,3 @@
   tint_symbol(inputs);
 }
 
-
diff --git a/test/shader_io/fragment_input_mixed.wgsl.expected.glsl b/test/shader_io/fragment_input_mixed.wgsl.expected.glsl
index a846915..b9ecb1c 100644
--- a/test/shader_io/fragment_input_mixed.wgsl.expected.glsl
+++ b/test/shader_io/fragment_input_mixed.wgsl.expected.glsl
@@ -7,10 +7,12 @@
   vec4 position;
   int loc0;
 };
+
 struct FragmentInputs1 {
   vec4 loc3;
   uint sample_mask;
 };
+
 struct tint_symbol_2 {
   int loc0;
   uint loc1;
@@ -43,6 +45,11 @@
 layout(location = 1) flat in uint loc1;
 layout(location = 2) in float loc2;
 layout(location = 3) in vec4 loc3;
+
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.loc0 = loc0;
@@ -56,10 +63,9 @@
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:52: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:52: '' : compilation terminated 
+ERROR: 0:59: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:59: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/shader_io/fragment_output_builtins.wgsl.expected.glsl b/test/shader_io/fragment_output_builtins.wgsl.expected.glsl
index b13fd6a..5051cbc 100644
--- a/test/shader_io/fragment_output_builtins.wgsl.expected.glsl
+++ b/test/shader_io/fragment_output_builtins.wgsl.expected.glsl
@@ -21,19 +21,21 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = main1();
   gl_FragDepth = outputs.value;
 }
 
-
 #version 310 es
 precision mediump float;
 
 struct tint_symbol {
   float value;
 };
+
 struct tint_symbol_1 {
   uint value;
 };
@@ -48,16 +50,17 @@
   wrapper_result_1.value = inner_result_1;
   return wrapper_result_1;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = main2();
   gl_SampleMask = outputs.value;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl
index cdfd3fb..44aa003 100644
--- a/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl
+++ b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float frag_depth;
   uint sample_mask;
 };
+
 struct tint_symbol_1 {
   float frag_depth;
   uint sample_mask;
@@ -24,6 +25,9 @@
   wrapper_result.sample_mask = inner_result.sample_mask;
   return wrapper_result;
 }
+
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -31,10 +35,9 @@
   gl_SampleMask = outputs.sample_mask;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:29: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:29: '' : compilation terminated 
+ERROR: 0:33: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:33: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/shader_io/fragment_output_locations.wgsl.expected.glsl b/test/shader_io/fragment_output_locations.wgsl.expected.glsl
index 74baed1..a82449b 100644
--- a/test/shader_io/fragment_output_locations.wgsl.expected.glsl
+++ b/test/shader_io/fragment_output_locations.wgsl.expected.glsl
@@ -12,9 +12,11 @@
 struct tint_symbol_1 {
   uint value;
 };
+
 struct tint_symbol_2 {
   float value;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -26,19 +28,20 @@
   return wrapper_result;
 }
 layout(location = 0) out int value;
+
 void main() {
   tint_symbol outputs;
   outputs = main0();
   value = outputs.value;
 }
 
-
 #version 310 es
 precision mediump float;
 
 struct tint_symbol {
   int value;
 };
+
 struct tint_symbol_1 {
   uint value;
 };
@@ -50,6 +53,7 @@
 struct tint_symbol_2 {
   float value;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -61,22 +65,24 @@
   return wrapper_result_1;
 }
 layout(location = 1) out uint value;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = main1();
   value = outputs.value;
 }
 
-
 #version 310 es
 precision mediump float;
 
 struct tint_symbol {
   int value;
 };
+
 struct tint_symbol_1 {
   uint value;
 };
+
 struct tint_symbol_2 {
   float value;
 };
@@ -96,25 +102,28 @@
   return wrapper_result_2;
 }
 layout(location = 2) out float value;
+
 void main() {
   tint_symbol_2 outputs;
   outputs = main2();
   value = outputs.value;
 }
 
-
 #version 310 es
 precision mediump float;
 
 struct tint_symbol {
   int value;
 };
+
 struct tint_symbol_1 {
   uint value;
 };
+
 struct tint_symbol_2 {
   float value;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -130,10 +139,10 @@
   return wrapper_result_3;
 }
 layout(location = 3) out vec4 value;
+
 void main() {
   tint_symbol_3 outputs;
   outputs = main3();
   value = outputs.value;
 }
 
-
diff --git a/test/shader_io/fragment_output_locations_struct.wgsl.expected.glsl b/test/shader_io/fragment_output_locations_struct.wgsl.expected.glsl
index 76a6171..05914ad 100644
--- a/test/shader_io/fragment_output_locations_struct.wgsl.expected.glsl
+++ b/test/shader_io/fragment_output_locations_struct.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float loc2;
   vec4 loc3;
 };
+
 struct tint_symbol_1 {
   int loc0;
   uint loc1;
@@ -32,6 +33,7 @@
 layout(location = 1) out uint loc1;
 layout(location = 2) out float loc2;
 layout(location = 3) out vec4 loc3;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -41,4 +43,3 @@
   loc3 = outputs.loc3;
 }
 
-
diff --git a/test/shader_io/fragment_output_mixed.wgsl.expected.glsl b/test/shader_io/fragment_output_mixed.wgsl.expected.glsl
index d6ae604..8bc4c9f 100644
--- a/test/shader_io/fragment_output_mixed.wgsl.expected.glsl
+++ b/test/shader_io/fragment_output_mixed.wgsl.expected.glsl
@@ -11,6 +11,7 @@
   uint sample_mask;
   vec4 loc3;
 };
+
 struct tint_symbol_1 {
   int loc0;
   uint loc1;
@@ -40,6 +41,9 @@
 layout(location = 1) out uint loc1;
 layout(location = 2) out float loc2;
 layout(location = 3) out vec4 loc3;
+
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -51,10 +55,9 @@
   gl_SampleMask = outputs.sample_mask;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:49: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:49: '' : compilation terminated 
+ERROR: 0:53: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:53: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/shader_io/interpolate_input_parameters.wgsl.expected.glsl b/test/shader_io/interpolate_input_parameters.wgsl.expected.glsl
index b02bb34..39a7ae9 100644
--- a/test/shader_io/interpolate_input_parameters.wgsl.expected.glsl
+++ b/test/shader_io/interpolate_input_parameters.wgsl.expected.glsl
@@ -27,6 +27,7 @@
 layout(location = 5) in float linear_center;
 layout(location = 6) centroid in float linear_centroid;
 layout(location = 7) in float linear_sample;
+
 void main() {
   tint_symbol_3 inputs;
   inputs.none = none;
@@ -40,4 +41,3 @@
   tint_symbol(inputs);
 }
 
-
diff --git a/test/shader_io/interpolate_input_struct.wgsl.expected.glsl b/test/shader_io/interpolate_input_struct.wgsl.expected.glsl
index b4ebc59..7c062cd 100644
--- a/test/shader_io/interpolate_input_struct.wgsl.expected.glsl
+++ b/test/shader_io/interpolate_input_struct.wgsl.expected.glsl
@@ -11,6 +11,7 @@
   float linear_centroid;
   float linear_sample;
 };
+
 struct tint_symbol_4 {
   float none;
   float tint_symbol;
@@ -38,6 +39,7 @@
 layout(location = 5) in float linear_center;
 layout(location = 6) centroid in float linear_centroid;
 layout(location = 7) in float linear_sample;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.none = none;
@@ -51,4 +53,3 @@
   tint_symbol_1(inputs);
 }
 
-
diff --git a/test/shader_io/interpolate_integers.wgsl.expected.glsl b/test/shader_io/interpolate_integers.wgsl.expected.glsl
index 3edb324..d6abebf 100644
--- a/test/shader_io/interpolate_integers.wgsl.expected.glsl
+++ b/test/shader_io/interpolate_integers.wgsl.expected.glsl
@@ -8,6 +8,7 @@
   uvec4 vu;
   vec4 pos;
 };
+
 struct tint_symbol {
   int i;
   uint u;
@@ -28,6 +29,7 @@
   uvec4 vu;
   vec4 pos;
 };
+
 struct tint_symbol_3 {
   int value;
 };
@@ -46,6 +48,8 @@
 layout(location = 1) flat out uint u;
 layout(location = 2) flat out ivec4 vi;
 layout(location = 3) flat out uvec4 vu;
+
+
 void main() {
   tint_symbol outputs;
   outputs = vert_main();
@@ -58,7 +62,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,6 +72,7 @@
   uvec4 vu;
   vec4 pos;
 };
+
 struct tint_symbol {
   int i;
   uint u;
@@ -76,6 +80,7 @@
   uvec4 vu;
   vec4 pos;
 };
+
 struct tint_symbol_2 {
   int i;
   uint u;
@@ -83,6 +88,7 @@
   uvec4 vu;
   vec4 pos;
 };
+
 struct tint_symbol_3 {
   int value;
 };
@@ -102,7 +108,9 @@
 layout(location = 1) flat in uint u;
 layout(location = 2) flat in ivec4 vi;
 layout(location = 3) flat in uvec4 vu;
+
 layout(location = 0) out int value;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.i = i;
@@ -115,4 +123,3 @@
   value = outputs.value;
 }
 
-
diff --git a/test/shader_io/interpolate_return_struct.wgsl.expected.glsl b/test/shader_io/interpolate_return_struct.wgsl.expected.glsl
index 0b52495..27a4b0f 100644
--- a/test/shader_io/interpolate_return_struct.wgsl.expected.glsl
+++ b/test/shader_io/interpolate_return_struct.wgsl.expected.glsl
@@ -12,6 +12,7 @@
   float linear_centroid;
   float linear_sample;
 };
+
 struct tint_symbol_2 {
   float none;
   float tint_symbol;
@@ -51,6 +52,8 @@
 layout(location = 5) out float linear_center;
 layout(location = 6) centroid out float linear_centroid;
 layout(location = 7) out float linear_sample;
+
+
 void main() {
   tint_symbol_2 outputs;
   outputs = tint_symbol_1();
@@ -67,4 +70,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/invariant.wgsl.expected.glsl b/test/shader_io/invariant.wgsl.expected.glsl
index 88d2c062..e80be2c 100644
--- a/test/shader_io/invariant.wgsl.expected.glsl
+++ b/test/shader_io/invariant.wgsl.expected.glsl
@@ -15,6 +15,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -23,4 +25,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/invariant_struct_member.wgsl.expected.glsl b/test/shader_io/invariant_struct_member.wgsl.expected.glsl
index b660e74..df27cb0 100644
--- a/test/shader_io/invariant_struct_member.wgsl.expected.glsl
+++ b/test/shader_io/invariant_struct_member.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Out {
   vec4 pos;
 };
+
 struct tint_symbol_1 {
   vec4 pos;
 };
@@ -19,6 +20,8 @@
   wrapper_result.pos = inner_result.pos;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -27,4 +30,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/shared_struct_different_stages.wgsl.expected.glsl b/test/shader_io/shared_struct_different_stages.wgsl.expected.glsl
index d9b62a4..5ca3021 100644
--- a/test/shader_io/shared_struct_different_stages.wgsl.expected.glsl
+++ b/test/shader_io/shared_struct_different_stages.wgsl.expected.glsl
@@ -6,6 +6,7 @@
   float col2;
   vec4 pos;
 };
+
 struct tint_symbol {
   float col1;
   float col2;
@@ -33,6 +34,8 @@
 }
 layout(location = 1) out float col1;
 layout(location = 2) out float col2;
+
+
 void main() {
   tint_symbol outputs;
   outputs = vert_main();
@@ -43,7 +46,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +54,13 @@
   float col2;
   vec4 pos;
 };
+
 struct tint_symbol {
   float col1;
   float col2;
   vec4 pos;
 };
+
 struct tint_symbol_2 {
   float col1;
   float col2;
@@ -75,6 +79,8 @@
 }
 layout(location = 1) in float col1;
 layout(location = 2) in float col2;
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.col1 = col1;
@@ -83,4 +89,3 @@
   frag_main(inputs);
 }
 
-
diff --git a/test/shader_io/shared_struct_helper_function.wgsl.expected.glsl b/test/shader_io/shared_struct_helper_function.wgsl.expected.glsl
index 4af4489..aea561a 100644
--- a/test/shader_io/shared_struct_helper_function.wgsl.expected.glsl
+++ b/test/shader_io/shared_struct_helper_function.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   return wrapper_result;
 }
 layout(location = 0) flat out int loc0;
+
+
 void main() {
   tint_symbol outputs;
   outputs = vert_main1();
@@ -42,7 +44,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -60,6 +61,7 @@
   int loc0;
   vec4 pos;
 };
+
 struct tint_symbol_1 {
   int loc0;
   vec4 pos;
@@ -77,6 +79,8 @@
   return wrapper_result_1;
 }
 layout(location = 0) flat out int loc0;
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = vert_main2();
@@ -86,4 +90,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/shared_struct_storage_buffer.wgsl.expected.glsl b/test/shader_io/shared_struct_storage_buffer.wgsl.expected.glsl
index b8b01eb..25f6645 100644
--- a/test/shader_io/shared_struct_storage_buffer.wgsl.expected.glsl
+++ b/test/shader_io/shared_struct_storage_buffer.wgsl.expected.glsl
@@ -14,7 +14,6 @@
   uint u;
   vec4 v;
 } tint_symbol;
-
 struct tint_symbol_3 {
   float f;
   uint u;
@@ -35,6 +34,8 @@
 }
 layout(location = 0) in float f;
 layout(location = 1) flat in uint u;
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.f = f;
@@ -43,10 +44,9 @@
   frag_main(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'assign' :  cannot convert from ' in structure{ global mediump float f,  global mediump uint u,  global mediump 4-component vector of float v}' to 'layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer mediump float f, layout( column_major shared) buffer mediump uint u, layout( column_major shared) buffer mediump 4-component vector of float v}'
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:25: 'assign' :  cannot convert from ' in structure{ global mediump float f,  global mediump uint u,  global mediump 4-component vector of float v}' to 'layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer mediump float f, layout( column_major shared) buffer mediump uint u, layout( column_major shared) buffer mediump 4-component vector of float v}'
+ERROR: 0:25: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/shader_io/vertex_input_builtins.wgsl.expected.glsl b/test/shader_io/vertex_input_builtins.wgsl.expected.glsl
index 50db3c7..5fc5936 100644
--- a/test/shader_io/vertex_input_builtins.wgsl.expected.glsl
+++ b/test/shader_io/vertex_input_builtins.wgsl.expected.glsl
@@ -5,6 +5,7 @@
   uint vertex_index;
   uint instance_index;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -20,6 +21,10 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.vertex_index = uint(gl_VertexID);
@@ -31,4 +36,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/vertex_input_builtins_struct.wgsl.expected.glsl b/test/shader_io/vertex_input_builtins_struct.wgsl.expected.glsl
index 88c758b..159c575 100644
--- a/test/shader_io/vertex_input_builtins_struct.wgsl.expected.glsl
+++ b/test/shader_io/vertex_input_builtins_struct.wgsl.expected.glsl
@@ -5,10 +5,12 @@
   uint vertex_index;
   uint instance_index;
 };
+
 struct tint_symbol_2 {
   uint vertex_index;
   uint instance_index;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -25,6 +27,10 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.vertex_index = uint(gl_VertexID);
@@ -36,4 +42,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/vertex_input_locations.wgsl.expected.glsl b/test/shader_io/vertex_input_locations.wgsl.expected.glsl
index be35fad..ff2bf50 100644
--- a/test/shader_io/vertex_input_locations.wgsl.expected.glsl
+++ b/test/shader_io/vertex_input_locations.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float loc2;
   vec4 loc3;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -29,6 +30,8 @@
 layout(location = 1) in uint loc1;
 layout(location = 2) in float loc2;
 layout(location = 3) in vec4 loc3;
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.loc0 = loc0;
@@ -42,4 +45,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/vertex_input_locations_struct.wgsl.expected.glsl b/test/shader_io/vertex_input_locations_struct.wgsl.expected.glsl
index 7f77780..ba1db5d 100644
--- a/test/shader_io/vertex_input_locations_struct.wgsl.expected.glsl
+++ b/test/shader_io/vertex_input_locations_struct.wgsl.expected.glsl
@@ -7,12 +7,14 @@
   float loc2;
   vec4 loc3;
 };
+
 struct tint_symbol_2 {
   int loc0;
   uint loc1;
   float loc2;
   vec4 loc3;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -36,6 +38,8 @@
 layout(location = 1) in uint loc1;
 layout(location = 2) in float loc2;
 layout(location = 3) in vec4 loc3;
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.loc0 = loc0;
@@ -49,4 +53,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/vertex_input_mixed.wgsl.expected.glsl b/test/shader_io/vertex_input_mixed.wgsl.expected.glsl
index 8feb188..2979637 100644
--- a/test/shader_io/vertex_input_mixed.wgsl.expected.glsl
+++ b/test/shader_io/vertex_input_mixed.wgsl.expected.glsl
@@ -5,10 +5,12 @@
   uint vertex_index;
   int loc0;
 };
+
 struct VertexInputs1 {
   float loc2;
   vec4 loc3;
 };
+
 struct tint_symbol_2 {
   int loc0;
   uint loc1;
@@ -17,6 +19,7 @@
   uint vertex_index;
   uint instance_index;
 };
+
 struct tint_symbol_3 {
   vec4 value;
 };
@@ -42,6 +45,10 @@
 layout(location = 1) in uint loc1;
 layout(location = 2) in float loc2;
 layout(location = 3) in vec4 loc3;
+
+
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.loc0 = loc0;
@@ -57,4 +64,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/vertex_output_builtins.wgsl.expected.glsl b/test/shader_io/vertex_output_builtins.wgsl.expected.glsl
index 78e2a3f..b963e62 100644
--- a/test/shader_io/vertex_output_builtins.wgsl.expected.glsl
+++ b/test/shader_io/vertex_output_builtins.wgsl.expected.glsl
@@ -15,6 +15,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -23,4 +25,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/vertex_output_builtins_struct.wgsl.expected.glsl b/test/shader_io/vertex_output_builtins_struct.wgsl.expected.glsl
index 07d7a09..5206366 100644
--- a/test/shader_io/vertex_output_builtins_struct.wgsl.expected.glsl
+++ b/test/shader_io/vertex_output_builtins_struct.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct VertexOutputs {
   vec4 position;
 };
+
 struct tint_symbol_1 {
   vec4 position;
 };
@@ -19,6 +20,8 @@
   wrapper_result.position = inner_result.position;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -27,4 +30,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shader_io/vertex_output_locations_struct.wgsl.expected.glsl b/test/shader_io/vertex_output_locations_struct.wgsl.expected.glsl
index cd514d6..a1f89ae 100644
--- a/test/shader_io/vertex_output_locations_struct.wgsl.expected.glsl
+++ b/test/shader_io/vertex_output_locations_struct.wgsl.expected.glsl
@@ -8,6 +8,7 @@
   vec4 loc3;
   vec4 position;
 };
+
 struct tint_symbol_1 {
   int loc0;
   uint loc1;
@@ -35,6 +36,8 @@
 layout(location = 1) flat out uint loc1;
 layout(location = 2) out float loc2;
 layout(location = 3) out vec4 loc3;
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
@@ -47,4 +50,3 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
diff --git a/test/shadowing/alias/let.wgsl.expected.glsl b/test/shadowing/alias/let.wgsl.expected.glsl
index 15c71a7..f084e64 100644
--- a/test/shadowing/alias/let.wgsl.expected.glsl
+++ b/test/shadowing/alias/let.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   {
     int a_1 = 0;
@@ -19,3 +18,4 @@
   int a_2 = 0;
   int b = a_2;
 }
+
diff --git a/test/shadowing/alias/param.wgsl.expected.glsl b/test/shadowing/alias/param.wgsl.expected.glsl
index cd776ca..b685a99 100644
--- a/test/shadowing/alias/param.wgsl.expected.glsl
+++ b/test/shadowing/alias/param.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f(int a_1) {
   int b = a_1;
 }
+
diff --git a/test/shadowing/alias/var.wgsl.expected.glsl b/test/shadowing/alias/var.wgsl.expected.glsl
index 15c71a7..f084e64 100644
--- a/test/shadowing/alias/var.wgsl.expected.glsl
+++ b/test/shadowing/alias/var.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   {
     int a_1 = 0;
@@ -19,3 +18,4 @@
   int a_2 = 0;
   int b = a_2;
 }
+
diff --git a/test/shadowing/function/let.wgsl.expected.glsl b/test/shadowing/function/let.wgsl.expected.glsl
index 89ec7f6..ad0de52 100644
--- a/test/shadowing/function/let.wgsl.expected.glsl
+++ b/test/shadowing/function/let.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void a() {
   {
     int a_1 = 1;
@@ -18,3 +17,4 @@
   }
   int b = 1;
 }
+
diff --git a/test/shadowing/function/param.wgsl.expected.glsl b/test/shadowing/function/param.wgsl.expected.glsl
index cdaca56..00ac116 100644
--- a/test/shadowing/function/param.wgsl.expected.glsl
+++ b/test/shadowing/function/param.wgsl.expected.glsl
@@ -5,12 +5,12 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void a(int a_1) {
   int b = a_1;
 }
+
diff --git a/test/shadowing/function/var.wgsl.expected.glsl b/test/shadowing/function/var.wgsl.expected.glsl
index 4ed4b3d..6b283c8 100644
--- a/test/shadowing/function/var.wgsl.expected.glsl
+++ b/test/shadowing/function/var.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct a {
   int a;
 };
@@ -23,3 +22,4 @@
   a a_2 = a(0);
   a b = a_2;
 }
+
diff --git a/test/shadowing/param/function.wgsl.expected.glsl b/test/shadowing/param/function.wgsl.expected.glsl
index 483ebcc..3a4f23e 100644
--- a/test/shadowing/param/function.wgsl.expected.glsl
+++ b/test/shadowing/param/function.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void a(int a_1) {
   {
     int a_2 = a_1;
     int b = a_2;
   }
 }
+
diff --git a/test/shadowing/param/let.wgsl.expected.glsl b/test/shadowing/param/let.wgsl.expected.glsl
index b267040..6c7a3b5 100644
--- a/test/shadowing/param/let.wgsl.expected.glsl
+++ b/test/shadowing/param/let.wgsl.expected.glsl
@@ -5,14 +5,14 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f(int a) {
   {
     int b = a;
   }
 }
+
diff --git a/test/shadowing/param/var.wgsl.expected.glsl b/test/shadowing/param/var.wgsl.expected.glsl
index 1cabf9b..fc665c4 100644
--- a/test/shadowing/param/var.wgsl.expected.glsl
+++ b/test/shadowing/param/var.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f(int a) {
   {
     int a_1 = a;
     int b = a_1;
   }
 }
+
diff --git a/test/shadowing/struct/let.wgsl.expected.glsl b/test/shadowing/struct/let.wgsl.expected.glsl
index 4ed4b3d..6b283c8 100644
--- a/test/shadowing/struct/let.wgsl.expected.glsl
+++ b/test/shadowing/struct/let.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct a {
   int a;
 };
@@ -23,3 +22,4 @@
   a a_2 = a(0);
   a b = a_2;
 }
+
diff --git a/test/shadowing/struct/param.wgsl.expected.glsl b/test/shadowing/struct/param.wgsl.expected.glsl
index 0a9a3e7..e039dde 100644
--- a/test/shadowing/struct/param.wgsl.expected.glsl
+++ b/test/shadowing/struct/param.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct a {
   int a;
 };
@@ -18,3 +17,4 @@
 void f(a a_1) {
   a b = a_1;
 }
+
diff --git a/test/shadowing/struct/var.wgsl.expected.glsl b/test/shadowing/struct/var.wgsl.expected.glsl
index 4ed4b3d..6b283c8 100644
--- a/test/shadowing/struct/var.wgsl.expected.glsl
+++ b/test/shadowing/struct/var.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct a {
   int a;
 };
@@ -23,3 +22,4 @@
   a a_2 = a(0);
   a b = a_2;
 }
+
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.glsl
index 6992776..a66dfcd 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.glsl
@@ -4,9 +4,11 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct OuterS {
   InnerS a1[8];
 };
@@ -26,8 +28,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.glsl
index c44c2ac..4b6e2b5 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.glsl
@@ -4,9 +4,11 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct OuterS {
   InnerS a1[8];
 };
@@ -26,8 +28,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.glsl
index f7baafe..ae870ac 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.glsl
@@ -4,9 +4,11 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct OuterS {
   InnerS a1[8];
 };
@@ -26,8 +28,8 @@
   }
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.glsl
index b1f3cbb..6f26858 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.glsl
@@ -5,18 +5,20 @@
   uint i;
   uint j;
 };
+
 struct InnerS {
   int v;
 };
+
 struct S1 {
   InnerS a2[8];
 };
+
 struct OuterS {
   S1 a1[8];
 };
 
 uint nextIndex = 0u;
-
 uint getNextIndex() {
   nextIndex = (nextIndex + 1u);
   return nextIndex;
@@ -34,8 +36,8 @@
   s.a1[getNextIndex()].a2[uniforms.j] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.glsl
index 996e147..3a11502 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.glsl
@@ -4,9 +4,11 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct OuterS {
   InnerS a1[8];
 };
@@ -22,8 +24,8 @@
   s1.a1[uniforms.i] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.glsl
index 5d6ab47..5a6cc5e 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.glsl
@@ -5,9 +5,11 @@
   uint i;
   uint j;
 };
+
 struct InnerS {
   int v;
 };
+
 struct OuterS {
   InnerS a1[8][8];
 };
@@ -24,8 +26,8 @@
   s1.a1[uniforms.i][uniforms.j] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.glsl
index 5658ddc..7501db2 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.glsl
@@ -4,12 +4,15 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct S1 {
   InnerS s2;
 };
+
 struct OuterS {
   S1 a1[8];
 };
@@ -25,8 +28,8 @@
   s1.a1[uniforms.i].s2 = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.glsl
index 0fa9785..ac27dfd 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.glsl
@@ -5,12 +5,15 @@
   uint i;
   uint j;
 };
+
 struct InnerS {
   int v;
 };
+
 struct S1 {
   InnerS a2[8];
 };
+
 struct OuterS {
   S1 a1[8];
 };
@@ -27,8 +30,8 @@
   s.a1[uniforms.i].a2[uniforms.j] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.glsl
index 67fe10c..4d78cf6 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
@@ -11,18 +12,18 @@
 layout(binding = 4) uniform Uniforms_1 {
   uint i;
 } uniforms;
+
 layout(binding = 0) buffer OuterS_1 {
   InnerS a1[];
 } s1;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   InnerS v = InnerS(0);
   s1.a1[uniforms.i] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.glsl
index 97a4c65..f31f4e5 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.glsl
@@ -5,9 +5,11 @@
   uint i;
   uint j;
 };
+
 struct InnerS {
   int v;
 };
+
 struct S1 {
   InnerS a2[8];
 };
@@ -16,18 +18,18 @@
   uint i;
   uint j;
 } uniforms;
+
 layout(binding = 0) buffer OuterS_1 {
   S1 a1[];
 } s;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   InnerS v = InnerS(0);
   s.a1[uniforms.i].a2[uniforms.j] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.glsl
index 1313d62..e950c13 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Uniforms {
   uint i;
 };
+
 struct OuterS {
   mat2x4 m1;
 };
@@ -19,8 +20,8 @@
   s1.m1[uniforms.i][uniforms.i] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.glsl
index 8759976..f1183be 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.glsl
@@ -4,9 +4,11 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct OuterS {
   InnerS a1[8];
   InnerS a2[8];
@@ -24,8 +26,8 @@
   s1.a2[uniforms.i] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.glsl
index e29c830..9a696fb 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.glsl
@@ -4,12 +4,15 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct S1 {
   InnerS a[8];
 };
+
 struct OuterS {
   S1 s2;
 };
@@ -25,8 +28,8 @@
   s1.s2.a[uniforms.i] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.glsl
index 6b944b0..d3ceff4 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Uniforms {
   uint i;
 };
+
 struct OuterS {
   vec3 v1;
 };
@@ -18,8 +19,8 @@
   s1.v1[uniforms.i] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.glsl
index 46da3d6..e6f7d43 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct Uniforms {
   uint i;
 };
+
 struct OuterS {
   uint a1[8];
 };
@@ -24,8 +25,8 @@
   v[f(s1.a1[uniforms.i])] = 1.0f;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.glsl
index 9a01505..5f8a2aa 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.glsl
@@ -4,9 +4,11 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct OuterS {
   InnerS a1[8];
 };
@@ -23,8 +25,8 @@
   s1.a1[p_save] = v;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.glsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.glsl
index 093159e..c9b611c 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.glsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.glsl
@@ -4,9 +4,11 @@
 struct Uniforms {
   uint i;
 };
+
 struct InnerS {
   int v;
 };
+
 struct OuterS {
   InnerS a1[8];
 };
@@ -26,8 +28,8 @@
   f(s1);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.glsl b/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.glsl
index 08f6bb5..425e6a4 100644
--- a/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.glsl
+++ b/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.glsl
@@ -1,17 +1,15 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer S_1 {
   int arr[];
 } s;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.glsl b/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.glsl
index 08f6bb5..425e6a4 100644
--- a/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.glsl
+++ b/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.glsl
@@ -1,17 +1,15 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer S_1 {
   int arr[];
 } s;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/phony/call.wgsl.expected.glsl b/test/statements/assign/phony/call.wgsl.expected.glsl
index 777f222..2d825c6 100644
--- a/test/statements/assign/phony/call.wgsl.expected.glsl
+++ b/test/statements/assign/phony/call.wgsl.expected.glsl
@@ -10,8 +10,8 @@
   f(1, 2, 3);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/phony/multiple_side_effects.wgsl.expected.glsl b/test/statements/assign/phony/multiple_side_effects.wgsl.expected.glsl
index a1fc4c9..e615282 100644
--- a/test/statements/assign/phony/multiple_side_effects.wgsl.expected.glsl
+++ b/test/statements/assign/phony/multiple_side_effects.wgsl.expected.glsl
@@ -13,8 +13,8 @@
   phony_sink(f(1, 2, 3), f(4, 5, 6), f(7, f(8, 9, 10), 11));
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/phony/storage_buffer.wgsl.expected.glsl b/test/statements/assign/phony/storage_buffer.wgsl.expected.glsl
index 2dd8637..1e69b69 100644
--- a/test/statements/assign/phony/storage_buffer.wgsl.expected.glsl
+++ b/test/statements/assign/phony/storage_buffer.wgsl.expected.glsl
@@ -8,13 +8,12 @@
 layout(binding = 0) buffer S_1 {
   int i;
 } s;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/assign/phony/uniform_buffer.wgsl.expected.glsl b/test/statements/assign/phony/uniform_buffer.wgsl.expected.glsl
index 838f917..709afc7 100644
--- a/test/statements/assign/phony/uniform_buffer.wgsl.expected.glsl
+++ b/test/statements/assign/phony/uniform_buffer.wgsl.expected.glsl
@@ -13,8 +13,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/statements/for/basic.wgsl.expected.glsl b/test/statements/for/basic.wgsl.expected.glsl
index 7459c6b..b76e0d4 100644
--- a/test/statements/for/basic.wgsl.expected.glsl
+++ b/test/statements/for/basic.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void some_loop_body() {
 }
 
@@ -21,3 +20,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/complex.wgsl.expected.glsl b/test/statements/for/complex.wgsl.expected.glsl
index 96191a7..14f0d9f 100644
--- a/test/statements/for/complex.wgsl.expected.glsl
+++ b/test/statements/for/complex.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void some_loop_body() {
 }
 
@@ -30,3 +29,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/condition/array_ctor.wgsl.expected.glsl b/test/statements/for/condition/array_ctor.wgsl.expected.glsl
index 07cdfb7..0bf1e03 100644
--- a/test/statements/for/condition/array_ctor.wgsl.expected.glsl
+++ b/test/statements/for/condition/array_ctor.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int i = 0;
   while (true) {
@@ -20,3 +19,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/condition/basic.wgsl.expected.glsl b/test/statements/for/condition/basic.wgsl.expected.glsl
index 640d2bb..fb35e67 100644
--- a/test/statements/for/condition/basic.wgsl.expected.glsl
+++ b/test/statements/for/condition/basic.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int i = 0;
   {
@@ -18,3 +17,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/condition/struct_ctor.wgsl.expected.glsl b/test/statements/for/condition/struct_ctor.wgsl.expected.glsl
index 8ae3445..10033aa 100644
--- a/test/statements/for/condition/struct_ctor.wgsl.expected.glsl
+++ b/test/statements/for/condition/struct_ctor.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   int i;
 };
@@ -24,3 +23,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/continuing/array_ctor.wgsl.expected.glsl b/test/statements/for/continuing/array_ctor.wgsl.expected.glsl
index 4269ffe..35bd624 100644
--- a/test/statements/for/continuing/array_ctor.wgsl.expected.glsl
+++ b/test/statements/for/continuing/array_ctor.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int i = 0;
   while (true) {
@@ -23,3 +22,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/continuing/basic.wgsl.expected.glsl b/test/statements/for/continuing/basic.wgsl.expected.glsl
index 61e828e..812cf5c 100644
--- a/test/statements/for/continuing/basic.wgsl.expected.glsl
+++ b/test/statements/for/continuing/basic.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int i = 0;
   {
@@ -18,3 +17,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/continuing/struct_ctor.wgsl.expected.glsl b/test/statements/for/continuing/struct_ctor.wgsl.expected.glsl
index 768964e..89e6829 100644
--- a/test/statements/for/continuing/struct_ctor.wgsl.expected.glsl
+++ b/test/statements/for/continuing/struct_ctor.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   int i;
 };
@@ -29,3 +28,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/empty.wgsl.expected.glsl b/test/statements/for/empty.wgsl.expected.glsl
index 943d71e..65c9bf3 100644
--- a/test/statements/for/empty.wgsl.expected.glsl
+++ b/test/statements/for/empty.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   {
     for(; false; ) {
     }
   }
 }
+
diff --git a/test/statements/for/initializer/array_ctor.wgsl.expected.glsl b/test/statements/for/initializer/array_ctor.wgsl.expected.glsl
index 4ce3c59..f91ffbf 100644
--- a/test/statements/for/initializer/array_ctor.wgsl.expected.glsl
+++ b/test/statements/for/initializer/array_ctor.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   int tint_symbol[1] = int[1](1);
   {
@@ -18,3 +17,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/initializer/basic.wgsl.expected.glsl b/test/statements/for/initializer/basic.wgsl.expected.glsl
index ff1d58f..f65c124 100644
--- a/test/statements/for/initializer/basic.wgsl.expected.glsl
+++ b/test/statements/for/initializer/basic.wgsl.expected.glsl
@@ -5,15 +5,15 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   {
     for(int i = 0; false; ) {
     }
   }
 }
+
diff --git a/test/statements/for/initializer/struct_ctor.wgsl.expected.glsl b/test/statements/for/initializer/struct_ctor.wgsl.expected.glsl
index 39e137a..330a47c 100644
--- a/test/statements/for/initializer/struct_ctor.wgsl.expected.glsl
+++ b/test/statements/for/initializer/struct_ctor.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 struct S {
   int i;
 };
@@ -22,3 +21,4 @@
     }
   }
 }
+
diff --git a/test/statements/for/scoping.wgsl.expected.glsl b/test/statements/for/scoping.wgsl.expected.glsl
index 1c8d750..3d8df6a 100644
--- a/test/statements/for/scoping.wgsl.expected.glsl
+++ b/test/statements/for/scoping.wgsl.expected.glsl
@@ -5,12 +5,11 @@
 void unused_entry_point() {
   return;
 }
+
 void main() {
   unused_entry_point();
 }
 
-
-
 void f() {
   {
     for(int must_not_collide = 0; ; ) {
@@ -19,3 +18,4 @@
   }
   int must_not_collide = 0;
 }
+
diff --git a/test/statements/switch/common.wgsl.expected.glsl b/test/statements/switch/common.wgsl.expected.glsl
index 7450348..c0345aa 100644
--- a/test/statements/switch/common.wgsl.expected.glsl
+++ b/test/statements/switch/common.wgsl.expected.glsl
@@ -25,8 +25,8 @@
   }
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/statements/switch/fallthrough.wgsl.expected.glsl b/test/statements/switch/fallthrough.wgsl.expected.glsl
index 6302c00..f5215bf 100644
--- a/test/statements/switch/fallthrough.wgsl.expected.glsl
+++ b/test/statements/switch/fallthrough.wgsl.expected.glsl
@@ -14,8 +14,8 @@
   }
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/statements/switch/only_default_case.wgsl.expected.glsl b/test/statements/switch/only_default_case.wgsl.expected.glsl
index 029765c..e1cb68b 100644
--- a/test/statements/switch/only_default_case.wgsl.expected.glsl
+++ b/test/statements/switch/only_default_case.wgsl.expected.glsl
@@ -13,8 +13,8 @@
   }
   return;
 }
+
 void main() {
   f();
 }
 
-
diff --git a/test/struct/type_constructor.wgsl.expected.glsl b/test/struct/type_constructor.wgsl.expected.glsl
index be5a089..f32e92e 100644
--- a/test/struct/type_constructor.wgsl.expected.glsl
+++ b/test/struct/type_constructor.wgsl.expected.glsl
@@ -7,15 +7,18 @@
   int c;
   int d;
 };
+
 struct S2 {
   int e;
   S1 f;
 };
+
 struct S3 {
   int g;
   S1 h;
   S2 i;
 };
+
 struct T {
   int a[2];
 };
@@ -59,8 +62,8 @@
   T aosoa_nonempty_with_expr[2] = T[2](tint_symbol_19, aosoa_nonempty[1]);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/function_scope_declarations.wgsl.expected.glsl b/test/types/function_scope_declarations.wgsl.expected.glsl
index adf62b7..735d215 100644
--- a/test/types/function_scope_declarations.wgsl.expected.glsl
+++ b/test/types/function_scope_declarations.wgsl.expected.glsl
@@ -29,8 +29,8 @@
   S struct_let = S(0.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/function_scope_var_conversions.wgsl.expected.glsl b/test/types/function_scope_var_conversions.wgsl.expected.glsl
index 088c30b..b42e9ae 100644
--- a/test/types/function_scope_var_conversions.wgsl.expected.glsl
+++ b/test/types/function_scope_var_conversions.wgsl.expected.glsl
@@ -26,8 +26,8 @@
   bvec4 v4bool_var5 = bvec4(bvec2(vec2(123.0f, 0.0f)), bvec2(true, bool(float(0.0f))));
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/module_scope_let.wgsl.expected.glsl b/test/types/module_scope_let.wgsl.expected.glsl
index 166c6c7..aca7b16 100644
--- a/test/types/module_scope_let.wgsl.expected.glsl
+++ b/test/types/module_scope_let.wgsl.expected.glsl
@@ -9,8 +9,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/module_scope_var.wgsl.expected.glsl b/test/types/module_scope_var.wgsl.expected.glsl
index 450d5cd..06071a3 100644
--- a/test/types/module_scope_var.wgsl.expected.glsl
+++ b/test/types/module_scope_var.wgsl.expected.glsl
@@ -15,7 +15,6 @@
 mat2x3 m2x3_var = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 float arr_var[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
 S struct_var = S(0.0f);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   bool_var = false;
@@ -32,8 +31,8 @@
   struct_var = tint_symbol_2;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/module_scope_var_conversions.wgsl.expected.glsl b/test/types/module_scope_var_conversions.wgsl.expected.glsl
index 422c557..14db4ac 100644
--- a/test/types/module_scope_var_conversions.wgsl.expected.glsl
+++ b/test/types/module_scope_var_conversions.wgsl.expected.glsl
@@ -21,7 +21,6 @@
 uvec3 v3u32_var3 = uvec3(bvec3(true));
 bvec3 v3bool_var4 = bvec3(bvec2(vec2(123.0f)), true);
 bvec4 v4bool_var5 = bvec4(bvec2(vec2(123.0f, 0.0f)), bvec2(true, bool(float(0.0f))));
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   bool_var1 = false;
@@ -46,8 +45,8 @@
   v3u32_var3 = uvec3(0u, 0u, 0u);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/module_scope_var_initializers.wgsl.expected.glsl b/test/types/module_scope_var_initializers.wgsl.expected.glsl
index 450d5cd..06071a3 100644
--- a/test/types/module_scope_var_initializers.wgsl.expected.glsl
+++ b/test/types/module_scope_var_initializers.wgsl.expected.glsl
@@ -15,7 +15,6 @@
 mat2x3 m2x3_var = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
 float arr_var[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
 S struct_var = S(0.0f);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   bool_var = false;
@@ -32,8 +31,8 @@
   struct_var = tint_symbol_2;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/parameters.wgsl.expected.glsl b/test/types/parameters.wgsl.expected.glsl
index 166c6c7..aca7b16 100644
--- a/test/types/parameters.wgsl.expected.glsl
+++ b/test/types/parameters.wgsl.expected.glsl
@@ -9,8 +9,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/return_types.wgsl.expected.glsl b/test/types/return_types.wgsl.expected.glsl
index 166c6c7..aca7b16 100644
--- a/test/types/return_types.wgsl.expected.glsl
+++ b/test/types/return_types.wgsl.expected.glsl
@@ -9,8 +9,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/sampler.wgsl.expected.glsl b/test/types/sampler.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/sampler.wgsl.expected.glsl
+++ b/test/types/sampler.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/struct_members.wgsl.expected.glsl b/test/types/struct_members.wgsl.expected.glsl
index 58b993d..d123ec4 100644
--- a/test/types/struct_members.wgsl.expected.glsl
+++ b/test/types/struct_members.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct S_inner {
   float a;
 };
+
 struct S {
   bool member_bool;
   int member_i32;
@@ -22,8 +23,8 @@
   S s = S(false, 0, 0u, 0.0f, ivec2(0, 0), uvec3(0u, 0u, 0u), vec4(0.0f, 0.0f, 0.0f, 0.0f), mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f), S_inner(0.0f));
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/depth/2d.wgsl.expected.glsl b/test/types/texture/depth/2d.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/depth/2d.wgsl.expected.glsl
+++ b/test/types/texture/depth/2d.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/depth/2d_array.wgsl.expected.glsl b/test/types/texture/depth/2d_array.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/depth/2d_array.wgsl.expected.glsl
+++ b/test/types/texture/depth/2d_array.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/depth/cube.wgsl.expected.glsl b/test/types/texture/depth/cube.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/depth/cube.wgsl.expected.glsl
+++ b/test/types/texture/depth/cube.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/depth/cube_array.wgsl.expected.glsl b/test/types/texture/depth/cube_array.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/depth/cube_array.wgsl.expected.glsl
+++ b/test/types/texture/depth/cube_array.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/multisampled/2d.wgsl.expected.glsl b/test/types/texture/multisampled/2d.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/multisampled/2d.wgsl.expected.glsl
+++ b/test/types/texture/multisampled/2d.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/sampled/1d.wgsl.expected.glsl b/test/types/texture/sampled/1d.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/sampled/1d.wgsl.expected.glsl
+++ b/test/types/texture/sampled/1d.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/sampled/2d.wgsl.expected.glsl b/test/types/texture/sampled/2d.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/sampled/2d.wgsl.expected.glsl
+++ b/test/types/texture/sampled/2d.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/sampled/2d_array.wgsl.expected.glsl b/test/types/texture/sampled/2d_array.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/sampled/2d_array.wgsl.expected.glsl
+++ b/test/types/texture/sampled/2d_array.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/sampled/3d.wgsl.expected.glsl b/test/types/texture/sampled/3d.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/sampled/3d.wgsl.expected.glsl
+++ b/test/types/texture/sampled/3d.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/sampled/cube.wgsl.expected.glsl b/test/types/texture/sampled/cube.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/sampled/cube.wgsl.expected.glsl
+++ b/test/types/texture/sampled/cube.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/sampled/cube_array.wgsl.expected.glsl b/test/types/texture/sampled/cube_array.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/sampled/cube_array.wgsl.expected.glsl
+++ b/test/types/texture/sampled/cube_array.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/storage/1d.wgsl.expected.glsl b/test/types/texture/storage/1d.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/storage/1d.wgsl.expected.glsl
+++ b/test/types/texture/storage/1d.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/storage/2d.wgsl.expected.glsl b/test/types/texture/storage/2d.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/storage/2d.wgsl.expected.glsl
+++ b/test/types/texture/storage/2d.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/storage/2d_array.wgsl.expected.glsl b/test/types/texture/storage/2d_array.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/storage/2d_array.wgsl.expected.glsl
+++ b/test/types/texture/storage/2d_array.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/types/texture/storage/3d.wgsl.expected.glsl b/test/types/texture/storage/3d.wgsl.expected.glsl
index e27344d..4be746b 100644
--- a/test/types/texture/storage/3d.wgsl.expected.glsl
+++ b/test/types/texture/storage/3d.wgsl.expected.glsl
@@ -5,8 +5,8 @@
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
index 954dacb..4121e4d 100644
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D x_20_1;
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -28,11 +27,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
index 2a1640a..70cdb2d 100644
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D x_20_1;
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -28,11 +27,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
index 1432f94..e4b3e9d 100644
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D x_20_1;
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -28,11 +27,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
index 72425bb..91e212b 100644
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler1D x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,11 +28,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
index a421115..d84e959 100644
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler1D x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,11 +28,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
index d1f3ab8..f1b5383 100644
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler1D x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,11 +28,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.glsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.glsl
index 3931b95..4dafa7f 100644
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler1D x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,11 +28,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl b/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
index 6b4d81a..e5c74b4 100644
--- a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,11 +28,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index 6e04e7f..8f33cd3 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2D x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,15 +30,15 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
index 7589e0e..5630b46 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,15 +30,15 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
index 3a5ee1d..7dd2858 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler3D x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,15 +30,15 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
index 49d98ce..c13536d 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCube x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,15 +30,15 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.glsl
index 75e87cb..c3233ed 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,11 +30,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.glsl
index 6e04e7f..8f33cd3 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2D x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,15 +30,15 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.glsl
index 7589e0e..5630b46 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,15 +30,15 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.glsl
index 49d98ce..c13536d 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCube x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,15 +30,15 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.glsl
index 75e87cb..c3233ed 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,11 +30,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index b90eca4..e9dcdc1 100644
--- a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2D x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index d6fcba3..f3fde91 100644
--- a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,15 +30,15 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:24: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index 1ed30a9..4ff11e5 100644
--- a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index fc93ba1..7932851 100644
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
index f57af6e..3e63cc0 100644
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,11 +30,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
index fc93ba1..7932851 100644
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
index f57af6e..3e63cc0 100644
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,11 +30,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index cea9b02..fe1fc27 100644
--- a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,14 +31,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index 0d5fe72..050e160 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
index c7eaa89..05602d7 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,14 +31,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:24: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:24: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
index 3c3aa8a..ed9e982 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
index abcde0d..04b51c2 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,14 +31,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:24: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:24: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.glsl
index 4c5161f..ccdcc0d 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.glsl
index 5d1e906..39ad56a 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,11 +31,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index 0d5fe72..050e160 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
index c7eaa89..05602d7 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,14 +31,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:24: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:24: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
index 3c3aa8a..ed9e982 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -31,14 +30,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:23: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
index abcde0d..04b51c2 100644
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,14 +31,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:24: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:24: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
index 28d0674..b41b32e 100644
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,14 +31,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: 'textureLod' : no matching overloaded function found 
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:24: 'textureLod' : no matching overloaded function found 
+ERROR: 0:24: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index 44e2600..cb7959b 100644
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -7,7 +7,6 @@
 uniform highp sampler2D x_20_x_30;
 
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -35,14 +34,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:28: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:28: '' : compilation terminated 
+ERROR: 0:27: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
index cee1442..c2929f1 100644
--- a/test/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,14 +28,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:21: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:21: '' : compilation terminated 
+ERROR: 0:20: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:20: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
index cee1442..c2929f1 100644
--- a/test/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,14 +28,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:21: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:21: '' : compilation terminated 
+ERROR: 0:20: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:20: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index f3758a7..022fec9 100644
--- a/test/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,14 +31,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:24: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:24: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
index f105e43..bbf595c 100644
--- a/test/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,14 +31,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:24: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:24: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
index 8810a0c..b939ed5 100644
--- a/test/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler1D x_20_x_10;
 
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -32,11 +31,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.glsl
index d0a6ee9..7b17048 100644
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -27,11 +26,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.glsl
index f78f060..4521389 100644
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -27,11 +26,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.glsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.glsl
index 49e66b8..7af7e02 100644
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D x_20_1;
-
 void main_1() {
   float f1 = 1.0f;
   vec2 vf12 = vec2(1.0f, 2.0f);
@@ -27,11 +26,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.glsl b/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.glsl
index f48e748..ef37dc3 100644
--- a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS x_20_1;
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -28,14 +27,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:20: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:20: '' : compilation terminated 
+ERROR: 0:19: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:19: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
index d87e9a9..c7d6336 100644
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,14 +28,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:21: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:21: '' : compilation terminated 
+ERROR: 0:20: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:20: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
index 72425bb..91e212b 100644
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler1D x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,11 +28,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.glsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.glsl
index f4f90ff..c44d565 100644
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -29,14 +28,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:21: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:21: '' : compilation terminated 
+ERROR: 0:20: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:20: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
index 944b571..1c639c9 100644
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D x_20_1;
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -28,11 +27,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
index 9721966..f8adcc2 100644
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D x_20_1;
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -28,11 +27,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
index b259848..6321d0e 100644
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D x_20_1;
-
 void main_1() {
   float float_var = 0.0f;
   int i1 = 1;
@@ -28,11 +27,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.glsl
index 87536a1..25158b4 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D x_20_1;
-
 void main_1() {
   vec4 x_125 = texelFetch(x_20_1, int(1u), 0);
   return;
@@ -14,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.glsl
index c6ae7dc..d49cbd4 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D x_20_1;
-
 void main_1() {
   imageStore(x_20_1, int(1u), vec4(0.0f, 0.0f, 0.0f, 0.0f));
   return;
@@ -14,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.glsl
index 7e328ec..e6d0619 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D x_20_1;
-
 void main_1() {
   vec4 x_125 = texelFetch(x_20_1, int(0u), 0);
   return;
@@ -14,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.glsl
index 1f16d62..a995415 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2D x_20_1;
-
 void main_1() {
   uint x_125 = uint(textureQueryLevels(x_20_1););
   return;
@@ -14,14 +13,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.glsl
index 03a41ae..c076536 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS x_20_1;
-
 void main_1() {
   uint x_125 = uint(textureSamples(x_20_1););
   return;
@@ -14,14 +13,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.glsl
index 6f9189f..b8cfc8b 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float x_131 = texture(x_20_x_10, vec2(0.0f, 0.0f), 0.200000003f);
   return;
@@ -15,14 +14,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_8.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_8.spvasm.expected.glsl
index bdd4ebd..69330dc 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_8.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_8.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float x_131 = texture(x_20_x_10, (vec3(0.0f, 0.0f, 0.0f).xy / vec3(0.0f, 0.0f, 0.0f).z), 0.200000003f);
   return;
@@ -15,14 +14,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_9.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_9.spvasm.expected.glsl
index bdd4ebd..69330dc 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_9.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_9.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D x_20_x_10;
 
-
 void main_1() {
   float x_131 = texture(x_20_x_10, (vec3(0.0f, 0.0f, 0.0f).xy / vec3(0.0f, 0.0f, 0.0f).z), 0.200000003f);
   return;
@@ -15,14 +14,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.glsl
index 1db22da..ab58934 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.glsl
@@ -41,11 +41,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.glsl
index 76280e7..65c3ce5 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.glsl
@@ -41,11 +41,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.glsl
index 55afea2..25b1438 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.glsl
@@ -41,11 +41,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.glsl
index 74e88bc..e8c6e78 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.glsl
@@ -41,11 +41,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.glsl
index 8ce76c9..b616d81 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.glsl
@@ -41,11 +41,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.glsl
index 7081858..7f7f710 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.glsl
@@ -42,11 +42,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.glsl
index 0f28621..ace2c18 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.glsl
@@ -42,11 +42,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.glsl
index 961eccf..37d9b1a 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.glsl
@@ -42,11 +42,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.glsl
index 9821c7e..42eaecc 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.glsl
@@ -42,11 +42,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.glsl
index e4ede4b..e9c3f07 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.glsl
@@ -41,11 +41,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp highp uint' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.glsl
index 509a7a9..f3abfdf 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.glsl
@@ -35,11 +35,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:27: 'mad' : no matching overloaded function found 
 ERROR: 0:27: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.glsl
index 15652f6..c8d0e8c 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.glsl
@@ -35,11 +35,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:27: 'mad' : no matching overloaded function found 
 ERROR: 0:27: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.glsl
index 43605c7..e77fb64 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.glsl
@@ -35,11 +35,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:27: 'frac' : no matching overloaded function found 
 ERROR: 0:27: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.glsl
index 2705831..924627a 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.glsl
@@ -35,11 +35,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:27: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:27: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.glsl
index bc1cd52..f6462e6 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.glsl
@@ -35,11 +35,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:27: 'frac' : no matching overloaded function found 
 ERROR: 0:27: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.glsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.glsl
index 9e1f12d..441335c 100644
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.glsl
@@ -35,11 +35,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:27: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:27: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.glsl
index 1d906ca..4c9e1f9 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.glsl
index a1105e4..4a7faf0 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddx' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.glsl
index 3456486..2256d98 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.glsl
index 29974e7..c0e2e14 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.glsl
index fd3597d..dc514d8 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.glsl
index 1b9ae9b..fda6138 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.glsl
index 1f87b8f..635aeac 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.glsl
index bb31c48..7337c86 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.glsl
index b3e61a9..dac0f4c 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.glsl
index f1a003d..f05af78 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddx' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.glsl
index 5c76fe2..6542079 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.glsl
index 01e2652..ff0447f 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.glsl
index 83646e2..caa1530 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.glsl
index 226a2b7..144461c 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.glsl
index b19185c..545205b 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.glsl
index 862536e..3ba58ce 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddy' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.glsl
index 1572671..78db9a9 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.glsl
@@ -13,11 +13,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'ddy' : no matching overloaded function found 
 ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.glsl
index 9436845..6e3763e 100644
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.glsl
index a766f47..052c8ca 100644
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '!' :  wrong operand type no operation '!' exists that takes an operand of type  const 2-component vector of bool (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.glsl
index 164f83e..a98df47 100644
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '!' :  wrong operand type no operation '!' exists that takes an operand of type  const 2-component vector of bool (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.glsl
index f2de517..99e7ee9 100644
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '!' :  wrong operand type no operation '!' exists that takes an operand of type  const 2-component vector of bool (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.glsl
index 2951a83..eee2525 100644
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '!' :  wrong operand type no operation '!' exists that takes an operand of type  const 2-component vector of bool (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.glsl
index b5884f8..b64a1ec 100644
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '!' :  wrong operand type no operation '!' exists that takes an operand of type  const 2-component vector of bool (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.glsl
index dbca9a2..13dcb9a 100644
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '!' :  wrong operand type no operation '!' exists that takes an operand of type  const 2-component vector of bool (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.glsl
index 39dbc4e..4bcaaf7 100644
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.glsl
index 8c3b3f5..7e97341 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1[1] = int[1](0);
-
 void main_1() {
   return;
 }
@@ -22,16 +21,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:26: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.glsl
index 637586c..3e36874 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   return;
 }
@@ -22,16 +21,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:26: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.glsl
index bffe830..8d3186a 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1[1] = int[1](0);
-
 void main_1() {
   return;
 }
@@ -12,6 +11,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -28,16 +28,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:32: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:32: '' : compilation terminated 
+ERROR: 0:34: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:34: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.glsl
index 6cd8aae..4d43631 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   return;
 }
@@ -12,6 +11,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -28,16 +28,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:32: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:32: '' : compilation terminated 
+ERROR: 0:34: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:34: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.glsl
index 92de96e..5286cdb 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1 = 0;
-
 void main_1() {
   int x_2 = x_1;
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleID);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.glsl
index 92de96e..5286cdb 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1 = 0;
-
 void main_1() {
   int x_2 = x_1;
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleID);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.glsl
index 92de96e..5286cdb 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1 = 0;
-
 void main_1() {
   int x_2 = x_1;
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleID);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.glsl
index 6436f0c..af4104a 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1 = 0u;
-
 void main_1() {
   uint x_2 = x_1;
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleID);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.glsl
index 6436f0c..af4104a 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1 = 0u;
-
 void main_1() {
   uint x_2 = x_1;
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleID);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.glsl
index 6436f0c..af4104a 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1 = 0u;
-
 void main_1() {
   uint x_2 = x_1;
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleID);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.glsl
index de101d6..0e69117 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1[1] = int[1](0);
-
 void main_1() {
   int x_4 = x_1[0];
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.glsl
index de101d6..0e69117 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1[1] = int[1](0);
-
 void main_1() {
   int x_4 = x_1[0];
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.glsl
index 6c0bae1..26c9ad0 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1[1] = int[1](0);
-
 void main_1() {
   int x_3 = x_1[0];
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.glsl
index f4ee437..21b0267 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   uint x_4 = x_1[0];
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.glsl
index f4ee437..21b0267 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   uint x_4 = x_1[0];
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.glsl
index d635d56..545c475 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   uint x_3 = x_1[0];
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.glsl
index d635d56..545c475 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   uint x_3 = x_1[0];
   return;
@@ -23,16 +22,17 @@
   tint_symbol_inner(tint_symbol_1.x_1_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_1_param = uint(gl_SampleMask);
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:26: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:26: '' : compilation terminated 
+ERROR: 0:27: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:27: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.glsl
index 379bae1..a71ff02 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1[1] = int[1](0);
-
 void main_1() {
   x_1[0] = 12;
   return;
@@ -13,6 +12,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -29,16 +29,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:35: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:35: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.glsl
index 379bae1..a71ff02 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1[1] = int[1](0);
-
 void main_1() {
   x_1[0] = 12;
   return;
@@ -13,6 +12,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -29,16 +29,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:35: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:35: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.glsl
index 379bae1..a71ff02 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 int x_1[1] = int[1](0);
-
 void main_1() {
   x_1[0] = 12;
   return;
@@ -13,6 +12,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -29,16 +29,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:35: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:35: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.glsl
index ba1f6fe..c37a82a 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   x_1[0] = 0u;
   return;
@@ -13,6 +12,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -29,16 +29,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:35: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:35: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.glsl
index ba1f6fe..c37a82a 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   x_1[0] = 0u;
   return;
@@ -13,6 +12,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -29,16 +29,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:35: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:35: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.glsl
index ba1f6fe..c37a82a 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   x_1[0] = 0u;
   return;
@@ -13,6 +12,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -29,16 +29,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:35: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:35: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.glsl
index ba1f6fe..c37a82a 100644
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uint x_1[1] = uint[1](0u);
-
 void main_1() {
   x_1[0] = 0u;
   return;
@@ -13,6 +12,7 @@
 struct main_out {
   uint x_1_1;
 };
+
 struct tint_symbol_1 {
   uint x_1_1;
 };
@@ -29,16 +29,17 @@
   wrapper_result.x_1_1 = inner_result.x_1_1;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   gl_SampleMask = outputs.x_1_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:35: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:35: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.glsl
index 30bfae9..c2423a3 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.glsl
@@ -25,11 +25,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:12: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' const bool' and a right operand of type ' const bool' (or there is no acceptable conversion)
 ERROR: 0:12: '' : compilation terminated 
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 138588b..ff5659a 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl
@@ -12,7 +12,6 @@
   uint first;
   uint rtarr[];
 } myvar;
-
 void main_1() {
   uint tint_symbol_2 = 0u;
   myvar.GetDimensions(tint_symbol_2);
@@ -25,11 +24,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
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 138588b..ff5659a 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl
@@ -12,7 +12,6 @@
   uint first;
   uint rtarr[];
 } myvar;
-
 void main_1() {
   uint tint_symbol_2 = 0u;
   myvar.GetDimensions(tint_symbol_2);
@@ -25,11 +24,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.glsl
index 7ab38e0..e499bff 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.glsl
@@ -12,7 +12,6 @@
   float field0;
   float age[];
 } myvar;
-
 void main_1() {
   myvar.age[2u] = 42.0f;
   return;
@@ -22,11 +21,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.glsl
index 142d341..87c2d6d 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.glsl
@@ -12,7 +12,6 @@
   uint field0;
   uint field1[];
 } myvar;
-
 void main_1() {
   myvar.field1[1u] = 0u;
   return;
@@ -22,11 +21,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.glsl
index 9805c90..f8e81e7 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.glsl
@@ -12,7 +12,6 @@
   uint field0;
   uint field1[];
 } myvar;
-
 void main_1() {
   myvar.field0 = 0u;
   myvar.field1[1u] = 0u;
@@ -23,11 +22,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.glsl
index 9805c90..f8e81e7 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.glsl
@@ -12,7 +12,6 @@
   uint field0;
   uint field1[];
 } myvar;
-
 void main_1() {
   myvar.field0 = 0u;
   myvar.field1[1u] = 0u;
@@ -23,11 +22,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.glsl
index 4eb2657..894d2d7 100644
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.glsl
@@ -16,11 +16,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.glsl
index 4e6c407..de6fcdd 100644
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.glsl
index 745736c..c811169 100644
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const 2-component vector of float' and a right operand of type ' const 2-component vector of float' (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.glsl
index 95c53e7..038414f 100644
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' const bool' and a right operand of type ' const bool' (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.glsl
index ffdfd77..ff590fa 100644
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' const 2-component vector of bool' and a right operand of type ' const 2-component vector of bool' (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.glsl
index 0096563..cef60d7 100644
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' const bool' and a right operand of type ' const bool' (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.glsl
index 40e3619..13a2f5c 100644
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' const 2-component vector of bool' and a right operand of type ' const 2-component vector of bool' (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.glsl
index 0cdf61d..cbeafe1 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'countbits' : no matching overloaded function found 
 ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.glsl
index ae0458c..b468bf0 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'countbits' : no matching overloaded function found 
 ERROR: 0:9: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.glsl
index 4e6f39e..0b28576 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'countbits' : no matching overloaded function found 
 ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp int'
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.glsl
index f2fd90c..d05dca2 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'countbits' : no matching overloaded function found 
 ERROR: 0:9: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.glsl
index 1eb004d..4040339 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'countbits' : no matching overloaded function found 
 ERROR: 0:9: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.glsl
index 3eb3c66..77c801e 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'countbits' : no matching overloaded function found 
 ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.glsl
index 43f8422..4c2933c 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'countbits' : no matching overloaded function found 
 ERROR: 0:9: '' : compilation terminated 
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.glsl
index 5bd9c57..aa5b9c3 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'countbits' : no matching overloaded function found 
 ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.glsl
index a16703a..d944a7f 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'reversebits' : no matching overloaded function found 
 ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.glsl
index 3b1ac96..dfc6bce 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'reversebits' : no matching overloaded function found 
 ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp int'
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.glsl
index 718f4a6..e600c81 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'reversebits' : no matching overloaded function found 
 ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.glsl
index b4f442d..c427162 100644
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.glsl
@@ -17,11 +17,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:9: 'reversebits' : no matching overloaded function found 
 ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.glsl
index 4782c6f..b2641fd 100644
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.glsl
+++ b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.glsl
@@ -12,11 +12,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '!' :  wrong operand type no operation '!' exists that takes an operand of type  const 2-component vector of bool (or there is no acceptable conversion)
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/var/inferred/function.wgsl.expected.glsl b/test/var/inferred/function.wgsl.expected.glsl
index 247d694..ec327ce 100644
--- a/test/var/inferred/function.wgsl.expected.glsl
+++ b/test/var/inferred/function.wgsl.expected.glsl
@@ -4,6 +4,7 @@
 struct MyStruct {
   float f1;
 };
+
 struct tint_symbol_1 {
   vec4 value;
 };
@@ -19,10 +20,10 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 value;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   value = outputs.value;
 }
 
-
diff --git a/test/var/initialization/function/array.wgsl.expected.glsl b/test/var/initialization/function/array.wgsl.expected.glsl
index 7146e7d..f3c3ba7 100644
--- a/test/var/initialization/function/array.wgsl.expected.glsl
+++ b/test/var/initialization/function/array.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int v[3] = int[3](0, 0, 0);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/function/matrix.wgsl.expected.glsl b/test/var/initialization/function/matrix.wgsl.expected.glsl
index 34d0c8a..9c74a59 100644
--- a/test/var/initialization/function/matrix.wgsl.expected.glsl
+++ b/test/var/initialization/function/matrix.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   mat2x3 v = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/function/scalar.wgsl.expected.glsl b/test/var/initialization/function/scalar.wgsl.expected.glsl
index 8307587..159b092 100644
--- a/test/var/initialization/function/scalar.wgsl.expected.glsl
+++ b/test/var/initialization/function/scalar.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   int v = 0;
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/function/struct.wgsl.expected.glsl b/test/var/initialization/function/struct.wgsl.expected.glsl
index a81c735..2062576 100644
--- a/test/var/initialization/function/struct.wgsl.expected.glsl
+++ b/test/var/initialization/function/struct.wgsl.expected.glsl
@@ -11,8 +11,8 @@
   S v = S(0, 0.0f);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/function/vector.wgsl.expected.glsl b/test/var/initialization/function/vector.wgsl.expected.glsl
index f475c7c..ed2c8d1 100644
--- a/test/var/initialization/function/vector.wgsl.expected.glsl
+++ b/test/var/initialization/function/vector.wgsl.expected.glsl
@@ -6,8 +6,8 @@
   ivec3 v = ivec3(0, 0, 0);
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/private/array.wgsl.expected.glsl b/test/var/initialization/private/array.wgsl.expected.glsl
index e5de39b..05a9731 100644
--- a/test/var/initialization/private/array.wgsl.expected.glsl
+++ b/test/var/initialization/private/array.wgsl.expected.glsl
@@ -2,13 +2,12 @@
 precision mediump float;
 
 int v[3] = int[3](0, 0, 0);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/private/matrix.wgsl.expected.glsl b/test/var/initialization/private/matrix.wgsl.expected.glsl
index 3771d7b..f9b2340 100644
--- a/test/var/initialization/private/matrix.wgsl.expected.glsl
+++ b/test/var/initialization/private/matrix.wgsl.expected.glsl
@@ -2,13 +2,12 @@
 precision mediump float;
 
 mat2x3 v = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/private/scalar.wgsl.expected.glsl b/test/var/initialization/private/scalar.wgsl.expected.glsl
index 4e93b5e..4c21778 100644
--- a/test/var/initialization/private/scalar.wgsl.expected.glsl
+++ b/test/var/initialization/private/scalar.wgsl.expected.glsl
@@ -2,13 +2,12 @@
 precision mediump float;
 
 int v = 0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/private/struct.wgsl.expected.glsl b/test/var/initialization/private/struct.wgsl.expected.glsl
index 5d17f80..8bb397c 100644
--- a/test/var/initialization/private/struct.wgsl.expected.glsl
+++ b/test/var/initialization/private/struct.wgsl.expected.glsl
@@ -7,13 +7,12 @@
 };
 
 S v = S(0, 0.0f);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/private/vector.wgsl.expected.glsl b/test/var/initialization/private/vector.wgsl.expected.glsl
index ff32b2e..d894156 100644
--- a/test/var/initialization/private/vector.wgsl.expected.glsl
+++ b/test/var/initialization/private/vector.wgsl.expected.glsl
@@ -2,13 +2,12 @@
 precision mediump float;
 
 ivec3 v = ivec3(0, 0, 0);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/initialization/workgroup/array.wgsl.expected.glsl b/test/var/initialization/workgroup/array.wgsl.expected.glsl
index c53f318..61851d8 100644
--- a/test/var/initialization/workgroup/array.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/array.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int v[3];
-
 struct tint_symbol_2 {
   uint local_invocation_index;
 };
@@ -22,10 +21,11 @@
   tint_symbol_inner(tint_symbol_1.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/var/initialization/workgroup/matrix.wgsl.expected.glsl b/test/var/initialization/workgroup/matrix.wgsl.expected.glsl
index 8ea3faa..facd6b0 100644
--- a/test/var/initialization/workgroup/matrix.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/matrix.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared mat2x3 v;
-
 struct tint_symbol_2 {
   uint local_invocation_index;
 };
@@ -19,10 +18,11 @@
   tint_symbol_inner(tint_symbol_1.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/var/initialization/workgroup/scalar.wgsl.expected.glsl b/test/var/initialization/workgroup/scalar.wgsl.expected.glsl
index 51471ca..6e9244b 100644
--- a/test/var/initialization/workgroup/scalar.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/scalar.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int v;
-
 struct tint_symbol_2 {
   uint local_invocation_index;
 };
@@ -19,10 +18,11 @@
   tint_symbol_inner(tint_symbol_1.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/var/initialization/workgroup/struct.wgsl.expected.glsl b/test/var/initialization/workgroup/struct.wgsl.expected.glsl
index bb6cf92..a0db087 100644
--- a/test/var/initialization/workgroup/struct.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/struct.wgsl.expected.glsl
@@ -7,7 +7,6 @@
 };
 
 shared S v;
-
 struct tint_symbol_2 {
   uint local_invocation_index;
 };
@@ -25,10 +24,11 @@
   tint_symbol_inner(tint_symbol_1.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/var/initialization/workgroup/vector.wgsl.expected.glsl b/test/var/initialization/workgroup/vector.wgsl.expected.glsl
index af1722c..e710bb2 100644
--- a/test/var/initialization/workgroup/vector.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/vector.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared ivec3 v;
-
 struct tint_symbol_2 {
   uint local_invocation_index;
 };
@@ -19,10 +18,11 @@
   tint_symbol_inner(tint_symbol_1.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/var/override/named/no_init/bool.wgsl.expected.glsl b/test/var/override/named/no_init/bool.wgsl.expected.glsl
index da1fd24..788b030 100644
--- a/test/var/override/named/no_init/bool.wgsl.expected.glsl
+++ b/test/var/override/named/no_init/bool.wgsl.expected.glsl
@@ -7,16 +7,15 @@
 #error spec constant required for constant id 0
 #endif
 const bool o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '#error' : spec constant required for constant id 0  
 ERROR: 0:6: '' : missing #endif 
diff --git a/test/var/override/named/no_init/f32.wgsl.expected.glsl b/test/var/override/named/no_init/f32.wgsl.expected.glsl
index 0f71961..ba60055 100644
--- a/test/var/override/named/no_init/f32.wgsl.expected.glsl
+++ b/test/var/override/named/no_init/f32.wgsl.expected.glsl
@@ -7,16 +7,15 @@
 #error spec constant required for constant id 0
 #endif
 const float o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '#error' : spec constant required for constant id 0  
 ERROR: 0:6: '' : missing #endif 
diff --git a/test/var/override/named/no_init/i32.wgsl.expected.glsl b/test/var/override/named/no_init/i32.wgsl.expected.glsl
index 0f490be..f2096f5 100644
--- a/test/var/override/named/no_init/i32.wgsl.expected.glsl
+++ b/test/var/override/named/no_init/i32.wgsl.expected.glsl
@@ -7,16 +7,15 @@
 #error spec constant required for constant id 0
 #endif
 const int o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '#error' : spec constant required for constant id 0  
 ERROR: 0:6: '' : missing #endif 
diff --git a/test/var/override/named/no_init/u32.wgsl.expected.glsl b/test/var/override/named/no_init/u32.wgsl.expected.glsl
index 776a083..94bdd23 100644
--- a/test/var/override/named/no_init/u32.wgsl.expected.glsl
+++ b/test/var/override/named/no_init/u32.wgsl.expected.glsl
@@ -7,16 +7,15 @@
 #error spec constant required for constant id 0
 #endif
 const uint o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '#error' : spec constant required for constant id 0  
 ERROR: 0:6: '' : missing #endif 
diff --git a/test/var/override/named/val_init/bool.wgsl.expected.glsl b/test/var/override/named/val_init/bool.wgsl.expected.glsl
index b1c7c0a..44a7de1 100644
--- a/test/var/override/named/val_init/bool.wgsl.expected.glsl
+++ b/test/var/override/named/val_init/bool.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_0 true
 #endif
 const bool o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/named/val_init/f32.wgsl.expected.glsl b/test/var/override/named/val_init/f32.wgsl.expected.glsl
index 29dff55..a0849a3 100644
--- a/test/var/override/named/val_init/f32.wgsl.expected.glsl
+++ b/test/var/override/named/val_init/f32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_0 1.0f
 #endif
 const float o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/named/val_init/i32.wgsl.expected.glsl b/test/var/override/named/val_init/i32.wgsl.expected.glsl
index edfc48c..5d536fc 100644
--- a/test/var/override/named/val_init/i32.wgsl.expected.glsl
+++ b/test/var/override/named/val_init/i32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_0 1
 #endif
 const int o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/named/val_init/u32.wgsl.expected.glsl b/test/var/override/named/val_init/u32.wgsl.expected.glsl
index 65314db..fd5bad1 100644
--- a/test/var/override/named/val_init/u32.wgsl.expected.glsl
+++ b/test/var/override/named/val_init/u32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_0 1u
 #endif
 const uint o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/named/zero_init/bool.wgsl.expected.glsl b/test/var/override/named/zero_init/bool.wgsl.expected.glsl
index 99475b9..fc98806 100644
--- a/test/var/override/named/zero_init/bool.wgsl.expected.glsl
+++ b/test/var/override/named/zero_init/bool.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_0 false
 #endif
 const bool o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/named/zero_init/f32.wgsl.expected.glsl b/test/var/override/named/zero_init/f32.wgsl.expected.glsl
index 13b7b84..0f0bfb3 100644
--- a/test/var/override/named/zero_init/f32.wgsl.expected.glsl
+++ b/test/var/override/named/zero_init/f32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_0 0.0f
 #endif
 const float o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/named/zero_init/i32.wgsl.expected.glsl b/test/var/override/named/zero_init/i32.wgsl.expected.glsl
index 40ad1ac..c2c5f49 100644
--- a/test/var/override/named/zero_init/i32.wgsl.expected.glsl
+++ b/test/var/override/named/zero_init/i32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_0 0
 #endif
 const int o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/named/zero_init/u32.wgsl.expected.glsl b/test/var/override/named/zero_init/u32.wgsl.expected.glsl
index 90c4e53..962eeee 100644
--- a/test/var/override/named/zero_init/u32.wgsl.expected.glsl
+++ b/test/var/override/named/zero_init/u32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_0 0u
 #endif
 const uint o = WGSL_SPEC_CONSTANT_0;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/numbered/no_init/bool.wgsl.expected.glsl b/test/var/override/numbered/no_init/bool.wgsl.expected.glsl
index caf27de..a1fd32c 100644
--- a/test/var/override/numbered/no_init/bool.wgsl.expected.glsl
+++ b/test/var/override/numbered/no_init/bool.wgsl.expected.glsl
@@ -7,16 +7,15 @@
 #error spec constant required for constant id 1234
 #endif
 const bool o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '#error' : spec constant required for constant id 1234  
 ERROR: 0:6: '' : missing #endif 
diff --git a/test/var/override/numbered/no_init/f32.wgsl.expected.glsl b/test/var/override/numbered/no_init/f32.wgsl.expected.glsl
index fc99ef9..ace6cfe 100644
--- a/test/var/override/numbered/no_init/f32.wgsl.expected.glsl
+++ b/test/var/override/numbered/no_init/f32.wgsl.expected.glsl
@@ -7,16 +7,15 @@
 #error spec constant required for constant id 1234
 #endif
 const float o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '#error' : spec constant required for constant id 1234  
 ERROR: 0:6: '' : missing #endif 
diff --git a/test/var/override/numbered/no_init/i32.wgsl.expected.glsl b/test/var/override/numbered/no_init/i32.wgsl.expected.glsl
index 54222e3..7ba93a5 100644
--- a/test/var/override/numbered/no_init/i32.wgsl.expected.glsl
+++ b/test/var/override/numbered/no_init/i32.wgsl.expected.glsl
@@ -7,16 +7,15 @@
 #error spec constant required for constant id 1234
 #endif
 const int o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '#error' : spec constant required for constant id 1234  
 ERROR: 0:6: '' : missing #endif 
diff --git a/test/var/override/numbered/no_init/u32.wgsl.expected.glsl b/test/var/override/numbered/no_init/u32.wgsl.expected.glsl
index 631b5f4..80d9e41 100644
--- a/test/var/override/numbered/no_init/u32.wgsl.expected.glsl
+++ b/test/var/override/numbered/no_init/u32.wgsl.expected.glsl
@@ -7,16 +7,15 @@
 #error spec constant required for constant id 1234
 #endif
 const uint o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '#error' : spec constant required for constant id 1234  
 ERROR: 0:6: '' : missing #endif 
diff --git a/test/var/override/numbered/val_init/bool.wgsl.expected.glsl b/test/var/override/numbered/val_init/bool.wgsl.expected.glsl
index 8991843..e72288d 100644
--- a/test/var/override/numbered/val_init/bool.wgsl.expected.glsl
+++ b/test/var/override/numbered/val_init/bool.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_1234 true
 #endif
 const bool o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/numbered/val_init/f32.wgsl.expected.glsl b/test/var/override/numbered/val_init/f32.wgsl.expected.glsl
index 3e56eb0..264a481 100644
--- a/test/var/override/numbered/val_init/f32.wgsl.expected.glsl
+++ b/test/var/override/numbered/val_init/f32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_1234 1.0f
 #endif
 const float o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/numbered/val_init/i32.wgsl.expected.glsl b/test/var/override/numbered/val_init/i32.wgsl.expected.glsl
index 99a03ef..ff99d26 100644
--- a/test/var/override/numbered/val_init/i32.wgsl.expected.glsl
+++ b/test/var/override/numbered/val_init/i32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_1234 1
 #endif
 const int o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/numbered/val_init/u32.wgsl.expected.glsl b/test/var/override/numbered/val_init/u32.wgsl.expected.glsl
index ab1ec93..a6d6f0b 100644
--- a/test/var/override/numbered/val_init/u32.wgsl.expected.glsl
+++ b/test/var/override/numbered/val_init/u32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_1234 1u
 #endif
 const uint o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/numbered/zero_init/bool.wgsl.expected.glsl b/test/var/override/numbered/zero_init/bool.wgsl.expected.glsl
index 4f1f5d0..55bbfa4 100644
--- a/test/var/override/numbered/zero_init/bool.wgsl.expected.glsl
+++ b/test/var/override/numbered/zero_init/bool.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_1234 false
 #endif
 const bool o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/numbered/zero_init/f32.wgsl.expected.glsl b/test/var/override/numbered/zero_init/f32.wgsl.expected.glsl
index b108b60..21bf19f 100644
--- a/test/var/override/numbered/zero_init/f32.wgsl.expected.glsl
+++ b/test/var/override/numbered/zero_init/f32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_1234 0.0f
 #endif
 const float o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/numbered/zero_init/i32.wgsl.expected.glsl b/test/var/override/numbered/zero_init/i32.wgsl.expected.glsl
index bece063..dabd0b7 100644
--- a/test/var/override/numbered/zero_init/i32.wgsl.expected.glsl
+++ b/test/var/override/numbered/zero_init/i32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_1234 0
 #endif
 const int o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/override/numbered/zero_init/u32.wgsl.expected.glsl b/test/var/override/numbered/zero_init/u32.wgsl.expected.glsl
index 34d0432..80421e9 100644
--- a/test/var/override/numbered/zero_init/u32.wgsl.expected.glsl
+++ b/test/var/override/numbered/zero_init/u32.wgsl.expected.glsl
@@ -5,13 +5,12 @@
 #define WGSL_SPEC_CONSTANT_1234 0u
 #endif
 const uint o = WGSL_SPEC_CONSTANT_1234;
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
diff --git a/test/var/uses/many_workgroup_vars.wgsl.expected.glsl b/test/var/uses/many_workgroup_vars.wgsl.expected.glsl
index 42cbfeb..a81184b 100644
--- a/test/var/uses/many_workgroup_vars.wgsl.expected.glsl
+++ b/test/var/uses/many_workgroup_vars.wgsl.expected.glsl
@@ -101,7 +101,6 @@
 shared mat2 m97;
 shared mat2 m98;
 shared mat2 m99;
-
 struct tint_symbol_2 {
   uint idx;
 };
@@ -317,10 +316,11 @@
   tint_symbol_inner(tint_symbol_1.idx);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.idx = uint(gl_LocalInvocationIndex);
   tint_symbol(inputs);
 }
 
-
diff --git a/test/var/uses/private.wgsl.expected.glsl b/test/var/uses/private.wgsl.expected.glsl
index f2d75e9..a02a261 100644
--- a/test/var/uses/private.wgsl.expected.glsl
+++ b/test/var/uses/private.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 int a = 0;
-
 void uses_a() {
   a = (a + 1);
 }
@@ -13,16 +12,15 @@
   uses_a();
   return;
 }
+
 void main() {
   main1();
 }
 
-
 #version 310 es
 precision mediump float;
 
 int b = 0;
-
 void uses_b() {
   b = (b * 2);
 }
@@ -33,17 +31,16 @@
   uses_b();
   return;
 }
+
 void main() {
   main2();
 }
 
-
 #version 310 es
 precision mediump float;
 
 int a = 0;
 int b = 0;
-
 void uses_a() {
   a = (a + 1);
 }
@@ -73,11 +70,11 @@
   no_uses();
   return;
 }
+
 void main() {
   main3();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -89,8 +86,8 @@
   no_uses();
   return;
 }
+
 void main() {
   main4();
 }
 
-
diff --git a/test/var/uses/workgroup.wgsl.expected.glsl b/test/var/uses/workgroup.wgsl.expected.glsl
index b577200..d2c86ca 100644
--- a/test/var/uses/workgroup.wgsl.expected.glsl
+++ b/test/var/uses/workgroup.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int a;
-
 void uses_a() {
   a = (a + 1);
 }
@@ -23,6 +22,7 @@
 struct tint_symbol_3 {
   uint local_invocation_index_1;
 };
+
 struct tint_symbol_5 {
   uint local_invocation_index_2;
 };
@@ -32,18 +32,18 @@
   main1_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   main1(inputs);
 }
 
-
 #version 310 es
 precision mediump float;
 
 shared int b;
-
 void uses_b() {
   b = (b * 2);
 }
@@ -51,6 +51,7 @@
 struct tint_symbol_1 {
   uint local_invocation_index;
 };
+
 struct tint_symbol_3 {
   uint local_invocation_index_1;
 };
@@ -73,19 +74,19 @@
   main2_inner(tint_symbol_2.local_invocation_index_1);
   return;
 }
+
+
 void main() {
   tint_symbol_3 inputs;
   inputs.local_invocation_index_1 = uint(gl_LocalInvocationIndex);
   main2(inputs);
 }
 
-
 #version 310 es
 precision mediump float;
 
 shared int a;
 shared int b;
-
 void uses_a() {
   a = (a + 1);
 }
@@ -112,9 +113,11 @@
 struct tint_symbol_1 {
   uint local_invocation_index;
 };
+
 struct tint_symbol_3 {
   uint local_invocation_index_1;
 };
+
 struct tint_symbol_5 {
   uint local_invocation_index_2;
 };
@@ -134,13 +137,14 @@
   main3_inner(tint_symbol_4.local_invocation_index_2);
   return;
 }
+
+
 void main() {
   tint_symbol_5 inputs;
   inputs.local_invocation_index_2 = uint(gl_LocalInvocationIndex);
   main3(inputs);
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -150,9 +154,11 @@
 struct tint_symbol_1 {
   uint local_invocation_index;
 };
+
 struct tint_symbol_3 {
   uint local_invocation_index_1;
 };
+
 struct tint_symbol_5 {
   uint local_invocation_index_2;
 };
@@ -162,8 +168,8 @@
   no_uses();
   return;
 }
+
 void main() {
   main4();
 }
 
-
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.glsl
index e9b11aa..93c8bb3 100644
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.glsl
@@ -7,6 +7,7 @@
   int global_seed;
   int data[];
 };
+
 struct buf1 {
   vec2 injectionSwitch;
 };
@@ -62,13 +63,14 @@
   tint_symbol_1_inner(tint_symbol_3.tint_symbol_2);
   return;
 }
+
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_LocalInvocationID;
   tint_symbol_1(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.glsl
index 64cd1b0..ff8ddc5 100644
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.glsl
@@ -11,6 +11,7 @@
   int global_seed;
   int data[];
 };
+
 struct buf1 {
   vec2 injectionSwitch;
 };
@@ -66,13 +67,14 @@
   tint_symbol_1_inner(tint_symbol_3.tint_symbol_2);
   return;
 }
+
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_LocalInvocationID;
   tint_symbol_1(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '' : array size required 
 ERROR: 0:7: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.glsl
index 5f47c2e..e03004c 100644
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.glsl
@@ -10,9 +10,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_25;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 vec3 drawShape_vf2_(inout vec2 pos) {
   bool c2 = false;
   bool c3 = false;
@@ -193,9 +193,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -213,7 +215,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -222,7 +226,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:104: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:104: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.glsl
index 4f456a1..c39a0db 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[1];
 };
@@ -27,11 +30,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[1];
 } x_8;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float undefined = 0.0f;
   bool x_51 = false;
@@ -65,6 +69,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -82,16 +87,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:29: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
-ERROR: 0:29: '' : compilation terminated 
+ERROR: 0:33: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:33: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.glsl
index d236717..932f6e3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.glsl
@@ -7,12 +7,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[1];
 };
@@ -74,6 +77,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -91,16 +95,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:39: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:39: '' : compilation terminated 
+ERROR: 0:42: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:42: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.glsl
index 1dd8279..990ae87 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.glsl
@@ -18,12 +18,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[1];
 };
@@ -100,6 +103,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -117,16 +121,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:28: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
-ERROR: 0:28: '' : compilation terminated 
+ERROR: 0:31: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:31: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.glsl
index 2af4426..08ce5c5 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   float dist1 = 0.0f;
@@ -23,6 +22,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -40,16 +40,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:13: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:13: '' : compilation terminated 
+ERROR: 0:12: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.glsl
index f96b1ee..240e031 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.glsl
@@ -13,6 +13,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 };
@@ -20,8 +21,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int i = 0;
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -57,6 +58,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -74,13 +76,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.glsl
index f1e2c96..6167451 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.glsl
@@ -17,6 +17,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 };
@@ -24,8 +25,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int i = 0;
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -61,6 +62,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -78,13 +80,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.glsl
index 390a73f..2e0d58b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 };
@@ -20,11 +23,12 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 } x_8;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 } x_11;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 int f1_() {
   int a = 0;
   int i = 0;
@@ -67,9 +71,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -87,7 +93,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -96,11 +104,10 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:35: 'countbits' : no matching overloaded function found 
-ERROR: 0:35: 'assign' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:35: '' : compilation terminated 
+ERROR: 0:39: 'countbits' : no matching overloaded function found 
+ERROR: 0:39: 'assign' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:39: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.glsl
index d319728..29f6381 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 };
@@ -28,11 +31,12 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 } x_8;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 } x_11;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 int f1_() {
   int a = 0;
   int i = 0;
@@ -75,9 +79,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -95,7 +101,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -104,11 +112,10 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:35: 'countbits' : no matching overloaded function found 
-ERROR: 0:35: 'assign' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:35: '' : compilation terminated 
+ERROR: 0:39: 'countbits' : no matching overloaded function found 
+ERROR: 0:39: 'assign' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:39: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.glsl
index 85ff02e..4560304 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 } x_5;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int x_28 = 0;
   int x_29 = 0;
@@ -65,6 +66,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -82,16 +84,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:22: 'reversebits' : no matching overloaded function found 
-ERROR: 0:22: '' : compilation terminated 
+ERROR: 0:23: 'reversebits' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.glsl
index fead835..31c8c48 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.glsl
@@ -10,6 +10,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 };
@@ -17,8 +18,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 } x_5;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int x_28 = 0;
   int x_29 = 0;
@@ -69,6 +70,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -86,16 +88,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:22: 'reversebits' : no matching overloaded function found 
-ERROR: 0:22: '' : compilation terminated 
+ERROR: 0:23: 'reversebits' : no matching overloaded function found 
+ERROR: 0:23: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.glsl
index a623f55..ebf3312 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.glsl
@@ -13,21 +13,27 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf2 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
+
 struct buf3 {
   int three;
 };
+
 struct tint_padded_array_element_2 {
   uint el;
 };
+
 struct buf0 {
   tint_padded_array_element_2 x_GLF_uniform_uint_values[1];
 };
@@ -36,13 +42,16 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 } x_8;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 2) uniform buf2_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_12;
+
 layout(binding = 3) uniform buf3_1 {
   int three;
 } x_14;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_2 x_GLF_uniform_uint_values[1];
 } x_16;
@@ -125,9 +134,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -145,7 +156,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -154,7 +167,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.glsl
index 0d4da51..2259446 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.glsl
@@ -25,21 +25,27 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf2 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
+
 struct buf3 {
   int three;
 };
+
 struct tint_padded_array_element_2 {
   uint el;
 };
+
 struct buf0 {
   tint_padded_array_element_2 x_GLF_uniform_uint_values[1];
 };
@@ -48,13 +54,16 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 } x_8;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 2) uniform buf2_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_12;
+
 layout(binding = 3) uniform buf3_1 {
   int three;
 } x_14;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_2 x_GLF_uniform_uint_values[1];
 } x_16;
@@ -137,9 +146,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -157,7 +168,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -166,7 +179,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.glsl
index 56aa8c4..64413c4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   int i = 0;
   int j = 0;
@@ -29,6 +28,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -46,16 +46,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:19: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:19: '' : compilation terminated 
+ERROR: 0:18: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:18: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.glsl
index d3bc8be..900486a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.glsl
@@ -10,6 +10,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 };
@@ -36,6 +37,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -53,16 +55,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:17: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
-ERROR: 0:17: '' : compilation terminated 
+ERROR: 0:18: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:18: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.glsl
index 85ecb2f..82ba3e2 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   float f = 0.0f;
   f = atan(1.0f, tanh(1.0f));
@@ -19,6 +18,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -36,16 +36,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:8: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:8: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.glsl
index 6ba4f24..e676744 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int a = 0;
   int i = 0;
@@ -51,6 +52,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -68,16 +70,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:27: 'reversebits' : no matching overloaded function found 
-ERROR: 0:27: '' : compilation terminated 
+ERROR: 0:28: 'reversebits' : no matching overloaded function found 
+ERROR: 0:28: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.glsl
index 7bb7851..270ef81 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.glsl
@@ -10,6 +10,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 };
@@ -17,8 +18,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int a = 0;
   int i = 0;
@@ -55,6 +56,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -72,16 +74,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:27: 'reversebits' : no matching overloaded function found 
-ERROR: 0:27: '' : compilation terminated 
+ERROR: 0:28: 'reversebits' : no matching overloaded function found 
+ERROR: 0:28: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.glsl
index b8a9e31..ff629a4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.glsl
@@ -6,15 +6,19 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 };
+
 struct buf2 {
   vec2 injectionSwitch;
 };
@@ -23,14 +27,16 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_7;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 } x_10;
+
 layout(binding = 2) uniform buf2_1 {
   vec2 injectionSwitch;
 } x_12;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float f = 0.0f;
   int r = 0;
@@ -81,6 +87,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -98,16 +105,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:49: 'ddx' : no matching overloaded function found 
-ERROR: 0:49: '' : compilation terminated 
+ERROR: 0:55: 'ddx' : no matching overloaded function found 
+ERROR: 0:55: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.glsl
index 37216d1..a1dd337 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.glsl
@@ -14,15 +14,19 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 };
+
 struct buf2 {
   vec2 injectionSwitch;
 };
@@ -31,14 +35,16 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_7;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 } x_10;
+
 layout(binding = 2) uniform buf2_1 {
   vec2 injectionSwitch;
 } x_12;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float f = 0.0f;
   int r = 0;
@@ -89,6 +95,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -106,16 +113,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:49: 'ddx' : no matching overloaded function found 
-ERROR: 0:49: '' : compilation terminated 
+ERROR: 0:55: 'ddx' : no matching overloaded function found 
+ERROR: 0:55: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.glsl
index 6d1de6f..6320755 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   mat2 m = mat2(0.0f, 0.0f, 0.0f, 0.0f);
   m = (transpose(mat2(vec2(1.0f, 2.0f), vec2(3.0f, 4.0f))) * (1.0f / 2.0f));
@@ -20,6 +19,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -37,16 +37,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:10: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
-ERROR: 0:10: '' : compilation terminated 
+ERROR: 0:9: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.glsl
index 13968b5..bb9081f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   bool a = false;
   a = false;
@@ -19,6 +18,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -36,16 +36,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' const bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:8: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' const bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:8: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.glsl
index 552eb47..1ac4916 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   int i = 0;
   i = 2;
@@ -30,9 +29,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -50,7 +51,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -59,10 +62,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:14: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' const bool' (or there is no acceptable conversion)
-ERROR: 0:14: '' : compilation terminated 
+ERROR: 0:13: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' const bool' (or there is no acceptable conversion)
+ERROR: 0:13: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.glsl
index 49338f4..621b4bb 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   float x_22 = tint_symbol.x;
   if (((x_22 < 0.0f) | true)) {
@@ -19,9 +18,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -39,7 +40,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -48,10 +51,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' const bool' (or there is no acceptable conversion)
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:8: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' const bool' (or there is no acceptable conversion)
+ERROR: 0:8: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.glsl
index 8d05418..6c4965b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   uint one;
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   uint b = 0u;
@@ -60,6 +60,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -77,13 +78,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:50: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:50: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.glsl
index 961fcfb..c3ca7d7 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   float one;
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float f = 0.0f;
   float x_28 = x_6.one;
@@ -27,6 +27,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -44,13 +45,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:17: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:17: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.glsl
index 6a250ee..8be8ca8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   float four;
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float a = 0.0f;
   float x_27 = x_6.four;
@@ -27,6 +27,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -44,13 +45,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:17: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:17: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.glsl
index fa0eab9..abd1a1e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   float one;
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float f = 0.0f;
   float x_28 = x_6.one;
@@ -27,6 +27,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -44,13 +45,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:17: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:17: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.glsl
index 4c8a214..df8d742 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_5;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   vec2 x_29 = x_5.injectionSwitch;
   if (((bvec2(false, false) ? vec2(1.0f, 1.0f) : x_29).x == 0.0f)) {
@@ -25,6 +25,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -42,13 +43,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:15: '' : boolean expression expected 
 ERROR: 0:15: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.glsl
index 4c8a214..df8d742 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_5;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   vec2 x_29 = x_5.injectionSwitch;
   if (((bvec2(false, false) ? vec2(1.0f, 1.0f) : x_29).x == 0.0f)) {
@@ -25,6 +25,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -42,13 +43,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:15: '' : boolean expression expected 
 ERROR: 0:15: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.glsl
index a7344c5..7f816f4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 threeandfour;
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   v = vec4(2.0f, 3.0f, 4.0f, 5.0f);
@@ -30,6 +30,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -47,13 +48,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:17: '' : boolean expression expected 
 ERROR: 0:17: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.glsl
index a7344c5..7f816f4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 threeandfour;
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   v = vec4(2.0f, 3.0f, 4.0f, 5.0f);
@@ -30,6 +30,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -47,13 +48,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:17: '' : boolean expression expected 
 ERROR: 0:17: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.glsl
index 87aa1ed..745c67c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
 };
@@ -20,6 +23,7 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 } x_8;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
@@ -48,9 +52,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -68,7 +74,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -77,10 +85,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:30: 'frac' : no matching overloaded function found 
-ERROR: 0:30: '' : compilation terminated 
+ERROR: 0:34: 'frac' : no matching overloaded function found 
+ERROR: 0:34: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.glsl
index 0946941..4d08ecf 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
 };
@@ -28,6 +31,7 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 } x_8;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
@@ -56,9 +60,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -76,7 +82,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -85,10 +93,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:30: 'frac' : no matching overloaded function found 
-ERROR: 0:30: '' : compilation terminated 
+ERROR: 0:34: 'frac' : no matching overloaded function found 
+ERROR: 0:34: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.glsl
index bfff2e3..cd589ef 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   vec2 v1 = vec2(0.0f, 0.0f);
   vec2 b = vec2(0.0f, 0.0f);
@@ -54,6 +55,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -71,17 +73,17 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'frac' : no matching overloaded function found 
-ERROR: 0:24: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:25: 'frac' : no matching overloaded function found 
+ERROR: 0:25: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
+ERROR: 0:25: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.glsl
index 5f3f1a2..3eb01e8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.glsl
@@ -10,6 +10,7 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 };
@@ -17,8 +18,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   vec2 v1 = vec2(0.0f, 0.0f);
   vec2 b = vec2(0.0f, 0.0f);
@@ -58,6 +59,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -75,17 +77,17 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:24: 'frac' : no matching overloaded function found 
-ERROR: 0:24: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:24: '' : compilation terminated 
+ERROR: 0:25: 'frac' : no matching overloaded function found 
+ERROR: 0:25: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
+ERROR: 0:25: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.glsl
index 723fe04..948c9ac 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 };
@@ -14,8 +15,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 } x_7;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 int func_() {
   while (true) {
     if ((x_GLF_global_loop_count < 100)) {
@@ -66,6 +67,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -83,16 +85,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:40: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' const bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:40: '' : compilation terminated 
+ERROR: 0:41: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' const bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:41: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.glsl
index f86ebbe..a7a4d11 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[5];
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[5];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int a = 0;
   int b = 0;
@@ -88,6 +89,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -105,16 +107,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:32: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:32: '' : compilation terminated 
+ERROR: 0:33: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:33: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.glsl
index 448c70a..924667c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.glsl
@@ -18,12 +18,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -31,11 +34,12 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_6;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -109,6 +113,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -126,13 +131,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.glsl
index 8e61de0..6f2da38 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.glsl
@@ -26,12 +26,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -39,11 +42,12 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_6;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -117,6 +121,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -134,13 +139,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.glsl
index 2b5249f..4097def 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 };
@@ -20,6 +23,7 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 } x_8;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
@@ -72,9 +76,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -92,7 +98,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -101,10 +109,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:28: 'ddx' : no matching overloaded function found 
-ERROR: 0:28: '' : compilation terminated 
+ERROR: 0:32: 'ddx' : no matching overloaded function found 
+ERROR: 0:32: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.glsl
index acd0fcc..0bd2ff4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 };
@@ -28,6 +31,7 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 } x_8;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
@@ -80,9 +84,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -100,7 +106,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -109,10 +117,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:28: 'ddx' : no matching overloaded function found 
-ERROR: 0:28: '' : compilation terminated 
+ERROR: 0:32: 'ddx' : no matching overloaded function found 
+ERROR: 0:32: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.glsl
index 42429fe..68c2991 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.glsl
@@ -18,12 +18,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[7];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -31,11 +34,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[7];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -101,6 +105,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -118,13 +123,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.glsl
index a80bee3..578af5f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.glsl
@@ -26,12 +26,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[7];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -39,11 +42,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[7];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -109,6 +113,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -126,13 +131,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.glsl
index 0e38b18..dc10b7c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 };
@@ -19,11 +22,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int A[2] = int[2](0, 0);
   int i = 0;
@@ -89,6 +93,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -106,16 +111,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:59: '' : boolean expression expected 
-ERROR: 0:59: '' : compilation terminated 
+ERROR: 0:63: '' : boolean expression expected 
+ERROR: 0:63: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.glsl
index 9f54f3b..34dee10 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 };
@@ -27,11 +30,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_int_values[3];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int A[2] = int[2](0, 0);
   int i = 0;
@@ -97,6 +101,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -114,16 +119,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:59: '' : boolean expression expected 
-ERROR: 0:59: '' : compilation terminated 
+ERROR: 0:63: '' : boolean expression expected 
+ERROR: 0:63: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.glsl
index cb8131b..c01ff1b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.glsl
@@ -18,12 +18,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[3];
 };
@@ -31,11 +34,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 } x_8;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[3];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -100,6 +104,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -117,13 +122,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.glsl
index a5e024b..1f2976f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.glsl
@@ -26,12 +26,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[3];
 };
@@ -39,11 +42,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 } x_8;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[3];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -108,6 +112,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -125,13 +130,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.glsl
index b5da1b7..daf4a25 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.glsl
@@ -18,12 +18,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[4];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -31,11 +34,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[4];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -102,6 +106,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -119,13 +124,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.glsl
index 0dca1d5..bb34234 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.glsl
@@ -26,12 +26,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[4];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -39,11 +42,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[4];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -110,6 +114,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -127,13 +132,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.glsl
index f444b77..6e9c639 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_5;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float x_23 = x_5.x_GLF_uniform_float_values[1].el;
   if ((rsqrt(x_23) < -1.0f)) {
@@ -33,6 +34,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -50,16 +52,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:18: 'rsqrt' : no matching overloaded function found 
-ERROR: 0:18: '' : compilation terminated 
+ERROR: 0:19: 'rsqrt' : no matching overloaded function found 
+ERROR: 0:19: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.glsl
index 0f31772..7412095 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.glsl
@@ -10,6 +10,7 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
@@ -17,8 +18,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_5;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float x_23 = x_5.x_GLF_uniform_float_values[1].el;
   if ((rsqrt(x_23) < -1.0f)) {
@@ -37,6 +38,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -54,16 +56,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:18: 'rsqrt' : no matching overloaded function found 
-ERROR: 0:18: '' : compilation terminated 
+ERROR: 0:19: 'rsqrt' : no matching overloaded function found 
+ERROR: 0:19: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.glsl
index 958bf91..a24ab1b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 };
@@ -28,6 +31,7 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 } x_5;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 } x_8;
@@ -53,6 +57,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -70,16 +75,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' global highp float' (or there is no acceptable conversion)
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:37: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' global highp float' (or there is no acceptable conversion)
+ERROR: 0:37: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.glsl
index 9376c83..a4101cc 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 };
@@ -28,6 +31,7 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 } x_5;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[2];
 } x_8;
@@ -53,6 +57,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -70,16 +75,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' global highp float' and a right operand of type ' temp mediump float' (or there is no acceptable conversion)
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:37: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' global highp float' and a right operand of type ' temp mediump float' (or there is no acceptable conversion)
+ERROR: 0:37: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.glsl
index c27b4d1..d0d1427 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[6];
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[6];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int arr[3] = int[3](0, 0, 0);
   int index = 0;
@@ -84,6 +85,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -101,16 +103,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:35: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:35: '' : compilation terminated 
+ERROR: 0:36: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:36: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.glsl
index fec8491..b3674d4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 };
@@ -19,11 +22,12 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_6;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 } x_11;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float a = 0.0f;
   float b = 0.0f;
@@ -76,6 +80,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -93,16 +98,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:50: 'ddx' : no matching overloaded function found 
-ERROR: 0:50: '' : compilation terminated 
+ERROR: 0:54: 'ddx' : no matching overloaded function found 
+ERROR: 0:54: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.glsl
index 54385d6..3480250 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 };
@@ -27,11 +30,12 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_6;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 } x_11;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float a = 0.0f;
   float b = 0.0f;
@@ -84,6 +88,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -101,16 +106,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:50: 'ddx' : no matching overloaded function found 
-ERROR: 0:50: '' : compilation terminated 
+ERROR: 0:54: 'ddx' : no matching overloaded function found 
+ERROR: 0:54: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.glsl
index 00a633d..c262568 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -19,12 +22,13 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_7;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   mat2x3 m23 = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   int i = 0;
@@ -87,9 +91,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -107,7 +113,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -116,10 +124,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:71: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
-ERROR: 0:71: '' : compilation terminated 
+ERROR: 0:75: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
+ERROR: 0:75: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.glsl
index 25e9b5d..3517d05 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[2];
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   mat2 m = mat2(0.0f, 0.0f, 0.0f, 0.0f);
   int x_29 = x_6.x_GLF_uniform_int_values[0].el;
@@ -41,6 +42,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -58,16 +60,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:26: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
+ERROR: 0:26: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.glsl
index b79327f..159f5eb 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.glsl
@@ -12,9 +12,11 @@
 struct buf1 {
   uint one;
 };
+
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[1];
 };
@@ -23,6 +25,7 @@
 layout(binding = 1) uniform buf1_1 {
   uint one;
 } x_8;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[1];
@@ -66,9 +69,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -86,7 +91,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -95,7 +102,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.glsl
index 97b3d89..580bf97 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.glsl
@@ -16,9 +16,11 @@
 struct buf1 {
   uint one;
 };
+
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[1];
 };
@@ -27,6 +29,7 @@
 layout(binding = 1) uniform buf1_1 {
   uint one;
 } x_8;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[1];
@@ -70,9 +73,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -90,7 +95,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -99,7 +106,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.glsl
index 2eea2bf..7a79be9 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.glsl
@@ -10,6 +10,7 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 };
@@ -39,6 +40,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -56,16 +58,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:18: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' global highp float' and a right operand of type ' const float' (or there is no acceptable conversion)
-ERROR: 0:18: '' : compilation terminated 
+ERROR: 0:19: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' global highp float' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:19: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.glsl
index 0c6fdce..5da0515 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.glsl
@@ -6,15 +6,19 @@
 struct buf2 {
   float one;
 };
+
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -23,15 +27,17 @@
 layout(binding = 2) uniform buf2_1 {
   float one;
 } x_10;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[1];
 } x_12;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_16;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void func0_i1_(inout int x) {
   int i = 0;
   bool x_137 = false;
@@ -122,9 +128,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -142,7 +150,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -151,10 +161,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:106: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
-ERROR: 0:106: '' : compilation terminated 
+ERROR: 0:112: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
+ERROR: 0:112: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.glsl
index d1b75ca..0db518e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.glsl
@@ -18,12 +18,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[4];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -31,11 +34,12 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[4];
 } x_8;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 values = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -111,6 +115,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -128,13 +133,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.glsl
index 9594d1a..6e1e672 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.glsl
@@ -26,12 +26,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[4];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -39,11 +42,12 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[4];
 } x_8;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   uint a = 0u;
   vec4 values = vec4(0.0f, 0.0f, 0.0f, 0.0f);
@@ -119,6 +123,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -136,13 +141,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.glsl
index ab1bb8a..7554d63 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
@@ -40,6 +41,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -57,16 +59,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:25: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:25: '' : compilation terminated 
+ERROR: 0:26: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:26: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.glsl
index 930cc2b..fcb1f43 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.glsl
@@ -39,6 +39,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -56,13 +57,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:29: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:29: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.glsl
index 8b5d662..3aa7fe4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 };
@@ -13,8 +14,8 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 } x_5;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   mat2 m = mat2(0.0f, 0.0f, 0.0f, 0.0f);
   float f = 0.0f;
@@ -79,6 +80,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -96,16 +98,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:63: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
-ERROR: 0:63: '' : compilation terminated 
+ERROR: 0:64: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
+ERROR: 0:64: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.glsl
index 1cfffa8..5243039 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[1];
 };
@@ -27,6 +30,7 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_6;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[1];
@@ -54,6 +58,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -71,16 +76,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:28: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' const float' (or there is no acceptable conversion)
-ERROR: 0:28: '' : compilation terminated 
+ERROR: 0:32: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump float' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:32: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.glsl
index 8a03a1b..fdb27df 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   float two;
 } x_8;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float a = 0.0f;
   float b = 0.0f;
@@ -31,9 +31,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -51,7 +53,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -60,7 +64,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:18: 'ddx' : no matching overloaded function found 
 ERROR: 0:18: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.glsl
index 3b423b8..93fdda1 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   float two;
 } x_8;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   float a = 0.0f;
   float b = 0.0f;
@@ -35,9 +35,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -55,7 +57,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -64,7 +68,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:18: 'ddx' : no matching overloaded function found 
 ERROR: 0:18: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.glsl
index 4256c8d..d2284c0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   mat2 m = mat2(0.0f, 0.0f, 0.0f, 0.0f);
   m = mat2(vec2(1.0f, 2.0f), vec2(3.0f, 4.0f));
@@ -21,6 +20,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -38,16 +38,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:10: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.glsl
index ac64720..24ddbb4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
 };
@@ -20,6 +23,7 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_7;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
@@ -49,9 +53,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -69,7 +75,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -78,10 +86,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:30: 'frac' : no matching overloaded function found 
-ERROR: 0:30: '' : compilation terminated 
+ERROR: 0:34: 'frac' : no matching overloaded function found 
+ERROR: 0:34: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.glsl
index 5796d70..1eb2456 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
 };
@@ -28,6 +31,7 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_7;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
@@ -57,9 +61,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -77,7 +83,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -86,10 +94,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:30: 'frac' : no matching overloaded function found 
-ERROR: 0:30: '' : compilation terminated 
+ERROR: 0:34: 'frac' : no matching overloaded function found 
+ERROR: 0:34: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.glsl
index 875d5e0..e012d93 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.glsl
@@ -13,18 +13,23 @@
 struct tint_padded_array_element {
   uint el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_uint_values[1];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
 };
+
 struct tint_padded_array_element_2 {
   float el;
 };
+
 struct buf2 {
   tint_padded_array_element_2 x_GLF_uniform_float_values[3];
 };
@@ -32,14 +37,16 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_uint_values[1];
 } x_6;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
 } x_8;
+
 layout(binding = 2) uniform buf2_1 {
   tint_padded_array_element_2 x_GLF_uniform_float_values[3];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   uint x_39 = x_6.x_GLF_uniform_uint_values[0].el;
@@ -69,6 +76,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -86,13 +94,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.glsl
index e9da918..2e45df0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.glsl
@@ -25,18 +25,23 @@
 struct tint_padded_array_element {
   uint el;
 };
+
 struct buf0 {
   tint_padded_array_element x_GLF_uniform_uint_values[1];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
 };
+
 struct tint_padded_array_element_2 {
   float el;
 };
+
 struct buf2 {
   tint_padded_array_element_2 x_GLF_uniform_float_values[3];
 };
@@ -44,14 +49,16 @@
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element x_GLF_uniform_uint_values[1];
 } x_6;
+
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[2];
 } x_8;
+
 layout(binding = 2) uniform buf2_1 {
   tint_padded_array_element_2 x_GLF_uniform_float_values[3];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
   uint x_39 = x_6.x_GLF_uniform_uint_values[0].el;
@@ -81,6 +88,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -98,13 +106,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.glsl
index 97444b3..8d9cc95 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -19,11 +22,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_8;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   mat4x3 m43 = mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   tint_padded_array_element sums[3] = tint_padded_array_element[3](tint_padded_array_element(0.0f), tint_padded_array_element(0.0f), tint_padded_array_element(0.0f));
@@ -94,6 +98,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -111,17 +116,17 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:69: '[' :  matrix index out of range '4'
-ERROR: 0:69: '=' :  cannot convert from ' temp mediump 3-component vector of float' to ' temp mediump float'
-ERROR: 0:69: '' : compilation terminated 
+ERROR: 0:73: '[' :  matrix index out of range '4'
+ERROR: 0:73: '=' :  cannot convert from ' temp mediump 3-component vector of float' to ' temp mediump float'
+ERROR: 0:73: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.glsl
index 8ebaef2..e8a53f7 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 };
@@ -27,11 +30,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[3];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[4];
 } x_8;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   mat4x3 m43 = mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   tint_padded_array_element sums[3] = tint_padded_array_element[3](tint_padded_array_element(0.0f), tint_padded_array_element(0.0f), tint_padded_array_element(0.0f));
@@ -102,6 +106,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -119,17 +124,17 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:69: '[' :  matrix index out of range '4'
-ERROR: 0:69: '=' :  cannot convert from ' temp mediump 3-component vector of float' to ' temp mediump float'
-ERROR: 0:69: '' : compilation terminated 
+ERROR: 0:73: '[' :  matrix index out of range '4'
+ERROR: 0:73: '=' :  cannot convert from ' temp mediump 3-component vector of float' to ' temp mediump float'
+ERROR: 0:73: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.glsl
index f6ab9a5..229597b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   int el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 };
+
 struct tint_padded_array_element_1 {
   float el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[1];
 };
@@ -19,11 +22,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_int_values[4];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_float_values[1];
 } x_10;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   mat4 m0 = mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   int c = 0;
@@ -90,6 +94,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -107,16 +112,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:74: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
-ERROR: 0:74: '' : compilation terminated 
+ERROR: 0:78: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' global bool' (or there is no acceptable conversion)
+ERROR: 0:78: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.glsl
index b830410..89aaf52 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   vec2 a = vec2(0.0f, 0.0f);
   vec2 b = vec2(0.0f, 0.0f);
@@ -24,6 +23,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -41,17 +41,17 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: 'frac' : no matching overloaded function found 
-ERROR: 0:12: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:11: 'frac' : no matching overloaded function found 
+ERROR: 0:11: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.glsl
index b830410..89aaf52 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   vec2 a = vec2(0.0f, 0.0f);
   vec2 b = vec2(0.0f, 0.0f);
@@ -24,6 +23,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -41,17 +41,17 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:12: 'frac' : no matching overloaded function found 
-ERROR: 0:12: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:11: 'frac' : no matching overloaded function found 
+ERROR: 0:11: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.glsl
index ce810c8..5f684ce 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.glsl
@@ -6,12 +6,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 };
@@ -19,11 +22,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 } x_8;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   mat3x2 m32 = mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   float sums[3] = float[3](0.0f, 0.0f, 0.0f);
@@ -65,6 +69,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -82,16 +87,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: '[' :  matrix index out of range '3'
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:37: '[' :  matrix index out of range '3'
+ERROR: 0:37: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.glsl
index 09fb7a9..69875f3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.glsl
@@ -14,12 +14,15 @@
 struct tint_padded_array_element {
   float el;
 };
+
 struct buf1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 };
+
 struct tint_padded_array_element_1 {
   int el;
 };
+
 struct buf0 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 };
@@ -27,11 +30,12 @@
 layout(binding = 1) uniform buf1_1 {
   tint_padded_array_element x_GLF_uniform_float_values[2];
 } x_6;
+
 layout(binding = 0) uniform buf0_1 {
   tint_padded_array_element_1 x_GLF_uniform_int_values[3];
 } x_8;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   mat3x2 m32 = mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   float sums[3] = float[3](0.0f, 0.0f, 0.0f);
@@ -73,6 +77,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -90,16 +95,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:33: '[' :  matrix index out of range '3'
-ERROR: 0:33: '' : compilation terminated 
+ERROR: 0:37: '[' :  matrix index out of range '3'
+ERROR: 0:37: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.glsl
index f096729..2a18332 100644
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int k = 0;
   int GLF_dead0j = 0;
@@ -60,6 +60,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -77,13 +78,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:34: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:34: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.glsl
index a368ca2..980e746 100644
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_6;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int i = 0;
   int GLF_dead5cols = 0;
@@ -78,6 +78,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -95,13 +96,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:45: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:45: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.glsl
index 00be6d8..bfeab0a 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct buf0 {
   vec2 injectionSwitch;
 };
+
 struct buf1 {
   vec2 resolution;
 };
@@ -15,9 +16,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -255,9 +256,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -275,7 +278,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -284,10 +289,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:35: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:35: '' : compilation terminated 
+ERROR: 0:36: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:36: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.glsl
index f4467f0..728e211 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct buf0 {
   vec2 injectionSwitch;
 };
+
 struct buf1 {
   vec2 resolution;
 };
@@ -15,9 +16,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -265,9 +266,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -285,7 +288,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -294,10 +299,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:35: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:35: '' : compilation terminated 
+ERROR: 0:36: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:36: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.glsl
index 9406cd2..a8566ed 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct buf0 {
   vec2 injectionSwitch;
 };
+
 struct buf1 {
   vec2 resolution;
 };
@@ -15,9 +16,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -259,9 +260,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -279,7 +282,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -288,10 +293,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:35: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:35: '' : compilation terminated 
+ERROR: 0:36: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:36: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.glsl
index 67b5afd..26f8b15 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.glsl
@@ -10,9 +10,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_8;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   int temp[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
   int data[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
@@ -340,9 +340,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -360,7 +362,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -369,7 +373,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:173: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:173: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.glsl
index d17ec3d..34de0db 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.glsl
@@ -10,9 +10,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_8;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   int temp[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
   int data[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
@@ -336,9 +336,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -356,7 +358,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -365,7 +369,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:169: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:169: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.glsl
index 3f98337..c4596a5 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.glsl
@@ -12,9 +12,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -252,9 +252,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -272,7 +274,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -281,7 +285,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:32: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:32: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.glsl
index c2247df..9125dea 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.glsl
@@ -12,9 +12,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -272,9 +272,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -292,7 +294,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -301,7 +305,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:32: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:32: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.glsl
index d6a5651..26d7215 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.glsl
@@ -12,9 +12,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -357,9 +357,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -377,7 +379,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -386,7 +390,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:55: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:55: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.glsl
index 27dce67..76950a8 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.glsl
@@ -12,9 +12,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -356,9 +356,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -376,7 +378,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -385,7 +389,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:54: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:54: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.glsl
index cb10bc6..f03d8f4 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.glsl
@@ -12,9 +12,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -253,9 +253,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -273,7 +275,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -282,7 +286,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:32: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:32: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.glsl
index 527eab9..99425f8 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.glsl
@@ -12,9 +12,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -247,9 +247,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -267,7 +269,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -276,7 +280,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:32: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:32: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.glsl
index 622a1cb..f062c66 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.glsl
@@ -10,9 +10,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_13;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
   float result = 0.0f;
   int i = 0;
@@ -83,9 +83,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -103,7 +105,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -112,7 +116,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:26: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp float' and a right operand of type ' global mediump float' (or there is no acceptable conversion)
 ERROR: 0:26: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.glsl
index da6a17e..b4f5b64 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 struct buf0 {
   vec2 resolution;
 };
+
 struct buf1 {
   vec2 injectionSwitch;
 };
@@ -13,6 +14,7 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_13;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 1) uniform buf1_1 {
@@ -97,9 +99,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -117,7 +121,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -126,10 +132,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:32: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp float' and a right operand of type ' global mediump float' (or there is no acceptable conversion)
-ERROR: 0:32: '' : compilation terminated 
+ERROR: 0:34: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp float' and a right operand of type ' global mediump float' (or there is no acceptable conversion)
+ERROR: 0:34: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.glsl
index 8909a82..ebadc40 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 struct buf0 {
   vec2 resolution;
 };
+
 struct buf1 {
   vec2 injectionSwitch;
 };
@@ -13,12 +14,13 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_13;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 1) uniform buf1_1 {
   vec2 injectionSwitch;
 } x_19;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
   float result = 0.0f;
   int i = 0;
@@ -113,9 +115,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -133,7 +137,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -142,10 +148,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:32: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp float' and a right operand of type ' global mediump float' (or there is no acceptable conversion)
-ERROR: 0:32: '' : compilation terminated 
+ERROR: 0:34: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp float' and a right operand of type ' global mediump float' (or there is no acceptable conversion)
+ERROR: 0:34: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.glsl
index 9c0f1e3..80288d1 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.glsl
@@ -10,9 +10,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_13;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
   float result = 0.0f;
   int i = 0;
@@ -88,9 +88,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -108,7 +110,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -117,7 +121,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:26: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp float' and a right operand of type ' global mediump float' (or there is no acceptable conversion)
 ERROR: 0:26: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.glsl
index bbf17e1..b8e2a5b 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.glsl
@@ -13,8 +13,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_34;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -286,9 +286,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -306,7 +308,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -315,7 +319,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:32: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:32: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.glsl
index 994f694..8f5b8b2 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.glsl
@@ -10,9 +10,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_8;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   int temp[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
   int data[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
@@ -341,9 +341,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -361,7 +363,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -370,7 +374,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:136: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:136: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.glsl
index 14f2ee7..1b2c1b2 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.glsl
@@ -12,9 +12,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_28;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
   int k = 0;
   int i = 0;
@@ -262,9 +262,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -282,7 +284,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -291,7 +295,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:32: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:32: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.glsl
index 13a0db3..c0b137c 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_24;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 float cross2d_vf2_vf2_(inout vec2 a, inout vec2 b) {
   float x_79 = a.x;
   float x_81 = b.y;
@@ -135,9 +135,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -155,7 +157,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -164,7 +168,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:65: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:65: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.glsl
index 13a0db3..c0b137c 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_24;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 float cross2d_vf2_vf2_(inout vec2 a, inout vec2 b) {
   float x_79 = a.x;
   float x_81 = b.y;
@@ -135,9 +135,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -155,7 +157,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -164,7 +168,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:65: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:65: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.glsl
index dc9973c..6a8426f 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_24;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 float cross2d_vf2_vf2_(inout vec2 a, inout vec2 b) {
   float x_76 = a.x;
   float x_78 = b.y;
@@ -117,9 +117,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -137,7 +139,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -146,7 +150,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:60: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:60: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.glsl
index dc9973c..6a8426f 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_24;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 float cross2d_vf2_vf2_(inout vec2 a, inout vec2 b) {
   float x_76 = a.x;
   float x_78 = b.y;
@@ -117,9 +117,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -137,7 +139,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -146,7 +150,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:60: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:60: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.glsl
index cbbffdb..e57336b 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.glsl
@@ -10,9 +10,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_15;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 float cross2d_vf2_vf2_(inout vec2 a, inout vec2 b) {
   float x_85 = a.x;
   float x_87 = b.y;
@@ -144,9 +144,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -164,7 +166,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -173,7 +177,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:87: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:87: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.glsl
index cbbffdb..e57336b 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.glsl
@@ -10,9 +10,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_15;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 float cross2d_vf2_vf2_(inout vec2 a, inout vec2 b) {
   float x_85 = a.x;
   float x_87 = b.y;
@@ -144,9 +144,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -164,7 +166,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -173,7 +177,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:87: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:87: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.glsl
index 4469a2d..0389bd3 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_24;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 float cross2d_vf2_vf2_(inout vec2 a, inout vec2 b) {
   float x_76 = a.x;
   float x_78 = b.y;
@@ -117,9 +117,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -137,7 +139,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -146,7 +150,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:60: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:60: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.glsl
index cb8ad32..908ee2c 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_17;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 int pointInTriangle_vf2_vf2_vf2_vf2_(inout vec2 p, inout vec2 a, inout vec2 b, inout vec2 c) {
   float x_66 = 0.0f;
   float x_67 = 0.0f;
@@ -120,9 +120,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -140,7 +142,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -149,7 +153,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:61: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:61: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.glsl
index cb8ad32..908ee2c 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.glsl
@@ -11,8 +11,8 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 resolution;
 } x_17;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 int pointInTriangle_vf2_vf2_vf2_vf2_(inout vec2 p, inout vec2 a, inout vec2 b, inout vec2 c) {
   float x_66 = 0.0f;
   float x_67 = 0.0f;
@@ -120,9 +120,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -140,7 +142,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -149,7 +153,6 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:61: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:61: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.glsl
index 978d47d..6c3fdeb 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct buf1 {
   vec2 injectionSwitch;
 };
+
 struct buf0 {
   vec2 resolution;
 };
@@ -13,6 +14,7 @@
 layout(binding = 1) uniform buf1_1 {
   vec2 injectionSwitch;
 } x_11;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 0) uniform buf0_1 {
@@ -162,9 +164,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -182,7 +186,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -191,10 +197,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:67: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:67: '' : compilation terminated 
+ERROR: 0:69: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:69: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.glsl
index 978d47d..6c3fdeb 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.glsl
@@ -6,6 +6,7 @@
 struct buf1 {
   vec2 injectionSwitch;
 };
+
 struct buf0 {
   vec2 resolution;
 };
@@ -13,6 +14,7 @@
 layout(binding = 1) uniform buf1_1 {
   vec2 injectionSwitch;
 } x_11;
+
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 layout(binding = 0) uniform buf0_1 {
@@ -162,9 +164,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -182,7 +186,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -191,10 +197,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:67: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:67: '' : compilation terminated 
+ERROR: 0:69: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:69: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.glsl
index df1b46e..d038c4e 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct buf0 {
   vec2 injectionSwitch;
 };
+
 struct doesNotMatter {
   uint x_compute_data[];
 };
@@ -14,10 +15,10 @@
 layout(binding = 1) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_9;
+
 layout(binding = 0) buffer doesNotMatter_1 {
   uint x_compute_data[];
 } x_12;
-
 void main_1() {
   int GLF_live2_looplimiter1 = 0;
   int i = 0;
@@ -73,14 +74,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '' : array size required 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:9: '' : array size required 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.glsl
index 1460a72..21e02c0 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.glsl
@@ -10,6 +10,7 @@
 struct buf0 {
   vec2 injectionSwitch;
 };
+
 struct doesNotMatter {
   uint x_compute_data[];
 };
@@ -18,10 +19,10 @@
 layout(binding = 1) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_9;
+
 layout(binding = 0) buffer doesNotMatter_1 {
   uint x_compute_data[];
 } x_12;
-
 void main_1() {
   int GLF_live2_looplimiter1 = 0;
   int i = 0;
@@ -77,14 +78,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '' : array size required 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:9: '' : array size required 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.glsl
index 42fd43a..5600210 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.glsl
@@ -10,7 +10,6 @@
 layout(binding = 0) buffer doesNotMatter_1 {
   float x_compute_data[];
 } x_9;
-
 float nb_mod_() {
   float s = 0.0f;
   int i = 0;
@@ -64,11 +63,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.glsl
index dfa80b0..a5d62b9 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.glsl
@@ -14,7 +14,6 @@
 layout(binding = 0) buffer doesNotMatter_1 {
   float x_compute_data[];
 } x_9;
-
 float nb_mod_() {
   float s = 0.0f;
   int i = 0;
@@ -68,11 +67,11 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.glsl
index 945df04..4479bef 100644
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.glsl
@@ -6,9 +6,11 @@
 struct buf1 {
   vec2 injectionSwitch;
 };
+
 struct buf2 {
   vec2 resolution;
 };
+
 struct doesNotMatter {
   int x_compute_data[];
 };
@@ -17,13 +19,14 @@
 layout(binding = 1) uniform buf1_1 {
   vec2 injectionSwitch;
 } x_10;
+
 layout(binding = 2) uniform buf2_1 {
   vec2 resolution;
 } x_13;
+
 layout(binding = 0) buffer doesNotMatter_1 {
   int x_compute_data[];
 } x_15;
-
 void main_1() {
   float A[1] = float[1](0.0f);
   int i = 0;
@@ -125,16 +128,17 @@
   tint_symbol_1_inner(tint_symbol_3.tint_symbol_2);
   return;
 }
+
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_GlobalInvocationID;
   tint_symbol_1(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '' : array size required 
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:13: '' : array size required 
+ERROR: 0:14: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.glsl
index 6ab2068..e1a3cee 100644
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.glsl
@@ -10,9 +10,11 @@
 struct buf1 {
   vec2 injectionSwitch;
 };
+
 struct buf2 {
   vec2 resolution;
 };
+
 struct doesNotMatter {
   int x_compute_data[];
 };
@@ -21,13 +23,14 @@
 layout(binding = 1) uniform buf1_1 {
   vec2 injectionSwitch;
 } x_10;
+
 layout(binding = 2) uniform buf2_1 {
   vec2 resolution;
 } x_13;
+
 layout(binding = 0) buffer doesNotMatter_1 {
   int x_compute_data[];
 } x_15;
-
 void main_1() {
   float A[1] = float[1](0.0f);
   int i = 0;
@@ -129,16 +132,17 @@
   tint_symbol_1_inner(tint_symbol_3.tint_symbol_2);
   return;
 }
+
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_GlobalInvocationID;
   tint_symbol_1(inputs);
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '' : array size required 
-ERROR: 0:12: '' : compilation terminated 
+ERROR: 0:13: '' : array size required 
+ERROR: 0:14: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.glsl
index 1fd1e71..69805a7 100644
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.glsl
@@ -10,8 +10,8 @@
 layout(binding = 0) uniform buf0_1 {
   int injected;
 } x_9;
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 void main_1() {
   int idx = 0;
   mat4x3 m43 = mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
@@ -72,6 +72,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -89,13 +90,13 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:56: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
 ERROR: 0:56: '' : compilation terminated 
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.glsl
index 52969dc..3f193c3 100644
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.glsl
@@ -8,9 +8,11 @@
   int leftIndex;
   int rightIndex;
 };
+
 struct buf0 {
   vec2 injectionSwitch;
 };
+
 struct Obj {
   float odd_numbers[10];
   float even_numbers[10];
@@ -20,9 +22,9 @@
 layout(binding = 0) uniform buf0_1 {
   vec2 injectionSwitch;
 } x_27;
+
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
   int x_74 = data;
   tree.data = x_74;
@@ -343,9 +345,11 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   vec4 x_GLF_color_1;
 };
@@ -363,7 +367,9 @@
   wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
   return wrapper_result;
 }
+
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -372,10 +378,9 @@
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:85: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:85: '' : compilation terminated 
+ERROR: 0:87: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:87: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.glsl
index acb8eb2..6a5e24a 100644
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-
 void main_1() {
   mat4x3 m43 = mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   int ll1 = 0;
@@ -62,6 +61,7 @@
 struct main_out {
   vec4 x_GLF_color_1;
 };
+
 struct tint_symbol_1 {
   vec4 x_GLF_color_1;
 };
@@ -79,16 +79,16 @@
   return wrapper_result;
 }
 layout(location = 0) out vec4 x_GLF_color_1;
+
 void main() {
   tint_symbol_1 outputs;
   outputs = tint_symbol();
   x_GLF_color_1 = outputs.x_GLF_color_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:46: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:46: '' : compilation terminated 
+ERROR: 0:45: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:45: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.glsl
index 02f715f..7b9fd6b 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.glsl
@@ -6,6 +6,7 @@
 struct Buf1 {
   int result;
 };
+
 struct Buf0 {
   uint values[];
 };
@@ -16,7 +17,6 @@
 layout(binding = 0) buffer Buf0_1 {
   uint values[];
 } x_7;
-
 void main_1() {
   uint i = 0u;
   x_4.result = 1;
@@ -37,14 +37,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '' : array size required 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:9: '' : array size required 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.glsl
index 326651d..6524557 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.glsl
@@ -10,6 +10,7 @@
 struct Buf1 {
   int result;
 };
+
 struct Buf0 {
   uint values[];
 };
@@ -20,7 +21,6 @@
 layout(binding = 0) buffer Buf0_1 {
   uint values[];
 } x_7;
-
 void main_1() {
   uint i = 0u;
   x_4.result = 1;
@@ -41,14 +41,14 @@
   main_1();
   return;
 }
+
 void main() {
   tint_symbol();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '' : array size required 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:9: '' : array size required 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.glsl
index 1c5a1d0..ad6293e 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_2.x;
   uint x_23 = x_5.field0[x_21];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.glsl
index adb3811..a2e99df 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.glsl
@@ -21,7 +21,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_2.x;
   uint x_23 = x_5.field0[x_21];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.glsl
index 22826d7..d1c0197 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_2.x;
   uint x_23 = x_5.field0[x_21];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.glsl
index 1286ac5..7c584e0 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.glsl
@@ -21,7 +21,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_2.x;
   uint x_23 = x_5.field0[x_21];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.glsl
index 92d374d..422e6c1 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_2.x;
   uint x_23 = x_5.field0[x_21];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.glsl
index 27702e2..12d5533 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.glsl
@@ -21,7 +21,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_2.x;
   uint x_23 = x_5.field0[x_21];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.glsl
index 873316b..7791197 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_2.x;
   uint x_23 = x_5.field0[x_21];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.glsl
index 3276da5..2ebdf5b 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.glsl
@@ -21,7 +21,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_2.x;
   uint x_23 = x_5.field0[x_21];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.glsl
index 242678e..0167827 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.glsl
@@ -20,7 +20,6 @@
 layout(binding = 3) buffer S_4 {
   int field0[];
 } x_9;
-
 void main_1() {
   uint x_26 = x_3.x;
   int x_28 = x_6.field0[x_26];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.glsl
index 1a3985b..2a69831 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.glsl
@@ -24,7 +24,6 @@
 layout(binding = 3) buffer S_4 {
   int field0[];
 } x_9;
-
 void main_1() {
   uint x_26 = x_3.x;
   int x_28 = x_6.field0[x_26];
@@ -48,13 +47,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.glsl
index dc137ef..60f5ad6 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.glsl
@@ -14,7 +14,6 @@
 layout(binding = 1) buffer S_2 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_3.x;
   uint x_23 = x_6.field0[x_21];
@@ -36,13 +35,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.glsl
index 86c90af..74c1e3a 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.glsl
@@ -18,7 +18,6 @@
 layout(binding = 1) buffer S_2 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_21 = x_3.x;
   uint x_23 = x_6.field0[x_21];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.glsl
index 0f91576..daadbfb 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.glsl
@@ -20,7 +20,6 @@
 layout(binding = 3) buffer S_4 {
   uint field0[];
 } x_9;
-
 void main_1() {
   uint x_23 = x_3.x;
   uint x_25 = x_6.field0[x_23];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.glsl
index 0bb5364..44485c9 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.glsl
@@ -24,7 +24,6 @@
 layout(binding = 3) buffer S_4 {
   uint field0[];
 } x_9;
-
 void main_1() {
   uint x_23 = x_3.x;
   uint x_25 = x_6.field0[x_23];
@@ -48,13 +47,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.glsl
index 39e0b8a..ab97231 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_8;
-
 void main_1() {
   uint x_21 = x_3.x;
   uint x_23 = x_6.field0[x_21];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.glsl
index c096bc4..faef533 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.glsl
@@ -21,7 +21,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_8;
-
 void main_1() {
   uint x_21 = x_3.x;
   uint x_23 = x_6.field0[x_21];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.glsl
index 3e239cb..80abfcf 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_8;
-
 void main_1() {
   uint x_21 = x_3.x;
   uint x_23 = x_6.field0[x_21];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.glsl
index 0e5cbbd..09b6341 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.glsl
@@ -21,7 +21,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_8;
-
 void main_1() {
   uint x_21 = x_3.x;
   uint x_23 = x_6.field0[x_21];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_3_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.glsl
index 363699a..74afb3c 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_20 = x_2.x;
   uint x_22 = x_5.field0[x_20];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.glsl
index a395206..9db4599 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.glsl
@@ -21,7 +21,6 @@
 layout(binding = 2) buffer S_3 {
   uint field0[];
 } x_7;
-
 void main_1() {
   uint x_20 = x_2.x;
   uint x_22 = x_5.field0[x_20];
@@ -44,13 +43,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.glsl
index 58f47fc..09af254 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.glsl
@@ -14,7 +14,6 @@
 layout(binding = 1) buffer S_2 {
   uint field0[];
 } x_6;
-
 void main_1() {
   uint x_20 = x_2.x;
   uint x_22 = x_5.field0[x_20];
@@ -36,13 +35,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.glsl
index 46b371d..5784b16 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.glsl
@@ -18,7 +18,6 @@
 layout(binding = 1) buffer S_2 {
   uint field0[];
 } x_6;
-
 void main_1() {
   uint x_20 = x_2.x;
   uint x_22 = x_5.field0[x_20];
@@ -40,13 +39,14 @@
   tint_symbol_inner(tint_symbol_1.x_2_param);
   return;
 }
+
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_2_param = gl_GlobalInvocationID;
   tint_symbol(inputs);
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.glsl
index 5fdcb38..cda39d2 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.glsl
@@ -5,7 +5,6 @@
 
 vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
 int out_data = 0;
-
 void main_1() {
   bool x_is_odd = false;
   bool y_is_odd = false;
@@ -20,9 +19,11 @@
 struct main_out {
   int out_data_1;
 };
+
 struct tint_symbol_4 {
   vec4 tint_symbol_2;
 };
+
 struct tint_symbol_5 {
   int out_data_1;
 };
@@ -40,7 +41,9 @@
   wrapper_result.out_data_1 = inner_result.out_data_1;
   return wrapper_result;
 }
+
 layout(location = 0) out int out_data_1;
+
 void main() {
   tint_symbol_4 inputs;
   inputs.tint_symbol_2 = gl_FragCoord;
@@ -49,10 +52,9 @@
   out_data_1 = outputs.out_data_1;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:14: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
-ERROR: 0:14: '' : compilation terminated 
+ERROR: 0:13: '|' :  wrong operand types: no operation '|' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
+ERROR: 0:13: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.glsl
index c06c744..fe71638 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.glsl
@@ -13,7 +13,6 @@
 layout(binding = 0) buffer S_1 {
   int field0[];
 } x_5;
-
 void main_1() {
   x_4 = 1;
   vec4 x_23 = x_2;
@@ -28,10 +27,12 @@
 struct main_out {
   int x_4_1;
 };
+
 struct tint_symbol_2 {
   int x_3_param;
   vec4 x_2_param;
 };
+
 struct tint_symbol_3 {
   int x_4_1;
 };
@@ -51,7 +52,9 @@
   return wrapper_result;
 }
 layout(location = 0) flat in int x_3_param;
+
 layout(location = 0) out int x_4_1;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = x_3_param;
@@ -61,7 +64,6 @@
   x_4_1 = outputs.x_4_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.glsl
index cf3ecc7..7b5ffa5 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 0) buffer S_1 {
   int field0[];
 } x_5;
-
 void main_1() {
   x_4 = 1;
   vec4 x_23 = x_2;
@@ -32,10 +31,12 @@
 struct main_out {
   int x_4_1;
 };
+
 struct tint_symbol_2 {
   int x_3_param;
   vec4 x_2_param;
 };
+
 struct tint_symbol_3 {
   int x_4_1;
 };
@@ -55,7 +56,9 @@
   return wrapper_result;
 }
 layout(location = 0) flat in int x_3_param;
+
 layout(location = 0) out int x_4_1;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = x_3_param;
@@ -65,7 +68,6 @@
   x_4_1 = outputs.x_4_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.glsl
index 18cb20e..82201ad 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.glsl
@@ -13,7 +13,6 @@
 layout(binding = 0) buffer S_1 {
   int field0[];
 } x_5;
-
 void main_1() {
   x_4 = 1;
   vec4 x_23 = x_2;
@@ -29,10 +28,12 @@
 struct main_out {
   int x_4_1;
 };
+
 struct tint_symbol_2 {
   int x_3_param;
   vec4 x_2_param;
 };
+
 struct tint_symbol_3 {
   int x_4_1;
 };
@@ -52,7 +53,9 @@
   return wrapper_result;
 }
 layout(location = 0) flat in int x_3_param;
+
 layout(location = 0) out int x_4_1;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = x_3_param;
@@ -62,7 +65,6 @@
   x_4_1 = outputs.x_4_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.glsl
index 133921c..e196f12 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.glsl
@@ -17,7 +17,6 @@
 layout(binding = 0) buffer S_1 {
   int field0[];
 } x_5;
-
 void main_1() {
   x_4 = 1;
   vec4 x_23 = x_2;
@@ -33,10 +32,12 @@
 struct main_out {
   int x_4_1;
 };
+
 struct tint_symbol_2 {
   int x_3_param;
   vec4 x_2_param;
 };
+
 struct tint_symbol_3 {
   int x_4_1;
 };
@@ -56,7 +57,9 @@
   return wrapper_result;
 }
 layout(location = 0) flat in int x_3_param;
+
 layout(location = 0) out int x_4_1;
+
 void main() {
   tint_symbol_2 inputs;
   inputs.x_3_param = x_3_param;
@@ -66,7 +69,6 @@
   x_4_1 = outputs.x_4_1;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : array size required 
 ERROR: 0:6: '' : compilation terminated 
