Skip to content

Commit 1986fca

Browse files
committed
fix(rt): set closure env local in tuple-arg setup
1 parent 6d5eaba commit 1986fca

2 files changed

Lines changed: 11 additions & 7 deletions

File tree

kmir/src/kmir/kdist/mir-semantics/kmir.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,9 @@ Therefore a heuristics is used here:
530530
_SPAN
531531
)
532532
=>
533-
#setTupleArgs(2, getValue(LOCALS, TUPLE)) ~> #execBlock(FIRST)
533+
#setLocalValue(place(local(1), .ProjectionElems), #incrementRef(getValue(LOCALS, CLOSURE)))
534+
~> #setTupleArgs(2, getValue(LOCALS, TUPLE))
535+
~> #execBlock(FIRST)
534536
// arguments are tuple components, stored as _2 .. _n
535537
...
536538
</k>
@@ -547,7 +549,7 @@ Therefore a heuristics is used here:
547549
andBool 0 <=Int TUPLE andBool TUPLE <Int size(LOCALS)
548550
andBool isTypedValue(LOCALS[TUPLE])
549551
andBool isTupleType(lookupTy(tyOfLocal({LOCALS[TUPLE]}:>TypedLocal)))
550-
andBool isTypedLocal(LOCALS[CLOSURE])
552+
andBool isTypedValue(LOCALS[CLOSURE])
551553
andBool typeInfoVoidType ==K lookupTy(tyOfLocal({LOCALS[CLOSURE]}:>TypedLocal))
552554
// either the closure ref type is missing from type table
553555
[priority(40), preserves-definedness]
@@ -560,7 +562,9 @@ Therefore a heuristics is used here:
560562
_SPAN
561563
)
562564
=>
563-
#setTupleArgs(2, getValue(LOCALS, TUPLE)) ~> #execBlock(FIRST)
565+
#setLocalValue(place(local(1), .ProjectionElems), #incrementRef(getValue(LOCALS, CLOSURE)))
566+
~> #setTupleArgs(2, getValue(LOCALS, TUPLE))
567+
~> #execBlock(FIRST)
564568
// arguments are tuple components, stored as _2 .. _n
565569
...
566570
</k>
@@ -577,7 +581,7 @@ Therefore a heuristics is used here:
577581
andBool 0 <=Int TUPLE andBool TUPLE <Int size(LOCALS)
578582
andBool isTypedValue(LOCALS[TUPLE])
579583
andBool isTupleType(lookupTy(tyOfLocal({LOCALS[TUPLE]}:>TypedLocal)))
580-
andBool isTypedLocal(LOCALS[CLOSURE])
584+
andBool isTypedValue(LOCALS[CLOSURE])
581585
// or the closure ref type pointee is missing from the type table
582586
andBool isRefType(lookupTy(tyOfLocal({LOCALS[CLOSURE]}:>TypedLocal)))
583587
andBool isTy(pointeeTy(lookupTy(tyOfLocal({LOCALS[CLOSURE]}:>TypedLocal))))

kmir/src/tests/integration/data/prove-rs/show/iter-eq-copied-take-dereftruncate-fail.repro.expected

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
│ #execTerminator ( terminator ( ... kind: terminatorKindCall ( ... func: operandC
44
│ span: 0
55
6-
│ (1947 steps)
6+
│ (5553 steps)
77
└─ 3 (stuck, leaf)
8-
#traverseProjection ( toLocal ( 1 ) , thunk ( operandCopy ( place ( ... local: l
9-
span: 30
8+
#traverseProjection ( toLocal ( 12 ) , thunk ( #decodeConstant ( constantKindAll
9+
span: 282
1010

1111

1212
┌─ 2 (root, leaf, target, terminal)

0 commit comments

Comments
 (0)