#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[4];
};
struct tint_array_wrapper_2 {
  tint_array_wrapper arr[3];
};
struct tint_array_wrapper_1 {
  tint_array_wrapper_2 arr[2];
};
struct tint_array_wrapper_3 {
  tint_array_wrapper arr[2];
};

kernel void tint_symbol() {
  int const x = 42;
  tint_array_wrapper const empty = {.arr={}};
  tint_array_wrapper const nonempty = {.arr={1, 2, 3, 4}};
  tint_array_wrapper const nonempty_with_expr = {.arr={1, x, as_type<int>((as_type<uint>(x) + as_type<uint>(1))), nonempty.arr[3]}};
  tint_array_wrapper_1 const nested_empty = {.arr={}};
  tint_array_wrapper const tint_symbol_1 = {.arr={1, 2, 3, 4}};
  tint_array_wrapper const tint_symbol_2 = {.arr={5, 6, 7, 8}};
  tint_array_wrapper const tint_symbol_3 = {.arr={9, 10, 11, 12}};
  tint_array_wrapper_2 const tint_symbol_4 = {.arr={tint_symbol_1, tint_symbol_2, tint_symbol_3}};
  tint_array_wrapper const tint_symbol_5 = {.arr={13, 14, 15, 16}};
  tint_array_wrapper const tint_symbol_6 = {.arr={17, 18, 19, 20}};
  tint_array_wrapper const tint_symbol_7 = {.arr={21, 22, 23, 24}};
  tint_array_wrapper_2 const tint_symbol_8 = {.arr={tint_symbol_5, tint_symbol_6, tint_symbol_7}};
  tint_array_wrapper_1 const nested_nonempty = {.arr={tint_symbol_4, tint_symbol_8}};
  tint_array_wrapper const tint_symbol_9 = {.arr={1, 2, x, as_type<int>((as_type<uint>(x) + as_type<uint>(1)))}};
  tint_array_wrapper const tint_symbol_10 = {.arr={5, 6, nonempty.arr[2], as_type<int>((as_type<uint>(nonempty.arr[3]) + as_type<uint>(1)))}};
  tint_array_wrapper_2 const tint_symbol_11 = {.arr={tint_symbol_9, tint_symbol_10, nonempty}};
  tint_array_wrapper_1 const nested_nonempty_with_expr = {.arr={tint_symbol_11, nested_nonempty.arr[1]}};
  tint_array_wrapper const tint_symbol_12 = {.arr={}};
  int const subexpr_empty = tint_symbol_12.arr[1];
  tint_array_wrapper const tint_symbol_13 = {.arr={1, 2, 3, 4}};
  int const subexpr_nonempty = tint_symbol_13.arr[2];
  tint_array_wrapper const tint_symbol_14 = {.arr={1, x, as_type<int>((as_type<uint>(x) + as_type<uint>(1))), nonempty.arr[3]}};
  int const subexpr_nonempty_with_expr = tint_symbol_14.arr[2];
  tint_array_wrapper_3 const tint_symbol_15 = {.arr={}};
  tint_array_wrapper const subexpr_nested_empty = tint_symbol_15.arr[1];
  tint_array_wrapper const tint_symbol_16 = {.arr={1, 2, 3, 4}};
  tint_array_wrapper const tint_symbol_17 = {.arr={5, 6, 7, 8}};
  tint_array_wrapper_3 const tint_symbol_18 = {.arr={tint_symbol_16, tint_symbol_17}};
  tint_array_wrapper const subexpr_nested_nonempty = tint_symbol_18.arr[1];
  tint_array_wrapper const tint_symbol_19 = {.arr={1, x, as_type<int>((as_type<uint>(x) + as_type<uint>(1))), nonempty.arr[3]}};
  tint_array_wrapper_3 const tint_symbol_20 = {.arr={tint_symbol_19, nested_nonempty.arr[1].arr[2]}};
  tint_array_wrapper const subexpr_nested_nonempty_with_expr = tint_symbol_20.arr[1];
  return;
}

