struct buf0 {
  zero : f32,
}

@group(0) @binding(0) var<uniform> x_6 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn merge_() -> i32 {
  let x_40 : f32 = x_6.zero;
  if ((x_40 < 0.0)) {
    return 0;
  }
  return 0;
}

fn main_1() {
  var res : i32;
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  loop {
    let x_32 : f32 = x_6.zero;
    switch(i32(x_32)) {
      case 0: {
        return;
      }
      default: {
      }
    }

    continuing {
      if (false) {
      } else {
        break;
      }
    }
  }
  let x_8 : i32 = merge_();
  res = x_8;
  let x_9 : i32 = res;
  let x_36 : f32 = f32(x_9);
  x_GLF_color = vec4<f32>(x_36, x_36, x_36, x_36);
  return;
}

struct main_out {
  @location(0)
  x_GLF_color_1 : vec4<f32>,
}

@stage(fragment)
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
