SKIP: FAILED

void set_float3(inout float3 vec, int idx, float val) {
  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
}

struct tint_padded_array_element {
  float el;
};

cbuffer cbuffer_x_6 : register(b1, space0) {
  uint4 x_6[3];
};
cbuffer cbuffer_x_8 : register(b0, space0) {
  uint4 x_8[4];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  float4x3 m43 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  tint_padded_array_element sums[3] = (tint_padded_array_element[3])0;
  int i = 0;
  int a = 0;
  int x_67_phi = 0;
  const float x_44 = asfloat(x_6[1].x);
  const float3 x_48 = float3(0.0f, 0.0f, 0.0f);
  m43 = float4x3(float3(x_44, 0.0f, 0.0f), float3(0.0f, x_44, 0.0f), float3(0.0f, 0.0f, x_44), float3(0.0f, 0.0f, 0.0f));
  const uint scalar_offset = ((16u * uint(0))) / 4;
  const int x_51 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
  const int x_53 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
  const float x_55 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
  set_float3(m43[x_51], x_53, x_55);
  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
  const float x_58 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
  const float x_60 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
  const float x_62 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
  const tint_padded_array_element tint_symbol_4[3] = {{x_58}, {x_60}, {x_62}};
  sums = tint_symbol_4;
  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
  const int x_65 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
  i = x_65;
  x_67_phi = x_65;
  while (true) {
    const int x_67 = x_67_phi;
    const int x_73 = asint(x_8[3].x);
    if ((x_67 < x_73)) {
    } else {
      break;
    }
    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
    const int x_77 = asint(x_8[scalar_offset_7 / 4][scalar_offset_7 % 4]);
    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
    const int x_79 = asint(x_8[scalar_offset_8 / 4][scalar_offset_8 % 4]);
    const float x_81 = m43[x_67][x_79];
    const float x_83 = sums[x_77].el;
    sums[x_77].el = (x_83 + x_81);
    {
      const int x_68 = (x_67 + 1);
      i = x_68;
      x_67_phi = x_68;
    }
  }
  const int x_87 = asint(x_8[1].x);
  if ((x_87 == 1)) {
    a = 4;
    const int x_92 = asint(x_8[2].x);
    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
    const int x_94 = asint(x_8[scalar_offset_9 / 4][scalar_offset_9 % 4]);
    const float x_96 = m43[4][x_94];
    const float x_98 = sums[x_92].el;
    sums[x_92].el = (x_98 + x_96);
  }
  const int x_102 = asint(x_8[1].x);
  const float x_104 = sums[x_102].el;
  const uint scalar_offset_10 = ((16u * uint(0))) / 4;
  const int x_106 = asint(x_8[scalar_offset_10 / 4][scalar_offset_10 % 4]);
  const float x_108 = sums[x_106].el;
  const float x_111 = asfloat(x_6[2].x);
  if (((x_104 + x_108) == x_111)) {
    const uint scalar_offset_11 = ((16u * uint(0))) / 4;
    const int x_117 = asint(x_8[scalar_offset_11 / 4][scalar_offset_11 % 4]);
    const int x_120 = asint(x_8[1].x);
    const int x_123 = asint(x_8[1].x);
    const uint scalar_offset_12 = ((16u * uint(0))) / 4;
    const int x_126 = asint(x_8[scalar_offset_12 / 4][scalar_offset_12 % 4]);
    x_GLF_color = float4(float(x_117), float(x_120), float(x_123), float(x_126));
  } else {
    const int x_130 = asint(x_8[1].x);
    const float x_131 = float(x_130);
    x_GLF_color = float4(x_131, x_131, x_131, x_131);
  }
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol {
  float4 x_GLF_color_1 : SV_Target0;
};

tint_symbol main() {
  main_1();
  const main_out tint_symbol_1 = {x_GLF_color};
  const tint_symbol tint_symbol_5 = {tint_symbol_1.x_GLF_color_1};
  return tint_symbol_5;
}
C:\src\tint\test\Shader@0x000001D542C02010(32,14-22): error X3500: array reference cannot be used as an l-value; not natively addressable

