Skip to content

Commit 1f5836c

Browse files
authored
fix(rt): Apply adjustRef when updating stack locals (#805)
1 parent 66aec6d commit 1f5836c

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,11 @@ A `Deref` projection in the projections list changes the target of the write ope
269269
</k>
270270
<stack> STACK
271271
=> STACK[(FRAME -Int 1) <-
272-
#updateStackLocal({STACK[FRAME -Int 1]}:>StackFrame, I, #buildUpdate(NEW, CONTEXTS))
272+
#updateStackLocal(
273+
{STACK[FRAME -Int 1]}:>StackFrame,
274+
I,
275+
#adjustRef(#buildUpdate(NEW, CONTEXTS), 0 -Int FRAME)
276+
)
273277
]
274278
</stack>
275279
requires 0 <Int FRAME andBool FRAME <=Int size(STACK)
@@ -283,7 +287,11 @@ A `Deref` projection in the projections list changes the target of the write ope
283287
</k>
284288
<stack> STACK
285289
=> STACK[(FRAME -Int 1) <-
286-
#updateStackLocal({STACK[FRAME -Int 1]}:>StackFrame, I, #buildUpdate(Moved, CONTEXTS)) // TODO retain Ty and Mutability from _ORIGINAL
290+
#updateStackLocal(
291+
{STACK[FRAME -Int 1]}:>StackFrame,
292+
I,
293+
#adjustRef(#buildUpdate(Moved, CONTEXTS), 0 -Int FRAME)
294+
) // TODO retain Ty and Mutability from _ORIGINAL
287295
]
288296
</stack>
289297
requires 0 <Int FRAME andBool FRAME <=Int size(STACK)

kmir/src/tests/integration/data/prove-rs/show/pointer-cast-length-test-fail.array_cast_test.expected

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
┃ │
4242
┃ │ (6 steps)
4343
┃ ├─ 10
44-
┃ │ #traverseProjection ( toStack ( 1 , local ( 2 ) ) , Range ( #mapOffset ( range (
44+
┃ │ #traverseProjection ( toStack ( 1 , local ( 2 ) ) , Range ( #mapOffset ( #mapOff
4545
┃ │ span: 87
4646
┃ ┃
4747
┃ ┃ (1 step)
@@ -59,7 +59,7 @@
5959
┃ ┗━━┓
6060
┃ │
6161
┃ └─ 12 (stuck, leaf)
62-
┃ #traverseProjection ( toStack ( 1 , local ( 2 ) ) , Range ( #mapOffset ( range (
62+
┃ #traverseProjection ( toStack ( 1 , local ( 2 ) ) , Range ( #mapOffset ( #mapOff
6363
┃ span: 87
6464
6565
┗━━┓
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
fn assign<'a>(dst: &mut &'a i32, src: &&'a i32) {
2+
*dst = *src;
3+
}
4+
5+
fn main() {
6+
let x = 1;
7+
let mut dst = &x;
8+
let src = dst;
9+
10+
assign(&mut dst, &src);
11+
12+
assert_eq!(*dst, 1);
13+
}

0 commit comments

Comments
 (0)