//ww:run-exit 42 package main; type a = !void; type b = !void; type big = !struct { f: *fn(p: *i32) i32, data: [3]u64 }; type u = !(a | b | big); fn impl(p: *i32) i32 = { return *p + 41i32; }; fn mkbig() u = { let x: big; x.f = (&impl): *fn(p: *i32) i32; return x; }; export fn main() i32 = { let r = mkbig(); match (r) { case a => return 90; case b => return 91; case let z: big => { let n: i32 = 1i32; let fp = z.f; return (*fp)(&n): i32; }; }; };