#include <metal_stdlib>

using namespace metal;
struct MyStruct {
  float f1;
};

struct tint_array_wrapper {
  float arr[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 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);
  uint3 const v5 = uint3(1u);
  float3 const v6 = float3(1.0f);
  float3x3 const v7 = float3x3(float3(1.0f), float3(1.0f), float3(1.0f));
  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();
}

struct tint_symbol_1 {
  float4 value [[color(0)]];
};

float4 tint_symbol_inner() {
  return float4(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;
}

