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(); }

// Local lets
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();
}

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