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