SmallStructInts = struct
{
    a: u8,
    b: u8,
    c: u8,
    d: u8,
}

bb_ret_small_struct_ints = fn [cc(c)] () SmallStructInts
{
    return {
        .a = 1,
        .b = 2,
        .c = 3,
        .d = 4,
    };
}

require = fn(ok: u1) void
{
    if (!ok)
    {
        #trap();
    }
}

c_small_struct_ints = fn [cc(c)] (x: SmallStructInts) void
{
    require(x.a == 1);
    require(x.b == 2);
    require(x.c == 3);
    require(x.d == 4);

    >y = bb_ret_small_struct_ints();

    require(y.a == 1);
    require(y.b == 2);
    require(y.c == 3);
    require(y.d == 4);
}

[export] main = fn [cc(c)] () s32
{
    >s: SmallStructInts = { .a = 1, .b = 2, .c = 3, .d = 4 };
    c_small_struct_ints(s);
    return 0;
}