struct MyStruct {
  f1 : f32;
};

type MyArray = array<f32, 10>;

fn ret_i32() -> i32 {
  return 1;
}

fn ret_u32() -> u32 {
  return 1u;
}

fn ret_f32() -> f32 {
  return 1.0;
}

fn ret_MyStruct() -> MyStruct {
  return MyStruct();
}

fn ret_MyArray() -> MyArray {
  return MyArray();
}

fn let_decls() {
  let v1 = 1;
  let v2 = 1u;
  let v3 = 1.0;
  let v4 = vec3<i32>(1, 1, 1);
  let v5 = vec3<u32>(1u, 1u, 1u);
  let v6 = vec3<f32>(1.0, 1.0, 1.0);
  let v7 = mat3x3<f32>(v6, v6, v6);
  let v8 = MyStruct(1.0);
  let v9 = MyArray();
  let v10 = ret_i32();
  let v11 = ret_u32();
  let v12 = ret_f32();
  let v13 = ret_MyStruct();
  let v14 = ret_MyStruct();
  let v15 = ret_MyArray();
}

[[stage(fragment)]]
fn main() -> [[location(0)]] vec4<f32> {
  return vec4<f32>(0.0, 0.0, 0.0, 0.0);
}
