summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSon Ho2022-01-06 16:30:20 +0100
committerSon Ho2022-01-06 16:30:20 +0100
commit335de855331a424c35b577907eb504c198990c0b (patch)
tree7364993229f8ff3a01d944992310d22be7694c3b
parent0d330faa8a71712c8d7242d49c74dfb209092d81 (diff)
Update the trace
Diffstat (limited to '')
-rw-r--r--Makefile8
-rw-r--r--tests/trace_reference.txt22530
2 files changed, 20522 insertions, 2016 deletions
diff --git a/Makefile b/Makefile
index a058bac8..21b77658 100644
--- a/Makefile
+++ b/Makefile
@@ -15,5 +15,13 @@ build-run-check-trace:
cmp tests/trace_reference.txt tests/trace_current.txt && \
rm tests/trace_current.txt
+# Build the project and update the trace
+.PHONY: regen-trace
+regen-trace:
+ dune build src/main.exe && \
+ dune exec src/main.exe ../charon/charon/tests/test1.cfim > tests/trace_current.txt && \
+ rm tests/trace_reference.txt && \
+ mv tests/trace_current.txt tests/trace_reference.txt
+
doc:
dune build @doc
diff --git a/tests/trace_reference.txt b/tests/trace_reference.txt
index f32f5de8..0901e59b 100644
--- a/tests/trace_reference.txt
+++ b/tests/trace_reference.txt
@@ -31,9 +31,9 @@ fn add_test(x : u32, y : u32) -> u32 {
var@4 : u32;
var@5 : (u32, bool);
- var@3 := copy x
- var@4 := copy y
- var@0 := copy var@3 + copy var@4
+ var@3 := copy x;
+ var@4 := copy y;
+ var@0 := copy var@3 + copy var@4;
return
}
@@ -45,9 +45,9 @@ fn subs_test(x : u32, y : u32) -> u32 {
var@4 : u32;
var@5 : (u32, bool);
- var@3 := copy x
- var@4 := copy y
- var@0 := copy var@3 - copy var@4
+ var@3 := copy x;
+ var@4 := copy y;
+ var@0 := copy var@3 - copy var@4;
return
}
@@ -59,9 +59,9 @@ fn div_test(x : u32, y : u32) -> u32 {
var@4 : u32;
var@5 : bool;
- var@3 := copy x
- var@4 := copy y
- var@0 := move var@3 / move var@4
+ var@3 := copy x;
+ var@4 := copy y;
+ var@0 := move var@3 / move var@4;
return
}
@@ -73,9 +73,9 @@ fn rem_test(x : u32, y : u32) -> u32 {
var@4 : u32;
var@5 : bool;
- var@3 := copy x
- var@4 := copy y
- var@0 := move var@3 % move var@4
+ var@3 := copy x;
+ var@4 := copy y;
+ var@0 := move var@3 % move var@4;
return
}
@@ -92,18 +92,18 @@ fn test2() {
e1 : test1::EmptyEnum;
enum0 : test1::Enum;
- x := 23: u32
- y := 44: u32
- z := 67: u32
- var@5 := copy x
- (p).x := move var@5
- (p).y := 67: u32
- (s as test1::Sum::Right).0 := true
- set_discriminant(s, 1)
- (o as test1::One::One).0 := 3: u64
- set_discriminant(o, 0)
- set_discriminant(e0, 0)
- set_discriminant(enum0, 0)
+ x := 23: u32;
+ y := 44: u32;
+ z := 67: u32;
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
return
}
@@ -115,15 +115,15 @@ fn get_max(x : u32, y : u32) -> u32 {
var@4 : u32;
var@5 : u32;
- var@4 := copy x
- var@5 := copy y
- var@3 := move var@4 >= move var@5
+ var@4 := copy x;
+ var@5 := copy y;
+ var@3 := move var@4 >= move var@5;
if (move var@3) {
var@0 := copy x
}
else {
var@0 := copy y
- }
+ };
return
}
@@ -139,15 +139,15 @@ fn test3() {
var@8 : bool;
var@9 : u32;
- x := move get_max(4: u32, 3: u32)
- y := move get_max(10: u32, 11: u32)
- var@4 := copy x
- var@5 := copy y
- z := copy var@4 + copy var@5
- var@9 := copy z
- var@8 := move var@9 == 15: u32
- var@7 := ¬ move var@8
- assert(¬move var@7)
+ x := move get_max(4: u32, 3: u32);
+ y := move get_max(10: u32, 11: u32);
+ var@4 := copy x;
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
return
}
@@ -157,10 +157,10 @@ fn test_neg(x : i32) -> i32 {
var@2 : i32;
var@3 : bool;
- var@2 := copy x
- var@3 := copy var@2 == -2147483648: i32
- assert(¬move var@3)
- var@0 := - move var@2
+ var@2 := copy x;
+ var@3 := copy var@2 == -2147483648: i32;
+ assert(¬move var@3);
+ var@0 := - move var@2;
return
}
@@ -169,8 +169,8 @@ fn test_neg1() {
x : i32;
y : i32;
- x := 3: i32
- y := -3: i32
+ x := 3: i32;
+ y := -3: i32;
return
}
@@ -183,14 +183,14 @@ fn refs_test1() {
var@5 : bool;
var@6 : i32;
- x := 0: i32
- px := &mut x
- ppx := &mut px
- *(*(ppx)) := 1: i32
- var@6 := copy x
- var@5 := move var@6 == 1: i32
- var@4 := ¬ move var@5
- assert(¬move var@4)
+ x := 0: i32;
+ px := &mut x;
+ ppx := &mut px;
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
return
}
@@ -215,30 +215,30 @@ fn refs_test2() {
var@17 : bool;
var@18 : i32;
- x := 0: i32
- y := 1: i32
- px := &mut x
- py := &mut y
- ppx := &mut px
- var@6 := &mut *(py)
- *(ppx) := move var@6
- *(*(ppx)) := 2: i32
- var@9 := copy *(px)
- var@8 := move var@9 == 2: i32
- var@7 := ¬ move var@8
- assert(¬move var@7)
- var@12 := copy x
- var@11 := move var@12 == 0: i32
- var@10 := ¬ move var@11
- assert(¬move var@10)
- var@15 := copy *(py)
- var@14 := move var@15 == 2: i32
- var@13 := ¬ move var@14
- assert(¬move var@13)
- var@18 := copy y
- var@17 := move var@18 == 2: i32
- var@16 := ¬ move var@17
- assert(¬move var@16)
+ x := 0: i32;
+ y := 1: i32;
+ px := &mut x;
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
return
}
@@ -248,12 +248,12 @@ fn test_list1() {
var@2 : std::boxed::Box<test1::List<i32>>;
var@3 : test1::List<i32>;
- set_discriminant(var@3, 1)
- var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
- (l as test1::List::Cons).0 := 0: i32
- (l as test1::List::Cons).1 := move var@2
- set_discriminant(l, 0)
-drop(l)
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
return
}
@@ -268,17 +268,17 @@ fn test_box1() {
var@7 : bool;
var@8 : i32;
- b := move alloc::boxed::Box<i32>::new(0: i32)
- var@3 := &two-phase b
- x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3)
- *(x) := 1: i32
- var@5 := &b
- x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
- var@8 := copy *(x)
- var@7 := move var@8 == 1: i32
- var@6 := ¬ move var@7
- assert(¬move var@6)
-drop(b)
+ b := move alloc::boxed::Box<i32>::new(0: i32);
+ var@3 := &two-phase b;
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3);
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
return
}
@@ -286,7 +286,7 @@ fn copy_int(x : i32) -> i32 {
var@0 : i32;
x : i32;
- var@0 := copy x
+ var@0 := copy x;
return
}
@@ -301,15 +301,15 @@ fn test_copy_int() {
var@7 : i32;
var@8 : i32;
- x := 0: i32
- px := &x
- var@4 := copy x
- y := move copy_int(move var@4)
- var@7 := copy *(px)
- var@8 := copy y
- var@6 := move var@7 == move var@8
- var@5 := ¬ move var@6
- assert(¬move var@5)
+ x := 0: i32;
+ px := &x;
+ var@4 := copy x;
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
return
}
@@ -318,7 +318,7 @@ fn is_cons<0,T>(l : &0 (test1::List<T>)) -> bool {
l : &'_ (test1::List<T>);
var@2 : isize;
- var@2 := discriminant(*(l))
+ var@2 := discriminant(*(l));
switch (move var@2) {
0: isize => {
var@0 := true
@@ -329,7 +329,7 @@ fn is_cons<0,T>(l : &0 (test1::List<T>)) -> bool {
_ => {
panic
}
- }
+ };
return
}
@@ -343,17 +343,17 @@ fn test_is_cons() {
var@6 : &'_ (test1::List<i32>);
var@7 : &'_ (test1::List<i32>);
- set_discriminant(var@3, 1)
- var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
- (l as test1::List::Cons).0 := 0: i32
- (l as test1::List::Cons).1 := move var@2
- set_discriminant(l, 0)
- var@7 := &l
- var@6 := copy var@7
- var@5 := move is_cons<i32>(move var@6)
- var@4 := ¬ move var@5
- assert(¬move var@4)
-drop(l)
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
return
}
@@ -370,22 +370,22 @@ fn split_list<T>(l : test1::List<T>) -> (T, test1::List<T>) {
var@9 : ();
var@10 : isize;
- var@8 := false
- var@7 := false
- var@7 := true
- var@8 := true
- var@2 := discriminant(l)
+ var@8 := false;
+ var@7 := false;
+ var@7 := true;
+ var@8 := true;
+ var@2 := discriminant(l);
switch (move var@2) {
0: isize => {
- var@8 := false
- hd := move (l as test1::List::Cons).0
- var@7 := false
- tl := move (l as test1::List::Cons).1
- var@5 := move hd
- var@6 := move deref_box(tl)
- (var@0).0 := move var@5
- (var@0).1 := move var@6
- var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl)
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
return
}
_ => {
@@ -407,20 +407,20 @@ fn test_split_list() {
var@9 : bool;
var@10 : i32;
- set_discriminant(var@3, 1)
- var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
- (l as test1::List::Cons).0 := 0: i32
- (l as test1::List::Cons).1 := move var@2
- set_discriminant(l, 0)
- var@7 := move l
- var@6 := move split_list<i32>(move var@7)
- hd := copy (var@6).0
- tl := move (var@6).1
- var@10 := copy hd
- var@9 := move var@10 == 0: i32
- var@8 := ¬ move var@9
- assert(¬move var@8)
-drop(tl)
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
return
}
@@ -431,13 +431,13 @@ fn get_elem<'a,T>(b : bool, x : &'a mut (T), y : &'a mut (T)) -> &'a mut (T) {
y : &'_ mut (T);
var@4 : bool;
- var@4 := copy b
+ var@4 := copy b;
if (move var@4) {
var@0 := &mut *(x)
}
else {
var@0 := move y
- }
+ };
return
}
@@ -462,27 +462,27 @@ fn get_elem_test() {
var@17 : bool;
var@18 : i32;
- x := 0: i32
- y := 0: i32
- var@5 := &mut x
- var@4 := &two-phase *(var@5)
- var@7 := &mut y
- var@6 := &two-phase *(var@7)
- z := move get_elem<i32>(true, move var@4, move var@6)
- var@8 := copy *(z)
- *(z) := copy var@8 + 1: i32
- var@12 := copy *(z)
- var@11 := move var@12 == 1: i32
- var@10 := ¬ move var@11
- assert(¬move var@10)
- var@15 := copy x
- var@14 := move var@15 == 1: i32
- var@13 := ¬ move var@14
- assert(¬move var@13)
- var@18 := copy y
- var@17 := move var@18 == 0: i32
- var@16 := ¬ move var@17
- assert(¬move var@16)
+ x := 0: i32;
+ y := 0: i32;
+ var@5 := &mut x;
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
return
}
@@ -491,8 +491,8 @@ fn id_mut_mut<'a,'b,T>(x : &'a mut (&'b mut (T))) -> &'a mut (&'b mut (T)) {
x : &'_ mut (&'_ mut (T));
var@2 : &'_ mut (&'_ mut (T));
- var@2 := &mut *(x)
- var@0 := &mut *(var@2)
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
return
}
@@ -501,8 +501,8 @@ fn id_mut_pair<'a,T>(x : &'a mut ((&'a mut (T), u32))) -> &'a mut ((&'a mut (T),
x : &'_ mut ((&'_ mut (T), u32));
var@2 : &'_ mut ((&'_ mut (T), u32));
- var@2 := &mut *(x)
- var@0 := &mut *(var@2)
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
return
}
@@ -519,19 +519,19 @@ fn id_mut_pair_test1() {
var@9 : &'_ mut (u32);
var@10 : &'_ mut (u32);
- x := 0: u32
- px := &mut x
- var@4 := move px
- (p).0 := move var@4
- (p).1 := 1: u32
- pp0 := &mut p
- var@7 := &two-phase *(pp0)
- pp1 := move id_mut_pair<u32>(move var@7)
- y := 2: u32
- var@10 := &mut y
- var@9 := &mut *(var@10)
- *((pp1).0) := move var@9
- *((pp1).1) := 3: u32
+ x := 0: u32;
+ px := &mut x;
+ var@4 := move px;
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
return
}
@@ -540,8 +540,8 @@ fn id_mut_mut_pair<'a,T>(x : &'a mut (&'a mut ((&'a mut (T), u32)))) -> &'a mut
x : &'_ mut (&'_ mut ((&'_ mut (T), u32)));
var@2 : &'_ mut (&'_ mut ((&'_ mut (T), u32)));
- var@2 := &mut *(x)
- var@0 := &mut *(var@2)
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
return
}
@@ -550,8 +550,8 @@ fn id_mut_mut_mut_same<'a,T>(x : &'a mut (&'a mut (&'a mut (u32)))) -> &'a mut (
x : &'_ mut (&'_ mut (&'_ mut (u32)));
var@2 : &'_ mut (&'_ mut (&'_ mut (u32)));
- var@2 := &mut *(x)
- var@0 := &mut *(var@2)
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
return
}
@@ -575,23 +575,23 @@ fn test_loop1(max : u32) -> u32 {
var@8 : (u32, bool);
var@9 : (u32, bool);
- i := 0: u32
- s := 0: u32
+ i := 0: u32;
+ s := 0: u32;
loop {
- var@4 := copy i
- var@5 := copy max
- var@3 := move var@4 < move var@5
+ var@4 := copy i;
+ var@5 := copy max;
+ var@3 := move var@4 < move var@5;
if (move var@3) {
- var@6 := copy i
- s := copy s + copy var@6
- i := copy i + 1: u32
+ var@6 := copy i;
+ s := copy s + copy var@6;
+ i := copy i + 1: u32;
continue 0
}
else {
break 0
}
- }
- s := copy s * 2: u32
+ };
+ s := copy s * 2: u32;
return
}
@@ -607,22 +607,22 @@ fn test_loop2(max : u32) -> u32 {
var@8 : (u32, bool);
var@9 : (u32, bool);
- i := 0: u32
- s := 0: u32
+ i := 0: u32;
+ s := 0: u32;
loop {
- var@4 := copy i
- var@5 := copy max
- var@3 := move var@4 < move var@5
+ var@4 := copy i;
+ var@5 := copy max;
+ var@3 := move var@4 < move var@5;
if (move var@3) {
- var@6 := copy i
+ var@6 := copy i;
switch (move var@6) {
17: u32 => {
break 0
}
_ => {
- var@7 := copy i
- s := copy s + copy var@7
- i := copy i + 1: u32
+ var@7 := copy i;
+ s := copy s + copy var@7;
+ i := copy i + 1: u32;
continue 0
}
}
@@ -630,7 +630,7 @@ fn test_loop2(max : u32) -> u32 {
else {
break 0
}
- }
+ };
return
}
@@ -656,22 +656,22 @@ fn test_loop3(max : u32) -> u32 {
var@18 : (u32, bool);
var@19 : (u32, bool);
- i := 0: u32
- j := 0: u32
- s := 0: u32
+ i := 0: u32;
+ j := 0: u32;
+ s := 0: u32;
loop {
- var@5 := copy i
- var@6 := copy max
- var@4 := move var@5 < move var@6
+ var@5 := copy i;
+ var@6 := copy max;
+ var@4 := move var@5 < move var@6;
if (move var@4) {
loop {
- var@8 := copy j
- var@9 := copy max
- var@7 := move var@8 < move var@9
+ var@8 := copy j;
+ var@9 := copy max;
+ var@7 := move var@8 < move var@9;
if (move var@7) {
- var@11 := copy i
- var@12 := copy j
- var@10 := copy var@11 + copy var@12
+ var@11 := copy i;
+ var@12 := copy j;
+ var@10 := copy var@11 + copy var@12;
switch (move var@10) {
17: u32 => {
continue 0
@@ -679,26 +679,26 @@ fn test_loop3(max : u32) -> u32 {
_ => {
nop
}
- }
- var@14 := copy i
- s := copy s + copy var@14
- j := copy j + 1: u32
+ };
+ var@14 := copy i;
+ s := copy s + copy var@14;
+ j := copy j + 1: u32;
continue 1
}
else {
break 0
}
- }
- j := 0: u32
- var@17 := copy i
- s := copy s + copy var@17
- i := copy i + 1: u32
+ };
+ j := 0: u32;
+ var@17 := copy i;
+ s := copy s + copy var@17;
+ i := copy i + 1: u32;
continue 0
}
else {
break 0
}
- }
+ };
return
}
@@ -724,22 +724,22 @@ fn test_loop4(max : u32) -> u32 {
var@18 : (u32, bool);
var@19 : (u32, bool);
- i := 1: u32
- j := 0: u32
- s := 0: u32
+ i := 1: u32;
+ j := 0: u32;
+ s := 0: u32;
loop {
- var@5 := copy i
- var@6 := copy max
- var@4 := move var@5 < move var@6
+ var@5 := copy i;
+ var@6 := copy max;
+ var@4 := move var@5 < move var@6;
if (move var@4) {
loop {
- var@8 := copy j
- var@9 := copy max
- var@7 := move var@8 < move var@9
+ var@8 := copy j;
+ var@9 := copy max;
+ var@7 := move var@8 < move var@9;
if (move var@7) {
- var@11 := copy i
- var@12 := copy j
- var@10 := copy var@11 + copy var@12
+ var@11 := copy i;
+ var@12 := copy j;
+ var@10 := copy var@11 + copy var@12;
switch (move var@10) {
17: u32 => {
continue 0
@@ -747,26 +747,26 @@ fn test_loop4(max : u32) -> u32 {
_ => {
nop
}
- }
- var@14 := copy i
- s := copy s + copy var@14
- j := copy j + 1: u32
+ };
+ var@14 := copy i;
+ s := copy s + copy var@14;
+ j := copy j + 1: u32;
break 1
}
else {
break 0
}
- }
- j := 0: u32
- var@17 := copy i
- s := copy s + copy var@17
- i := copy i + 1: u32
+ };
+ j := 0: u32;
+ var@17 := copy i;
+ s := copy s + copy var@17;
+ i := copy i + 1: u32;
continue 0
}
else {
break 0
}
- }
+ };
return
}
@@ -788,37 +788,37 @@ fn test_loop5(max : u32) -> u32 {
var@14 : (u32, bool);
var@15 : (u32, bool);
- i := 0: u32
- j := 0: u32
- s := 0: u32
+ i := 0: u32;
+ j := 0: u32;
+ s := 0: u32;
loop {
- var@5 := copy i
- var@6 := copy max
- var@4 := move var@5 < move var@6
+ var@5 := copy i;
+ var@6 := copy max;
+ var@4 := move var@5 < move var@6;
if (move var@4) {
loop {
- var@8 := copy j
- var@9 := copy max
- var@7 := move var@8 < move var@9
+ var@8 := copy j;
+ var@9 := copy max;
+ var@7 := move var@8 < move var@9;
if (move var@7) {
- var@10 := copy j
- s := copy s + copy var@10
- j := copy j + 1: u32
+ var@10 := copy j;
+ s := copy s + copy var@10;
+ j := copy j + 1: u32;
continue 0
}
else {
break 0
}
- }
- var@13 := copy i
- s := copy s + copy var@13
- i := copy i + 1: u32
+ };
+ var@13 := copy i;
+ s := copy s + copy var@13;
+ i := copy i + 1: u32;
continue 0
}
else {
break 0
}
- }
+ };
return
}
@@ -836,30 +836,30 @@ fn test_loop6(max : u32) -> u32 {
var@10 : (u32, bool);
var@11 : (u32, bool);
- i := 0: u32
- s := 0: u32
+ i := 0: u32;
+ s := 0: u32;
loop {
- var@4 := copy i
- var@5 := copy max
- var@3 := move var@4 < move var@5
+ var@4 := copy i;
+ var@5 := copy max;
+ var@3 := move var@4 < move var@5;
if (move var@3) {
- var@7 := copy i
- var@6 := move var@7 > 3: u32
+ var@7 := copy i;
+ var@6 := move var@7 > 3: u32;
if (move var@6) {
break 0
}
else {
- var@8 := copy i
- s := copy s + copy var@8
- i := copy i + 1: u32
+ var@8 := copy i;
+ s := copy s + copy var@8;
+ i := copy i + 1: u32;
continue 0
}
}
else {
break 0
}
- }
- s := copy s + 1: u32
+ };
+ s := copy s + 1: u32;
return
}
@@ -867,19 +867,36 @@ fn test_static(x : &'static (u32)) -> &'static (u32) {
var@0 : &'_ (u32);
x : &'_ (u32);
- var@0 := copy x
+ var@0 := copy x;
return
}
fn test_char() -> char {
var@0 : char;
- var@0 := a
+ var@0 := a;
return
}
[Debug] test_unit_function: test2
[Debug]
+**About to evaluate statement**: [
+ x := 23: u32;
+ y := 44: u32;
+ z := 67: u32;
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -897,21 +914,14 @@ fn test_char() -> char {
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: x := 23: u32
-y := 44: u32
-z := 67: u32
-var@5 := copy x
-(p).x := move var@5
-(p).y := 67: u32
-(s as test1::Sum::Right).0 := true
-set_discriminant(s, 1)
-(o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := 23: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -929,7 +939,7 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: x := 23: u32
+
[Debug] eval_operand:
- ctx:
@@ -955,6 +965,22 @@ About to evaluate statement: x := 23: u32
23: u32
[Debug]
+**About to evaluate statement**: [
+ y := 44: u32;
+ z := 67: u32;
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -972,20 +998,14 @@ About to evaluate statement: x := 23: u32
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: y := 44: u32
-z := 67: u32
-var@5 := copy x
-(p).x := move var@5
-(p).y := 67: u32
-(s as test1::Sum::Right).0 := true
-set_discriminant(s, 1)
-(o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ y := 44: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1003,7 +1023,7 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: y := 44: u32
+
[Debug] eval_operand:
- ctx:
@@ -1029,6 +1049,21 @@ About to evaluate statement: y := 44: u32
44: u32
[Debug]
+**About to evaluate statement**: [
+ z := 67: u32;
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1046,19 +1081,14 @@ About to evaluate statement: y := 44: u32
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: z := 67: u32
-var@5 := copy x
-(p).x := move var@5
-(p).y := 67: u32
-(s as test1::Sum::Right).0 := true
-set_discriminant(s, 1)
-(o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ z := 67: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1076,7 +1106,7 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: z := 67: u32
+
[Debug] eval_operand:
- ctx:
@@ -1102,6 +1132,20 @@ About to evaluate statement: z := 67: u32
67: u32
[Debug]
+**About to evaluate statement**: [
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1119,18 +1163,14 @@ About to evaluate statement: z := 67: u32
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: var@5 := copy x
-(p).x := move var@5
-(p).y := 67: u32
-(s as test1::Sum::Right).0 := true
-set_discriminant(s, 1)
-(o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := copy x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1148,7 +1188,7 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: var@5 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -1176,6 +1216,19 @@ copy x
[Debug] Value to copy:
23: u32
[Debug]
+**About to evaluate statement**: [
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1193,17 +1246,14 @@ copy x
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: (p).x := move var@5
-(p).y := 67: u32
-(s as test1::Sum::Right).0 := true
-set_discriminant(s, 1)
-(o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (p).x := move var@5
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1221,7 +1271,7 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: (p).x := move var@5
+
[Debug] eval_operand:
- ctx:
@@ -1253,6 +1303,18 @@ pe: (Expressions.Field ((Expressions.ProjAdt (0, None)), 0))
ty: (Types.Adt ((Types.AdtId 0), [],
[(Types.Integer Types.U32); (Types.Integer Types.U32)]))
[Debug]
+**About to evaluate statement**: [
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1270,16 +1332,14 @@ ty: (Types.Adt ((Types.AdtId 0), [],
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: (p).y := 67: u32
-(s as test1::Sum::Right).0 := true
-set_discriminant(s, 1)
-(o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (p).y := 67: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1297,7 +1357,7 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: (p).y := 67: u32
+
[Debug] eval_operand:
- ctx:
@@ -1323,6 +1383,17 @@ About to evaluate statement: (p).y := 67: u32
67: u32
[Debug]
+**About to evaluate statement**: [
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1340,15 +1411,14 @@ About to evaluate statement: (p).y := 67: u32
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: (s as test1::Sum::Right).0 := true
-set_discriminant(s, 1)
-(o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (s as test1::Sum::Right).0 := true
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1366,7 +1436,7 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: (s as test1::Sum::Right).0 := true
+
[Debug] eval_operand:
- ctx:
@@ -1395,6 +1465,16 @@ true
pe: (Expressions.Field ((Expressions.ProjAdt (6, (Some 1))), 0))
ty: (Types.Adt ((Types.AdtId 6), [], [(Types.Integer Types.U32); Types.Bool]))
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1412,14 +1492,14 @@ ty: (Types.Adt ((Types.AdtId 6), [], [(Types.Integer Types.U32); Types.Bool]))
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: set_discriminant(s, 1)
-(o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(s, 1)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1437,9 +1517,18 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: set_discriminant(s, 1)
+
[Debug]
+**About to evaluate statement**: [
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1457,13 +1546,14 @@ About to evaluate statement: set_discriminant(s, 1)
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: (o as test1::One::One).0 := 3: u64
-set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (o as test1::One::One).0 := 3: u64
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1481,7 +1571,7 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: (o as test1::One::One).0 := 3: u64
+
[Debug] eval_operand:
- ctx:
@@ -1510,6 +1600,14 @@ About to evaluate statement: (o as test1::One::One).0 := 3: u64
pe: (Expressions.Field ((Expressions.ProjAdt (2, (Some 0))), 0))
ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)]))
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1527,12 +1625,14 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)]))
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: set_discriminant(o, 0)
-set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(o, 0)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1550,9 +1650,16 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: set_discriminant(o, 0)
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1570,11 +1677,14 @@ About to evaluate statement: set_discriminant(o, 0)
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: set_discriminant(e0, 0)
-set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(e0, 0)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1592,9 +1702,15 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: set_discriminant(e0, 0)
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1612,10 +1728,14 @@ About to evaluate statement: set_discriminant(e0, 0)
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: set_discriminant(enum0, 0)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(enum0, 0)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1633,9 +1753,14 @@ return
enum0 -> ⊥ : test1::Enum ;
}
-About to evaluate statement: set_discriminant(enum0, 0)
+
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1653,10 +1778,24 @@ About to evaluate statement: set_discriminant(enum0, 0)
enum0 -> test1::Enum::Variant1 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: test3
[Debug]
+**About to evaluate statement**: [
+ x := move get_max(4: u32, 3: u32);
+ y := move get_max(10: u32, 11: u32);
+ var@4 := copy x;
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1673,18 +1812,14 @@ About to evaluate statement: return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: x := move get_max(4: u32, 3: u32)
-y := move get_max(10: u32, 11: u32)
-var@4 := copy x
-var@5 := copy y
-z := copy var@4 + copy var@5
-var@9 := copy z
-var@8 := move var@9 == 15: u32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := move get_max(4: u32, 3: u32)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -1701,7 +1836,7 @@ return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: x := move get_max(4: u32, 3: u32)
+
[Debug] eval_operand:
- ctx:
@@ -1748,6 +1883,20 @@ About to evaluate statement: x := move get_max(4: u32, 3: u32)
3: u32
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x;
+ var@5 := copy y;
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -1774,18 +1923,14 @@ About to evaluate statement: x := move get_max(4: u32, 3: u32)
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@4 := copy x
-var@5 := copy y
-var@3 := move var@4 >= move var@5
-if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -1812,7 +1957,7 @@ return
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@4 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -1849,6 +1994,19 @@ copy x
[Debug] Value to copy:
4: u32
[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y;
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -1875,17 +2033,14 @@ copy x
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@5 := copy y
-var@3 := move var@4 >= move var@5
-if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -1912,7 +2067,7 @@ return
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@5 := copy y
+
[Debug] eval_operand:
- ctx:
@@ -1949,6 +2104,18 @@ copy y
[Debug] Value to copy:
3: u32
[Debug]
+**About to evaluate statement**: [
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -1975,16 +2142,14 @@ copy y
var@5 -> 3: u32 ;
}
-About to evaluate statement: var@3 := move var@4 >= move var@5
-if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@3 := move var@4 >= move var@5
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2011,7 +2176,7 @@ return
var@5 -> 3: u32 ;
}
-About to evaluate statement: var@3 := move var@4 >= move var@5
+
[Debug] eval_operand:
- ctx:
@@ -2082,6 +2247,17 @@ move var@5
[Debug] Value to move:
3: u32
[Debug]
+**About to evaluate statement**: [
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2108,15 +2284,19 @@ move var@5
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2143,12 +2323,7 @@ return
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
+
[Debug] eval_operand:
- ctx:
@@ -2185,6 +2360,11 @@ move var@3
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ var@0 := copy x
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2211,7 +2391,7 @@ true
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@0 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -2248,6 +2428,11 @@ copy x
[Debug] Value to copy:
4: u32
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2274,7 +2459,7 @@ copy x
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: return
+
[Debug] ctx_pop_frame:
# 2 frame(s)
@@ -2371,6 +2556,19 @@ move var@0
[Debug] Value to move:
4: u32
[Debug]
+**About to evaluate statement**: [
+ y := move get_max(10: u32, 11: u32);
+ var@4 := copy x;
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -2387,17 +2585,14 @@ move var@0
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: y := move get_max(10: u32, 11: u32)
-var@4 := copy x
-var@5 := copy y
-z := copy var@4 + copy var@5
-var@9 := copy z
-var@8 := move var@9 == 15: u32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ y := move get_max(10: u32, 11: u32)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -2414,7 +2609,7 @@ return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: y := move get_max(10: u32, 11: u32)
+
[Debug] eval_operand:
- ctx:
@@ -2461,6 +2656,20 @@ About to evaluate statement: y := move get_max(10: u32, 11: u32)
11: u32
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x;
+ var@5 := copy y;
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2487,18 +2696,14 @@ About to evaluate statement: y := move get_max(10: u32, 11: u32)
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@4 := copy x
-var@5 := copy y
-var@3 := move var@4 >= move var@5
-if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2525,7 +2730,7 @@ return
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@4 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -2562,6 +2767,19 @@ copy x
[Debug] Value to copy:
10: u32
[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y;
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2588,17 +2806,14 @@ copy x
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@5 := copy y
-var@3 := move var@4 >= move var@5
-if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2625,7 +2840,7 @@ return
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@5 := copy y
+
[Debug] eval_operand:
- ctx:
@@ -2662,6 +2877,18 @@ copy y
[Debug] Value to copy:
11: u32
[Debug]
+**About to evaluate statement**: [
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2688,16 +2915,14 @@ copy y
var@5 -> 11: u32 ;
}
-About to evaluate statement: var@3 := move var@4 >= move var@5
-if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@3 := move var@4 >= move var@5
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2724,7 +2949,7 @@ return
var@5 -> 11: u32 ;
}
-About to evaluate statement: var@3 := move var@4 >= move var@5
+
[Debug] eval_operand:
- ctx:
@@ -2795,6 +3020,17 @@ move var@5
[Debug] Value to move:
11: u32
[Debug]
+**About to evaluate statement**: [
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2821,15 +3057,19 @@ move var@5
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2856,12 +3096,7 @@ return
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: if (move var@3) {
- var@0 := copy x
-}
-else {
- var@0 := copy y
-}
+
[Debug] eval_operand:
- ctx:
@@ -2898,6 +3133,11 @@ move var@3
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ var@0 := copy y
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2924,7 +3164,7 @@ false
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: var@0 := copy y
+
[Debug] eval_operand:
- ctx:
@@ -2961,6 +3201,11 @@ copy y
[Debug] Value to copy:
11: u32
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -2987,7 +3232,7 @@ copy y
var@5 -> ⊥ : u32 ;
}
-About to evaluate statement: return
+
[Debug] ctx_pop_frame:
# 2 frame(s)
@@ -3084,6 +3329,18 @@ move var@0
[Debug] Value to move:
11: u32
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x;
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3100,16 +3357,14 @@ move var@0
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: var@4 := copy x
-var@5 := copy y
-z := copy var@4 + copy var@5
-var@9 := copy z
-var@8 := move var@9 == 15: u32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3126,7 +3381,7 @@ return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: var@4 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -3153,6 +3408,17 @@ copy x
[Debug] Value to copy:
4: u32
[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3169,15 +3435,14 @@ copy x
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: var@5 := copy y
-z := copy var@4 + copy var@5
-var@9 := copy z
-var@8 := move var@9 == 15: u32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3194,7 +3459,7 @@ return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: var@5 := copy y
+
[Debug] eval_operand:
- ctx:
@@ -3221,6 +3486,16 @@ copy y
[Debug] Value to copy:
11: u32
[Debug]
+**About to evaluate statement**: [
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3237,14 +3512,14 @@ copy y
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: z := copy var@4 + copy var@5
-var@9 := copy z
-var@8 := move var@9 == 15: u32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ z := copy var@4 + copy var@5
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3261,7 +3536,7 @@ return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: z := copy var@4 + copy var@5
+
[Debug] eval_operand:
- ctx:
@@ -3312,6 +3587,15 @@ copy var@5
[Debug] Value to copy:
11: u32
[Debug]
+**About to evaluate statement**: [
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3328,13 +3612,14 @@ copy var@5
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: var@9 := copy z
-var@8 := move var@9 == 15: u32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@9 := copy z
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3351,7 +3636,7 @@ return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: var@9 := copy z
+
[Debug] eval_operand:
- ctx:
@@ -3378,6 +3663,14 @@ copy z
[Debug] Value to copy:
15: u32
[Debug]
+**About to evaluate statement**: [
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3394,12 +3687,14 @@ copy z
var@9 -> 15: u32 ;
}
-About to evaluate statement: var@8 := move var@9 == 15: u32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := move var@9 == 15: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3416,7 +3711,7 @@ return
var@9 -> 15: u32 ;
}
-About to evaluate statement: var@8 := move var@9 == 15: u32
+
[Debug] eval_operand:
- ctx:
@@ -3465,6 +3760,13 @@ move var@9
15: u32
[Debug]
+**About to evaluate statement**: [
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3481,11 +3783,14 @@ move var@9
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: var@7 := ¬ move var@8
-assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := ¬ move var@8
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3502,7 +3807,7 @@ return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: var@7 := ¬ move var@8
+
[Debug] eval_operand:
- ctx:
@@ -3529,6 +3834,12 @@ move var@8
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3545,10 +3856,14 @@ true
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: assert(¬move var@7)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@7)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3565,7 +3880,7 @@ return
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: assert(¬move var@7)
+
[Debug] eval_operand:
- ctx:
@@ -3592,6 +3907,11 @@ move var@7
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3608,10 +3928,17 @@ false
var@9 -> ⊥ : u32 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: test_neg1
[Debug]
+**About to evaluate statement**: [
+ x := 3: i32;
+ y := -3: i32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3621,11 +3948,14 @@ About to evaluate statement: return
y -> ⊥ : i32 ;
}
-About to evaluate statement: x := 3: i32
-y := -3: i32
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := 3: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3635,7 +3965,7 @@ return
y -> ⊥ : i32 ;
}
-About to evaluate statement: x := 3: i32
+
[Debug] eval_operand:
- ctx:
@@ -3653,6 +3983,12 @@ About to evaluate statement: x := 3: i32
3: i32
[Debug]
+**About to evaluate statement**: [
+ y := -3: i32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3662,10 +3998,14 @@ About to evaluate statement: x := 3: i32
y -> ⊥ : i32 ;
}
-About to evaluate statement: y := -3: i32
-return
+
[Debug]
+**About to evaluate statement**: [
+ y := -3: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3675,7 +4015,7 @@ return
y -> ⊥ : i32 ;
}
-About to evaluate statement: y := -3: i32
+
[Debug] eval_operand:
- ctx:
@@ -3693,6 +4033,11 @@ About to evaluate statement: y := -3: i32
-3: i32
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3702,10 +4047,23 @@ About to evaluate statement: y := -3: i32
y -> -3: i32 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: refs_test1
[Debug]
+**About to evaluate statement**: [
+ x := 0: i32;
+ px := &mut x;
+ ppx := &mut px;
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3719,17 +4077,14 @@ About to evaluate statement: return
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: x := 0: i32
-px := &mut x
-ppx := &mut px
-*(*(ppx)) := 1: i32
-var@6 := copy x
-var@5 := move var@6 == 1: i32
-var@4 := ¬ move var@5
-assert(¬move var@4)
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3743,7 +4098,7 @@ return
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: x := 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -3765,6 +4120,18 @@ About to evaluate statement: x := 0: i32
0: i32
[Debug]
+**About to evaluate statement**: [
+ px := &mut x;
+ ppx := &mut px;
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3778,16 +4145,14 @@ About to evaluate statement: x := 0: i32
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: px := &mut x
-ppx := &mut px
-*(*(ppx)) := 1: i32
-var@6 := copy x
-var@5 := move var@6 == 1: i32
-var@4 := ¬ move var@5
-assert(¬move var@4)
-return
+
[Debug]
+**About to evaluate statement**: [
+ px := &mut x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3801,9 +4166,20 @@ return
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: px := &mut x
+
[Debug]
+**About to evaluate statement**: [
+ ppx := &mut px;
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3817,15 +4193,14 @@ About to evaluate statement: px := &mut x
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: ppx := &mut px
-*(*(ppx)) := 1: i32
-var@6 := copy x
-var@5 := move var@6 == 1: i32
-var@4 := ¬ move var@5
-assert(¬move var@4)
-return
+
[Debug]
+**About to evaluate statement**: [
+ ppx := &mut px
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3839,9 +4214,19 @@ return
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: ppx := &mut px
+
[Debug]
+**About to evaluate statement**: [
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3855,14 +4240,14 @@ About to evaluate statement: ppx := &mut px
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: *(*(ppx)) := 1: i32
-var@6 := copy x
-var@5 := move var@6 == 1: i32
-var@4 := ¬ move var@5
-assert(¬move var@4)
-return
+
[Debug]
+**About to evaluate statement**: [
+ *(*(ppx)) := 1: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3876,7 +4261,7 @@ return
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: *(*(ppx)) := 1: i32
+
[Debug] eval_operand:
- ctx:
@@ -3898,6 +4283,15 @@ About to evaluate statement: *(*(ppx)) := 1: i32
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3911,13 +4305,14 @@ About to evaluate statement: *(*(ppx)) := 1: i32
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := copy x
-var@5 := move var@6 == 1: i32
-var@4 := ¬ move var@5
-assert(¬move var@4)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := copy x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3931,7 +4326,7 @@ return
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -3955,6 +4350,14 @@ copy x
[Debug] Value to copy:
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3968,12 +4371,14 @@ copy x
var@6 -> 1: i32 ;
}
-About to evaluate statement: var@5 := move var@6 == 1: i32
-var@4 := ¬ move var@5
-assert(¬move var@4)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := move var@6 == 1: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -3987,7 +4392,7 @@ return
var@6 -> 1: i32 ;
}
-About to evaluate statement: var@5 := move var@6 == 1: i32
+
[Debug] eval_operand:
- ctx:
@@ -4030,6 +4435,13 @@ move var@6
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4043,11 +4455,14 @@ move var@6
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: var@4 := ¬ move var@5
-assert(¬move var@4)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := ¬ move var@5
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4061,7 +4476,7 @@ return
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: var@4 := ¬ move var@5
+
[Debug] eval_operand:
- ctx:
@@ -4085,6 +4500,12 @@ move var@5
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4098,10 +4519,14 @@ true
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@4)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@4)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4115,7 +4540,7 @@ return
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@4)
+
[Debug] eval_operand:
- ctx:
@@ -4139,6 +4564,11 @@ move var@4
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4152,10 +4582,39 @@ false
var@6 -> ⊥ : i32 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: refs_test2
[Debug]
+**About to evaluate statement**: [
+ x := 0: i32;
+ y := 1: i32;
+ px := &mut x;
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4181,33 +4640,14 @@ About to evaluate statement: return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: x := 0: i32
-y := 1: i32
-px := &mut x
-py := &mut y
-ppx := &mut px
-var@6 := &mut *(py)
-*(ppx) := move var@6
-*(*(ppx)) := 2: i32
-var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4233,7 +4673,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: x := 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -4267,6 +4707,34 @@ About to evaluate statement: x := 0: i32
0: i32
[Debug]
+**About to evaluate statement**: [
+ y := 1: i32;
+ px := &mut x;
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4292,32 +4760,14 @@ About to evaluate statement: x := 0: i32
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: y := 1: i32
-px := &mut x
-py := &mut y
-ppx := &mut px
-var@6 := &mut *(py)
-*(ppx) := move var@6
-*(*(ppx)) := 2: i32
-var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ y := 1: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4343,7 +4793,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: y := 1: i32
+
[Debug] eval_operand:
- ctx:
@@ -4377,6 +4827,33 @@ About to evaluate statement: y := 1: i32
1: i32
[Debug]
+**About to evaluate statement**: [
+ px := &mut x;
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4402,31 +4879,14 @@ About to evaluate statement: y := 1: i32
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: px := &mut x
-py := &mut y
-ppx := &mut px
-var@6 := &mut *(py)
-*(ppx) := move var@6
-*(*(ppx)) := 2: i32
-var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ px := &mut x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4452,9 +4912,35 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: px := &mut x
+
[Debug]
+**About to evaluate statement**: [
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4480,30 +4966,14 @@ About to evaluate statement: px := &mut x
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: py := &mut y
-ppx := &mut px
-var@6 := &mut *(py)
-*(ppx) := move var@6
-*(*(ppx)) := 2: i32
-var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ py := &mut y
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4529,9 +4999,34 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: py := &mut y
+
[Debug]
+**About to evaluate statement**: [
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4557,29 +5052,14 @@ About to evaluate statement: py := &mut y
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: ppx := &mut px
-var@6 := &mut *(py)
-*(ppx) := move var@6
-*(*(ppx)) := 2: i32
-var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ ppx := &mut px
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4605,9 +5085,33 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: ppx := &mut px
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4633,28 +5137,14 @@ About to evaluate statement: ppx := &mut px
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := &mut *(py)
-*(ppx) := move var@6
-*(*(ppx)) := 2: i32
-var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := &mut *(py)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4680,9 +5170,32 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := &mut *(py)
+
[Debug]
+**About to evaluate statement**: [
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4708,27 +5221,14 @@ About to evaluate statement: var@6 := &mut *(py)
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: *(ppx) := move var@6
-*(*(ppx)) := 2: i32
-var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ *(ppx) := move var@6
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4754,7 +5254,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: *(ppx) := move var@6
+
[Debug] eval_operand:
- ctx:
@@ -4790,6 +5290,28 @@ move var@6
[Debug] Value to move:
&mut@3 (1: i32)
[Debug]
+**About to evaluate statement**: [
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4815,26 +5337,14 @@ move var@6
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: *(*(ppx)) := 2: i32
-var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ *(*(ppx)) := 2: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4860,7 +5370,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: *(*(ppx)) := 2: i32
+
[Debug] eval_operand:
- ctx:
@@ -4894,6 +5404,27 @@ About to evaluate statement: *(*(ppx)) := 2: i32
2: i32
[Debug]
+**About to evaluate statement**: [
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4919,25 +5450,14 @@ About to evaluate statement: *(*(ppx)) := 2: i32
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@9 := copy *(px)
-var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@9 := copy *(px)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -4963,7 +5483,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@9 := copy *(px)
+
[Debug] eval_operand:
- ctx:
@@ -4999,6 +5519,26 @@ copy *(px)
[Debug] Value to copy:
2: i32
[Debug]
+**About to evaluate statement**: [
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5024,24 +5564,14 @@ copy *(px)
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := move var@9 == 2: i32
-var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := move var@9 == 2: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5067,7 +5597,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := move var@9 == 2: i32
+
[Debug] eval_operand:
- ctx:
@@ -5134,6 +5664,25 @@ move var@9
2: i32
[Debug]
+**About to evaluate statement**: [
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5159,23 +5708,14 @@ move var@9
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@7 := ¬ move var@8
-assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := ¬ move var@8
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5201,7 +5741,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@7 := ¬ move var@8
+
[Debug] eval_operand:
- ctx:
@@ -5237,6 +5777,24 @@ move var@8
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5262,22 +5820,14 @@ true
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@7)
-var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@7)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5303,7 +5853,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@7)
+
[Debug] eval_operand:
- ctx:
@@ -5339,6 +5889,23 @@ move var@7
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5364,21 +5931,14 @@ false
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@12 := copy x
-var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@12 := copy x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5404,7 +5964,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@12 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -5440,6 +6000,22 @@ copy x
[Debug] Value to copy:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5465,20 +6041,14 @@ copy x
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@11 := move var@12 == 0: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@11 := move var@12 == 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5504,7 +6074,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@11 := move var@12 == 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -5571,6 +6141,21 @@ move var@12
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5596,19 +6181,14 @@ move var@12
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@10 := ¬ move var@11
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5634,7 +6214,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@10 := ¬ move var@11
+
[Debug] eval_operand:
- ctx:
@@ -5670,6 +6250,20 @@ move var@11
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5695,18 +6289,14 @@ true
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@10)
-var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@10)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5732,7 +6322,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@10)
+
[Debug] eval_operand:
- ctx:
@@ -5768,6 +6358,19 @@ move var@10
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5793,17 +6396,14 @@ false
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@15 := copy *(py)
-var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@15 := copy *(py)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5829,7 +6429,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@15 := copy *(py)
+
[Debug] eval_operand:
- ctx:
@@ -5865,6 +6465,18 @@ copy *(py)
[Debug] Value to copy:
2: i32
[Debug]
+**About to evaluate statement**: [
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5890,16 +6502,14 @@ copy *(py)
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@14 := move var@15 == 2: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@14 := move var@15 == 2: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -5925,7 +6535,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@14 := move var@15 == 2: i32
+
[Debug] eval_operand:
- ctx:
@@ -5992,6 +6602,17 @@ move var@15
2: i32
[Debug]
+**About to evaluate statement**: [
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6017,15 +6638,14 @@ move var@15
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@13 := ¬ move var@14
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6051,7 +6671,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@13 := ¬ move var@14
+
[Debug] eval_operand:
- ctx:
@@ -6087,6 +6707,16 @@ move var@14
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6112,14 +6742,14 @@ true
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@13)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6145,7 +6775,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@13)
+
[Debug] eval_operand:
- ctx:
@@ -6181,6 +6811,15 @@ move var@13
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6206,13 +6845,14 @@ false
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@18 := copy y
-var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@18 := copy y
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6238,7 +6878,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@18 := copy y
+
[Debug] eval_operand:
- ctx:
@@ -6274,6 +6914,14 @@ copy y
[Debug] Value to copy:
2: i32
[Debug]
+**About to evaluate statement**: [
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6299,12 +6947,14 @@ copy y
var@18 -> 2: i32 ;
}
-About to evaluate statement: var@17 := move var@18 == 2: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@17 := move var@18 == 2: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6330,7 +6980,7 @@ return
var@18 -> 2: i32 ;
}
-About to evaluate statement: var@17 := move var@18 == 2: i32
+
[Debug] eval_operand:
- ctx:
@@ -6397,6 +7047,13 @@ move var@18
2: i32
[Debug]
+**About to evaluate statement**: [
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6422,11 +7079,14 @@ move var@18
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@16 := ¬ move var@17
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6452,7 +7112,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@16 := ¬ move var@17
+
[Debug] eval_operand:
- ctx:
@@ -6488,6 +7148,12 @@ move var@17
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6513,10 +7179,14 @@ true
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@16)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6542,7 +7212,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@16)
+
[Debug] eval_operand:
- ctx:
@@ -6578,6 +7248,11 @@ move var@16
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6603,10 +7278,21 @@ false
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: test_list1
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6617,15 +7303,14 @@ About to evaluate statement: return
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: set_discriminant(var@3, 1)
-var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
-(l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6636,9 +7321,19 @@ return
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: set_discriminant(var@3, 1)
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6649,14 +7344,14 @@ About to evaluate statement: set_discriminant(var@3, 1)
var@3 -> test1::List::Nil ;
}
-About to evaluate statement: var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
-(l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6667,7 +7362,7 @@ return
var@3 -> test1::List::Nil ;
}
-About to evaluate statement: var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+
[Debug] eval_non_local_function_call:
- fid:CfimAst.BoxNew
@@ -6777,6 +7472,15 @@ move @return
[Debug] Value to move:
@Box(test1::List::Nil)
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6787,13 +7491,14 @@ move @return
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6804,7 +7509,7 @@ return
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -6826,6 +7531,14 @@ About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
pe: (Expressions.Field ((Expressions.ProjAdt (1, (Some 0))), 0))
ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6836,12 +7549,14 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: (l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6852,7 +7567,7 @@ return
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: (l as test1::List::Cons).1 := move var@2
+
[Debug] eval_operand:
- ctx:
@@ -6873,6 +7588,13 @@ move var@2
[Debug] Value to move:
@Box(test1::List::Nil)
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6883,11 +7605,14 @@ move var@2
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: set_discriminant(l, 0)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6898,9 +7623,15 @@ return
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: set_discriminant(l, 0)
+
[Debug]
+**About to evaluate statement**: [
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6911,10 +7642,14 @@ About to evaluate statement: set_discriminant(l, 0)
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ drop(l)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6925,10 +7660,15 @@ return
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: drop(l)
+
[Debug] drop_value: place: l
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6939,10 +7679,26 @@ About to evaluate statement: drop(l)
var@3 -> ⊥ : test1::List<i32> ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: test_box1
[Debug]
+**About to evaluate statement**: [
+ b := move alloc::boxed::Box<i32>::new(0: i32);
+ var@3 := &two-phase b;
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3);
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6958,20 +7714,14 @@ About to evaluate statement: return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: b := move alloc::boxed::Box<i32>::new(0: i32)
-var@3 := &two-phase b
-x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3)
-*(x) := 1: i32
-var@5 := &b
-x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
-var@8 := copy *(x)
-var@7 := move var@8 == 1: i32
-var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ b := move alloc::boxed::Box<i32>::new(0: i32)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -6987,7 +7737,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: b := move alloc::boxed::Box<i32>::new(0: i32)
+
[Debug] eval_non_local_function_call:
- fid:CfimAst.BoxNew
@@ -7120,6 +7870,21 @@ move @return
[Debug] Value to move:
@Box(0: i32)
[Debug]
+**About to evaluate statement**: [
+ var@3 := &two-phase b;
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3);
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7135,19 +7900,14 @@ move @return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@3 := &two-phase b
-x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3)
-*(x) := 1: i32
-var@5 := &b
-x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
-var@8 := copy *(x)
-var@7 := move var@8 == 1: i32
-var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@3 := &two-phase b
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7163,9 +7923,23 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@3 := &two-phase b
+
[Debug]
+**About to evaluate statement**: [
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3);
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7181,18 +7955,14 @@ About to evaluate statement: var@3 := &two-phase b
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3)
-*(x) := 1: i32
-var@5 := &b
-x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
-var@8 := copy *(x)
-var@7 := move var@8 == 1: i32
-var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7208,7 +7978,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3)
+
[Debug] eval_non_local_function_call:
- fid:CfimAst.BoxDerefMut
@@ -7327,6 +8097,19 @@ move @return
[Debug] Value to move:
&mut@1 (0: i32)
[Debug]
+**About to evaluate statement**: [
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7342,17 +8125,14 @@ move @return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: *(x) := 1: i32
-var@5 := &b
-x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
-var@8 := copy *(x)
-var@7 := move var@8 == 1: i32
-var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ *(x) := 1: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7368,7 +8148,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: *(x) := 1: i32
+
[Debug] eval_operand:
- ctx:
@@ -7392,6 +8172,18 @@ About to evaluate statement: *(x) := 1: i32
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7407,16 +8199,14 @@ About to evaluate statement: *(x) := 1: i32
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@5 := &b
-x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
-var@8 := copy *(x)
-var@7 := move var@8 == 1: i32
-var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := &b
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7432,9 +8222,20 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@5 := &b
+
[Debug]
+**About to evaluate statement**: [
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7450,15 +8251,14 @@ About to evaluate statement: var@5 := &b
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
-var@8 := copy *(x)
-var@7 := move var@8 == 1: i32
-var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7474,7 +8274,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
+
[Debug] eval_non_local_function_call:
- fid:CfimAst.BoxDeref
@@ -7580,6 +8380,16 @@ move @return
[Debug] Value to move:
⌊shared@3⌋
[Debug]
+**About to evaluate statement**: [
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7595,14 +8405,14 @@ move @return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := copy *(x)
-var@7 := move var@8 == 1: i32
-var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := copy *(x)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7618,7 +8428,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := copy *(x)
+
[Debug] eval_operand:
- ctx:
@@ -7644,6 +8454,15 @@ copy *(x)
[Debug] Value to copy:
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7659,13 +8478,14 @@ copy *(x)
var@8 -> 1: i32 ;
}
-About to evaluate statement: var@7 := move var@8 == 1: i32
-var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := move var@8 == 1: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7681,7 +8501,7 @@ return
var@8 -> 1: i32 ;
}
-About to evaluate statement: var@7 := move var@8 == 1: i32
+
[Debug] eval_operand:
- ctx:
@@ -7728,6 +8548,14 @@ move var@8
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7743,12 +8571,14 @@ move var@8
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := ¬ move var@7
-assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := ¬ move var@7
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7764,7 +8594,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := ¬ move var@7
+
[Debug] eval_operand:
- ctx:
@@ -7790,6 +8620,13 @@ move var@7
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7805,11 +8642,14 @@ true
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@6)
-drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@6)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7825,7 +8665,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@6)
+
[Debug] eval_operand:
- ctx:
@@ -7851,6 +8691,12 @@ move var@6
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ drop(b);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7866,10 +8712,14 @@ false
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: drop(b)
-return
+
[Debug]
+**About to evaluate statement**: [
+ drop(b)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7885,10 +8735,15 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: drop(b)
+
[Debug] drop_value: place: b
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7904,10 +8759,24 @@ About to evaluate statement: drop(b)
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: test_copy_int
[Debug]
+**About to evaluate statement**: [
+ x := 0: i32;
+ px := &x;
+ var@4 := copy x;
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7923,18 +8792,14 @@ About to evaluate statement: return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: x := 0: i32
-px := &x
-var@4 := copy x
-y := move copy_int(move var@4)
-var@7 := copy *(px)
-var@8 := copy y
-var@6 := move var@7 == move var@8
-var@5 := ¬ move var@6
-assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7950,7 +8815,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: x := 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -7974,6 +8839,19 @@ About to evaluate statement: x := 0: i32
0: i32
[Debug]
+**About to evaluate statement**: [
+ px := &x;
+ var@4 := copy x;
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -7989,17 +8867,14 @@ About to evaluate statement: x := 0: i32
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: px := &x
-var@4 := copy x
-y := move copy_int(move var@4)
-var@7 := copy *(px)
-var@8 := copy y
-var@6 := move var@7 == move var@8
-var@5 := ¬ move var@6
-assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ px := &x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8015,9 +8890,21 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: px := &x
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x;
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8033,16 +8920,14 @@ About to evaluate statement: px := &x
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@4 := copy x
-y := move copy_int(move var@4)
-var@7 := copy *(px)
-var@8 := copy y
-var@6 := move var@7 == move var@8
-var@5 := ¬ move var@6
-assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8058,7 +8943,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@4 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -8084,6 +8969,17 @@ copy x
[Debug] Value to copy:
@shared_loan({0}, 0: i32)
[Debug]
+**About to evaluate statement**: [
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8099,15 +8995,14 @@ copy x
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: y := move copy_int(move var@4)
-var@7 := copy *(px)
-var@8 := copy y
-var@6 := move var@7 == move var@8
-var@5 := ¬ move var@6
-assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ y := move copy_int(move var@4)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8123,7 +9018,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: y := move copy_int(move var@4)
+
[Debug] eval_operand:
- ctx:
@@ -8149,6 +9044,12 @@ move var@4
[Debug] Value to move:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@0 := copy x;
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -8170,10 +9071,14 @@ move var@4
x -> 0: i32 ;
}
-About to evaluate statement: var@0 := copy x
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@0 := copy x
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -8195,7 +9100,7 @@ return
x -> 0: i32 ;
}
-About to evaluate statement: var@0 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -8227,6 +9132,11 @@ copy x
[Debug] Value to copy:
0: i32
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -8248,7 +9158,7 @@ copy x
x -> 0: i32 ;
}
-About to evaluate statement: return
+
[Debug] ctx_pop_frame:
# 2 frame(s)
@@ -8326,6 +9236,16 @@ move var@0
[Debug] Value to move:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8341,14 +9261,14 @@ move var@0
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@7 := copy *(px)
-var@8 := copy y
-var@6 := move var@7 == move var@8
-var@5 := ¬ move var@6
-assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := copy *(px)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8364,7 +9284,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@7 := copy *(px)
+
[Debug] eval_operand:
- ctx:
@@ -8390,6 +9310,15 @@ copy *(px)
[Debug] Value to copy:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8405,13 +9334,14 @@ copy *(px)
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := copy y
-var@6 := move var@7 == move var@8
-var@5 := ¬ move var@6
-assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := copy y
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8427,7 +9357,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := copy y
+
[Debug] eval_operand:
- ctx:
@@ -8453,6 +9383,14 @@ copy y
[Debug] Value to copy:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8468,12 +9406,14 @@ copy y
var@8 -> 0: i32 ;
}
-About to evaluate statement: var@6 := move var@7 == move var@8
-var@5 := ¬ move var@6
-assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := move var@7 == move var@8
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8489,7 +9429,7 @@ return
var@8 -> 0: i32 ;
}
-About to evaluate statement: var@6 := move var@7 == move var@8
+
[Debug] eval_operand:
- ctx:
@@ -8538,6 +9478,13 @@ move var@8
[Debug] Value to move:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8553,11 +9500,14 @@ move var@8
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@5 := ¬ move var@6
-assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := ¬ move var@6
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8573,7 +9523,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: var@5 := ¬ move var@6
+
[Debug] eval_operand:
- ctx:
@@ -8599,6 +9549,12 @@ move var@6
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8614,10 +9570,14 @@ true
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@5)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@5)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8633,7 +9593,7 @@ return
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@5)
+
[Debug] eval_operand:
- ctx:
@@ -8659,6 +9619,11 @@ move var@5
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8674,10 +9639,26 @@ false
var@8 -> ⊥ : i32 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: test_is_cons
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8692,20 +9673,14 @@ About to evaluate statement: return
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: set_discriminant(var@3, 1)
-var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
-(l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-var@7 := &l
-var@6 := copy var@7
-var@5 := move is_cons<i32>(move var@6)
-var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8720,9 +9695,24 @@ return
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: set_discriminant(var@3, 1)
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8737,19 +9727,14 @@ About to evaluate statement: set_discriminant(var@3, 1)
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
-(l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-var@7 := &l
-var@6 := copy var@7
-var@5 := move is_cons<i32>(move var@6)
-var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8764,7 +9749,7 @@ return
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+
[Debug] eval_non_local_function_call:
- fid:CfimAst.BoxNew
@@ -8894,6 +9879,20 @@ move @return
[Debug] Value to move:
@Box(test1::List::Nil)
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8908,18 +9907,14 @@ move @return
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-var@7 := &l
-var@6 := copy var@7
-var@5 := move is_cons<i32>(move var@6)
-var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8934,7 +9929,7 @@ return
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -8960,6 +9955,19 @@ About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
pe: (Expressions.Field ((Expressions.ProjAdt (1, (Some 0))), 0))
ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8974,17 +9982,14 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: (l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-var@7 := &l
-var@6 := copy var@7
-var@5 := move is_cons<i32>(move var@6)
-var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -8999,7 +10004,7 @@ return
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: (l as test1::List::Cons).1 := move var@2
+
[Debug] eval_operand:
- ctx:
@@ -9024,6 +10029,18 @@ move var@2
[Debug] Value to move:
@Box(test1::List::Nil)
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9038,16 +10055,14 @@ move var@2
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: set_discriminant(l, 0)
-var@7 := &l
-var@6 := copy var@7
-var@5 := move is_cons<i32>(move var@6)
-var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9062,9 +10077,20 @@ return
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: set_discriminant(l, 0)
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9079,15 +10105,14 @@ About to evaluate statement: set_discriminant(l, 0)
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: var@7 := &l
-var@6 := copy var@7
-var@5 := move is_cons<i32>(move var@6)
-var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := &l
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9102,9 +10127,19 @@ return
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: var@7 := &l
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9119,14 +10154,14 @@ About to evaluate statement: var@7 := &l
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: var@6 := copy var@7
-var@5 := move is_cons<i32>(move var@6)
-var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := copy var@7
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9141,7 +10176,7 @@ return
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: var@6 := copy var@7
+
[Debug] eval_operand:
- ctx:
@@ -9166,6 +10201,15 @@ copy var@7
[Debug] Value to copy:
⌊shared@0⌋
[Debug]
+**About to evaluate statement**: [
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9180,13 +10224,14 @@ copy var@7
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: var@5 := move is_cons<i32>(move var@6)
-var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := move is_cons<i32>(move var@6)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9201,7 +10246,7 @@ return
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: var@5 := move is_cons<i32>(move var@6)
+
[Debug] eval_operand:
- ctx:
@@ -9226,6 +10271,23 @@ move var@6
[Debug] Value to move:
⌊shared@1⌋
[Debug]
+**About to evaluate statement**: [
+ var@2 := discriminant(*(l));
+ switch (move var@2) {
+ 0: isize => {
+ var@0 := true
+ }
+ 1: isize => {
+ var@0 := false
+ }
+ _ => {
+ panic
+ }
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -9247,21 +10309,14 @@ move var@6
var@2 -> ⊥ : isize ;
}
-About to evaluate statement: var@2 := discriminant(*(l))
-switch (move var@2) {
- 0: isize => {
- var@0 := true
- }
- 1: isize => {
- var@0 := false
- }
- _ => {
- panic
- }
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := discriminant(*(l))
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -9283,9 +10338,25 @@ return
var@2 -> ⊥ : isize ;
}
-About to evaluate statement: var@2 := discriminant(*(l))
+
[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@0 := true
+ }
+ 1: isize => {
+ var@0 := false
+ }
+ _ => {
+ panic
+ }
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -9307,20 +10378,24 @@ About to evaluate statement: var@2 := discriminant(*(l))
var@2 -> 0: isize ;
}
-About to evaluate statement: switch (move var@2) {
- 0: isize => {
- var@0 := true
- }
- 1: isize => {
- var@0 := false
- }
- _ => {
- panic
- }
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@0 := true
+ }
+ 1: isize => {
+ var@0 := false
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -9342,17 +10417,7 @@ return
var@2 -> 0: isize ;
}
-About to evaluate statement: switch (move var@2) {
- 0: isize => {
- var@0 := true
- }
- 1: isize => {
- var@0 := false
- }
- _ => {
- panic
- }
-}
+
[Debug] eval_operand:
- ctx:
@@ -9384,6 +10449,11 @@ move var@2
[Debug] Value to move:
0: isize
[Debug]
+**About to evaluate statement**: [
+ var@0 := true
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -9405,7 +10475,7 @@ move var@2
var@2 -> ⊥ : isize ;
}
-About to evaluate statement: var@0 := true
+
[Debug] eval_operand:
- ctx:
@@ -9435,6 +10505,11 @@ About to evaluate statement: var@0 := true
true
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -9456,7 +10531,7 @@ true
var@2 -> ⊥ : isize ;
}
-About to evaluate statement: return
+
[Debug] ctx_pop_frame:
# 2 frame(s)
@@ -9535,6 +10610,14 @@ move var@0
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9549,12 +10632,14 @@ true
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: var@4 := ¬ move var@5
-assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := ¬ move var@5
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9569,7 +10654,7 @@ return
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: var@4 := ¬ move var@5
+
[Debug] eval_operand:
- ctx:
@@ -9594,6 +10679,13 @@ move var@5
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9608,11 +10700,14 @@ true
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: assert(¬move var@4)
-drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@4)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9627,7 +10722,7 @@ return
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: assert(¬move var@4)
+
[Debug] eval_operand:
- ctx:
@@ -9652,6 +10747,12 @@ move var@4
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ drop(l);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9666,10 +10767,14 @@ false
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: drop(l)
-return
+
[Debug]
+**About to evaluate statement**: [
+ drop(l)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9684,10 +10789,15 @@ return
var@7 -> ⌊shared@0⌋ ;
}
-About to evaluate statement: drop(l)
+
[Debug] drop_value: place: l
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9702,10 +10812,29 @@ About to evaluate statement: drop(l)
var@7 -> ⊥ : &'_ (test1::List<i32>) ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: test_split_list
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9723,23 +10852,14 @@ About to evaluate statement: return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: set_discriminant(var@3, 1)
-var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
-(l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-var@7 := move l
-var@6 := move split_list<i32>(move var@7)
-hd := copy (var@6).0
-tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9757,9 +10877,27 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: set_discriminant(var@3, 1)
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9777,22 +10915,14 @@ About to evaluate statement: set_discriminant(var@3, 1)
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
-(l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-var@7 := move l
-var@6 := move split_list<i32>(move var@7)
-hd := copy (var@6).0
-tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9810,7 +10940,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+
[Debug] eval_non_local_function_call:
- fid:CfimAst.BoxNew
@@ -9955,6 +11085,23 @@ move @return
[Debug] Value to move:
@Box(test1::List::Nil)
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -9972,21 +11119,14 @@ move @return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
-(l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-var@7 := move l
-var@6 := move split_list<i32>(move var@7)
-hd := copy (var@6).0
-tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10004,7 +11144,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -10033,6 +11173,22 @@ About to evaluate statement: (l as test1::List::Cons).0 := 0: i32
pe: (Expressions.Field ((Expressions.ProjAdt (1, (Some 0))), 0))
ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10050,20 +11206,14 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: (l as test1::List::Cons).1 := move var@2
-set_discriminant(l, 0)
-var@7 := move l
-var@6 := move split_list<i32>(move var@7)
-hd := copy (var@6).0
-tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10081,7 +11231,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: (l as test1::List::Cons).1 := move var@2
+
[Debug] eval_operand:
- ctx:
@@ -10109,6 +11259,21 @@ move var@2
[Debug] Value to move:
@Box(test1::List::Nil)
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10126,19 +11291,14 @@ move var@2
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: set_discriminant(l, 0)
-var@7 := move l
-var@6 := move split_list<i32>(move var@7)
-hd := copy (var@6).0
-tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10156,9 +11316,23 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: set_discriminant(l, 0)
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10176,18 +11350,14 @@ About to evaluate statement: set_discriminant(l, 0)
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@7 := move l
-var@6 := move split_list<i32>(move var@7)
-hd := copy (var@6).0
-tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := move l
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10205,7 +11375,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@7 := move l
+
[Debug] eval_operand:
- ctx:
@@ -10233,6 +11403,19 @@ move l
[Debug] Value to move:
test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }
[Debug]
+**About to evaluate statement**: [
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10250,17 +11433,14 @@ test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := move split_list<i32>(move var@7)
-hd := copy (var@6).0
-tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := move split_list<i32>(move var@7)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -10278,7 +11458,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := move split_list<i32>(move var@7)
+
[Debug] eval_operand:
- ctx:
@@ -10306,6 +11486,32 @@ move var@7
[Debug] Value to move:
test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }
[Debug]
+**About to evaluate statement**: [
+ var@8 := false;
+ var@7 := false;
+ var@7 := true;
+ var@8 := true;
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10338,30 +11544,14 @@ test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@8 := false
-var@7 := false
-var@7 := true
-var@8 := true
-var@2 := discriminant(l)
-switch (move var@2) {
- 0: isize => {
- var@8 := false
- hd := move (l as test1::List::Cons).0
- var@7 := false
- tl := move (l as test1::List::Cons).1
- var@5 := move hd
- var@6 := move deref_box(tl)
- (var@0).0 := move var@5
- (var@0).1 := move var@6
- var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
- return
- }
- _ => {
- panic
- }
-}
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := false
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10394,7 +11584,7 @@ switch (move var@2) {
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@8 := false
+
[Debug] eval_operand:
- ctx:
@@ -10435,6 +11625,31 @@ About to evaluate statement: var@8 := false
false
[Debug]
+**About to evaluate statement**: [
+ var@7 := false;
+ var@7 := true;
+ var@8 := true;
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10467,29 +11682,14 @@ false
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@7 := false
-var@7 := true
-var@8 := true
-var@2 := discriminant(l)
-switch (move var@2) {
- 0: isize => {
- var@8 := false
- hd := move (l as test1::List::Cons).0
- var@7 := false
- tl := move (l as test1::List::Cons).1
- var@5 := move hd
- var@6 := move deref_box(tl)
- (var@0).0 := move var@5
- (var@0).1 := move var@6
- var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
- return
- }
- _ => {
- panic
- }
-}
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := false
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10522,7 +11722,7 @@ switch (move var@2) {
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@7 := false
+
[Debug] eval_operand:
- ctx:
@@ -10563,6 +11763,30 @@ About to evaluate statement: var@7 := false
false
[Debug]
+**About to evaluate statement**: [
+ var@7 := true;
+ var@8 := true;
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10595,28 +11819,14 @@ false
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@7 := true
-var@8 := true
-var@2 := discriminant(l)
-switch (move var@2) {
- 0: isize => {
- var@8 := false
- hd := move (l as test1::List::Cons).0
- var@7 := false
- tl := move (l as test1::List::Cons).1
- var@5 := move hd
- var@6 := move deref_box(tl)
- (var@0).0 := move var@5
- (var@0).1 := move var@6
- var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
- return
- }
- _ => {
- panic
- }
-}
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := true
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10649,7 +11859,7 @@ switch (move var@2) {
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@7 := true
+
[Debug] eval_operand:
- ctx:
@@ -10690,6 +11900,29 @@ About to evaluate statement: var@7 := true
true
[Debug]
+**About to evaluate statement**: [
+ var@8 := true;
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10722,27 +11955,14 @@ true
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@8 := true
-var@2 := discriminant(l)
-switch (move var@2) {
- 0: isize => {
- var@8 := false
- hd := move (l as test1::List::Cons).0
- var@7 := false
- tl := move (l as test1::List::Cons).1
- var@5 := move hd
- var@6 := move deref_box(tl)
- (var@0).0 := move var@5
- (var@0).1 := move var@6
- var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
- return
- }
- _ => {
- panic
- }
-}
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := true
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10775,7 +11995,7 @@ switch (move var@2) {
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@8 := true
+
[Debug] eval_operand:
- ctx:
@@ -10816,6 +12036,28 @@ About to evaluate statement: var@8 := true
true
[Debug]
+**About to evaluate statement**: [
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10848,26 +12090,14 @@ true
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@2 := discriminant(l)
-switch (move var@2) {
- 0: isize => {
- var@8 := false
- hd := move (l as test1::List::Cons).0
- var@7 := false
- tl := move (l as test1::List::Cons).1
- var@5 := move hd
- var@6 := move deref_box(tl)
- (var@0).0 := move var@5
- (var@0).1 := move var@6
- var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
- return
- }
- _ => {
- panic
- }
-}
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := discriminant(l)
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10900,9 +12130,30 @@ switch (move var@2) {
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@2 := discriminant(l)
+
[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -10935,23 +12186,7 @@ About to evaluate statement: var@2 := discriminant(l)
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: switch (move var@2) {
- 0: isize => {
- var@8 := false
- hd := move (l as test1::List::Cons).0
- var@7 := false
- tl := move (l as test1::List::Cons).1
- var@5 := move hd
- var@6 := move deref_box(tl)
- (var@0).0 := move var@5
- (var@0).1 := move var@6
- var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
- return
- }
- _ => {
- panic
- }
-}
+
[Debug] eval_operand:
- ctx:
@@ -10994,6 +12229,20 @@ move var@2
[Debug] Value to move:
0: isize
[Debug]
+**About to evaluate statement**: [
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11026,18 +12275,14 @@ move var@2
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@8 := false
-hd := move (l as test1::List::Cons).0
-var@7 := false
-tl := move (l as test1::List::Cons).1
-var@5 := move hd
-var@6 := move deref_box(tl)
-(var@0).0 := move var@5
-(var@0).1 := move var@6
-var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := false
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11070,7 +12315,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@8 := false
+
[Debug] eval_operand:
- ctx:
@@ -11111,6 +12356,19 @@ About to evaluate statement: var@8 := false
false
[Debug]
+**About to evaluate statement**: [
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11143,17 +12401,14 @@ false
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: hd := move (l as test1::List::Cons).0
-var@7 := false
-tl := move (l as test1::List::Cons).1
-var@5 := move hd
-var@6 := move deref_box(tl)
-(var@0).0 := move var@5
-(var@0).1 := move var@6
-var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ hd := move (l as test1::List::Cons).0
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11186,7 +12441,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: hd := move (l as test1::List::Cons).0
+
[Debug] eval_operand:
- ctx:
@@ -11229,6 +12484,18 @@ move (l as test1::List::Cons).0
[Debug] Value to move:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11261,16 +12528,14 @@ move (l as test1::List::Cons).0
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@7 := false
-tl := move (l as test1::List::Cons).1
-var@5 := move hd
-var@6 := move deref_box(tl)
-(var@0).0 := move var@5
-(var@0).1 := move var@6
-var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := false
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11303,7 +12568,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@7 := false
+
[Debug] eval_operand:
- ctx:
@@ -11344,6 +12609,17 @@ About to evaluate statement: var@7 := false
false
[Debug]
+**About to evaluate statement**: [
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11376,15 +12652,14 @@ false
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: tl := move (l as test1::List::Cons).1
-var@5 := move hd
-var@6 := move deref_box(tl)
-(var@0).0 := move var@5
-(var@0).1 := move var@6
-var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ tl := move (l as test1::List::Cons).1
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11417,7 +12692,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: tl := move (l as test1::List::Cons).1
+
[Debug] eval_operand:
- ctx:
@@ -11460,6 +12735,16 @@ move (l as test1::List::Cons).1
[Debug] Value to move:
@Box(test1::List::Nil)
[Debug]
+**About to evaluate statement**: [
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11492,14 +12777,14 @@ move (l as test1::List::Cons).1
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@5 := move hd
-var@6 := move deref_box(tl)
-(var@0).0 := move var@5
-(var@0).1 := move var@6
-var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := move hd
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11532,7 +12817,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@5 := move hd
+
[Debug] eval_operand:
- ctx:
@@ -11575,6 +12860,15 @@ move hd
[Debug] Value to move:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11607,13 +12901,14 @@ move hd
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@6 := move deref_box(tl)
-(var@0).0 := move var@5
-(var@0).1 := move var@6
-var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := move deref_box(tl)
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11646,7 +12941,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@6 := move deref_box(tl)
+
[Debug] eval_operand:
- ctx:
@@ -11689,6 +12984,14 @@ move deref_box(tl)
[Debug] Value to move:
test1::List::Nil
[Debug]
+**About to evaluate statement**: [
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11721,12 +13024,14 @@ test1::List::Nil
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: (var@0).0 := move var@5
-(var@0).1 := move var@6
-var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (var@0).0 := move var@5
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11759,7 +13064,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: (var@0).0 := move var@5
+
[Debug] eval_operand:
- ctx:
@@ -11808,6 +13113,13 @@ ty: (Types.Adt (Types.Tuple, [],
(Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))]
))
[Debug]
+**About to evaluate statement**: [
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11840,11 +13152,14 @@ ty: (Types.Adt (Types.Tuple, [],
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: (var@0).1 := move var@6
-var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ (var@0).1 := move var@6
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11877,7 +13192,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: (var@0).1 := move var@6
+
[Debug] eval_operand:
- ctx:
@@ -11920,6 +13235,12 @@ move var@6
[Debug] Value to move:
test1::List::Nil
[Debug]
+**About to evaluate statement**: [
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11952,10 +13273,14 @@ test1::List::Nil
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -11988,7 +13313,7 @@ return
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: var@9 := move alloc::alloc::box_free<test1::List<i32>>(move tl)
+
[Debug] eval_non_local_function_call:
- fid:CfimAst.BoxFree
@@ -11997,6 +13322,11 @@ About to evaluate statement: var@9 := move alloc::alloc::box_free<test1::List<i3
- dest: var@9
[Debug] drop_value: place: tl
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -12029,7 +13359,7 @@ About to evaluate statement: var@9 := move alloc::alloc::box_free<test1::List<i3
var@10 -> ⊥ : isize ;
}
-About to evaluate statement: return
+
[Debug] ctx_pop_frame:
# 2 frame(s)
@@ -12149,6 +13479,18 @@ move var@0
[Debug] Value to move:
(0: i32, test1::List::Nil)
[Debug]
+**About to evaluate statement**: [
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12166,16 +13508,14 @@ move var@0
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: hd := copy (var@6).0
-tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ hd := copy (var@6).0
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12193,7 +13533,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: hd := copy (var@6).0
+
[Debug] eval_operand:
- ctx:
@@ -12221,6 +13561,17 @@ copy (var@6).0
[Debug] Value to copy:
0: i32
[Debug]
+**About to evaluate statement**: [
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12238,15 +13589,14 @@ copy (var@6).0
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: tl := move (var@6).1
-var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ tl := move (var@6).1
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12264,7 +13614,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: tl := move (var@6).1
+
[Debug] eval_operand:
- ctx:
@@ -12292,6 +13642,16 @@ move (var@6).1
[Debug] Value to move:
test1::List::Nil
[Debug]
+**About to evaluate statement**: [
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12309,14 +13669,14 @@ test1::List::Nil
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@10 := copy hd
-var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@10 := copy hd
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12334,7 +13694,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@10 := copy hd
+
[Debug] eval_operand:
- ctx:
@@ -12362,6 +13722,15 @@ copy hd
[Debug] Value to copy:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12379,13 +13748,14 @@ copy hd
var@10 -> 0: i32 ;
}
-About to evaluate statement: var@9 := move var@10 == 0: i32
-var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@9 := move var@10 == 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12403,7 +13773,7 @@ return
var@10 -> 0: i32 ;
}
-About to evaluate statement: var@9 := move var@10 == 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -12454,6 +13824,14 @@ move var@10
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12471,12 +13849,14 @@ move var@10
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := ¬ move var@9
-assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := ¬ move var@9
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12494,7 +13874,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := ¬ move var@9
+
[Debug] eval_operand:
- ctx:
@@ -12522,6 +13902,13 @@ move var@9
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12539,11 +13926,14 @@ true
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@8)
-drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@8)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12561,7 +13951,7 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@8)
+
[Debug] eval_operand:
- ctx:
@@ -12589,6 +13979,12 @@ move var@8
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ drop(tl);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12606,10 +14002,14 @@ false
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: drop(tl)
-return
+
[Debug]
+**About to evaluate statement**: [
+ drop(tl)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12627,10 +14027,15 @@ return
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: drop(tl)
+
[Debug] drop_value: place: tl
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12648,10 +14053,36 @@ About to evaluate statement: drop(tl)
var@10 -> ⊥ : i32 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: get_elem_test
[Debug]
+**About to evaluate statement**: [
+ x := 0: i32;
+ y := 0: i32;
+ var@5 := &mut x;
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12677,30 +14108,14 @@ About to evaluate statement: return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: x := 0: i32
-y := 0: i32
-var@5 := &mut x
-var@4 := &two-phase *(var@5)
-var@7 := &mut y
-var@6 := &two-phase *(var@7)
-z := move get_elem<i32>(true, move var@4, move var@6)
-var@8 := copy *(z)
-*(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12726,7 +14141,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: x := 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -12760,6 +14175,31 @@ About to evaluate statement: x := 0: i32
0: i32
[Debug]
+**About to evaluate statement**: [
+ y := 0: i32;
+ var@5 := &mut x;
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12785,29 +14225,14 @@ About to evaluate statement: x := 0: i32
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: y := 0: i32
-var@5 := &mut x
-var@4 := &two-phase *(var@5)
-var@7 := &mut y
-var@6 := &two-phase *(var@7)
-z := move get_elem<i32>(true, move var@4, move var@6)
-var@8 := copy *(z)
-*(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ y := 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12833,7 +14258,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: y := 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -12867,6 +14292,30 @@ About to evaluate statement: y := 0: i32
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@5 := &mut x;
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12892,28 +14341,14 @@ About to evaluate statement: y := 0: i32
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@5 := &mut x
-var@4 := &two-phase *(var@5)
-var@7 := &mut y
-var@6 := &two-phase *(var@7)
-z := move get_elem<i32>(true, move var@4, move var@6)
-var@8 := copy *(z)
-*(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@5 := &mut x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12939,9 +14374,32 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@5 := &mut x
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -12967,27 +14425,14 @@ About to evaluate statement: var@5 := &mut x
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@4 := &two-phase *(var@5)
-var@7 := &mut y
-var@6 := &two-phase *(var@7)
-z := move get_elem<i32>(true, move var@4, move var@6)
-var@8 := copy *(z)
-*(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := &two-phase *(var@5)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13013,9 +14458,31 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@4 := &two-phase *(var@5)
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13041,26 +14508,14 @@ About to evaluate statement: var@4 := &two-phase *(var@5)
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@7 := &mut y
-var@6 := &two-phase *(var@7)
-z := move get_elem<i32>(true, move var@4, move var@6)
-var@8 := copy *(z)
-*(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := &mut y
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13086,9 +14541,30 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@7 := &mut y
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13114,25 +14590,14 @@ About to evaluate statement: var@7 := &mut y
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := &two-phase *(var@7)
-z := move get_elem<i32>(true, move var@4, move var@6)
-var@8 := copy *(z)
-*(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@6 := &two-phase *(var@7)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13158,9 +14623,29 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@6 := &two-phase *(var@7)
+
[Debug]
+**About to evaluate statement**: [
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13186,24 +14671,14 @@ About to evaluate statement: var@6 := &two-phase *(var@7)
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: z := move get_elem<i32>(true, move var@4, move var@6)
-var@8 := copy *(z)
-*(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ z := move get_elem<i32>(true, move var@4, move var@6)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13229,7 +14704,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: z := move get_elem<i32>(true, move var@4, move var@6)
+
[Debug] eval_operand:
- ctx:
@@ -13337,6 +14812,18 @@ move var@6
[Debug] Value to move:
&mut@3 (0: i32)
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy b;
+ if (move var@4) {
+ var@0 := &mut *(x)
+ }
+ else {
+ var@0 := move y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -13371,16 +14858,14 @@ move var@6
var@4 -> ⊥ : bool ;
}
-About to evaluate statement: var@4 := copy b
-if (move var@4) {
- var@0 := &mut *(x)
-}
-else {
- var@0 := move y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := copy b
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -13415,7 +14900,7 @@ return
var@4 -> ⊥ : bool ;
}
-About to evaluate statement: var@4 := copy b
+
[Debug] eval_operand:
- ctx:
@@ -13460,6 +14945,17 @@ copy b
[Debug] Value to copy:
true
[Debug]
+**About to evaluate statement**: [
+ if (move var@4) {
+ var@0 := &mut *(x)
+ }
+ else {
+ var@0 := move y
+ };
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -13494,15 +14990,19 @@ true
var@4 -> true ;
}
-About to evaluate statement: if (move var@4) {
- var@0 := &mut *(x)
-}
-else {
- var@0 := move y
-}
-return
+
[Debug]
+**About to evaluate statement**: [
+ if (move var@4) {
+ var@0 := &mut *(x)
+ }
+ else {
+ var@0 := move y
+ }
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -13537,12 +15037,7 @@ return
var@4 -> true ;
}
-About to evaluate statement: if (move var@4) {
- var@0 := &mut *(x)
-}
-else {
- var@0 := move y
-}
+
[Debug] eval_operand:
- ctx:
@@ -13587,6 +15082,11 @@ move var@4
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(x)
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -13621,9 +15121,14 @@ true
var@4 -> ⊥ : bool ;
}
-About to evaluate statement: var@0 := &mut *(x)
+
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -13658,7 +15163,7 @@ About to evaluate statement: var@0 := &mut *(x)
var@4 -> ⊥ : bool ;
}
-About to evaluate statement: return
+
[Debug] ctx_pop_frame:
# 2 frame(s)
@@ -13778,6 +15283,25 @@ move var@0
[Debug] Value to move:
&mut@4 (0: i32)
[Debug]
+**About to evaluate statement**: [
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13803,23 +15327,14 @@ move var@0
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := copy *(z)
-*(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@8 := copy *(z)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13845,7 +15360,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@8 := copy *(z)
+
[Debug] eval_operand:
- ctx:
@@ -13881,6 +15396,24 @@ copy *(z)
[Debug] Value to copy:
0: i32
[Debug]
+**About to evaluate statement**: [
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13906,22 +15439,14 @@ copy *(z)
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: *(z) := copy var@8 + 1: i32
-var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ *(z) := copy var@8 + 1: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -13947,7 +15472,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: *(z) := copy var@8 + 1: i32
+
[Debug] eval_operand:
- ctx:
@@ -14014,6 +15539,23 @@ copy var@8
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14039,21 +15581,14 @@ copy var@8
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@12 := copy *(z)
-var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@12 := copy *(z)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14079,7 +15614,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@12 := copy *(z)
+
[Debug] eval_operand:
- ctx:
@@ -14115,6 +15650,22 @@ copy *(z)
[Debug] Value to copy:
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14140,20 +15691,14 @@ copy *(z)
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@11 := move var@12 == 1: i32
-var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@11 := move var@12 == 1: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14179,7 +15724,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@11 := move var@12 == 1: i32
+
[Debug] eval_operand:
- ctx:
@@ -14246,6 +15791,21 @@ move var@12
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14271,19 +15831,14 @@ move var@12
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@10 := ¬ move var@11
-assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@10 := ¬ move var@11
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14309,7 +15864,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@10 := ¬ move var@11
+
[Debug] eval_operand:
- ctx:
@@ -14345,6 +15900,20 @@ move var@11
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14370,18 +15939,14 @@ true
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@10)
-var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@10)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14407,7 +15972,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@10)
+
[Debug] eval_operand:
- ctx:
@@ -14443,6 +16008,19 @@ move var@10
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14468,17 +16046,14 @@ false
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@15 := copy x
-var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@15 := copy x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14504,7 +16079,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@15 := copy x
+
[Debug] eval_operand:
- ctx:
@@ -14540,6 +16115,18 @@ copy x
[Debug] Value to copy:
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14565,16 +16152,14 @@ copy x
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@14 := move var@15 == 1: i32
-var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@14 := move var@15 == 1: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14600,7 +16185,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@14 := move var@15 == 1: i32
+
[Debug] eval_operand:
- ctx:
@@ -14667,6 +16252,17 @@ move var@15
1: i32
[Debug]
+**About to evaluate statement**: [
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14692,15 +16288,14 @@ move var@15
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@13 := ¬ move var@14
-assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@13 := ¬ move var@14
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14726,7 +16321,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@13 := ¬ move var@14
+
[Debug] eval_operand:
- ctx:
@@ -14762,6 +16357,16 @@ move var@14
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14787,14 +16392,14 @@ true
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@13)
-var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@13)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14820,7 +16425,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@13)
+
[Debug] eval_operand:
- ctx:
@@ -14856,6 +16461,15 @@ move var@13
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14881,13 +16495,14 @@ false
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@18 := copy y
-var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@18 := copy y
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14913,7 +16528,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@18 := copy y
+
[Debug] eval_operand:
- ctx:
@@ -14949,6 +16564,14 @@ copy y
[Debug] Value to copy:
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -14974,12 +16597,14 @@ copy y
var@18 -> 0: i32 ;
}
-About to evaluate statement: var@17 := move var@18 == 0: i32
-var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@17 := move var@18 == 0: i32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15005,7 +16630,7 @@ return
var@18 -> 0: i32 ;
}
-About to evaluate statement: var@17 := move var@18 == 0: i32
+
[Debug] eval_operand:
- ctx:
@@ -15072,6 +16697,13 @@ move var@18
0: i32
[Debug]
+**About to evaluate statement**: [
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15097,11 +16729,14 @@ move var@18
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@16 := ¬ move var@17
-assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@16 := ¬ move var@17
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15127,7 +16762,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: var@16 := ¬ move var@17
+
[Debug] eval_operand:
- ctx:
@@ -15163,6 +16798,12 @@ move var@17
[Debug] Value to move:
true
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15188,10 +16829,14 @@ true
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@16)
-return
+
[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@16)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15217,7 +16862,7 @@ return
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: assert(¬move var@16)
+
[Debug] eval_operand:
- ctx:
@@ -15253,6 +16898,11 @@ move var@16
[Debug] Value to move:
false
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15278,10 +16928,28 @@ false
var@18 -> ⊥ : i32 ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: id_mut_pair_test1
[Debug]
+**About to evaluate statement**: [
+ x := 0: u32;
+ px := &mut x;
+ var@4 := move px;
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15299,22 +16967,14 @@ About to evaluate statement: return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: x := 0: u32
-px := &mut x
-var@4 := move px
-(p).0 := move var@4
-(p).1 := 1: u32
-pp0 := &mut p
-var@7 := &two-phase *(pp0)
-pp1 := move id_mut_pair<u32>(move var@7)
-y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ x := 0: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15332,7 +16992,7 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: x := 0: u32
+
[Debug] eval_operand:
- ctx:
@@ -15358,6 +17018,23 @@ About to evaluate statement: x := 0: u32
0: u32
[Debug]
+**About to evaluate statement**: [
+ px := &mut x;
+ var@4 := move px;
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15375,21 +17052,14 @@ About to evaluate statement: x := 0: u32
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: px := &mut x
-var@4 := move px
-(p).0 := move var@4
-(p).1 := 1: u32
-pp0 := &mut p
-var@7 := &two-phase *(pp0)
-pp1 := move id_mut_pair<u32>(move var@7)
-y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ px := &mut x
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15407,9 +17077,25 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: px := &mut x
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := move px;
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15427,20 +17113,14 @@ About to evaluate statement: px := &mut x
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: var@4 := move px
-(p).0 := move var@4
-(p).1 := 1: u32
-pp0 := &mut p
-var@7 := &two-phase *(pp0)
-pp1 := move id_mut_pair<u32>(move var@7)
-y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@4 := move px
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15458,7 +17138,7 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: var@4 := move px
+
[Debug] eval_operand:
- ctx:
@@ -15486,6 +17166,21 @@ move px
[Debug] Value to move:
&mut@0 (0: u32)
[Debug]
+**About to evaluate statement**: [
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15503,19 +17198,14 @@ move px
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: (p).0 := move var@4
-(p).1 := 1: u32
-pp0 := &mut p
-var@7 := &two-phase *(pp0)
-pp1 := move id_mut_pair<u32>(move var@7)
-y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ (p).0 := move var@4
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15533,7 +17223,7 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: (p).0 := move var@4
+
[Debug] eval_operand:
- ctx:
@@ -15567,6 +17257,20 @@ ty: (Types.Adt (Types.Tuple, [],
(Types.Integer Types.U32)]
))
[Debug]
+**About to evaluate statement**: [
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15584,18 +17288,14 @@ ty: (Types.Adt (Types.Tuple, [],
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: (p).1 := 1: u32
-pp0 := &mut p
-var@7 := &two-phase *(pp0)
-pp1 := move id_mut_pair<u32>(move var@7)
-y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ (p).1 := 1: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15613,7 +17313,7 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: (p).1 := 1: u32
+
[Debug] eval_operand:
- ctx:
@@ -15639,6 +17339,19 @@ About to evaluate statement: (p).1 := 1: u32
1: u32
[Debug]
+**About to evaluate statement**: [
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15656,17 +17369,14 @@ About to evaluate statement: (p).1 := 1: u32
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: pp0 := &mut p
-var@7 := &two-phase *(pp0)
-pp1 := move id_mut_pair<u32>(move var@7)
-y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ pp0 := &mut p
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15684,9 +17394,21 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: pp0 := &mut p
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15704,16 +17426,14 @@ About to evaluate statement: pp0 := &mut p
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: var@7 := &two-phase *(pp0)
-pp1 := move id_mut_pair<u32>(move var@7)
-y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@7 := &two-phase *(pp0)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15731,9 +17451,20 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: var@7 := &two-phase *(pp0)
+
[Debug]
+**About to evaluate statement**: [
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15751,15 +17482,14 @@ About to evaluate statement: var@7 := &two-phase *(pp0)
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: pp1 := move id_mut_pair<u32>(move var@7)
-y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ pp1 := move id_mut_pair<u32>(move var@7)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -15777,7 +17507,7 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: pp1 := move id_mut_pair<u32>(move var@7)
+
[Debug] eval_operand:
- ctx:
@@ -15832,6 +17562,13 @@ move var@7
[Debug] Value to move:
&mut@2 ((&mut@0 (0: u32), 1: u32))
[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -15856,11 +17593,14 @@ move var@7
var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
}
-About to evaluate statement: var@2 := &mut *(x)
-var@0 := &mut *(var@2)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x)
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -15885,9 +17625,15 @@ return
var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
}
-About to evaluate statement: var@2 := &mut *(x)
+
[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -15912,10 +17658,14 @@ About to evaluate statement: var@2 := &mut *(x)
var@2 -> &mut@3 ((&mut@0 (0: u32), 1: u32)) ;
}
-About to evaluate statement: var@0 := &mut *(var@2)
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2)
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -15940,9 +17690,14 @@ return
var@2 -> &mut@3 ((&mut@0 (0: u32), 1: u32)) ;
}
-About to evaluate statement: var@0 := &mut *(var@2)
+
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 2 frame(s)
# Frame 0:
@@ -15967,7 +17722,7 @@ About to evaluate statement: var@0 := &mut *(var@2)
var@2 -> &mut@3 (⌊mut@4⌋) ;
}
-About to evaluate statement: return
+
[Debug] ctx_pop_frame:
# 2 frame(s)
@@ -16055,6 +17810,16 @@ move var@0
[Debug] Value to move:
&mut@4 ((&mut@0 (0: u32), 1: u32))
[Debug]
+**About to evaluate statement**: [
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16072,14 +17837,14 @@ move var@0
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: y := 2: u32
-var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ y := 2: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16097,7 +17862,7 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: y := 2: u32
+
[Debug] eval_operand:
- ctx:
@@ -16123,6 +17888,15 @@ About to evaluate statement: y := 2: u32
2: u32
[Debug]
+**About to evaluate statement**: [
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16140,13 +17914,14 @@ About to evaluate statement: y := 2: u32
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: var@10 := &mut y
-var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@10 := &mut y
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16164,9 +17939,17 @@ return
var@10 -> ⊥ : &'_ mut (u32) ;
}
-About to evaluate statement: var@10 := &mut y
+
[Debug]
+**About to evaluate statement**: [
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16184,12 +17967,14 @@ About to evaluate statement: var@10 := &mut y
var@10 -> &mut@5 (2: u32) ;
}
-About to evaluate statement: var@9 := &mut *(var@10)
-*((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@9 := &mut *(var@10)
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16207,9 +17992,16 @@ return
var@10 -> &mut@5 (2: u32) ;
}
-About to evaluate statement: var@9 := &mut *(var@10)
+
[Debug]
+**About to evaluate statement**: [
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16227,11 +18019,14 @@ About to evaluate statement: var@9 := &mut *(var@10)
var@10 -> &mut@5 (⌊mut@6⌋) ;
}
-About to evaluate statement: *((pp1).0) := move var@9
-*((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ *((pp1).0) := move var@9
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16249,7 +18044,7 @@ return
var@10 -> &mut@5 (⌊mut@6⌋) ;
}
-About to evaluate statement: *((pp1).0) := move var@9
+
[Debug] eval_operand:
- ctx:
@@ -16277,6 +18072,12 @@ move var@9
[Debug] Value to move:
&mut@6 (2: u32)
[Debug]
+**About to evaluate statement**: [
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16294,10 +18095,14 @@ move var@9
var@10 -> &mut@5 (⌊mut@6⌋) ;
}
-About to evaluate statement: *((pp1).1) := 3: u32
-return
+
[Debug]
+**About to evaluate statement**: [
+ *((pp1).1) := 3: u32
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16315,7 +18120,7 @@ return
var@10 -> &mut@5 (⌊mut@6⌋) ;
}
-About to evaluate statement: *((pp1).1) := 3: u32
+
[Debug] eval_operand:
- ctx:
@@ -16341,6 +18146,11 @@ About to evaluate statement: *((pp1).1) := 3: u32
3: u32
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16358,10 +18168,16689 @@ About to evaluate statement: *((pp1).1) := 3: u32
var@10 -> &mut@5 (⌊mut@6⌋) ;
}
-About to evaluate statement: return
+
[Debug] test_unit_function: test_char
[Debug]
+**About to evaluate statement**: [
+ var@0 := a;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : char ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := a
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : char ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : char ;
+}
+
+
+- op:
+a
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> a ;
+}
+
+
+
+[Debug] test_function_symbolic: add_test
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy x;
+ var@4 := copy y;
+ var@0 := copy var@3 + copy var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy y;
+ var@0 := copy var@3 + copy var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy var@3 + copy var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy var@3 + copy var@4
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+- op:
+copy var@3
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+- op:
+copy var@4
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@2 : u32) ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug] test_function_symbolic: subs_test
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy x;
+ var@4 := copy y;
+ var@0 := copy var@3 - copy var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy y;
+ var@0 := copy var@3 - copy var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy var@3 - copy var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy var@3 - copy var@4
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+- op:
+copy var@3
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+- op:
+copy var@4
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@2 : u32) ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : (u32, bool) ;
+}
+
+
+
+[Debug] test_function_symbolic: div_test
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy x;
+ var@4 := copy y;
+ var@0 := move var@3 / move var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy y;
+ var@0 := move var@3 / move var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@0 := move var@3 / move var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := move var@3 / move var@4
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+- op:
+move var@3
+
+[Debug] Value to move:
+proj_comp {} (s@0 : u32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@2 : u32) ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug] test_function_symbolic: rem_test
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy x;
+ var@4 := copy y;
+ var@0 := move var@3 % move var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy y;
+ var@0 := move var@3 % move var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@0 := move var@3 % move var@4;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := move var@3 % move var@4
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@0 : u32) ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+- op:
+move var@3
+
+[Debug] Value to move:
+proj_comp {} (s@0 : u32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@1 : u32) ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@2 : u32) ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : bool ;
+}
+
+
+
+[Debug] test_function_symbolic: test2
+[Debug]
+**About to evaluate statement**: [
+ x := 23: u32;
+ y := 44: u32;
+ z := 67: u32;
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := 23: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+- op:
+23: u32
+
+[Debug]
+**About to evaluate statement**: [
+ y := 44: u32;
+ z := 67: u32;
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ y := 44: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+- op:
+44: u32
+
+[Debug]
+**About to evaluate statement**: [
+ z := 67: u32;
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ z := 67: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> ⊥ : u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+- op:
+67: u32
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := copy x;
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+23: u32
+[Debug]
+**About to evaluate statement**: [
+ (p).x := move var@5;
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> 23: u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (p).x := move var@5
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> 23: u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> ⊥ : test1::Pair<u32, u32> ;
+ var@5 -> 23: u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+- op:
+move var@5
+
+[Debug] Value to move:
+23: u32
+[Debug] expand_bottom_value_from_projection:
+pe: (Expressions.Field ((Expressions.ProjAdt (0, None)), 0))
+ty: (Types.Adt ((Types.AdtId 0), [],
+ [(Types.Integer Types.U32); (Types.Integer Types.U32)]))
+[Debug]
+**About to evaluate statement**: [
+ (p).y := 67: u32;
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = ⊥ : u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (p).y := 67: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = ⊥ : u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = ⊥ : u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+- op:
+67: u32
+
+[Debug]
+**About to evaluate statement**: [
+ (s as test1::Sum::Right).0 := true;
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (s as test1::Sum::Right).0 := true
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> ⊥ : test1::Sum<u32, bool> ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+- op:
+true
+
+[Debug] expand_bottom_value_from_projection:
+pe: (Expressions.Field ((Expressions.ProjAdt (6, (Some 1))), 0))
+ty: (Types.Adt ((Types.AdtId 6), [], [(Types.Integer Types.U32); Types.Bool]))
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(s, 1);
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(s, 1)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (o as test1::One::One).0 := 3: u64;
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (o as test1::One::One).0 := 3: u64
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> ⊥ : test1::One<u64> ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+- op:
+3: u64
+
+[Debug] expand_bottom_value_from_projection:
+pe: (Expressions.Field ((Expressions.ProjAdt (2, (Some 0))), 0))
+ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)]))
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(o, 0);
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> test1::One::One { 0 = 3: u64; } ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(o, 0)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> test1::One::One { 0 = 3: u64; } ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(e0, 0);
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> test1::One::One { 0 = 3: u64; } ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(e0, 0)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> test1::One::One { 0 = 3: u64; } ;
+ e0 -> ⊥ : test1::EmptyEnum ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(enum0, 0);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> test1::One::One { 0 = 3: u64; } ;
+ e0 -> test1::EmptyEnum::Empty ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(enum0, 0)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> test1::One::One { 0 = 3: u64; } ;
+ e0 -> test1::EmptyEnum::Empty ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> ⊥ : test1::Enum ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 23: u32 ;
+ y -> 44: u32 ;
+ z -> 67: u32 ;
+ p -> test1::Pair { x = 23: u32; y = 67: u32; } ;
+ var@5 -> ⊥ : u32 ;
+ s -> test1::Sum::Right { 0 = true; } ;
+ o -> test1::One::One { 0 = 3: u64; } ;
+ e0 -> test1::EmptyEnum::Empty ;
+ e1 -> ⊥ : test1::EmptyEnum ;
+ enum0 -> test1::Enum::Variant1 ;
+}
+
+
+
+[Debug] test_function_symbolic: get_max
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x;
+ var@5 := copy y;
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y;
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@3 := move var@4 >= move var@5;
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@3 := move var@4 >= move var@5
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+proj_comp {} (s@0 : u32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+}
+
+
+- op:
+move var@5
+
+[Debug] Value to move:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@2 : bool) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ if (move var@3) {
+ var@0 := copy x
+ }
+ else {
+ var@0 := copy y
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> proj_comp {} (s@2 : bool) ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> true ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+- op:
+move var@3
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> false ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+- op:
+move var@3
+
+[Debug] Value to move:
+false
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : u32 ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@0 : u32) ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@1 : u32) ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ var@3 -> ⊥ : bool ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] test_function_symbolic: test3
+[Debug]
+**About to evaluate statement**: [
+ x := move get_max(4: u32, 3: u32);
+ y := move get_max(10: u32, 11: u32);
+ var@4 := copy x;
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := move get_max(4: u32, 3: u32)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+4: u32
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+3: u32
+
+[Debug]
+**About to evaluate statement**: [
+ y := move get_max(10: u32, 11: u32);
+ var@4 := copy x;
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ y := move get_max(10: u32, 11: u32)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+10: u32
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> ⊥ : u32 ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+11: u32
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x;
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> ⊥ : u32 ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y;
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> ⊥ : u32 ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ z := copy var@4 + copy var@5;
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ z := copy var@4 + copy var@5
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy var@4
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : u32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> ⊥ : u32 ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy var@5
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@9 := copy z;
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@9 := copy z
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+copy z
+
+[Debug] Value to copy:
+proj_comp {} (s@2 : u32)
+[Debug]
+**About to evaluate statement**: [
+ var@8 := move var@9 == 15: u32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> proj_comp {} (s@2 : u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := move var@9 == 15: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> proj_comp {} (s@2 : u32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> proj_comp {} (s@2 : u32) ;
+}
+
+
+- op:
+move var@9
+
+[Debug] Value to move:
+proj_comp {} (s@2 : u32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+15: u32
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@3 : bool) ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := ¬ move var@8
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@3 : bool) ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@3 : bool) ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+move var@8
+
+[Debug] Value to move:
+proj_comp {} (s@3 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@7);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> proj_comp {} (s@4 : bool) ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@7)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> proj_comp {} (s@4 : bool) ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> true ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+- op:
+move var@7
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {} (s@0 : u32) ;
+ y -> proj_comp {} (s@1 : u32) ;
+ z -> proj_comp {} (s@2 : u32) ;
+ var@4 -> proj_comp {} (s@0 : u32) ;
+ var@5 -> proj_comp {} (s@1 : u32) ;
+ var@6 -> ⊥ : (u32, bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : u32 ;
+}
+
+
+
+[Debug] test_function_symbolic: test_neg
+[Debug]
+**About to evaluate statement**: [
+ var@2 := copy x;
+ var@3 := copy var@2 == -2147483648: i32;
+ assert(¬move var@3);
+ var@0 := - move var@2;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> ⊥ : i32 ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> ⊥ : i32 ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> ⊥ : i32 ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : i32)
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy var@2 == -2147483648: i32;
+ assert(¬move var@3);
+ var@0 := - move var@2;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@3 := copy var@2 == -2147483648: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+- op:
+copy var@2
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : i32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+- op:
+-2147483648: i32
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@3);
+ var@0 := - move var@2;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> proj_comp {} (s@1 : bool) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@3)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> proj_comp {} (s@1 : bool) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> true ;
+}
+
+
+- op:
+move var@3
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ var@0 := - move var@2;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := - move var@2
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> proj_comp {} (s@0 : i32) ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+- op:
+move var@2
+
+[Debug] Value to move:
+proj_comp {} (s@0 : i32)
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@2 : i32) ;
+ x -> proj_comp {} (s@0 : i32) ;
+ var@2 -> ⊥ : i32 ;
+ var@3 -> ⊥ : bool ;
+}
+
+
+
+[Debug] test_function_symbolic: test_neg1
+[Debug]
+**About to evaluate statement**: [
+ x := 3: i32;
+ y := -3: i32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := 3: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+}
+
+
+- op:
+3: i32
+
+[Debug]
+**About to evaluate statement**: [
+ y := -3: i32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 3: i32 ;
+ y -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ y := -3: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 3: i32 ;
+ y -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 3: i32 ;
+ y -> ⊥ : i32 ;
+}
+
+
+- op:
+-3: i32
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 3: i32 ;
+ y -> -3: i32 ;
+}
+
+
+
+[Debug] test_function_symbolic: refs_test1
+[Debug]
+**About to evaluate statement**: [
+ x := 0: i32;
+ px := &mut x;
+ ppx := &mut px;
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ px := &mut x;
+ ppx := &mut px;
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ px := &mut x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ ppx := &mut px;
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> &mut@0 (0: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ ppx := &mut px
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> &mut@0 (0: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *(*(ppx)) := 1: i32;
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⌊mut@1⌋ ;
+ ppx -> &mut@1 (&mut@0 (0: i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *(*(ppx)) := 1: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⌊mut@1⌋ ;
+ ppx -> &mut@1 (&mut@0 (0: i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⌊mut@1⌋ ;
+ ppx -> &mut@1 (&mut@0 (0: i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+- op:
+1: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := copy x;
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⌊mut@1⌋ ;
+ ppx -> &mut@1 (&mut@0 (1: i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⌊mut@1⌋ ;
+ ppx -> &mut@1 (&mut@0 (1: i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⌊mut@1⌋ ;
+ ppx -> &mut@1 (&mut@0 (1: i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+1: i32
+[Debug]
+**About to evaluate statement**: [
+ var@5 := move var@6 == 1: i32;
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> 1: i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := move var@6 == 1: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> 1: i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> 1: i32 ;
+}
+
+
+- op:
+move var@6
+
+[Debug] Value to move:
+1: i32
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+- op:
+1: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> proj_comp {} (s@0 : bool) ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := ¬ move var@5
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> proj_comp {} (s@0 : bool) ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> proj_comp {} (s@0 : bool) ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@5
+
+[Debug] Value to move:
+proj_comp {} (s@0 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@4);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> proj_comp {} (s@1 : bool) ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@4)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> proj_comp {} (s@1 : bool) ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> true ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] test_function_symbolic: refs_test2
+[Debug]
+**About to evaluate statement**: [
+ x := 0: i32;
+ y := 1: i32;
+ px := &mut x;
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ y := 1: i32;
+ px := &mut x;
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ y := 1: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⊥ : i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+1: i32
+
+[Debug]
+**About to evaluate statement**: [
+ px := &mut x;
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ px := &mut x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 1: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ py := &mut y;
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> 1: i32 ;
+ px -> &mut@0 (0: i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ py := &mut y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> 1: i32 ;
+ px -> &mut@0 (0: i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ ppx := &mut px;
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@0 (0: i32) ;
+ py -> &mut@1 (1: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ ppx := &mut px
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@0 (0: i32) ;
+ py -> &mut@1 (1: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := &mut *(py);
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (1: i32) ;
+ ppx -> &mut@2 (&mut@0 (0: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := &mut *(py)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (1: i32) ;
+ ppx -> &mut@2 (&mut@0 (0: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *(ppx) := move var@6;
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@0 (0: i32)) ;
+ var@6 -> &mut@3 (1: i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *(ppx) := move var@6
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@0 (0: i32)) ;
+ var@6 -> &mut@3 (1: i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@0 (0: i32)) ;
+ var@6 -> &mut@3 (1: i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@6
+
+[Debug] Value to move:
+&mut@3 (1: i32)
+[Debug]
+**About to evaluate statement**: [
+ *(*(ppx)) := 2: i32;
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@3 (1: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *(*(ppx)) := 2: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@3 (1: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@3 (1: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+2: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@9 := copy *(px);
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@3 (2: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@9 := copy *(px)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@3 (2: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⌊mut@2⌋ ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> &mut@2 (&mut@3 (2: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy *(px)
+
+[Debug] Value to copy:
+2: i32
+[Debug]
+**About to evaluate statement**: [
+ var@8 := move var@9 == 2: i32;
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> 2: i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := move var@9 == 2: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> 2: i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> 2: i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@9
+
+[Debug] Value to move:
+2: i32
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+2: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := ¬ move var@8;
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@0 : bool) ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := ¬ move var@8
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@0 : bool) ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@0 : bool) ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@8
+
+[Debug] Value to move:
+proj_comp {} (s@0 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@7);
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> proj_comp {} (s@1 : bool) ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@7)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> proj_comp {} (s@1 : bool) ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> true ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@7
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ var@12 := copy x;
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@12 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+0: i32
+[Debug]
+**About to evaluate statement**: [
+ var@11 := move var@12 == 0: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> 0: i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@11 := move var@12 == 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> 0: i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> 0: i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@12
+
+[Debug] Value to move:
+0: i32
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> proj_comp {} (s@2 : bool) ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@10 := ¬ move var@11
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> proj_comp {} (s@2 : bool) ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> proj_comp {} (s@2 : bool) ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@11
+
+[Debug] Value to move:
+proj_comp {} (s@2 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@10);
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> proj_comp {} (s@3 : bool) ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@10)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> proj_comp {} (s@3 : bool) ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> true ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@10
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ var@15 := copy *(py);
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@15 := copy *(py)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> &mut@3 (2: i32) ;
+ py -> &mut@1 (⌊mut@3⌋) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy *(py)
+
+[Debug] Value to copy:
+2: i32
+[Debug]
+**About to evaluate statement**: [
+ var@14 := move var@15 == 2: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> 2: i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@14 := move var@15 == 2: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> 2: i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> 2: i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@15
+
+[Debug] Value to move:
+2: i32
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+2: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> proj_comp {} (s@4 : bool) ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@13 := ¬ move var@14
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> proj_comp {} (s@4 : bool) ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> proj_comp {} (s@4 : bool) ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@14
+
+[Debug] Value to move:
+proj_comp {} (s@4 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> proj_comp {} (s@5 : bool) ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@13)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> proj_comp {} (s@5 : bool) ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> true ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@13
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ var@18 := copy y;
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@18 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⌊mut@1⌋ ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> &mut@1 (2: i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+2: i32
+[Debug]
+**About to evaluate statement**: [
+ var@17 := move var@18 == 2: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> 2: i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@17 := move var@18 == 2: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> 2: i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> 2: i32 ;
+}
+
+
+- op:
+move var@18
+
+[Debug] Value to move:
+2: i32
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+2: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> proj_comp {} (s@6 : bool) ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@16 := ¬ move var@17
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> proj_comp {} (s@6 : bool) ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> proj_comp {} (s@6 : bool) ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@17
+
+[Debug] Value to move:
+proj_comp {} (s@6 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> proj_comp {} (s@7 : bool) ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@16)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> proj_comp {} (s@7 : bool) ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> true ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@16
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 2: i32 ;
+ px -> ⊥ : &'_ mut (i32) ;
+ py -> ⊥ : &'_ mut (i32) ;
+ ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : i32 ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] test_function_symbolic: test_list1
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+}
+
+
+
+[Debug] eval_non_local_function_call:
+- fid:CfimAst.BoxNew
+- type_params: [test1::List<i32>]
+- args: [move var@3]
+- dest: var@2
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+}
+
+
+- op:
+move var@3
+
+[Debug] Value to move:
+test1::List::Nil
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+- op:
+0: i32
+
+[Debug] expand_bottom_value_from_projection:
+pe: (Expressions.Field ((Expressions.ProjAdt (1, (Some 0))), 0))
+ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+- op:
+move var@2
+
+[Debug] Value to move:
+proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>)
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ drop(l)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug] drop_value: place: l
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+}
+
+
+
+[Debug] test_function_symbolic: test_box1
+[Debug]
+**About to evaluate statement**: [
+ b := move alloc::boxed::Box<i32>::new(0: i32);
+ var@3 := &two-phase b;
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3);
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⊥ : std::boxed::Box<i32> ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ b := move alloc::boxed::Box<i32>::new(0: i32)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⊥ : std::boxed::Box<i32> ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_non_local_function_call:
+- fid:CfimAst.BoxNew
+- type_params: [i32]
+- args: [0: i32]
+- dest: b
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⊥ : std::boxed::Box<i32> ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@3 := &two-phase b;
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3);
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> proj_comp {} (s@0 : std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@3 := &two-phase b
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> proj_comp {} (s@0 : std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3);
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({0}, proj_comp {} (s@0 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⌊inactivated_mut@0⌋ ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := move core::ops::deref::DerefMut<i32>::deref_mut(move var@3)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({0}, proj_comp {} (s@0 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⌊inactivated_mut@0⌋ ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_non_local_function_call:
+- fid:CfimAst.BoxDerefMut
+- type_params: [i32]
+- args: [move var@3]
+- dest: x
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({0}, proj_comp {} (s@0 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⌊inactivated_mut@0⌋ ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@3
+
+[Debug] activate_inactivated_mut_borrow: resulting value:
+{ Values.value =
+ (Values.Symbolic
+ { Values.svalue =
+ { Values.sv_id = 0;
+ sv_ty =
+ (Types.Adt ((Types.Assumed Types.Box), [],
+ [(Types.Integer Types.I32)]))
+ };
+ rset_ended = {} });
+ ty =
+ (Types.Adt ((Types.Assumed Types.Box), [], [(Types.Integer Types.I32)])) }
+[Debug] Value to move:
+&mut@0 (proj_comp {} (s@0 : std::boxed::Box<i32>))
+[Debug]
+**About to evaluate statement**: [
+ *(x) := 1: i32;
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⌊mut@0⌋ ;
+ x -> proj_comp {} (s@1 : &r@0 mut (i32)) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@0 (proj_borrows (s@0 : std::boxed::Box<i32> <: std::boxed::Box<i32>)),
+ proj_loans (s@1 : &r@0 mut (i32))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *(x) := 1: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⌊mut@0⌋ ;
+ x -> proj_comp {} (s@1 : &r@0 mut (i32)) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@0 (proj_borrows (s@0 : std::boxed::Box<i32> <: std::boxed::Box<i32>)),
+ proj_loans (s@1 : &r@0 mut (i32))
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⌊mut@0⌋ ;
+ x -> proj_comp {} (s@1 : &r@0 mut (i32)) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@0 (proj_borrows (s@0 : std::boxed::Box<i32> <: std::boxed::Box<i32>)),
+ proj_loans (s@1 : &r@0 mut (i32))
+ }
+}
+
+
+- op:
+1: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := &b;
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⌊mut@0⌋ ;
+ x -> &mut@1 (1: i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@0 (proj_borrows (s@0 : std::boxed::Box<i32> <: std::boxed::Box<i32>)),
+ ⌊mut@1, proj_loans (s@2 : i32)⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := &b
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⌊mut@0⌋ ;
+ x -> &mut@1 (1: i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@0 (proj_borrows (s@0 : std::boxed::Box<i32> <: std::boxed::Box<i32>)),
+ ⌊mut@1, proj_loans (s@2 : i32)⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5);
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⌊shared@2⌋ ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := move core::ops::deref::Deref<Box<i32>>::deref(move var@5)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⌊shared@2⌋ ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_non_local_function_call:
+- fid:CfimAst.BoxDeref
+- type_params: [i32]
+- args: [move var@5]
+- dest: x
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⌊shared@2⌋ ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@5
+
+[Debug] Value to move:
+⌊shared@2⌋
+[Debug]
+**About to evaluate statement**: [
+ var@8 := copy *(x);
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> proj_comp {} (s@4 : &r@1 (i32)) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ proj_loans (s@4 : &r@1 (i32))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := copy *(x)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> proj_comp {} (s@4 : &r@1 (i32)) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ proj_loans (s@4 : &r@1 (i32))
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> proj_comp {} (s@4 : &r@1 (i32)) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ proj_loans (s@4 : &r@1 (i32))
+ }
+}
+
+
+- op:
+copy *(x)
+
+[Debug] Value to copy:
+proj_comp {} (s@5 : i32)
+[Debug]
+**About to evaluate statement**: [
+ var@7 := move var@8 == 1: i32;
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@5 : i32) ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := move var@8 == 1: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@5 : i32) ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> proj_comp {} (s@5 : i32) ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+- op:
+move var@8
+
+[Debug] Value to move:
+proj_comp {} (s@5 : i32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+- op:
+1: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := ¬ move var@7;
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> proj_comp {} (s@6 : bool) ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := ¬ move var@7
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> proj_comp {} (s@6 : bool) ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> proj_comp {} (s@6 : bool) ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+- op:
+move var@7
+
+[Debug] Value to move:
+proj_comp {} (s@6 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@6);
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> proj_comp {} (s@7 : bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@6)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> proj_comp {} (s@7 : bool) ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> true ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+- op:
+move var@6
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ drop(b);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ drop(b)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> @shared_loan({2}, proj_comp {0} (s@3 : std::boxed::Box<i32>)) ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⌊shared@3⌋ ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+ abs@1{parents={}}{regions={1}} {
+ ⌊shared@2⌋,
+ @shared_loan({3}, proj_comp {} (s@5 : i32), proj_loans (s@5 : i32))
+ }
+}
+
+
+
+[Debug] drop_value: place: b
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ b -> ⊥ : std::boxed::Box<i32> ;
+ x -> ⊥ : &'_ mut (i32) ;
+ var@3 -> ⊥ : &'_ mut (std::boxed::Box<i32>) ;
+ x -> ⊥ : &'_ (i32) ;
+ var@5 -> ⊥ : &'_ (std::boxed::Box<i32>) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] test_function_symbolic: copy_int
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy x;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : i32 ;
+ x -> proj_comp {} (s@0 : i32) ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : i32)
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@0 : i32) ;
+ x -> proj_comp {} (s@0 : i32) ;
+}
+
+
+
+[Debug] test_function_symbolic: test_copy_int
+[Debug]
+**About to evaluate statement**: [
+ x := 0: i32;
+ px := &x;
+ var@4 := copy x;
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ px -> ⊥ : &'_ (i32) ;
+ y -> ⊥ : i32 ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ px -> ⊥ : &'_ (i32) ;
+ y -> ⊥ : i32 ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ px -> ⊥ : &'_ (i32) ;
+ y -> ⊥ : i32 ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ px := &x;
+ var@4 := copy x;
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ px -> ⊥ : &'_ (i32) ;
+ y -> ⊥ : i32 ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ px := &x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ px -> ⊥ : &'_ (i32) ;
+ y -> ⊥ : i32 ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x;
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> ⊥ : i32 ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> ⊥ : i32 ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> ⊥ : i32 ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+@shared_loan({0}, 0: i32)
+[Debug]
+**About to evaluate statement**: [
+ y := move copy_int(move var@4);
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> ⊥ : i32 ;
+ var@4 -> 0: i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ y := move copy_int(move var@4)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> ⊥ : i32 ;
+ var@4 -> 0: i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> ⊥ : i32 ;
+ var@4 -> 0: i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+0: i32
+[Debug]
+**About to evaluate statement**: [
+ var@7 := copy *(px);
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := copy *(px)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy *(px)
+
+[Debug] Value to copy:
+0: i32
+[Debug]
+**About to evaluate statement**: [
+ var@8 := copy y;
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> 0: i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> 0: i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> 0: i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : i32)
+[Debug]
+**About to evaluate statement**: [
+ var@6 := move var@7 == move var@8;
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> 0: i32 ;
+ var@8 -> proj_comp {} (s@0 : i32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := move var@7 == move var@8
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> 0: i32 ;
+ var@8 -> proj_comp {} (s@0 : i32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> 0: i32 ;
+ var@8 -> proj_comp {} (s@0 : i32) ;
+}
+
+
+- op:
+move var@7
+
+[Debug] Value to move:
+0: i32
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> proj_comp {} (s@0 : i32) ;
+}
+
+
+- op:
+move var@8
+
+[Debug] Value to move:
+proj_comp {} (s@0 : i32)
+[Debug]
+**About to evaluate statement**: [
+ var@5 := ¬ move var@6;
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> proj_comp {} (s@1 : bool) ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := ¬ move var@6
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> proj_comp {} (s@1 : bool) ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> proj_comp {} (s@1 : bool) ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@6
+
+[Debug] Value to move:
+proj_comp {} (s@1 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@5);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> proj_comp {} (s@2 : bool) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@5)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> proj_comp {} (s@2 : bool) ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> true ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@5
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> @shared_loan({0}, 0: i32) ;
+ px -> ⌊shared@0⌋ ;
+ y -> proj_comp {} (s@0 : i32) ;
+ var@4 -> ⊥ : i32 ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : bool ;
+ var@7 -> ⊥ : i32 ;
+ var@8 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] test_function_symbolic: is_cons
+[Debug]
+**About to evaluate statement**: [
+ var@2 := discriminant(*(l));
+ switch (move var@2) {
+ 0: isize => {
+ var@0 := true
+ }
+ 1: isize => {
+ var@0 := false
+ }
+ _ => {
+ panic
+ }
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 (test1::List<T>))
+ }
+ var@0 -> ⊥ : bool ;
+ l -> proj_comp {} (s@0 : &r@0 (test1::List<T>)) ;
+ var@2 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := discriminant(*(l))
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 (test1::List<T>))
+ }
+ var@0 -> ⊥ : bool ;
+ l -> proj_comp {} (s@0 : &r@0 (test1::List<T>)) ;
+ var@2 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@0 := true
+ }
+ 1: isize => {
+ var@0 := false
+ }
+ _ => {
+ panic
+ }
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Cons { 0 = proj_comp {} (s@2 : T); 1 = proj_comp {} (s@3 : std::boxed::Box<test1::List<T>>); }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box<test1::List<T>>); })
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> 0: isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@0 := true
+ }
+ 1: isize => {
+ var@0 := false
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Cons { 0 = proj_comp {} (s@2 : T); 1 = proj_comp {} (s@3 : std::boxed::Box<test1::List<T>>); }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box<test1::List<T>>); })
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> 0: isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Cons { 0 = proj_comp {} (s@2 : T); 1 = proj_comp {} (s@3 : std::boxed::Box<test1::List<T>>); }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box<test1::List<T>>); })
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> 0: isize ;
+}
+
+
+- op:
+move var@2
+
+[Debug] Value to move:
+0: isize
+[Debug]
+**About to evaluate statement**: [
+ var@0 := true
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Cons { 0 = proj_comp {} (s@2 : T); 1 = proj_comp {} (s@3 : std::boxed::Box<test1::List<T>>); }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box<test1::List<T>>); })
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Cons { 0 = proj_comp {} (s@2 : T); 1 = proj_comp {} (s@3 : std::boxed::Box<test1::List<T>>); }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box<test1::List<T>>); })
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> ⊥ : isize ;
+}
+
+
+- op:
+true
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Cons { 0 = proj_comp {} (s@2 : T); 1 = proj_comp {} (s@3 : std::boxed::Box<test1::List<T>>); }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box<test1::List<T>>); })
+ }
+ var@0 -> true ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@0 := true
+ }
+ 1: isize => {
+ var@0 := false
+ }
+ _ => {
+ panic
+ }
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Nil, test1::List::Nil)
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> 1: isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@0 := true
+ }
+ 1: isize => {
+ var@0 := false
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Nil, test1::List::Nil)
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> 1: isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Nil, test1::List::Nil)
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> 1: isize ;
+}
+
+
+- op:
+move var@2
+
+[Debug] Value to move:
+1: isize
+[Debug]
+**About to evaluate statement**: [
+ var@0 := false
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Nil, test1::List::Nil)
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Nil, test1::List::Nil)
+ }
+ var@0 -> ⊥ : bool ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> ⊥ : isize ;
+}
+
+
+- op:
+false
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ @shared_loan({0}, test1::List::Nil, test1::List::Nil)
+ }
+ var@0 -> false ;
+ l -> ⌊shared@0⌋ ;
+ var@2 -> ⊥ : isize ;
+}
+
+
+
+[Debug] test_function_symbolic: test_is_cons
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug] eval_non_local_function_call:
+- fid:CfimAst.BoxNew
+- type_params: [test1::List<i32>]
+- args: [move var@3]
+- dest: var@2
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+- op:
+move var@3
+
+[Debug] Value to move:
+test1::List::Nil
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+- op:
+0: i32
+
+[Debug] expand_bottom_value_from_projection:
+pe: (Expressions.Field ((Expressions.ProjAdt (1, (Some 0))), 0))
+ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+- op:
+move var@2
+
+[Debug] Value to move:
+proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>)
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0);
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := &l;
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := &l
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := copy var@7;
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := copy var@7
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+}
+
+
+- op:
+copy var@7
+
+[Debug] Value to copy:
+⌊shared@0⌋
+[Debug]
+**About to evaluate statement**: [
+ var@5 := move is_cons<i32>(move var@6);
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⌊shared@1⌋ ;
+ var@7 -> ⌊shared@0⌋ ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := move is_cons<i32>(move var@6)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⌊shared@1⌋ ;
+ var@7 -> ⌊shared@0⌋ ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⌊shared@1⌋ ;
+ var@7 -> ⌊shared@0⌋ ;
+}
+
+
+- op:
+move var@6
+
+[Debug] Value to move:
+⌊shared@1⌋
+[Debug]
+**About to evaluate statement**: [
+ var@4 := ¬ move var@5;
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> proj_comp {} (s@1 : bool) ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+ abs@0{parents={}}{regions={0}} {
+ ⌊shared@1⌋,
+ proj_loans (s@1 : bool)
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := ¬ move var@5
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> proj_comp {} (s@1 : bool) ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+ abs@0{parents={}}{regions={0}} {
+ ⌊shared@1⌋,
+ proj_loans (s@1 : bool)
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> proj_comp {} (s@1 : bool) ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+ abs@0{parents={}}{regions={0}} {
+ ⌊shared@1⌋,
+ proj_loans (s@1 : bool)
+ }
+}
+
+
+- op:
+move var@5
+
+[Debug] Value to move:
+proj_comp {} (s@1 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@4);
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> proj_comp {} (s@2 : bool) ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+ abs@0{parents={}}{regions={0}} {
+ ⌊shared@1⌋,
+ proj_loans (s@1 : bool)
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@4)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> proj_comp {} (s@2 : bool) ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+ abs@0{parents={}}{regions={0}} {
+ ⌊shared@1⌋,
+ proj_loans (s@1 : bool)
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> true ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+ abs@0{parents={}}{regions={0}} {
+ ⌊shared@1⌋,
+ proj_loans (s@1 : bool)
+ }
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ drop(l);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+ abs@0{parents={}}{regions={0}} {
+ ⌊shared@1⌋,
+ proj_loans (s@1 : bool)
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ drop(l)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }) ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⌊shared@0⌋ ;
+ abs@0{parents={}}{regions={0}} {
+ ⌊shared@1⌋,
+ proj_loans (s@1 : bool)
+ }
+}
+
+
+
+[Debug] drop_value: place: l
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ var@4 -> ⊥ : bool ;
+ var@5 -> ⊥ : bool ;
+ var@6 -> ⊥ : &'_ (test1::List<i32>) ;
+ var@7 -> ⊥ : &'_ (test1::List<i32>) ;
+}
+
+
+
+[Debug] test_function_symbolic: split_list
+[Debug]
+**About to evaluate statement**: [
+ var@8 := false;
+ var@7 := false;
+ var@7 := true;
+ var@8 := true;
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := false
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+false
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := false;
+ var@7 := true;
+ var@8 := true;
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := false
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> ⊥ : bool ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+false
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := true;
+ var@8 := true;
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := true
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+true
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := true;
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := true
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+true
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := discriminant(l);
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := discriminant(l)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> proj_comp {} (s@0 : test1::List<T>) ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = proj_comp {} (s@1 : T); 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> 0: isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = proj_comp {} (s@1 : T); 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> 0: isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+move var@2
+
+[Debug] Value to move:
+0: isize
+[Debug]
+**About to evaluate statement**: [
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = proj_comp {} (s@1 : T); 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := false
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = proj_comp {} (s@1 : T); 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = proj_comp {} (s@1 : T); 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+false
+
+[Debug]
+**About to evaluate statement**: [
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = proj_comp {} (s@1 : T); 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ hd := move (l as test1::List::Cons).0
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = proj_comp {} (s@1 : T); 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = proj_comp {} (s@1 : T); 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+move (l as test1::List::Cons).0
+
+[Debug] Value to move:
+proj_comp {} (s@1 : T)
+[Debug]
+**About to evaluate statement**: [
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := false
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+false
+
+[Debug]
+**About to evaluate statement**: [
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ tl := move (l as test1::List::Cons).1
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>); } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+move (l as test1::List::Cons).1
+
+[Debug] Value to move:
+proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>)
+[Debug]
+**About to evaluate statement**: [
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>) ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := move hd
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>) ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> proj_comp {} (s@1 : T) ;
+ tl -> proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>) ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+move hd
+
+[Debug] Value to move:
+proj_comp {} (s@1 : T)
+[Debug]
+**About to evaluate statement**: [
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>) ;
+ var@5 -> proj_comp {} (s@1 : T) ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := move deref_box(tl)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>) ;
+ var@5 -> proj_comp {} (s@1 : T) ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> proj_comp {} (s@2 : std::boxed::Box<test1::List<T>>) ;
+ var@5 -> proj_comp {} (s@1 : T) ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+move deref_box(tl)
+
+[Debug] Value to move:
+proj_comp {} (s@3 : test1::List<T>)
+[Debug]
+**About to evaluate statement**: [
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> @Box(⊥ : test1::List<T>) ;
+ var@5 -> proj_comp {} (s@1 : T) ;
+ var@6 -> proj_comp {} (s@3 : test1::List<T>) ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (var@0).0 := move var@5
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> @Box(⊥ : test1::List<T>) ;
+ var@5 -> proj_comp {} (s@1 : T) ;
+ var@6 -> proj_comp {} (s@3 : test1::List<T>) ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> @Box(⊥ : test1::List<T>) ;
+ var@5 -> proj_comp {} (s@1 : T) ;
+ var@6 -> proj_comp {} (s@3 : test1::List<T>) ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+move var@5
+
+[Debug] Value to move:
+proj_comp {} (s@1 : T)
+[Debug] expand_bottom_value_from_projection:
+pe: (Expressions.Field ((Expressions.ProjTuple 2), 0))
+ty: (Types.Adt (Types.Tuple, [],
+ [(Types.TypeVar 0); (Types.Adt ((Types.AdtId 1), [], [(Types.TypeVar 0)]))
+ ]
+ ))
+[Debug]
+**About to evaluate statement**: [
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> (proj_comp {} (s@1 : T), ⊥ : test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> @Box(⊥ : test1::List<T>) ;
+ var@5 -> ⊥ : T ;
+ var@6 -> proj_comp {} (s@3 : test1::List<T>) ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (var@0).1 := move var@6
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> (proj_comp {} (s@1 : T), ⊥ : test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> @Box(⊥ : test1::List<T>) ;
+ var@5 -> ⊥ : T ;
+ var@6 -> proj_comp {} (s@3 : test1::List<T>) ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> (proj_comp {} (s@1 : T), ⊥ : test1::List<T>) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> @Box(⊥ : test1::List<T>) ;
+ var@5 -> ⊥ : T ;
+ var@6 -> proj_comp {} (s@3 : test1::List<T>) ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+move var@6
+
+[Debug] Value to move:
+proj_comp {} (s@3 : test1::List<T>)
+[Debug]
+**About to evaluate statement**: [
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> (proj_comp {} (s@1 : T), proj_comp {} (s@3 : test1::List<T>)) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> @Box(⊥ : test1::List<T>) ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> (proj_comp {} (s@1 : T), proj_comp {} (s@3 : test1::List<T>)) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> @Box(⊥ : test1::List<T>) ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_non_local_function_call:
+- fid:CfimAst.BoxFree
+- type_params: [test1::List<T>]
+- args: [move tl]
+- dest: var@9
+[Debug] drop_value: place: tl
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> (proj_comp {} (s@1 : T), proj_comp {} (s@3 : test1::List<T>)) ;
+ l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box<test1::List<T>>; } ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> false ;
+ var@8 -> false ;
+ var@9 -> () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ switch (move var@2) {
+ 0: isize => {
+ var@8 := false;
+ hd := move (l as test1::List::Cons).0;
+ var@7 := false;
+ tl := move (l as test1::List::Cons).1;
+ var@5 := move hd;
+ var@6 := move deref_box(tl);
+ (var@0).0 := move var@5;
+ (var@0).1 := move var@6;
+ var@9 := move alloc::alloc::box_free<test1::List<T>>(move tl);
+ return
+ }
+ _ => {
+ panic
+ }
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Nil ;
+ var@2 -> 1: isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Nil ;
+ var@2 -> 1: isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+- op:
+move var@2
+
+[Debug] Value to move:
+1: isize
+[Debug]
+**About to evaluate statement**: [
+ panic
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : (T, test1::List<T>) ;
+ l -> test1::List::Nil ;
+ var@2 -> ⊥ : isize ;
+ hd -> ⊥ : T ;
+ tl -> ⊥ : std::boxed::Box<test1::List<T>> ;
+ var@5 -> ⊥ : T ;
+ var@6 -> ⊥ : test1::List<T> ;
+ var@7 -> true ;
+ var@8 -> true ;
+ var@9 -> ⊥ : () ;
+ var@10 -> ⊥ : isize ;
+}
+
+
+
+[Debug] test_function_symbolic: test_split_list
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1);
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(var@3, 1)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3);
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := move alloc::boxed::Box<test1::List<i32>>::new(move var@3)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_non_local_function_call:
+- fid:CfimAst.BoxNew
+- type_params: [test1::List<i32>]
+- args: [move var@3]
+- dest: var@2
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> test1::List::Nil ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@3
+
+[Debug] Value to move:
+test1::List::Nil
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32;
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).0 := 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug] expand_bottom_value_from_projection:
+pe: (Expressions.Field ((Expressions.ProjAdt (1, (Some 0))), 0))
+ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)]))
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2;
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (l as test1::List::Cons).1 := move var@2
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box<test1::List<i32>>; } ;
+ var@2 -> proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>) ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@2
+
+[Debug] Value to move:
+proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>)
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0);
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ set_discriminant(l, 0)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := move l;
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := move l
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+move l
+
+[Debug] Value to move:
+test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }
+[Debug]
+**About to evaluate statement**: [
+ var@6 := move split_list<i32>(move var@7);
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := move split_list<i32>(move var@7)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> ⊥ : (i32, test1::List<i32>) ;
+ var@7 -> test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); } ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@7
+
+[Debug] Value to move:
+test1::List::Cons { 0 = 0: i32; 1 = proj_comp {} (s@0 : std::boxed::Box<test1::List<i32>>); }
+[Debug]
+**About to evaluate statement**: [
+ hd := copy (var@6).0;
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> proj_comp {} (s@1 : (i32, test1::List<i32>)) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ hd := copy (var@6).0
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> proj_comp {} (s@1 : (i32, test1::List<i32>)) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> ⊥ : i32 ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> proj_comp {} (s@1 : (i32, test1::List<i32>)) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy (var@6).0
+
+[Debug] Value to copy:
+proj_comp {} (s@2 : i32)
+[Debug]
+**About to evaluate statement**: [
+ tl := move (var@6).1;
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> (proj_comp {} (s@2 : i32), proj_comp {} (s@3 : test1::List<i32>)) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ tl := move (var@6).1
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> (proj_comp {} (s@2 : i32), proj_comp {} (s@3 : test1::List<i32>)) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> (proj_comp {} (s@2 : i32), proj_comp {} (s@3 : test1::List<i32>)) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+move (var@6).1
+
+[Debug] Value to move:
+proj_comp {} (s@3 : test1::List<i32>)
+[Debug]
+**About to evaluate statement**: [
+ var@10 := copy hd;
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@10 := copy hd
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy hd
+
+[Debug] Value to copy:
+proj_comp {} (s@2 : i32)
+[Debug]
+**About to evaluate statement**: [
+ var@9 := move var@10 == 0: i32;
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> proj_comp {} (s@2 : i32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@9 := move var@10 == 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> proj_comp {} (s@2 : i32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> proj_comp {} (s@2 : i32) ;
+}
+
+
+- op:
+move var@10
+
+[Debug] Value to move:
+proj_comp {} (s@2 : i32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := ¬ move var@9;
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> proj_comp {} (s@4 : bool) ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := ¬ move var@9
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> proj_comp {} (s@4 : bool) ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> proj_comp {} (s@4 : bool) ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@9
+
+[Debug] Value to move:
+proj_comp {} (s@4 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@8);
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> proj_comp {} (s@5 : bool) ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@8)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> proj_comp {} (s@5 : bool) ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> true ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@8
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ drop(tl);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ drop(tl)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> proj_comp {} (s@3 : test1::List<i32>) ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] drop_value: place: tl
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ l -> ⊥ : test1::List<i32> ;
+ var@2 -> ⊥ : std::boxed::Box<test1::List<i32>> ;
+ var@3 -> ⊥ : test1::List<i32> ;
+ hd -> proj_comp {} (s@2 : i32) ;
+ tl -> ⊥ : test1::List<i32> ;
+ var@6 -> (proj_comp {} (s@2 : i32), ⊥ : test1::List<i32>) ;
+ var@7 -> ⊥ : test1::List<i32> ;
+ var@8 -> ⊥ : bool ;
+ var@9 -> ⊥ : bool ;
+ var@10 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] test_function_symbolic: get_elem
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy b;
+ if (move var@4) {
+ var@0 := &mut *(x)
+ }
+ else {
+ var@0 := move y
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : bool),
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> proj_comp {} (s@0 : bool) ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := copy b
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : bool),
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> proj_comp {} (s@0 : bool) ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : bool),
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> proj_comp {} (s@0 : bool) ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> ⊥ : bool ;
+}
+
+
+- op:
+copy b
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : bool)
+[Debug]
+**About to evaluate statement**: [
+ if (move var@4) {
+ var@0 := &mut *(x)
+ }
+ else {
+ var@0 := move y
+ };
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : bool),
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> proj_comp {} (s@0 : bool) ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> proj_comp {} (s@0 : bool) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ if (move var@4) {
+ var@0 := &mut *(x)
+ }
+ else {
+ var@0 := move y
+ }
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : bool),
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> proj_comp {} (s@0 : bool) ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> proj_comp {} (s@0 : bool) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ true,
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> true ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> true ;
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(x)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ true,
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> true ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ false,
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> false ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> false ;
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+false
+[Debug]
+**About to evaluate statement**: [
+ var@0 := move y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ false,
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> false ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> ⊥ : bool ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ false,
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> ⊥ : &'_ mut (T) ;
+ b -> false ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> ⊥ : bool ;
+}
+
+
+- op:
+move y
+
+[Debug] Value to move:
+proj_comp {} (s@2 : &r@0 mut (T))
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ true,
+ ⌊mut@0, proj_loans (s@3 : T)⌋,
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> &mut@1 (proj_comp {} (s@3 : T)) ;
+ b -> true ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ y -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ var@4 -> ⊥ : bool ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ false,
+ proj_loans (s@1 : &r@0 mut (T)),
+ proj_loans (s@2 : &r@0 mut (T))
+ }
+ var@0 -> proj_comp {} (s@2 : &r@0 mut (T)) ;
+ b -> false ;
+ x -> proj_comp {} (s@1 : &r@0 mut (T)) ;
+ y -> ⊥ : &'_ mut (T) ;
+ var@4 -> ⊥ : bool ;
+}
+
+
+
+[Debug] test_function_symbolic: get_elem_test
+[Debug]
+**About to evaluate statement**: [
+ x := 0: i32;
+ y := 0: i32;
+ var@5 := &mut x;
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : i32 ;
+ y -> ⊥ : i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ y := 0: i32;
+ var@5 := &mut x;
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⊥ : i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ y := 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⊥ : i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> ⊥ : i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := &mut x;
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 0: i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@5 := &mut x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: i32 ;
+ y -> 0: i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := &two-phase *(var@5);
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> 0: i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (0: i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := &two-phase *(var@5)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> 0: i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (0: i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := &mut y;
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> 0: i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⌊inactivated_mut@1⌋ ;
+ var@5 -> &mut@0 (@shared_loan({1}, 0: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := &mut y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> 0: i32 ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⌊inactivated_mut@1⌋ ;
+ var@5 -> &mut@0 (@shared_loan({1}, 0: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := &two-phase *(var@7);
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⌊inactivated_mut@1⌋ ;
+ var@5 -> &mut@0 (@shared_loan({1}, 0: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (0: i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@6 := &two-phase *(var@7)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⌊inactivated_mut@1⌋ ;
+ var@5 -> &mut@0 (@shared_loan({1}, 0: i32)) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (0: i32) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ z := move get_elem<i32>(true, move var@4, move var@6);
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⌊inactivated_mut@1⌋ ;
+ var@5 -> &mut@0 (@shared_loan({1}, 0: i32)) ;
+ var@6 -> ⌊inactivated_mut@3⌋ ;
+ var@7 -> &mut@2 (@shared_loan({3}, 0: i32)) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ z := move get_elem<i32>(true, move var@4, move var@6)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⌊inactivated_mut@1⌋ ;
+ var@5 -> &mut@0 (@shared_loan({1}, 0: i32)) ;
+ var@6 -> ⌊inactivated_mut@3⌋ ;
+ var@7 -> &mut@2 (@shared_loan({3}, 0: i32)) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⌊inactivated_mut@1⌋ ;
+ var@5 -> &mut@0 (@shared_loan({1}, 0: i32)) ;
+ var@6 -> ⌊inactivated_mut@3⌋ ;
+ var@7 -> &mut@2 (@shared_loan({3}, 0: i32)) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+true
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⌊inactivated_mut@1⌋ ;
+ var@5 -> &mut@0 (@shared_loan({1}, 0: i32)) ;
+ var@6 -> ⌊inactivated_mut@3⌋ ;
+ var@7 -> &mut@2 (@shared_loan({3}, 0: i32)) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@4
+
+[Debug] activate_inactivated_mut_borrow: resulting value:
+{ Values.value =
+ (Values.Concrete (Values.Scalar { Values.value = 0; int_ty = Types.I32 }));
+ ty = (Types.Integer Types.I32) }
+[Debug] Value to move:
+&mut@1 (0: i32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⌊inactivated_mut@3⌋ ;
+ var@7 -> &mut@2 (@shared_loan({3}, 0: i32)) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@6
+
+[Debug] activate_inactivated_mut_borrow: resulting value:
+{ Values.value =
+ (Values.Concrete (Values.Scalar { Values.value = 0; int_ty = Types.I32 }));
+ ty = (Types.Integer Types.I32) }
+[Debug] Value to move:
+&mut@3 (0: i32)
+[Debug]
+**About to evaluate statement**: [
+ var@8 := copy *(z);
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> proj_comp {} (s@0 : &r@0 mut (i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ proj_loans (s@0 : &r@0 mut (i32))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@8 := copy *(z)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> proj_comp {} (s@0 : &r@0 mut (i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ proj_loans (s@0 : &r@0 mut (i32))
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> proj_comp {} (s@0 : &r@0 mut (i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> ⊥ : i32 ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ proj_loans (s@0 : &r@0 mut (i32))
+ }
+}
+
+
+- op:
+copy *(z)
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : i32)
+[Debug]
+**About to evaluate statement**: [
+ *(z) := copy var@8 + 1: i32;
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@1 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *(z) := copy var@8 + 1: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@1 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@1 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+- op:
+copy var@8
+
+[Debug] Value to copy:
+proj_comp {} (s@1 : i32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@1 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+- op:
+1: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@12 := copy *(z);
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@12 := copy *(z)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+- op:
+copy *(z)
+
+[Debug] Value to copy:
+proj_comp {} (s@2 : i32)
+[Debug]
+**About to evaluate statement**: [
+ var@11 := move var@12 == 1: i32;
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> proj_comp {} (s@2 : i32) ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@11 := move var@12 == 1: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> proj_comp {} (s@2 : i32) ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> proj_comp {} (s@2 : i32) ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+- op:
+move var@12
+
+[Debug] Value to move:
+proj_comp {} (s@2 : i32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+- op:
+1: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@10 := ¬ move var@11;
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> proj_comp {} (s@3 : bool) ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@10 := ¬ move var@11
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> proj_comp {} (s@3 : bool) ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> proj_comp {} (s@3 : bool) ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+- op:
+move var@11
+
+[Debug] Value to move:
+proj_comp {} (s@3 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@10);
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> proj_comp {} (s@4 : bool) ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@10)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> proj_comp {} (s@4 : bool) ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> true ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+- op:
+move var@10
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ var@15 := copy x;
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@15 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ y -> ⌊mut@2⌋ ;
+ z -> &mut@4 (proj_comp {} (s@2 : i32)) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> &mut@0 (⌊mut@1⌋) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (⌊mut@3⌋) ;
+ var@8 -> proj_comp {} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+ abs@0{parents={}}{regions={0}} {
+ true,
+ &mut@1 (0: i32),
+ &mut@3 (0: i32),
+ ⌊mut@4, proj_loans (s@1 : i32)⌋
+ }
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {0} (s@5 : i32)
+[Debug]
+**About to evaluate statement**: [
+ var@14 := move var@15 == 1: i32;
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> proj_comp {0} (s@5 : i32) ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@14 := move var@15 == 1: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> proj_comp {0} (s@5 : i32) ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> proj_comp {0} (s@5 : i32) ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@15
+
+[Debug] Value to move:
+proj_comp {0} (s@5 : i32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+1: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@13 := ¬ move var@14;
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> proj_comp {} (s@7 : bool) ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@13 := ¬ move var@14
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> proj_comp {} (s@7 : bool) ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> proj_comp {} (s@7 : bool) ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@14
+
+[Debug] Value to move:
+proj_comp {} (s@7 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@13);
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> proj_comp {} (s@8 : bool) ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@13)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> proj_comp {} (s@8 : bool) ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> true ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@13
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ var@18 := copy y;
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@18 := copy y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> ⌊mut@2⌋ ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> &mut@2 (proj_comp {0} (s@6 : i32)) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+copy y
+
+[Debug] Value to copy:
+proj_comp {0} (s@6 : i32)
+[Debug]
+**About to evaluate statement**: [
+ var@17 := move var@18 == 0: i32;
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> proj_comp {0} (s@6 : i32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@17 := move var@18 == 0: i32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> proj_comp {0} (s@6 : i32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> proj_comp {0} (s@6 : i32) ;
+}
+
+
+- op:
+move var@18
+
+[Debug] Value to move:
+proj_comp {0} (s@6 : i32)
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+0: i32
+
+[Debug]
+**About to evaluate statement**: [
+ var@16 := ¬ move var@17;
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> proj_comp {} (s@9 : bool) ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@16 := ¬ move var@17
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> proj_comp {} (s@9 : bool) ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> proj_comp {} (s@9 : bool) ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@17
+
+[Debug] Value to move:
+proj_comp {} (s@9 : bool)
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@16);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> proj_comp {} (s@10 : bool) ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ assert(¬move var@16)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> proj_comp {} (s@10 : bool) ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> true ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+- op:
+move var@16
+
+[Debug] Value to move:
+true
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> proj_comp {0} (s@5 : i32) ;
+ y -> proj_comp {0} (s@6 : i32) ;
+ z -> ⊥ : &'_ mut (i32) ;
+ var@4 -> ⊥ : &'_ mut (i32) ;
+ var@5 -> ⊥ : &'_ mut (i32) ;
+ var@6 -> ⊥ : &'_ mut (i32) ;
+ var@7 -> ⊥ : &'_ mut (i32) ;
+ var@8 -> proj_comp {0} (s@1 : i32) ;
+ var@9 -> ⊥ : (i32, bool) ;
+ var@10 -> ⊥ : bool ;
+ var@11 -> ⊥ : bool ;
+ var@12 -> ⊥ : i32 ;
+ var@13 -> ⊥ : bool ;
+ var@14 -> ⊥ : bool ;
+ var@15 -> ⊥ : i32 ;
+ var@16 -> ⊥ : bool ;
+ var@17 -> ⊥ : bool ;
+ var@18 -> ⊥ : i32 ;
+}
+
+
+
+[Debug] test_function_symbolic: id_mut_mut
+[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut (&r@1 mut (T)))
+ }
+ abs@1{parents={0}}{regions={1}} {
+ proj_loans (s@0 : &r@0 mut (&r@1 mut (T)))
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut (T)) ;
+ x -> proj_comp {} (s@0 : &r@0 mut (&r@1 mut (T))) ;
+ var@2 -> ⊥ : &'_ mut (&'_ mut (T)) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut (&r@1 mut (T)))
+ }
+ abs@1{parents={0}}{regions={1}} {
+ proj_loans (s@0 : &r@0 mut (&r@1 mut (T)))
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut (T)) ;
+ x -> proj_comp {} (s@0 : &r@0 mut (&r@1 mut (T))) ;
+ var@2 -> ⊥ : &'_ mut (&'_ mut (T)) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@1 mut (T))⌋
+ }
+ abs@1{parents={0}}{regions={1}} {
+ @ignored_mut_loan(0, proj_loans (s@1 : &r@1 mut (T)))
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut (T)) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (proj_comp {} (s@1 : &r@1 mut (T))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@1 mut (T))⌋
+ }
+ abs@1{parents={0}}{regions={1}} {
+ @ignored_mut_loan(0, proj_loans (s@1 : &r@1 mut (T)))
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut (T)) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (proj_comp {} (s@1 : &r@1 mut (T))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@1 mut (T))⌋
+ }
+ abs@1{parents={0}}{regions={1}} {
+ @ignored_mut_loan(0, proj_loans (s@1 : &r@1 mut (T)))
+ }
+ var@0 -> &mut@2 (proj_comp {} (s@1 : &r@1 mut (T))) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (⌊mut@2⌋) ;
+}
+
+
+
+[Debug] test_function_symbolic: id_mut_pair
+[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (T), u32)))
+ }
+ var@0 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ;
+ x -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (T), u32))) ;
+ var@2 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (T), u32)))
+ }
+ var@0 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ;
+ x -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (T), u32))) ;
+ var@2 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : (&r@0 mut (T), u32))⌋
+ }
+ var@0 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (proj_comp {} (s@1 : (&r@0 mut (T), u32))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : (&r@0 mut (T), u32))⌋
+ }
+ var@0 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (proj_comp {} (s@1 : (&r@0 mut (T), u32))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : (&r@0 mut (T), u32))⌋
+ }
+ var@0 -> &mut@2 (proj_comp {} (s@1 : (&r@0 mut (T), u32))) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (⌊mut@2⌋) ;
+}
+
+
+
+[Debug] test_function_symbolic: id_mut_pair_test1
+[Debug]
+**About to evaluate statement**: [
+ x := 0: u32;
+ px := &mut x;
+ var@4 := move px;
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ x := 0: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⊥ : u32 ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+- op:
+0: u32
+
+[Debug]
+**About to evaluate statement**: [
+ px := &mut x;
+ var@4 := move px;
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: u32 ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ px := &mut x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> 0: u32 ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := move px;
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> &mut@0 (0: u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@4 := move px
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> &mut@0 (0: u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> &mut@0 (0: u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+- op:
+move px
+
+[Debug] Value to move:
+&mut@0 (0: u32)
+[Debug]
+**About to evaluate statement**: [
+ (p).0 := move var@4;
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> &mut@0 (0: u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (p).0 := move var@4
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> &mut@0 (0: u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⊥ : (&'_ mut (u32), u32) ;
+ var@4 -> &mut@0 (0: u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+- op:
+move var@4
+
+[Debug] Value to move:
+&mut@0 (0: u32)
+[Debug] expand_bottom_value_from_projection:
+pe: (Expressions.Field ((Expressions.ProjTuple 2), 0))
+ty: (Types.Adt (Types.Tuple, [],
+ [(Types.Ref (Types.Erased, (Types.Integer Types.U32), Types.Mut));
+ (Types.Integer Types.U32)]
+ ))
+[Debug]
+**About to evaluate statement**: [
+ (p).1 := 1: u32;
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> (&mut@0 (0: u32), ⊥ : u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ (p).1 := 1: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> (&mut@0 (0: u32), ⊥ : u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> (&mut@0 (0: u32), ⊥ : u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+- op:
+1: u32
+
+[Debug]
+**About to evaluate statement**: [
+ pp0 := &mut p;
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> (&mut@0 (0: u32), 1: u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ pp0 := &mut p
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> (&mut@0 (0: u32), 1: u32) ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := &two-phase *(pp0);
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 ((&mut@0 (0: u32), 1: u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@7 := &two-phase *(pp0)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 ((&mut@0 (0: u32), 1: u32)) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ pp1 := move id_mut_pair<u32>(move var@7);
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (@shared_loan({2}, (&mut@0 (0: u32), 1: u32))) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⌊inactivated_mut@2⌋ ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ pp1 := move id_mut_pair<u32>(move var@7)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (@shared_loan({2}, (&mut@0 (0: u32), 1: u32))) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⌊inactivated_mut@2⌋ ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (@shared_loan({2}, (&mut@0 (0: u32), 1: u32))) ;
+ pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ var@7 -> ⌊inactivated_mut@2⌋ ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+}
+
+
+- op:
+move var@7
+
+[Debug] activate_inactivated_mut_borrow: resulting value:
+{ Values.value =
+ (Values.Adt
+ { Values.variant_id = <opaque>;
+ field_values =
+ [{ Values.value =
+ (Values.Borrow
+ (Values.MutBorrow (<opaque>,
+ { Values.value =
+ (Values.Concrete
+ (Values.Scalar { Values.value = 0; int_ty = Types.U32 }));
+ ty = (Types.Integer Types.U32) }
+ )));
+ ty =
+ (Types.Ref (Types.Erased, (Types.Integer Types.U32), Types.Mut)) };
+ { Values.value =
+ (Values.Concrete
+ (Values.Scalar { Values.value = 1; int_ty = Types.U32 }));
+ ty = (Types.Integer Types.U32) }
+ ]
+ });
+ ty =
+ (Types.Adt (Types.Tuple, [],
+ [(Types.Ref (Types.Erased, (Types.Integer Types.U32), Types.Mut));
+ (Types.Integer Types.U32)]
+ ))
+ }
+[Debug] Value to move:
+&mut@2 ((&mut@0 (0: u32), 1: u32))
+[Debug]
+**About to evaluate statement**: [
+ y := 2: u32;
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ y := 2: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⊥ : u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+- op:
+2: u32
+
+[Debug]
+**About to evaluate statement**: [
+ var@10 := &mut y;
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> 2: u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@10 := &mut y
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> 2: u32 ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> ⊥ : &'_ mut (u32) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@9 := &mut *(var@10);
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> &mut@3 (2: u32) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@9 := &mut *(var@10)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> &mut@3 (2: u32) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *((pp1).0) := move var@9;
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> &mut@4 (2: u32) ;
+ var@10 -> &mut@3 (⌊mut@4⌋) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *((pp1).0) := move var@9
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> &mut@4 (2: u32) ;
+ var@10 -> &mut@3 (⌊mut@4⌋) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> proj_comp {} (s@0 : &r@0 mut ((&r@0 mut (u32), u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> &mut@4 (2: u32) ;
+ var@10 -> &mut@3 (⌊mut@4⌋) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ proj_loans (s@0 : &r@0 mut ((&r@0 mut (u32), u32)))
+ }
+}
+
+
+- op:
+move var@9
+
+[Debug] Value to move:
+&mut@4 (2: u32)
+[Debug]
+**About to evaluate statement**: [
+ *((pp1).1) := 3: u32;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> &mut@5 ((&mut@4 (2: u32), proj_comp {} (s@3 : u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> &mut@3 (⌊mut@4⌋) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ ⌊mut@5, (proj_loans (s@2 : &r@0 mut (u32)), proj_loans (s@3 : u32))⌋
+ }
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ *((pp1).1) := 3: u32
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> &mut@5 ((&mut@4 (2: u32), proj_comp {} (s@3 : u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> &mut@3 (⌊mut@4⌋) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ ⌊mut@5, (proj_loans (s@2 : &r@0 mut (u32)), proj_loans (s@3 : u32))⌋
+ }
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> &mut@5 ((&mut@4 (2: u32), proj_comp {} (s@3 : u32))) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> &mut@3 (⌊mut@4⌋) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ ⌊mut@5, (proj_loans (s@2 : &r@0 mut (u32)), proj_loans (s@3 : u32))⌋
+ }
+}
+
+
+- op:
+3: u32
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : () ;
+ x -> ⌊mut@0⌋ ;
+ px -> ⊥ : &'_ mut (u32) ;
+ p -> ⌊mut@1⌋ ;
+ var@4 -> ⊥ : &'_ mut (u32) ;
+ pp0 -> &mut@1 (⌊mut@2⌋) ;
+ pp1 -> &mut@5 ((&mut@4 (2: u32), 3: u32)) ;
+ var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ;
+ y -> ⌊mut@3⌋ ;
+ var@9 -> ⊥ : &'_ mut (u32) ;
+ var@10 -> &mut@3 (⌊mut@4⌋) ;
+ abs@0{parents={}}{regions={0}} {
+ &mut@2 ((&mut@0 (0: u32), 1: u32)),
+ ⌊mut@5, (proj_loans (s@2 : &r@0 mut (u32)), proj_loans (s@3 : u32))⌋
+ }
+}
+
+
+
+[Debug] test_function_symbolic: id_mut_mut_pair
+[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut (&r@0 mut ((&r@0 mut (T), u32))))
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ;
+ x -> proj_comp {} (s@0 : &r@0 mut (&r@0 mut ((&r@0 mut (T), u32)))) ;
+ var@2 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut (&r@0 mut ((&r@0 mut (T), u32))))
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ;
+ x -> proj_comp {} (s@0 : &r@0 mut (&r@0 mut ((&r@0 mut (T), u32)))) ;
+ var@2 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@0 mut ((&r@0 mut (T), u32)))⌋
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (proj_comp {} (s@1 : &r@0 mut ((&r@0 mut (T), u32)))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@0 mut ((&r@0 mut (T), u32)))⌋
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (proj_comp {} (s@1 : &r@0 mut ((&r@0 mut (T), u32)))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@0 mut ((&r@0 mut (T), u32)))⌋
+ }
+ var@0 -> &mut@2 (proj_comp {} (s@1 : &r@0 mut ((&r@0 mut (T), u32)))) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (⌊mut@2⌋) ;
+}
+
+
+
+[Debug] test_function_symbolic: id_mut_mut_mut_same
+[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x);
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32))))
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ;
+ x -> proj_comp {} (s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32)))) ;
+ var@2 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@2 := &mut *(x)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32))))
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ;
+ x -> proj_comp {} (s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32)))) ;
+ var@2 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2);
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@0 mut (&r@0 mut (u32)))⌋
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (proj_comp {} (s@1 : &r@0 mut (&r@0 mut (u32)))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := &mut *(var@2)
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@0 mut (&r@0 mut (u32)))⌋
+ }
+ var@0 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (proj_comp {} (s@1 : &r@0 mut (&r@0 mut (u32)))) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ ⌊mut@0, proj_loans (s@1 : &r@0 mut (&r@0 mut (u32)))⌋
+ }
+ var@0 -> &mut@2 (proj_comp {} (s@1 : &r@0 mut (&r@0 mut (u32)))) ;
+ x -> &mut@0 (⌊mut@1⌋) ;
+ var@2 -> &mut@1 (⌊mut@2⌋) ;
+}
+
+
+
+[Debug] test_function_symbolic: id_borrow1
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ abs@0{parents={}}{regions={0}} {
+ proj_loans (s@0 : &r@0 mut (&r@1 (u32))),
+ proj_loans (s@1 : &r@0 (&r@0 mut (u32)))
+ }
+ abs@1{parents={0}}{regions={1}} {
+ proj_loans (s@0 : &r@0 mut (&r@1 (u32))),
+ proj_loans (s@1 : &r@0 (&r@0 mut (u32)))
+ }
+ var@0 -> ⊥ : () ;
+ _x -> proj_comp {} (s@0 : &r@0 mut (&r@1 (u32))) ;
+ _y -> proj_comp {} (s@1 : &r@0 (&r@0 mut (u32))) ;
+}
+
+
+
+[Debug] test_function_symbolic: test_static
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy x;
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : &'_ (u32) ;
+ x -> proj_comp {} (s@0 : &'static (u32)) ;
+}
+
+
+
+[Debug]
+**About to evaluate statement**: [
+ var@0 := copy x
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : &'_ (u32) ;
+ x -> proj_comp {} (s@0 : &'static (u32)) ;
+}
+
+
+
+[Debug] eval_operand:
+- ctx:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> ⊥ : &'_ (u32) ;
+ x -> proj_comp {} (s@0 : &'static (u32)) ;
+}
+
+
+- op:
+copy x
+
+[Debug] Value to copy:
+proj_comp {} (s@0 : &'static (u32))
+[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
+# 1 frame(s)
+
+# Frame 0:
+{
+ var@0 -> proj_comp {} (s@0 : &'static (u32)) ;
+ x -> proj_comp {} (s@0 : &'static (u32)) ;
+}
+
+
+
+[Debug] test_function_symbolic: test_char
+[Debug]
+**About to evaluate statement**: [
+ var@0 := a;
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16369,10 +34858,14 @@ About to evaluate statement: return
var@0 -> ⊥ : char ;
}
-About to evaluate statement: var@0 := a
-return
+
[Debug]
+**About to evaluate statement**: [
+ var@0 := a
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16380,7 +34873,7 @@ return
var@0 -> ⊥ : char ;
}
-About to evaluate statement: var@0 := a
+
[Debug] eval_operand:
- ctx:
@@ -16396,6 +34889,11 @@ About to evaluate statement: var@0 := a
a
[Debug]
+**About to evaluate statement**: [
+ return
+]
+
+**Context**:
# 1 frame(s)
# Frame 0:
@@ -16403,5 +34901,5 @@ a
var@0 -> a ;
}
-About to evaluate statement: return
+