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 var_decls() {
  var v1 = 1;
  var v2 = 1u;
  var v3 = 1.0;
  var v4 = vec3<i32>(1, 1, 1);
  var v5 = vec3<u32>(1u, 1u, 1u);
  var v6 = vec3<f32>(1.0, 1.0, 1.0);
  var v7 = mat3x3<f32>(v6, v6, v6);
  var v8 = MyStruct(1.0);
  var v9 = MyArray();
  var v10 = ret_i32();
  var v11 = ret_u32();
  var v12 = ret_f32();
  var v13 = ret_MyStruct();
  var v14 = ret_MyStruct();
  var v15 = ret_MyArray();
}

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