From df4b8d06ff8bb97ba988a6b447d2f01b4078e600 Mon Sep 17 00:00:00 2001 From: dkcumming Date: Wed, 4 Mar 2026 20:15:31 +1000 Subject: [PATCH 1/5] Added test for `setupCalleeClosure` --- .../data/prove-rs/closure_fnonce_tuple_arg-fail.rs | 8 ++++++++ .../closure_fnonce_tuple_arg-fail.main.expected | 14 ++++++++++++++ kmir/src/tests/integration/test_integration.py | 1 + 3 files changed, 23 insertions(+) create mode 100644 kmir/src/tests/integration/data/prove-rs/closure_fnonce_tuple_arg-fail.rs create mode 100644 kmir/src/tests/integration/data/prove-rs/show/closure_fnonce_tuple_arg-fail.main.expected diff --git a/kmir/src/tests/integration/data/prove-rs/closure_fnonce_tuple_arg-fail.rs b/kmir/src/tests/integration/data/prove-rs/closure_fnonce_tuple_arg-fail.rs new file mode 100644 index 000000000..18cfb9c22 --- /dev/null +++ b/kmir/src/tests/integration/data/prove-rs/closure_fnonce_tuple_arg-fail.rs @@ -0,0 +1,8 @@ +fn apply u8>(f: F, a: u8, b: u8) -> u8 { + f(a, b) +} + +fn main() { + let result = apply(|x, y| x + y, 10, 32); + assert_eq!(result, 42); +} diff --git a/kmir/src/tests/integration/data/prove-rs/show/closure_fnonce_tuple_arg-fail.main.expected b/kmir/src/tests/integration/data/prove-rs/show/closure_fnonce_tuple_arg-fail.main.expected new file mode 100644 index 000000000..c2d1b9a3a --- /dev/null +++ b/kmir/src/tests/integration/data/prove-rs/show/closure_fnonce_tuple_arg-fail.main.expected @@ -0,0 +1,14 @@ + +┌─ 1 (root, init) +│ #execTerminator ( terminator ( ... kind: terminatorKindCall ( ... func: operandC +│ span: 0 +│ +│ (79 steps) +└─ 3 (stuck, leaf) + #traverseProjection ( toLocal ( 4 ) , thunk ( #applyBinOp ( binOpAdd , Aggregate + + +┌─ 2 (root, leaf, target, terminal) +│ #EndProgram ~> .K + + diff --git a/kmir/src/tests/integration/test_integration.py b/kmir/src/tests/integration/test_integration.py index 0de9ce097..7f28ce70f 100644 --- a/kmir/src/tests/integration/test_integration.py +++ b/kmir/src/tests/integration/test_integration.py @@ -63,6 +63,7 @@ 'ref-ptr-cast-elem-fail', 'ref-ptr-cast-elem-offset-fail', 'and_then_closure-fail', + 'closure_fnonce_tuple_arg-fail', ] From bf538857e92508f9bf819b017c7353f311e8e34a Mon Sep 17 00:00:00 2001 From: dkcumming Date: Wed, 4 Mar 2026 19:49:33 +1000 Subject: [PATCH 2/5] Added check for `FunType` in `setupCalleeClosure` Same as what was in `setupCalleeClosure2` --- kmir/src/kmir/kdist/mir-semantics/kmir.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kmir/src/kmir/kdist/mir-semantics/kmir.md b/kmir/src/kmir/kdist/mir-semantics/kmir.md index 05df79d37..5a2b48c65 100644 --- a/kmir/src/kmir/kdist/mir-semantics/kmir.md +++ b/kmir/src/kmir/kdist/mir-semantics/kmir.md @@ -548,8 +548,10 @@ Therefore a heuristics is used here: andBool isTypedValue(LOCALS[TUPLE]) andBool isTupleType(lookupTy(tyOfLocal({LOCALS[TUPLE]}:>TypedLocal))) andBool isTypedLocal(LOCALS[CLOSURE]) - andBool typeInfoVoidType ==K lookupTy(tyOfLocal({LOCALS[CLOSURE]}:>TypedLocal)) - // either the closure ref type is missing from type table + andBool ( + typeInfoVoidType ==K lookupTy(tyOfLocal({LOCALS[CLOSURE]}:>TypedLocal)) + orBool isFunType(lookupTy(tyOfLocal({LOCALS[CLOSURE]}:>TypedLocal))) + ) [priority(40), preserves-definedness] rule [setupCalleeClosure2]: #setUpCalleeData( From 9b790ee584e29d9b89185e9422919d5afb018e18 Mon Sep 17 00:00:00 2001 From: dkcumming Date: Wed, 4 Mar 2026 20:27:17 +1000 Subject: [PATCH 3/5] Updated test to passing --- ...ple_arg-fail.rs => closure_fnonce_tuple_arg.rs} | 0 .../closure_fnonce_tuple_arg-fail.main.expected | 14 -------------- kmir/src/tests/integration/test_integration.py | 1 - 3 files changed, 15 deletions(-) rename kmir/src/tests/integration/data/prove-rs/{closure_fnonce_tuple_arg-fail.rs => closure_fnonce_tuple_arg.rs} (100%) delete mode 100644 kmir/src/tests/integration/data/prove-rs/show/closure_fnonce_tuple_arg-fail.main.expected diff --git a/kmir/src/tests/integration/data/prove-rs/closure_fnonce_tuple_arg-fail.rs b/kmir/src/tests/integration/data/prove-rs/closure_fnonce_tuple_arg.rs similarity index 100% rename from kmir/src/tests/integration/data/prove-rs/closure_fnonce_tuple_arg-fail.rs rename to kmir/src/tests/integration/data/prove-rs/closure_fnonce_tuple_arg.rs diff --git a/kmir/src/tests/integration/data/prove-rs/show/closure_fnonce_tuple_arg-fail.main.expected b/kmir/src/tests/integration/data/prove-rs/show/closure_fnonce_tuple_arg-fail.main.expected deleted file mode 100644 index c2d1b9a3a..000000000 --- a/kmir/src/tests/integration/data/prove-rs/show/closure_fnonce_tuple_arg-fail.main.expected +++ /dev/null @@ -1,14 +0,0 @@ - -┌─ 1 (root, init) -│ #execTerminator ( terminator ( ... kind: terminatorKindCall ( ... func: operandC -│ span: 0 -│ -│ (79 steps) -└─ 3 (stuck, leaf) - #traverseProjection ( toLocal ( 4 ) , thunk ( #applyBinOp ( binOpAdd , Aggregate - - -┌─ 2 (root, leaf, target, terminal) -│ #EndProgram ~> .K - - diff --git a/kmir/src/tests/integration/test_integration.py b/kmir/src/tests/integration/test_integration.py index 7f28ce70f..0de9ce097 100644 --- a/kmir/src/tests/integration/test_integration.py +++ b/kmir/src/tests/integration/test_integration.py @@ -63,7 +63,6 @@ 'ref-ptr-cast-elem-fail', 'ref-ptr-cast-elem-offset-fail', 'and_then_closure-fail', - 'closure_fnonce_tuple_arg-fail', ] From 5c18cf546fcfc9b10db060da79d51d8a5fda222e Mon Sep 17 00:00:00 2001 From: dkcumming Date: Wed, 4 Mar 2026 20:57:57 +1000 Subject: [PATCH 4/5] Also fixed and_then_closure-fail.rs --- ...d_then_closure-fail.rs => and_then_closure.rs} | 0 .../show/and_then_closure-fail.main.expected | 15 --------------- kmir/src/tests/integration/test_integration.py | 1 - 3 files changed, 16 deletions(-) rename kmir/src/tests/integration/data/prove-rs/{and_then_closure-fail.rs => and_then_closure.rs} (100%) delete mode 100644 kmir/src/tests/integration/data/prove-rs/show/and_then_closure-fail.main.expected diff --git a/kmir/src/tests/integration/data/prove-rs/and_then_closure-fail.rs b/kmir/src/tests/integration/data/prove-rs/and_then_closure.rs similarity index 100% rename from kmir/src/tests/integration/data/prove-rs/and_then_closure-fail.rs rename to kmir/src/tests/integration/data/prove-rs/and_then_closure.rs diff --git a/kmir/src/tests/integration/data/prove-rs/show/and_then_closure-fail.main.expected b/kmir/src/tests/integration/data/prove-rs/show/and_then_closure-fail.main.expected deleted file mode 100644 index a6b62b249..000000000 --- a/kmir/src/tests/integration/data/prove-rs/show/and_then_closure-fail.main.expected +++ /dev/null @@ -1,15 +0,0 @@ - -┌─ 1 (root, init) -│ #execTerminator ( terminator ( ... kind: terminatorKindCall ( ... func: operandC -│ span: 0 -│ -│ (142 steps) -└─ 3 (stuck, leaf) - #traverseProjection ( toLocal ( 2 ) , Aggregate ( variantIdx ( 0 ) , ListItem ( - span: 157 - - -┌─ 2 (root, leaf, target, terminal) -│ #EndProgram ~> .K - - diff --git a/kmir/src/tests/integration/test_integration.py b/kmir/src/tests/integration/test_integration.py index 0de9ce097..5f36b155d 100644 --- a/kmir/src/tests/integration/test_integration.py +++ b/kmir/src/tests/integration/test_integration.py @@ -62,7 +62,6 @@ 'test_offset_from-fail', 'ref-ptr-cast-elem-fail', 'ref-ptr-cast-elem-offset-fail', - 'and_then_closure-fail', ] From 663ec065be9a327ef06302152cfcb3f4d5076a07 Mon Sep 17 00:00:00 2001 From: dkcumming Date: Wed, 4 Mar 2026 21:51:57 +1000 Subject: [PATCH 5/5] Updated steps in two-crate-bin test --- .../data/crate-tests/two-crate-bin/crate2::main.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kmir/src/tests/integration/data/crate-tests/two-crate-bin/crate2::main.expected b/kmir/src/tests/integration/data/crate-tests/two-crate-bin/crate2::main.expected index 60dbf8403..544958705 100644 --- a/kmir/src/tests/integration/data/crate-tests/two-crate-bin/crate2::main.expected +++ b/kmir/src/tests/integration/data/crate-tests/two-crate-bin/crate2::main.expected @@ -2,7 +2,7 @@ ┌─ 1 (root, init) │ #execTerminator ( terminator ( ... kind: terminatorKindCall ( ... func: operandC │ -│ (740 steps) +│ (737 steps) ├─ 3 (terminal) │ #EndProgram ~> .K │