#include <metal_stdlib>

using namespace metal;
struct tint_symbol {
  int value [[color(0)]];
};
struct tint_symbol_1 {
  uint value [[color(1)]];
};
struct tint_symbol_2 {
  float value [[color(2)]];
};
struct tint_symbol_3 {
  float4 value [[color(3)]];
};

int main0_inner() {
  return 1;
}

fragment tint_symbol main0() {
  int const inner_result = main0_inner();
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

uint main1_inner() {
  return 1u;
}

fragment tint_symbol_1 main1() {
  uint const inner_result_1 = main1_inner();
  tint_symbol_1 wrapper_result_1 = {};
  wrapper_result_1.value = inner_result_1;
  return wrapper_result_1;
}

float main2_inner() {
  return 1.0f;
}

fragment tint_symbol_2 main2() {
  float const inner_result_2 = main2_inner();
  tint_symbol_2 wrapper_result_2 = {};
  wrapper_result_2.value = inner_result_2;
  return wrapper_result_2;
}

float4 main3_inner() {
  return float4(1.0f, 2.0f, 3.0f, 4.0f);
}

fragment tint_symbol_3 main3() {
  float4 const inner_result_3 = main3_inner();
  tint_symbol_3 wrapper_result_3 = {};
  wrapper_result_3.value = inner_result_3;
  return wrapper_result_3;
}

