#include <metal_stdlib>

using namespace metal;
struct MyStruct {
  float f1;
};
struct tint_symbol_1 {
  float4 value [[color(0)]];
};
struct tint_array_wrapper_0 {
  float array[10];
};

int ret_i32() {
  return 1;
}

uint ret_u32() {
  return 1u;
}

float ret_f32() {
  return 1.0f;
}

MyStruct ret_MyStruct() {
  MyStruct const tint_symbol_2 = {};
  return tint_symbol_2;
}

tint_array_wrapper_0 ret_MyArray() {
  tint_array_wrapper_0 const tint_symbol_3 = {};
  return tint_symbol_3;
}

void let_decls() {
  int const v1 = 1;
  uint const v2 = 1u;
  float const v3 = 1.0f;
  int3 const v4 = int3(1, 1, 1);
  uint3 const v5 = uint3(1u, 1u, 1u);
  float3 const v6 = float3(1.0f, 1.0f, 1.0f);
  float3x3 const v7 = float3x3(v6, v6, v6);
  MyStruct const v8 = {.f1=1.0f};
  tint_array_wrapper_0 const v9 = {};
  int const v10 = ret_i32();
  uint const v11 = ret_u32();
  float const v12 = ret_f32();
  MyStruct const v13 = ret_MyStruct();
  MyStruct const v14 = ret_MyStruct();
  tint_array_wrapper_0 const v15 = ret_MyArray();
}

fragment tint_symbol_1 tint_symbol() {
  tint_symbol_1 const tint_symbol_4 = {.value=float4(0.0f, 0.0f, 0.0f, 0.0f)};
  return tint_symbol_4;
}

