// Passing a `*T` where a `T` value is expected is caught at the call site —
// not only for `for xs: (*m)` loop captures (see 215) but for any pointer,
// here a `*Move` parameter forwarded into a by-value parameter. Without the
// check this slipped through to the LLVM verifier as "Call parameter type
// does not match function signature".

#import "modules/std.sx";

Move :: struct { flag: s64; }

take :: (m: Move) -> s64 { return m.flag; }

forward :: (m: *Move) -> s64 { return take(m); }

main :: () -> s32 {
    mv : Move = .{ flag = 7 };
    return xx forward(@mv);
}
