#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 var_decls() {
  int v1 = 1;
  uint v2 = 1u;
  float v3 = 1.0f;
  int3 v4 = int3(1, 1, 1);
  uint3 v5 = uint3(1u, 1u, 1u);
  float3 v6 = float3(1.0f, 1.0f, 1.0f);
  float3x3 v7 = float3x3(v6, v6, v6);
  MyStruct v8 = {.f1=1.0f};
  tint_array_wrapper v9 = {.arr={}};
  int v10 = ret_i32();
  uint v11 = ret_u32();
  float v12 = ret_f32();
  MyStruct v13 = ret_MyStruct();
  MyStruct v14 = ret_MyStruct();
  tint_array_wrapper 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;
}

