#include <metal_stdlib>

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

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

