#include <metal_stdlib>

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

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 ret_MyArray() {
  tint_array_wrapper const tint_symbol_3 = {.arr={}};
  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 const v9 = {.arr={}};
  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 const v15 = ret_MyArray();
}

float4 tint_symbol_inner() {
  return float4(0.0f, 0.0f, 0.0f, 0.0f);
}

fragment tint_symbol_1 tint_symbol() {
  float4 const inner_result = tint_symbol_inner();
  tint_symbol_1 wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

