#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_0 {
  int array[2];
};
struct T {
  tint_array_wrapper_0 a;
};
struct tint_array_wrapper_1 {
  T array[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=(x + 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=(x + 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=(x + 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=(x + 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 = {};
  tint_array_wrapper_0 const tint_symbol_14 = {1, 2};
  T const tint_symbol_15 = {.a=tint_symbol_14};
  tint_array_wrapper_0 const tint_symbol_16 = {3, 4};
  T const tint_symbol_17 = {.a=tint_symbol_16};
  tint_array_wrapper_1 const aosoa_nonempty = {tint_symbol_15, tint_symbol_17};
  tint_array_wrapper_0 const tint_symbol_18 = {1, (aosoa_nonempty.array[0].a.array[0] + 1)};
  T const tint_symbol_19 = {.a=tint_symbol_18};
  tint_array_wrapper_1 const aosoa_nonempty_with_expr = {tint_symbol_19, aosoa_nonempty.array[1]};
  return;
}

