SKIP: FAILED

#version 310 es
precision mediump float;

layout(location = 0) out vec4 x_GLF_color_1_1;
struct buf0 {
  vec2 injectionSwitch;
};

int data[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
int temp[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
layout(binding = 0) uniform buf0_1 {
  vec2 injectionSwitch;
} x_28;

vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
  int k = 0;
  int i = 0;
  int j = 0;
  int i_1 = 0;
  int x_303 = from;
  k = x_303;
  int x_304 = from;
  i = x_304;
  int x_305 = mid;
  j = (x_305 + 1);
  while (true) {
    int x_311 = i;
    int x_312 = mid;
    int x_314 = j;
    int x_315 = to;
    if (((x_311 <= x_312) & (x_314 <= x_315))) {
    } else {
      break;
    }
    int x_321 = data[i];
    int x_324 = data[j];
    if ((x_321 < x_324)) {
      int x_329 = k;
      k = (x_329 + 1);
      int x_331 = i;
      i = (x_331 + 1);
      int x_334 = data[x_331];
      temp[x_329] = x_334;
    } else {
      int x_336 = k;
      k = (x_336 + 1);
      int x_338 = j;
      j = (x_338 + 1);
      int x_341 = data[x_338];
      temp[x_336] = x_341;
    }
  }
  while (true) {
    int x_347 = i;
    int x_349 = i;
    int x_350 = mid;
    if (((x_347 < 10) & (x_349 <= x_350))) {
    } else {
      break;
    }
    int x_354 = k;
    k = (x_354 + 1);
    int x_356 = i;
    i = (x_356 + 1);
    int x_359 = data[x_356];
    temp[x_354] = x_359;
  }
  int x_361 = from;
  i_1 = x_361;
  while (true) {
    int x_366 = i_1;
    int x_367 = to;
    if ((x_366 <= x_367)) {
    } else {
      break;
    }
    int x_370 = i_1;
    int x_373 = temp[i_1];
    data[x_370] = x_373;
    {
      i_1 = (i_1 + 1);
    }
  }
  return;
}

void main_1() {
  int x_85 = 0;
  int x_86 = 0;
  int x_87 = 0;
  int x_88 = 0;
  int x_89 = 0;
  int x_90 = 0;
  int x_91 = 0;
  int x_92 = 0;
  int x_93 = 0;
  int x_94 = 0;
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float x_96 = x_28.injectionSwitch.x;
  i_3 = int(x_96);
  while (true) {
    switch(i_3) {
      case 9: {
        data[i_3] = -5;
        break;
      }
      case 8: {
        data[i_3] = -4;
        break;
      }
      case 7: {
        data[i_3] = -3;
        break;
      }
      case 6: {
        data[i_3] = -2;
        break;
      }
      case 5: {
        data[i_3] = -1;
        break;
      }
      case 4: {
        data[i_3] = 0;
        break;
      }
      case 3: {
        data[i_3] = 1;
        break;
      }
      case 2: {
        data[i_3] = 2;
        break;
      }
      case 1: {
        data[i_3] = 3;
        break;
      }
      case 0: {
        data[i_3] = 4;
        break;
      }
      default: {
        break;
      }
    }
    i_3 = (i_3 + 1);
    {
      if ((i_3 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  {
    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
      int x_145 = j_1;
      int x_148 = data[j_1];
      temp[x_145] = x_148;
    }
  }
  x_94 = 0;
  x_93 = 9;
  x_92 = 1;
  {
    for(; (x_92 <= x_93); x_92 = (2 * x_92)) {
      x_91 = x_94;
      {
        for(; (x_91 < x_93); x_91 = (x_91 + (2 * x_92))) {
          x_90 = x_91;
          int x_170 = x_91;
          int x_171 = x_92;
          int x_173[10] = data;
          int tint_symbol_3[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
          data = tint_symbol_3;
          data = x_173;
          x_89 = ((x_170 + x_171) - 1);
          x_88 = min(((x_91 + (2 * x_92)) - 1), x_93);
          x_87 = x_90;
          x_86 = x_89;
          x_85 = x_88;
          merge_i1_i1_i1_(x_87, x_86, x_85);
        }
      }
    }
  }
  float x_194 = tint_symbol.y;
  if ((int(x_194) < 30)) {
    int x_201 = data[0];
    grey = (0.5f + (float(x_201) / 10.0f));
  } else {
    float x_206 = tint_symbol.y;
    if ((int(x_206) < 60)) {
      int x_213 = data[1];
      grey = (0.5f + (float(x_213) / 10.0f));
    } else {
      float x_218 = tint_symbol.y;
      if ((int(x_218) < 90)) {
        int x_225 = data[2];
        grey = (0.5f + (float(x_225) / 10.0f));
      } else {
        float x_230 = tint_symbol.y;
        if ((int(x_230) < 120)) {
          int x_237 = data[3];
          grey = (0.5f + (float(x_237) / 10.0f));
        } else {
          float x_242 = tint_symbol.y;
          if ((int(x_242) < 150)) {
            discard;
          } else {
            float x_249 = tint_symbol.y;
            if ((int(x_249) < 180)) {
              int x_256 = data[5];
              grey = (0.5f + (float(x_256) / 10.0f));
            } else {
              float x_261 = tint_symbol.y;
              if ((int(x_261) < 210)) {
                int x_268 = data[6];
                grey = (0.5f + (float(x_268) / 10.0f));
              } else {
                float x_273 = tint_symbol.y;
                if ((int(x_273) < 240)) {
                  int x_280 = data[7];
                  grey = (0.5f + (float(x_280) / 10.0f));
                } else {
                  float x_285 = tint_symbol.y;
                  if ((int(x_285) < 270)) {
                    int x_292 = data[8];
                    grey = (0.5f + (float(x_292) / 10.0f));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float x_296 = grey;
  vec3 x_297 = vec3(x_296, x_296, x_296);
  x_GLF_color = vec4(x_297.x, x_297.y, x_297.z, 1.0f);
  return;
}

struct main_out {
  vec4 x_GLF_color_1;
};

main_out tint_symbol_1(vec4 tint_symbol_2) {
  tint_symbol = tint_symbol_2;
  main_1();
  main_out tint_symbol_4 = main_out(x_GLF_color);
  return tint_symbol_4;
}

void main() {
  main_out inner_result = tint_symbol_1(gl_FragCoord);
  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
  return;
}
Error parsing GLSL shader:
ERROR: 0:33: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
ERROR: 0:33: '' : compilation terminated 
ERROR: 2 compilation errors.  No code generated.



