#include <metal_stdlib>

using namespace metal;
struct S1 {
  int a;
  int b;
  int c;
  int d;
};
struct S2 {
  int e;
  S1 f;
};
struct S3 {
  int g;
  S1 h;
  S2 i;
};
struct tint_array_wrapper {
  int arr[2];
};
struct T {
  tint_array_wrapper a;
};
struct tint_array_wrapper_1 {
  T arr[2];
};

kernel void tint_symbol() {
  int const x = 42;
  S1 const empty = {};
  S1 const nonempty = {.a=1, .b=2, .c=3, .d=4};
  S1 const nonempty_with_expr = {.a=1, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nonempty.d};
  S3 const nested_empty = {};
  S1 const tint_symbol_1 = {.a=2, .b=3, .c=4, .d=5};
  S1 const tint_symbol_2 = {.a=7, .b=8, .c=9, .d=10};
  S2 const tint_symbol_3 = {.e=6, .f=tint_symbol_2};
  S3 const nested_nonempty = {.g=1, .h=tint_symbol_1, .i=tint_symbol_3};
  S1 const tint_symbol_4 = {.a=2, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nested_nonempty.i.f.d};
  S2 const tint_symbol_5 = {.e=6, .f=nonempty};
  S3 const nested_nonempty_with_expr = {.g=1, .h=tint_symbol_4, .i=tint_symbol_5};
  S1 const tint_symbol_6 = {};
  int const subexpr_empty = tint_symbol_6.a;
  S1 const tint_symbol_7 = {.a=1, .b=2, .c=3, .d=4};
  int const subexpr_nonempty = tint_symbol_7.b;
  S1 const tint_symbol_8 = {.a=1, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nonempty.d};
  int const subexpr_nonempty_with_expr = tint_symbol_8.c;
  S2 const tint_symbol_9 = {};
  S1 const subexpr_nested_empty = tint_symbol_9.f;
  S1 const tint_symbol_10 = {.a=2, .b=3, .c=4, .d=5};
  S2 const tint_symbol_11 = {.e=1, .f=tint_symbol_10};
  S1 const subexpr_nested_nonempty = tint_symbol_11.f;
  S1 const tint_symbol_12 = {.a=2, .b=x, .c=as_type<int>((as_type<uint>(x) + as_type<uint>(1))), .d=nested_nonempty.i.f.d};
  S2 const tint_symbol_13 = {.e=1, .f=tint_symbol_12};
  S1 const subexpr_nested_nonempty_with_expr = tint_symbol_13.f;
  tint_array_wrapper_1 const aosoa_empty = {.arr={}};
  tint_array_wrapper const tint_symbol_14 = {.arr={1, 2}};
  T const tint_symbol_15 = {.a=tint_symbol_14};
  tint_array_wrapper const tint_symbol_16 = {.arr={3, 4}};
  T const tint_symbol_17 = {.a=tint_symbol_16};
  tint_array_wrapper_1 const aosoa_nonempty = {.arr={tint_symbol_15, tint_symbol_17}};
  tint_array_wrapper const tint_symbol_18 = {.arr={1, as_type<int>((as_type<uint>(aosoa_nonempty.arr[0].a.arr[0]) + as_type<uint>(1)))}};
  T const tint_symbol_19 = {.a=tint_symbol_18};
  tint_array_wrapper_1 const aosoa_nonempty_with_expr = {.arr={tint_symbol_19, aosoa_nonempty.arr[1]}};
  return;
}

