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