From e2d71a7b813ed2fe86800f6638c4cd941991aaac Mon Sep 17 00:00:00 2001 From: Son Ho Date: Fri, 7 Jan 2022 12:40:45 +0100 Subject: Regenerate the trace --- tests/trace_reference.txt | 73732 +++++++++++++++++++++++++++++++++----------- 1 file changed, 56077 insertions(+), 17655 deletions(-) (limited to 'tests/trace_reference.txt') diff --git a/tests/trace_reference.txt b/tests/trace_reference.txt index 767b6cbb..46015011 100644 --- a/tests/trace_reference.txt +++ b/tests/trace_reference.txt @@ -878,6 +878,143 @@ fn test_char() -> char { return } +fn test_loops() { + var@0 : (); + x : u32; + var@2 : bool; + var@3 : bool; + var@4 : u32; + x : u32; + var@6 : bool; + var@7 : bool; + var@8 : u32; + x : u32; + var@10 : bool; + var@11 : bool; + var@12 : u32; + x : u32; + var@14 : bool; + var@15 : bool; + var@16 : u32; + x : u32; + var@18 : bool; + var@19 : bool; + var@20 : u32; + x : u32; + var@22 : bool; + var@23 : bool; + var@24 : u32; + + x := move test_loop1(2: u32); + var@4 := copy x; + var@3 := move var@4 == 2: u32; + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +} + +fn id_mut_mut_test1() { + var@0 : (); + x : i32; + px : &'_ mut (i32); + ppx : &'_ mut (&'_ mut (i32)); + ppy : &'_ mut (&'_ mut (i32)); + var@5 : &'_ mut (&'_ mut (i32)); + var@6 : bool; + var@7 : bool; + var@8 : i32; + var@9 : bool; + var@10 : bool; + var@11 : i32; + + x := 0: i32; + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +} + +fn id_mut_mut_test2() { + var@0 : (); + x : i32; + px : &'_ mut (i32); + ppx : &'_ mut (&'_ mut (i32)); + ppy : &'_ mut (&'_ mut (i32)); + var@5 : &'_ mut (&'_ mut (i32)); + y : i32; + py : &'_ mut (i32); + var@8 : &'_ mut (i32); + var@9 : bool; + var@10 : bool; + var@11 : i32; + var@12 : bool; + var@13 : bool; + var@14 : i32; + var@15 : bool; + var@16 : bool; + var@17 : i32; + + x := 0: i32; + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +} + [Debug] test_unit_function: test2 [Debug] **About to evaluate statement**: [ @@ -943,30 +1080,6 @@ fn test_char() -> char { -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; -} - - -- op: -23: u32 - [Debug] **About to evaluate statement**: [ y := 44: u32; @@ -1030,30 +1143,6 @@ fn test_char() -> char { -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; -} - - -- op: -44: u32 - [Debug] **About to evaluate statement**: [ z := 67: u32; @@ -1116,30 +1205,6 @@ fn test_char() -> char { -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; -} - - -- op: -67: u32 - [Debug] **About to evaluate statement**: [ var@5 := copy x; @@ -1201,32 +1266,6 @@ fn test_char() -> char { -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> 67: u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - 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; @@ -1287,32 +1326,6 @@ copy x -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> 67: u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> 23: u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - 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), [], @@ -1376,30 +1389,6 @@ ty: (Types.Adt ((Types.AdtId 0), [], -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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 ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; -} - - -- op: -67: u32 - [Debug] **About to evaluate statement**: [ (s as test1::Sum::Right).0 := true; @@ -1458,30 +1447,6 @@ ty: (Types.Adt ((Types.AdtId 0), [], -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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 ; - o -> ⊥ : test1::One ; - 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])) @@ -1598,30 +1563,6 @@ ty: (Types.Adt ((Types.AdtId 6), [], [(Types.Integer Types.U32); Types.Bool])) -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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 ; - 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)])) @@ -1873,52 +1814,6 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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: -# Ended regions: {} -# 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**: [ var@4 := copy x; @@ -1998,41 +1893,6 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 4: u32 ; - y -> 3: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -copy x - -[Debug] Value to copy: -4: u32 [Debug] **About to evaluate statement**: [ var@5 := copy y; @@ -2111,41 +1971,6 @@ copy x -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 4: u32 ; - y -> 3: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> 4: u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -copy y - -[Debug] Value to copy: -3: u32 [Debug] **About to evaluate statement**: [ var@3 := move var@4 >= move var@5; @@ -2223,76 +2048,6 @@ copy y -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 4: u32 ; - y -> 3: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> 4: u32 ; - var@5 -> 3: u32 ; -} - - -- op: -move var@4 - -[Debug] Value to move: -4: u32 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 4: u32 ; - y -> 3: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> 3: u32 ; -} - - -- op: -move var@5 - -[Debug] Value to move: -3: u32 [Debug] **About to evaluate statement**: [ if (move var@3) { @@ -2374,41 +2129,6 @@ move var@5 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 4: u32 ; - y -> 3: 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 @@ -2444,41 +2164,6 @@ true -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 4: u32 ; - y -> 3: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -copy x - -[Debug] Value to copy: -4: u32 [Debug] **About to evaluate statement**: [ return @@ -2576,41 +2261,6 @@ copy x var@5 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 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 ; -} - -# Frame 1: -{ - var@0 -> 4: u32 ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -move var@0 - -[Debug] Value to move: -4: u32 [Debug] **About to evaluate statement**: [ y := move get_max(10: u32, 11: u32); @@ -2669,10 +2319,23 @@ move var@0 -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { @@ -2688,45 +2351,21 @@ move var@0 var@9 -> ⊥ : u32 ; } - -- op: -10: u32 - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: +# Frame 1: { - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; + var@0 -> ⊥ : u32 ; + x -> 10: u32 ; + y -> 11: u32 ; + var@3 -> ⊥ : bool ; 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; - var@3 := move var@4 >= move var@5; - if (move var@3) { - var@0 := copy x - } - else { - var@0 := copy y - }; - return + var@4 := copy x ] **Context**: @@ -2761,85 +2400,15 @@ move var@0 [Debug] **About to evaluate statement**: [ - var@4 := copy x -] - -**Context**: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 10: u32 ; - y -> 11: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 10: u32 ; - y -> 11: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -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 + 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**: @@ -2907,41 +2476,6 @@ copy x -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 10: u32 ; - y -> 11: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> 10: u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -copy y - -[Debug] Value to copy: -11: u32 [Debug] **About to evaluate statement**: [ var@3 := move var@4 >= move var@5; @@ -3019,76 +2553,6 @@ copy y -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 10: u32 ; - y -> 11: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> 10: u32 ; - var@5 -> 11: u32 ; -} - - -- op: -move var@4 - -[Debug] Value to move: -10: u32 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 10: u32 ; - y -> 11: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> 11: u32 ; -} - - -- op: -move var@5 - -[Debug] Value to move: -11: u32 [Debug] **About to evaluate statement**: [ if (move var@3) { @@ -3170,41 +2634,6 @@ move var@5 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 10: u32 ; - y -> 11: 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 @@ -3240,41 +2669,6 @@ false -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : u32 ; - x -> 10: u32 ; - y -> 11: u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -copy y - -[Debug] Value to copy: -11: u32 [Debug] **About to evaluate statement**: [ return @@ -3372,41 +2766,6 @@ copy y var@5 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - -# Frame 1: -{ - var@0 -> 11: u32 ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -move var@0 - -[Debug] Value to move: -11: u32 [Debug] **About to evaluate statement**: [ var@4 := copy x; @@ -3464,31 +2823,6 @@ move var@0 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: 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: -4: u32 [Debug] **About to evaluate statement**: [ var@5 := copy y; @@ -3545,31 +2879,6 @@ copy x -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: u32 ; - z -> ⊥ : u32 ; - var@4 -> 4: u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - - -- op: -copy y - -[Debug] Value to copy: -11: u32 [Debug] **About to evaluate statement**: [ z := copy var@4 + copy var@5; @@ -3625,56 +2934,6 @@ copy y -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: u32 ; - z -> ⊥ : u32 ; - var@4 -> 4: u32 ; - var@5 -> 11: u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - - -- op: -copy var@4 - -[Debug] Value to copy: -4: u32 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: u32 ; - z -> ⊥ : u32 ; - var@4 -> 4: u32 ; - var@5 -> 11: u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - - -- op: -copy var@5 - -[Debug] Value to copy: -11: u32 [Debug] **About to evaluate statement**: [ var@9 := copy z; @@ -3729,31 +2988,6 @@ copy var@5 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: u32 ; - z -> 15: u32 ; - var@4 -> 4: u32 ; - var@5 -> 11: u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - - -- op: -copy z - -[Debug] Value to copy: -15: u32 [Debug] **About to evaluate statement**: [ var@8 := move var@9 == 15: u32; @@ -3807,54 +3041,6 @@ copy z -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: u32 ; - z -> 15: u32 ; - var@4 -> 4: u32 ; - var@5 -> 11: u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> 15: u32 ; -} - - -- op: -move var@9 - -[Debug] Value to move: -15: u32 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: u32 ; - z -> 15: u32 ; - var@4 -> 4: u32 ; - var@5 -> 11: 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; @@ -3907,31 +3093,6 @@ move var@9 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: u32 ; - z -> 15: u32 ; - var@4 -> 4: u32 ; - var@5 -> 11: u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; - var@8 -> true ; - var@9 -> ⊥ : u32 ; -} - - -- op: -move var@8 - -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ assert(¬move var@7); @@ -3983,31 +3144,6 @@ true -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 4: u32 ; - y -> 11: u32 ; - z -> 15: u32 ; - var@4 -> 4: u32 ; - var@5 -> 11: u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> false ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; -} - - -- op: -move var@7 - -[Debug] Value to move: -false [Debug] **About to evaluate statement**: [ return @@ -4072,22 +3208,6 @@ false -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - y -> ⊥ : i32 ; -} - - -- op: -3: i32 - [Debug] **About to evaluate statement**: [ y := -3: i32; @@ -4125,22 +3245,6 @@ false -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 3: i32 ; - y -> ⊥ : i32 ; -} - - -- op: --3: i32 - [Debug] **About to evaluate statement**: [ return @@ -4212,26 +3316,6 @@ false -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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; @@ -4382,26 +3466,6 @@ false -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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; @@ -4450,28 +3514,6 @@ false -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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; @@ -4519,48 +3561,6 @@ copy x -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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: -# Ended regions: {} -# 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; @@ -4607,28 +3607,6 @@ move var@6 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> ⊥ : bool ; - var@5 -> true ; - var@6 -> ⊥ : i32 ; -} - - -- op: -move var@5 - -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ assert(¬move var@4); @@ -4674,28 +3652,6 @@ true -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> false ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : i32 ; -} - - -- op: -move var@4 - -[Debug] Value to move: -false [Debug] **About to evaluate statement**: [ return @@ -4811,15 +3767,76 @@ false -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; + 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 0: i32 ; y -> ⊥ : i32 ; px -> ⊥ : &'_ mut (i32) ; py -> ⊥ : &'_ mut (i32) ; @@ -4840,12 +3857,9 @@ false } -- op: -0: i32 [Debug] **About to evaluate statement**: [ - y := 1: i32; px := &mut x; py := &mut y; ppx := &mut px; @@ -4879,7 +3893,7 @@ false { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⊥ : i32 ; + y -> 1: i32 ; px -> ⊥ : &'_ mut (i32) ; py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; @@ -4902,7 +3916,7 @@ false [Debug] **About to evaluate statement**: [ - y := 1: i32 + px := &mut x ] **Context**: @@ -4913,7 +3927,7 @@ false { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⊥ : i32 ; + y -> 1: i32 ; px -> ⊥ : &'_ mut (i32) ; py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; @@ -4934,17 +3948,76 @@ false -[Debug] eval_operand: -- ctx: +[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**: +# Ended regions: {} +# 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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - y -> ⊥ : i32 ; - px -> ⊥ : &'_ mut (i32) ; + x -> ⌊mut@0⌋ ; + y -> 1: i32 ; + px -> &mut@0 (0: i32) ; py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; @@ -4963,13 +4036,9 @@ false } -- 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; @@ -5000,10 +4069,10 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - y -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - py -> ⊥ : &'_ mut (i32) ; + 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 ; @@ -5024,7 +4093,7 @@ false [Debug] **About to evaluate statement**: [ - px := &mut x + ppx := &mut px ] **Context**: @@ -5034,10 +4103,10 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - y -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - py -> ⊥ : &'_ mut (i32) ; + 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 ; @@ -5058,8 +4127,6 @@ false [Debug] **About to evaluate statement**: [ - py := &mut y; - ppx := &mut px; var@6 := &mut *(py); *(ppx) := move var@6; *(*(ppx)) := 2: i32; @@ -5090,10 +4157,10 @@ false { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> 1: i32 ; - px -> &mut@0 (0: i32) ; - py -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + 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 ; @@ -5113,7 +4180,7 @@ false [Debug] **About to evaluate statement**: [ - py := &mut y + var@6 := &mut *(py) ] **Context**: @@ -5124,10 +4191,10 @@ false { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> 1: i32 ; - px -> &mut@0 (0: i32) ; - py -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + 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 ; @@ -5147,8 +4214,6 @@ false [Debug] **About to evaluate statement**: [ - ppx := &mut px; - var@6 := &mut *(py); *(ppx) := move var@6; *(*(ppx)) := 2: i32; var@9 := copy *(px); @@ -5179,10 +4244,10 @@ false 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) ; + 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 ; @@ -5201,7 +4266,7 @@ false [Debug] **About to evaluate statement**: [ - ppx := &mut px + *(ppx) := move var@6 ] **Context**: @@ -5213,10 +4278,10 @@ false 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) ; + 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 ; @@ -5235,8 +4300,6 @@ false [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; @@ -5264,11 +4327,11 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; + x -> 0: i32 ; y -> ⌊mut@1⌋ ; px -> ⌊mut@2⌋ ; - py -> &mut@1 (1: i32) ; - ppx -> &mut@2 (&mut@0 (0: i32)) ; + py -> &mut@1 (⌊mut@3⌋) ; + ppx -> &mut@2 (&mut@3 (1: i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; @@ -5288,7 +4351,7 @@ false [Debug] **About to evaluate statement**: [ - var@6 := &mut *(py) + *(*(ppx)) := 2: i32 ] **Context**: @@ -5298,11 +4361,11 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; + x -> 0: i32 ; y -> ⌊mut@1⌋ ; px -> ⌊mut@2⌋ ; - py -> &mut@1 (1: i32) ; - ppx -> &mut@2 (&mut@0 (0: i32)) ; + py -> &mut@1 (⌊mut@3⌋) ; + ppx -> &mut@2 (&mut@3 (1: i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; @@ -5322,8 +4385,6 @@ false [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; @@ -5350,12 +4411,12 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; + x -> 0: i32 ; y -> ⌊mut@1⌋ ; px -> ⌊mut@2⌋ ; py -> &mut@1 (⌊mut@3⌋) ; - ppx -> &mut@2 (&mut@0 (0: i32)) ; - var@6 -> &mut@3 (1: i32) ; + ppx -> &mut@2 (&mut@3 (2: i32)) ; + var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : i32 ; @@ -5374,7 +4435,7 @@ false [Debug] **About to evaluate statement**: [ - *(ppx) := move var@6 + var@9 := copy *(px) ] **Context**: @@ -5384,42 +4445,12 @@ false # 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: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; + x -> 0: i32 ; y -> ⌊mut@1⌋ ; px -> ⌊mut@2⌋ ; py -> &mut@1 (⌊mut@3⌋) ; - ppx -> &mut@2 (&mut@0 (0: i32)) ; - var@6 -> &mut@3 (1: i32) ; + ppx -> &mut@2 (&mut@3 (2: i32)) ; + var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : i32 ; @@ -5435,15 +4466,9 @@ false } -- 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); @@ -5471,13 +4496,13 @@ move var@6 var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> ⌊mut@2⌋ ; + px -> &mut@3 (2: i32) ; py -> &mut@1 (⌊mut@3⌋) ; - ppx -> &mut@2 (&mut@3 (1: i32)) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; - var@9 -> ⊥ : i32 ; + var@9 -> 2: i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; @@ -5493,7 +4518,7 @@ move var@6 [Debug] **About to evaluate statement**: [ - *(*(ppx)) := 2: i32 + var@8 := move var@9 == 2: i32 ] **Context**: @@ -5505,43 +4530,13 @@ move var@6 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: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 0: i32 ; - y -> ⌊mut@1⌋ ; - px -> ⌊mut@2⌋ ; + px -> &mut@3 (2: i32) ; py -> &mut@1 (⌊mut@3⌋) ; - ppx -> &mut@2 (&mut@3 (1: i32)) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; - var@9 -> ⊥ : i32 ; + var@9 -> 2: i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; @@ -5554,13 +4549,9 @@ move var@6 } -- 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; @@ -5587,12 +4578,12 @@ move var@6 var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> ⌊mut@2⌋ ; + px -> &mut@3 (2: i32) ; py -> &mut@1 (⌊mut@3⌋) ; - ppx -> &mut@2 (&mut@3 (2: i32)) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; + var@8 -> true ; var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; @@ -5609,7 +4600,7 @@ move var@6 [Debug] **About to evaluate statement**: [ - var@9 := copy *(px) + var@7 := ¬ move var@8 ] **Context**: @@ -5621,42 +4612,12 @@ move var@6 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: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 0: i32 ; - y -> ⌊mut@1⌋ ; - px -> ⌊mut@2⌋ ; + px -> &mut@3 (2: i32) ; py -> &mut@1 (⌊mut@3⌋) ; - ppx -> &mut@2 (&mut@3 (2: i32)) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; + var@8 -> true ; var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; @@ -5670,15 +4631,9 @@ move var@6 } -- 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; @@ -5708,9 +4663,9 @@ copy *(px) py -> &mut@1 (⌊mut@3⌋) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : bool ; + var@7 -> false ; var@8 -> ⊥ : bool ; - var@9 -> 2: i32 ; + var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; @@ -5726,7 +4681,7 @@ copy *(px) [Debug] **About to evaluate statement**: [ - var@8 := move var@9 == 2: i32 + assert(¬move var@7) ] **Context**: @@ -5742,9 +4697,9 @@ copy *(px) py -> &mut@1 (⌊mut@3⌋) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : bool ; + var@7 -> false ; var@8 -> ⊥ : bool ; - var@9 -> 2: i32 ; + var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; @@ -5758,8 +4713,24 @@ copy *(px) -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) @@ -5774,7 +4745,7 @@ copy *(px) var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; - var@9 -> 2: i32 ; + var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; @@ -5787,13 +4758,13 @@ copy *(px) } -- op: -move var@9 -[Debug] Value to move: -2: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@12 := copy x +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -5821,14 +4792,9 @@ move var@9 } -- 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); @@ -5857,11 +4823,11 @@ move var@9 ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; - var@8 -> true ; + var@8 -> ⊥ : bool ; var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@12 -> 0: i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; var@15 -> ⊥ : i32 ; @@ -5874,7 +4840,7 @@ move var@9 [Debug] **About to evaluate statement**: [ - var@7 := ¬ move var@8 + var@11 := move var@12 == 0: i32 ] **Context**: @@ -5891,41 +4857,11 @@ move var@9 ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; - var@8 -> true ; - 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: -# Ended regions: {} -# 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 -> true ; + var@8 -> ⊥ : bool ; var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@12 -> 0: i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; var@15 -> ⊥ : i32 ; @@ -5935,16 +4871,9 @@ move var@9 } -- op: -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); @@ -5971,11 +4900,11 @@ true py -> &mut@1 (⌊mut@3⌋) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> false ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; + var@11 -> true ; var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; @@ -5989,7 +4918,7 @@ true [Debug] **About to evaluate statement**: [ - assert(¬move var@7) + var@10 := ¬ move var@11 ] **Context**: @@ -6005,41 +4934,11 @@ true py -> &mut@1 (⌊mut@3⌋) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> false ; - 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: -# Ended regions: {} -# 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 -> false ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; + var@11 -> true ; var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; @@ -6050,16 +4949,9 @@ true } -- op: -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; @@ -6088,7 +4980,7 @@ false var@7 -> ⊥ : bool ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : i32 ; - var@10 -> ⊥ : bool ; + var@10 -> false ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; @@ -6103,7 +4995,7 @@ false [Debug] **About to evaluate statement**: [ - var@12 := copy x + assert(¬move var@10) ] **Context**: @@ -6122,37 +5014,7 @@ false 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: -# Ended regions: {} -# 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@10 -> false ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; @@ -6164,16 +5026,9 @@ false } -- 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; @@ -6203,7 +5058,7 @@ copy x var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> 0: i32 ; + var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; var@15 -> ⊥ : i32 ; @@ -6216,7 +5071,7 @@ copy x [Debug] **About to evaluate statement**: [ - var@11 := move var@12 == 0: i32 + var@15 := copy *(py) ] **Context**: @@ -6237,7 +5092,7 @@ copy x var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> 0: i32 ; + var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; var@15 -> ⊥ : i32 ; @@ -6248,8 +5103,19 @@ copy x -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) @@ -6258,8 +5124,8 @@ copy x var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + px -> ⊥ : &'_ mut (i32) ; + py -> &mut@1 (2: i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6267,23 +5133,23 @@ copy x var@9 -> ⊥ : i32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> 0: i32 ; + var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@15 -> 2: i32 ; var@16 -> ⊥ : bool ; var@17 -> ⊥ : bool ; var@18 -> ⊥ : i32 ; } -- op: -move var@12 -[Debug] Value to move: -0: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@14 := move var@15 == 2: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -6292,8 +5158,8 @@ move var@12 var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + px -> ⊥ : &'_ mut (i32) ; + py -> &mut@1 (2: i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6304,22 +5170,16 @@ move var@12 var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@15 -> 2: 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; @@ -6338,18 +5198,18 @@ move var@12 var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + 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 -> true ; + var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; + var@14 -> true ; var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; var@17 -> ⊥ : bool ; @@ -6360,7 +5220,7 @@ move var@12 [Debug] **About to evaluate statement**: [ - var@10 := ¬ move var@11 + var@13 := ¬ move var@14 ] **Context**: @@ -6372,48 +5232,18 @@ move var@12 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 -> true ; - 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: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 0: i32 ; - y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + 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 -> true ; + var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; + var@14 -> true ; var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; var@17 -> ⊥ : bool ; @@ -6421,17 +5251,9 @@ move var@12 } -- op: -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; @@ -6449,17 +5271,17 @@ true var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + 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 -> false ; + var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@13 -> false ; var@14 -> ⊥ : bool ; var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; @@ -6471,7 +5293,7 @@ true [Debug] **About to evaluate statement**: [ - assert(¬move var@10) + assert(¬move var@13) ] **Context**: @@ -6483,17 +5305,17 @@ true var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + 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 -> false ; + var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@13 -> false ; var@14 -> ⊥ : bool ; var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; @@ -6503,8 +5325,16 @@ true -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) @@ -6513,14 +5343,14 @@ true var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + 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 -> false ; + var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; @@ -6532,22 +5362,10 @@ true } -- op: -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 + var@18 := copy y ] **Context**: @@ -6559,8 +5377,8 @@ false var@0 -> ⊥ : () ; x -> 0: i32 ; y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + px -> ⊥ : &'_ mut (i32) ; + py -> &mut@1 (2: i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6581,7 +5399,10 @@ false [Debug] **About to evaluate statement**: [ - var@15 := copy *(py) + var@17 := move var@18 == 2: i32; + var@16 := ¬ move var@17; + assert(¬move var@16); + return ] **Context**: @@ -6592,9 +5413,9 @@ false { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + y -> 2: i32 ; + px -> ⊥ : &'_ mut (i32) ; + py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6608,13 +5429,17 @@ false var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@18 -> 2: i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@17 := move var@18 == 2: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -6622,9 +5447,9 @@ false { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⌊mut@1⌋ ; - px -> &mut@3 (2: i32) ; - py -> &mut@1 (⌊mut@3⌋) ; + y -> 2: i32 ; + px -> ⊥ : &'_ mut (i32) ; + py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6638,22 +5463,13 @@ false var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@18 -> 2: 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 @@ -6667,9 +5483,9 @@ copy *(py) { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⌊mut@1⌋ ; + y -> 2: i32 ; px -> ⊥ : &'_ mut (i32) ; - py -> &mut@1 (2: i32) ; + py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6680,9 +5496,9 @@ copy *(py) var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; - var@15 -> 2: i32 ; + var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; + var@17 -> true ; var@18 -> ⊥ : i32 ; } @@ -6690,7 +5506,7 @@ copy *(py) [Debug] **About to evaluate statement**: [ - var@14 := move var@15 == 2: i32 + var@16 := ¬ move var@17 ] **Context**: @@ -6701,9 +5517,9 @@ copy *(py) { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⌊mut@1⌋ ; + y -> 2: i32 ; px -> ⊥ : &'_ mut (i32) ; - py -> &mut@1 (2: i32) ; + py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6714,16 +5530,21 @@ copy *(py) var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; - var@15 -> 2: i32 ; + var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; + var@17 -> true ; var@18 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@16); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -6731,9 +5552,9 @@ copy *(py) { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⌊mut@1⌋ ; + y -> 2: i32 ; px -> ⊥ : &'_ mut (i32) ; - py -> &mut@1 (2: i32) ; + py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6744,20 +5565,20 @@ copy *(py) var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; - var@15 -> 2: i32 ; - var@16 -> ⊥ : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> false ; var@17 -> ⊥ : bool ; var@18 -> ⊥ : i32 ; } -- op: -move var@15 -[Debug] Value to move: -2: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@16) +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -6765,9 +5586,9 @@ move var@15 { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⌊mut@1⌋ ; + y -> 2: i32 ; px -> ⊥ : &'_ mut (i32) ; - py -> &mut@1 (2: i32) ; + py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6779,23 +5600,15 @@ move var@15 var@13 -> ⊥ : bool ; var@14 -> ⊥ : bool ; var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; + var@16 -> false ; 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 ] @@ -6807,9 +5620,9 @@ move var@15 { var@0 -> ⊥ : () ; x -> 0: i32 ; - y -> ⌊mut@1⌋ ; + y -> 2: i32 ; px -> ⊥ : &'_ mut (i32) ; - py -> &mut@1 (2: i32) ; + py -> ⊥ : &'_ mut (i32) ; ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; var@6 -> ⊥ : &'_ mut (i32) ; var@7 -> ⊥ : bool ; @@ -6819,7 +5632,7 @@ move var@15 var@11 -> ⊥ : bool ; var@12 -> ⊥ : i32 ; var@13 -> ⊥ : bool ; - var@14 -> true ; + var@14 -> ⊥ : bool ; var@15 -> ⊥ : i32 ; var@16 -> ⊥ : bool ; var@17 -> ⊥ : bool ; @@ -6828,9 +5641,16 @@ move var@15 +[Debug] test_unit_function: test_list1 [Debug] **About to evaluate statement**: [ - var@13 := ¬ move var@14 + set_discriminant(var@3, 1); + var@2 := move alloc::boxed::Box>::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**: @@ -6840,69 +5660,39 @@ move var@15 # 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 -> true ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + set_discriminant(var@3, 1) +] + +**Context**: # Ended regions: {} # 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 -> true ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -- op: -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); + var@2 := move alloc::boxed::Box>::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 ] @@ -6913,31 +5703,16 @@ true # 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 -> false ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@13) + var@2 := move alloc::boxed::Box>::new(move var@3) ] **Context**: @@ -6947,68 +5722,62 @@ true # 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 -> false ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; } -[Debug] eval_operand: -- ctx: +[Debug] eval_non_local_function_call: +- fid:CfimAst.BoxNew +- type_params: [test1::List] +- args: [move var@3] +- dest: var@2 +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 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 -> false ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } +# Frame 1: +{ + @return -> @Box(test1::List::Nil) ; + var@1 -> ⊥ : test1::List ; +} + +[Debug] ctx_pop_frame: locals to drop: [1] +[Debug] drop_value: place: var@1 +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; +} -- op: -move var@13 +# Frame 1: +{ + @return -> @Box(test1::List::Nil) ; + var@1 -> ⊥ : test1::List ; +} -[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); + (l as test1::List::Cons).0 := 0: i32; + (l as test1::List::Cons).1 := move var@2; + set_discriminant(l, 0); + drop(l); return ] @@ -7019,31 +5788,16 @@ false # 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 ; + l -> ⊥ : test1::List ; + var@2 -> @Box(test1::List::Nil) ; + var@3 -> ⊥ : test1::List ; } [Debug] **About to evaluate statement**: [ - var@18 := copy y + (l as test1::List::Cons).0 := 0: i32 ] **Context**: @@ -7053,67 +5807,21 @@ false # 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: -# Ended regions: {} -# 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 ; + l -> ⊥ : test1::List ; + var@2 -> @Box(test1::List::Nil) ; + var@3 -> ⊥ : test1::List ; } -- op: -copy y -[Debug] Value to copy: -2: 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**: [ - var@17 := move var@18 == 2: i32; - var@16 := ¬ move var@17; - assert(¬move var@16); + (l as test1::List::Cons).1 := move var@2; + set_discriminant(l, 0); + drop(l); return ] @@ -7124,31 +5832,16 @@ copy y # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> @Box(test1::List::Nil) ; + var@3 -> ⊥ : test1::List ; } [Debug] **About to evaluate statement**: [ - var@17 := move var@18 == 2: i32 + (l as test1::List::Cons).1 := move var@2 ] **Context**: @@ -7158,98 +5851,56 @@ copy y # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> @Box(test1::List::Nil) ; + var@3 -> ⊥ : test1::List ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + set_discriminant(l, 0); + drop(l); + return +] + +**Context**: # Ended regions: {} # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -- op: -move var@18 -[Debug] Value to move: -2: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + set_discriminant(l, 0) +] + +**Context**: # Ended regions: {} # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -- op: -2: i32 [Debug] **About to evaluate statement**: [ - var@16 := ¬ move var@17; - assert(¬move var@16); + drop(l); return ] @@ -7260,31 +5911,16 @@ move var@18 # 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 -> true ; - var@18 -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } [Debug] **About to evaluate statement**: [ - var@16 := ¬ move var@17 + drop(l) ] **Context**: @@ -7294,65 +5930,47 @@ move var@18 # 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 -> true ; - var@18 -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -[Debug] eval_operand: -- ctx: +[Debug] drop_value: place: l +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 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 -> true ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -- op: -move var@17 -[Debug] Value to move: -true +[Debug] test_unit_function: test_box1 [Debug] **About to evaluate statement**: [ - assert(¬move var@16); + b := move alloc::boxed::Box::new(0: i32); + var@3 := &two-phase b; + x := move core::ops::deref::DerefMut::deref_mut(move var@3); + *(x) := 1: i32; + var@5 := &b; + x := move core::ops::deref::Deref>::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 ] @@ -7363,31 +5981,21 @@ true # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - y -> 2: i32 ; - px -> ⊥ : &'_ mut (i32) ; - py -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@6 -> ⊥ : &'_ mut (i32) ; + b -> ⊥ : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 -> false ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@16) + b := move alloc::boxed::Box::new(0: i32) ] **Context**: @@ -7397,105 +6005,83 @@ true # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - y -> 2: i32 ; - px -> ⊥ : &'_ mut (i32) ; - py -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@6 -> ⊥ : &'_ mut (i32) ; + b -> ⊥ : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 -> false ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] eval_non_local_function_call: +- fid:CfimAst.BoxNew +- type_params: [i32] +- args: [0: i32] +- dest: b +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + b -> ⊥ : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 -> false ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } +# Frame 1: +{ + @return -> @Box(0: i32) ; + var@1 -> ⊥ : i32 ; +} -- op: -move var@16 - -[Debug] Value to move: -false -[Debug] -**About to evaluate statement**: [ - return -] - -**Context**: +[Debug] ctx_pop_frame: locals to drop: [1] +[Debug] drop_value: place: var@1 +[Debug] ctx_pop_frame: after dropping local variables: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + b -> ⊥ : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 ; + var@8 -> ⊥ : i32 ; } +# Frame 1: +{ + @return -> @Box(0: i32) ; + var@1 -> ⊥ : i32 ; +} - -[Debug] test_unit_function: test_list1 [Debug] **About to evaluate statement**: [ - set_discriminant(var@3, 1); - var@2 := move alloc::boxed::Box>::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); + var@3 := &two-phase b; + x := move core::ops::deref::DerefMut::deref_mut(move var@3); + *(x) := 1: i32; + var@5 := &b; + x := move core::ops::deref::Deref>::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 ] @@ -7506,16 +6092,21 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + b -> @Box(0: i32) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - set_discriminant(var@3, 1) + var@3 := &two-phase b ] **Context**: @@ -7525,20 +6116,29 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + b -> @Box(0: i32) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@2 := move alloc::boxed::Box>::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); + x := move core::ops::deref::DerefMut::deref_mut(move var@3); + *(x) := 1: i32; + var@5 := &b; + x := move core::ops::deref::Deref>::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 ] @@ -7549,16 +6149,21 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; + b -> @shared_loan({0}, @Box(0: i32)) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⌊inactivated_mut@0⌋ ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@2 := move alloc::boxed::Box>::new(move var@3) + x := move core::ops::deref::DerefMut::deref_mut(move var@3) ] **Context**: @@ -7568,251 +6173,94 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; + b -> @shared_loan({0}, @Box(0: i32)) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⌊inactivated_mut@0⌋ ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } [Debug] eval_non_local_function_call: -- fid:CfimAst.BoxNew -- type_params: [test1::List] +- fid:CfimAst.BoxDerefMut +- type_params: [i32] - args: [move var@3] -- dest: var@2 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; -} - - -- op: -move var@3 - -[Debug] Value to move: -test1::List::Nil -[Debug] eval_operand: -- ctx: +- dest: x +[Debug] activate_inactivated_mut_borrow: resulting value: +{ Values.value = + (Values.Adt + { Values.variant_id = ; + field_values = + [{ Values.value = + (Values.Concrete + (Values.Scalar { Values.value = 0; int_ty = Types.I32 })); + ty = (Types.Integer Types.I32) } + ] + }); + ty = + (Types.Adt ((Types.Assumed Types.Box), [], [(Types.Integer Types.I32)])) } +[Debug] ctx_pop_frame: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + b -> ⌊mut@0⌋ ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } # Frame 1: { - @return -> ⊥ : std::boxed::Box> ; - var@1 -> test1::List::Nil ; + @return -> &mut@1 (0: i32) ; + var@1 -> &mut@0 (@Box(⌊mut@1⌋)) ; } - -- op: -move var@1 - -[Debug] Value to move: -test1::List::Nil -[Debug] ctx_pop_frame: +[Debug] ctx_pop_frame: locals to drop: [1] +[Debug] drop_value: place: var@1 +[Debug] ctx_pop_frame: after dropping local variables: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + b -> @Box(⌊mut@1⌋) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } # Frame 1: { - @return -> @Box(test1::List::Nil) ; - var@1 -> ⊥ : test1::List ; + @return -> &mut@1 (0: i32) ; + var@1 -> ⊥ : &'_ mut (std::boxed::Box) ; } -[Debug] ctx_pop_frame: locals to drop: [1] -[Debug] drop_value: place: var@1 -[Debug] ctx_pop_frame: after dropping local variables: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; -} - -# Frame 1: -{ - @return -> @Box(test1::List::Nil) ; - var@1 -> ⊥ : test1::List ; -} - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; -} - -# Frame 1: -{ - @return -> @Box(test1::List::Nil) ; - var@1 -> ⊥ : test1::List ; -} - - -- op: -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**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; -} - - - -[Debug] -**About to evaluate statement**: [ - (l as test1::List::Cons).0 := 0: i32 -] - -**Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; -} - - -- 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**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; -} - - - -[Debug] -**About to evaluate statement**: [ - (l as test1::List::Cons).1 := move var@2 -] - -**Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; -} - - -- op: -move var@2 - -[Debug] Value to move: -@Box(test1::List::Nil) [Debug] **About to evaluate statement**: [ - set_discriminant(l, 0); - drop(l); + *(x) := 1: i32; + var@5 := &b; + x := move core::ops::deref::Deref>::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 ] @@ -7823,16 +6271,21 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + b -> @Box(⌊mut@1⌋) ; + x -> &mut@1 (0: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - set_discriminant(l, 0) + *(x) := 1: i32 ] **Context**: @@ -7842,16 +6295,27 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + b -> @Box(⌊mut@1⌋) ; + x -> &mut@1 (0: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - drop(l); + var@5 := &b; + x := move core::ops::deref::Deref>::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 ] @@ -7862,36 +6326,21 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; -} - - - -[Debug] -**About to evaluate statement**: [ - drop(l) -] - -**Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + b -> @Box(⌊mut@1⌋) ; + x -> &mut@1 (1: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } -[Debug] drop_value: place: l [Debug] **About to evaluate statement**: [ - return + var@5 := &b ] **Context**: @@ -7901,21 +6350,20 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + b -> @Box(⌊mut@1⌋) ; + x -> &mut@1 (1: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } -[Debug] test_unit_function: test_box1 [Debug] **About to evaluate statement**: [ - b := move alloc::boxed::Box::new(0: i32); - var@3 := &two-phase b; - x := move core::ops::deref::DerefMut::deref_mut(move var@3); - *(x) := 1: i32; - var@5 := &b; x := move core::ops::deref::Deref>::deref(move var@5); var@8 := copy *(x); var@7 := move var@8 == 1: i32; @@ -7932,11 +6380,11 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; + b -> @shared_loan({2}, @Box(1: i32)) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@5 -> ⌊shared@2⌋ ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; @@ -7946,7 +6394,7 @@ move var@2 [Debug] **About to evaluate statement**: [ - b := move alloc::boxed::Box::new(0: i32) + x := move core::ops::deref::Deref>::deref(move var@5) ] **Context**: @@ -7956,11 +6404,11 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; + b -> @shared_loan({2}, @Box(1: i32)) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@5 -> ⌊shared@2⌋ ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; @@ -7969,62 +6417,10 @@ move var@2 [Debug] eval_non_local_function_call: -- fid:CfimAst.BoxNew +- fid:CfimAst.BoxDeref - type_params: [i32] -- args: [0: i32] -- dest: b -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; -} - - -- op: -0: i32 - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; -} - -# Frame 1: -{ - @return -> ⊥ : std::boxed::Box ; - var@1 -> 0: i32 ; -} - - -- op: -move var@1 - -[Debug] Value to move: -0: i32 +- args: [move var@5] +- dest: x [Debug] ctx_pop_frame: # Ended regions: {} # 2 frame(s) @@ -8032,7 +6428,7 @@ move var@1 # Frame 0: { var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; + b -> @shared_loan({2}, @Box(@shared_loan({3}, 1: i32))) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; x -> ⊥ : &'_ (i32) ; @@ -8044,8 +6440,8 @@ move var@1 # Frame 1: { - @return -> @Box(0: i32) ; - var@1 -> ⊥ : i32 ; + @return -> ⌊shared@3⌋ ; + var@1 -> ⌊shared@2⌋ ; } [Debug] ctx_pop_frame: locals to drop: [1] @@ -8057,31 +6453,7 @@ move var@1 # Frame 0: { var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; -} - -# Frame 1: -{ - @return -> @Box(0: i32) ; - var@1 -> ⊥ : i32 ; -} - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; x -> ⊥ : &'_ (i32) ; @@ -8093,23 +6465,12 @@ move var@1 # Frame 1: { - @return -> @Box(0: i32) ; - var@1 -> ⊥ : i32 ; + @return -> ⌊shared@3⌋ ; + var@1 -> ⊥ : &'_ (std::boxed::Box) ; } - -- op: -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::deref_mut(move var@3); - *(x) := 1: i32; - var@5 := &b; - x := move core::ops::deref::Deref>::deref(move var@5); var@8 := copy *(x); var@7 := move var@8 == 1: i32; var@6 := ¬ move var@7; @@ -8125,10 +6486,10 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(0: i32) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : bool ; @@ -8139,7 +6500,7 @@ move @return [Debug] **About to evaluate statement**: [ - var@3 := &two-phase b + var@8 := copy *(x) ] **Context**: @@ -8149,10 +6510,10 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(0: i32) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : bool ; @@ -8163,11 +6524,6 @@ move @return [Debug] **About to evaluate statement**: [ - x := move core::ops::deref::DerefMut::deref_mut(move var@3); - *(x) := 1: i32; - var@5 := &b; - x := move core::ops::deref::Deref>::deref(move var@5); - var@8 := copy *(x); var@7 := move var@8 == 1: i32; var@6 := ¬ move var@7; assert(¬move var@6); @@ -8182,21 +6538,21 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({0}, @Box(0: i32)) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⌊inactivated_mut@0⌋ ; - x -> ⊥ : &'_ (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@8 -> 1: i32 ; } [Debug] **About to evaluate statement**: [ - x := move core::ops::deref::DerefMut::deref_mut(move var@3) + var@7 := move var@8 == 1: i32 ] **Context**: @@ -8206,147 +6562,121 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({0}, @Box(0: i32)) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⌊inactivated_mut@0⌋ ; - x -> ⊥ : &'_ (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@8 -> 1: i32 ; } -[Debug] eval_non_local_function_call: -- fid:CfimAst.BoxDerefMut -- type_params: [i32] -- args: [move var@3] -- dest: x -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@6 := ¬ move var@7; + assert(¬move var@6); + drop(b); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({0}, @Box(0: i32)) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⌊inactivated_mut@0⌋ ; - x -> ⊥ : &'_ (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> true ; var@8 -> ⊥ : i32 ; } -- op: -move var@3 -[Debug] activate_inactivated_mut_borrow: resulting value: -{ Values.value = - (Values.Adt - { Values.variant_id = ; - field_values = - [{ Values.value = - (Values.Concrete - (Values.Scalar { Values.value = 0; int_ty = Types.I32 })); - ty = (Types.Integer Types.I32) } - ] - }); - ty = - (Types.Adt ((Types.Assumed Types.Box), [], [(Types.Integer Types.I32)])) } -[Debug] Value to move: -&mut@0 (@Box(0: i32)) -[Debug] ctx_pop_frame: +[Debug] +**About to evaluate statement**: [ + var@6 := ¬ move var@7 +] + +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> ⌊mut@0⌋ ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> true ; var@8 -> ⊥ : i32 ; } -# Frame 1: -{ - @return -> &mut@1 (0: i32) ; - var@1 -> &mut@0 (@Box(⌊mut@1⌋)) ; -} -[Debug] ctx_pop_frame: locals to drop: [1] -[Debug] drop_value: place: var@1 -[Debug] ctx_pop_frame: after dropping local variables: + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6); + drop(b); + return +] + +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(⌊mut@1⌋) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; + var@6 -> false ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; } -# Frame 1: -{ - @return -> &mut@1 (0: i32) ; - var@1 -> ⊥ : &'_ mut (std::boxed::Box) ; -} -[Debug] eval_operand: -- ctx: + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6) +] + +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(⌊mut@1⌋) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; + var@6 -> false ; var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; } -# Frame 1: -{ - @return -> &mut@1 (0: i32) ; - var@1 -> ⊥ : &'_ mut (std::boxed::Box) ; -} - -- op: -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>::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 ] @@ -8358,10 +6688,10 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(⌊mut@1⌋) ; - x -> &mut@1 (0: i32) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; + x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : bool ; @@ -8372,7 +6702,7 @@ move @return [Debug] **About to evaluate statement**: [ - *(x) := 1: i32 + drop(b) ] **Context**: @@ -8382,10 +6712,10 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(⌊mut@1⌋) ; - x -> &mut@1 (0: i32) ; + b -> @Box(@shared_loan({3}, 1: i32)) ; + x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; + x -> ⌊shared@3⌋ ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : bool ; @@ -8394,16 +6724,21 @@ move @return -[Debug] eval_operand: -- ctx: +[Debug] drop_value: place: b +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(⌊mut@1⌋) ; - x -> &mut@1 (0: i32) ; + b -> ⊥ : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; x -> ⊥ : &'_ (i32) ; var@5 -> ⊥ : &'_ (std::boxed::Box) ; @@ -8413,18 +6748,19 @@ move @return } -- op: -1: i32 +[Debug] test_unit_function: test_copy_int [Debug] **About to evaluate statement**: [ - var@5 := &b; - x := move core::ops::deref::Deref>::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); + 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 ] @@ -8435,13 +6771,13 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(⌊mut@1⌋) ; - x -> &mut@1 (1: i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ (i32) ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } @@ -8449,7 +6785,7 @@ move @return [Debug] **About to evaluate statement**: [ - var@5 := &b + x := 0: i32 ] **Context**: @@ -8459,13 +6795,13 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(⌊mut@1⌋) ; - x -> &mut@1 (1: i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ (i32) ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } @@ -8473,12 +6809,14 @@ move @return [Debug] **About to evaluate statement**: [ - x := move core::ops::deref::Deref>::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); + 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 ] @@ -8489,13 +6827,13 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, @Box(1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⌊shared@2⌋ ; + x -> 0: i32 ; + px -> ⊥ : &'_ (i32) ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } @@ -8503,7 +6841,7 @@ move @return [Debug] **About to evaluate statement**: [ - x := move core::ops::deref::Deref>::deref(move var@5) + px := &x ] **Context**: @@ -8513,133 +6851,106 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, @Box(1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⌊shared@2⌋ ; + x -> 0: i32 ; + px -> ⊥ : &'_ (i32) ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; 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: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, @Box(1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⌊shared@2⌋ ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } -- op: -move var@5 -[Debug] Value to move: -⌊shared@2⌋ -[Debug] ctx_pop_frame: +[Debug] +**About to evaluate statement**: [ + var@4 := copy x +] + +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, @Box(@shared_loan({3}, 1: i32))) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } -# Frame 1: -{ - @return -> ⌊shared@3⌋ ; - var@1 -> ⌊shared@2⌋ ; -} - -[Debug] ctx_pop_frame: locals to drop: [1] -[Debug] drop_value: place: var@1 -[Debug] ctx_pop_frame: after dropping local variables: -# Ended regions: {} -# 2 frame(s) -# Frame 0: -{ - var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; -} -# Frame 1: -{ - @return -> ⌊shared@3⌋ ; - var@1 -> ⊥ : &'_ (std::boxed::Box) ; -} +[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 +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> 0: i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } -# Frame 1: -{ - @return -> ⌊shared@3⌋ ; - var@1 -> ⊥ : &'_ (std::boxed::Box) ; -} - -- op: -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 + y := move copy_int(move var@4) ] **Context**: @@ -8649,13 +6960,13 @@ move @return # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> 0: i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } @@ -8663,155 +6974,150 @@ move @return [Debug] **About to evaluate statement**: [ - var@8 := copy *(x) + var@0 := copy x; + return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: +# Frame 1: { - var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@0 -> ⊥ : i32 ; + x -> 0: i32 ; } -- op: -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 + var@0 := copy x ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> 1: i32 ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : i32 ; + x -> 0: i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := move var@8 == 1: i32 + return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> 1: i32 ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> 0: i32 ; + x -> 0: i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> 1: i32 ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> 0: i32 ; + x -> 0: i32 ; +} -- op: -move var@8 - -[Debug] Value to move: -1: i32 -[Debug] eval_operand: -- ctx: +[Debug] ctx_pop_frame: locals to drop: [1] +[Debug] drop_value: place: x +[Debug] ctx_pop_frame: after dropping local variables: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } - -- op: -1: i32 +# Frame 1: +{ + var@0 -> 0: i32 ; + x -> ⊥ : i32 ; +} [Debug] **About to evaluate statement**: [ - var@6 := ¬ move var@7; - assert(¬move var@6); - drop(b); + 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 ] @@ -8822,13 +7128,13 @@ move var@8 # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> true ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } @@ -8836,7 +7142,7 @@ move var@8 [Debug] **About to evaluate statement**: [ - var@6 := ¬ move var@7 + var@7 := copy *(px) ] **Context**: @@ -8846,47 +7152,49 @@ move var@8 # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> true ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; - var@7 -> true ; + var@7 -> 0: i32 ; var@8 -> ⊥ : i32 ; } -- op: -move var@7 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - assert(¬move var@6); - drop(b); - return + var@8 := copy y ] **Context**: @@ -8896,13 +7204,13 @@ true # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> false ; - var@7 -> ⊥ : bool ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> 0: i32 ; var@8 -> ⊥ : i32 ; } @@ -8910,7 +7218,10 @@ true [Debug] **About to evaluate statement**: [ - assert(¬move var@6) + var@6 := move var@7 == move var@8; + var@5 := ¬ move var@6; + assert(¬move var@5); + return ] **Context**: @@ -8920,45 +7231,46 @@ true # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> false ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> 0: i32 ; + var@8 -> 0: i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@6 := move var@7 == move var@8 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> false ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> 0: i32 ; + var@8 -> 0: i32 ; } -- op: -move var@6 -[Debug] Value to move: -false [Debug] **About to evaluate statement**: [ - drop(b); + var@5 := ¬ move var@6; + assert(¬move var@5); return ] @@ -8969,13 +7281,13 @@ false # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> true ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } @@ -8983,7 +7295,7 @@ false [Debug] **About to evaluate statement**: [ - drop(b) + var@5 := ¬ move var@6 ] **Context**: @@ -8993,21 +7305,21 @@ false # Frame 0: { var@0 -> ⊥ : () ; - b -> @Box(@shared_loan({3}, 1: i32)) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> true ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } -[Debug] drop_value: place: b [Debug] **About to evaluate statement**: [ + assert(¬move var@5); return ] @@ -9018,31 +7330,21 @@ false # Frame 0: { var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> false ; var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; } -[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 + assert(¬move var@5) ] **Context**: @@ -9052,11 +7354,11 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - px -> ⊥ : &'_ (i32) ; - y -> ⊥ : i32 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; + var@5 -> false ; var@6 -> ⊥ : bool ; var@7 -> ⊥ : i32 ; var@8 -> ⊥ : i32 ; @@ -9066,7 +7368,7 @@ false [Debug] **About to evaluate statement**: [ - x := 0: i32 + return ] **Context**: @@ -9076,9 +7378,9 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - px -> ⊥ : &'_ (i32) ; - y -> ⊥ : i32 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 0: i32 ; var@4 -> ⊥ : i32 ; var@5 -> ⊥ : bool ; var@6 -> ⊥ : bool ; @@ -9088,39 +7390,44 @@ false -[Debug] eval_operand: -- ctx: +[Debug] test_unit_function: test_is_cons +[Debug] +**About to evaluate statement**: [ + set_discriminant(var@3, 1); + var@2 := move alloc::boxed::Box>::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(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - px -> ⊥ : &'_ (i32) ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -- 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 + set_discriminant(var@3, 1) ] **Context**: @@ -9130,21 +7437,30 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - px -> ⊥ : &'_ (i32) ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } [Debug] **About to evaluate statement**: [ - px := &x + var@2 := move alloc::boxed::Box>::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(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return ] **Context**: @@ -9154,28 +7470,20 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - px -> ⊥ : &'_ (i32) ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } [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 + var@2 := move alloc::boxed::Box>::new(move var@3) ] **Context**: @@ -9185,74 +7493,79 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -[Debug] -**About to evaluate statement**: [ - var@4 := copy x -] - -**Context**: +[Debug] eval_non_local_function_call: +- fid:CfimAst.BoxNew +- type_params: [test1::List] +- args: [move var@3] +- dest: var@2 +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } +# Frame 1: +{ + @return -> @Box(test1::List::Nil) ; + var@1 -> ⊥ : test1::List ; +} - -[Debug] eval_operand: -- ctx: +[Debug] ctx_pop_frame: locals to drop: [1] +[Debug] drop_value: place: var@1 +[Debug] ctx_pop_frame: after dropping local variables: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } +# Frame 1: +{ + @return -> @Box(test1::List::Nil) ; + var@1 -> ⊥ : test1::List ; +} -- 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); + (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(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); return ] @@ -9263,21 +7576,20 @@ copy x # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> 0: i32 ; + l -> ⊥ : test1::List ; + var@2 -> @Box(test1::List::Nil) ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } [Debug] **About to evaluate statement**: [ - y := move copy_int(move var@4) + (l as test1::List::Cons).0 := 0: i32 ] **Context**: @@ -9287,249 +7599,210 @@ copy x # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> 0: i32 ; + l -> ⊥ : test1::List ; + var@2 -> @Box(test1::List::Nil) ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -[Debug] eval_operand: -- ctx: +[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(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> 0: i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> @Box(test1::List::Nil) ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -- op: -move var@4 -[Debug] Value to move: -0: i32 [Debug] **About to evaluate statement**: [ - var@0 := copy x; - return + (l as test1::List::Cons).1 := move var@2 ] **Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> @Box(test1::List::Nil) ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : i32 ; - x -> 0: i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } [Debug] **About to evaluate statement**: [ - var@0 := copy x + set_discriminant(l, 0); + var@7 := &l; + var@6 := copy var@7; + var@5 := move is_cons(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -# Frame 1: -{ - var@0 -> ⊥ : i32 ; - x -> 0: i32 ; -} +[Debug] +**About to evaluate statement**: [ + set_discriminant(l, 0) +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : i32 ; - x -> 0: i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -- op: -copy x -[Debug] Value to copy: -0: i32 [Debug] **About to evaluate statement**: [ + var@7 := &l; + var@6 := copy var@7; + var@5 := move is_cons(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -# Frame 1: -{ - var@0 -> 0: i32 ; - x -> 0: i32 ; -} +[Debug] +**About to evaluate statement**: [ + var@7 := &l +] -[Debug] ctx_pop_frame: +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> 0: i32 ; - x -> 0: i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -[Debug] ctx_pop_frame: locals to drop: [1] -[Debug] drop_value: place: x -[Debug] ctx_pop_frame: after dropping local variables: -# Ended regions: {} -# 2 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 ; -} -# Frame 1: -{ - var@0 -> 0: i32 ; - x -> ⊥ : i32 ; -} +[Debug] +**About to evaluate statement**: [ + var@6 := copy var@7; + var@5 := move is_cons(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> ⊥ : i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> 0: i32 ; - x -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } -- op: -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 + var@6 := copy var@7 ] **Context**: @@ -9539,21 +7812,24 @@ move var@0 # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } [Debug] **About to evaluate statement**: [ - var@7 := copy *(px) + var@5 := move is_cons(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return ] **Context**: @@ -9563,221 +7839,307 @@ move var@0 # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⌊shared@1⌋ ; + var@7 -> ⌊shared@0⌋ ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@5 := move is_cons(move var@6) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⌊shared@1⌋ ; + var@7 -> ⌊shared@0⌋ ; } -- 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); + var@2 := discriminant(*(l)); + switch (move var@2) { + 0: isize => { + var@0 := true + } + 1: isize => { + var@0 := false + } + _ => { + panic + } + }; return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; +} + +# Frame 1: +{ + var@0 -> ⊥ : bool ; + l -> ⌊shared@1⌋ ; + var@2 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@8 := copy y + var@2 := discriminant(*(l)) ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; +} + +# Frame 1: +{ + var@0 -> ⊥ : bool ; + l -> ⌊shared@1⌋ ; + var@2 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + switch (move var@2) { + 0: isize => { + var@0 := true + } + 1: isize => { + var@0 := false + } + _ => { + panic + } + }; + return +] + +**Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; +} + +# Frame 1: +{ + var@0 -> ⊥ : bool ; + l -> ⌊shared@1⌋ ; + var@2 -> 0: isize ; } -- op: -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 + switch (move var@2) { + 0: isize => { + var@0 := true + } + 1: isize => { + var@0 := false + } + _ => { + panic + } + } ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> 0: i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; +} + +# Frame 1: +{ + var@0 -> ⊥ : bool ; + l -> ⌊shared@1⌋ ; + var@2 -> 0: isize ; } [Debug] **About to evaluate statement**: [ - var@6 := move var@7 == move var@8 + var@0 := true ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> 0: i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } +# Frame 1: +{ + var@0 -> ⊥ : bool ; + l -> ⌊shared@1⌋ ; + var@2 -> ⊥ : isize ; +} + + +[Debug] +**About to evaluate statement**: [ + return +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> 0: i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; +} + +# Frame 1: +{ + var@0 -> true ; + l -> ⌊shared@1⌋ ; + var@2 -> ⊥ : isize ; } -- op: -move var@7 -[Debug] Value to move: -0: i32 -[Debug] eval_operand: -- ctx: +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> 0: i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; +} + +# Frame 1: +{ + var@0 -> true ; + l -> ⌊shared@1⌋ ; + var@2 -> ⊥ : isize ; } +[Debug] ctx_pop_frame: locals to drop: [2,1] +[Debug] drop_value: place: var@2 +[Debug] drop_value: place: l +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; +} -- op: -move var@8 +# Frame 1: +{ + var@0 -> true ; + l -> ⊥ : &'_ (test1::List) ; + var@2 -> ⊥ : isize ; +} -[Debug] Value to move: -0: i32 [Debug] **About to evaluate statement**: [ - var@5 := ¬ move var@6; - assert(¬move var@5); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); return ] @@ -9788,21 +8150,20 @@ move var@8 # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> true ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> true ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } [Debug] **About to evaluate statement**: [ - var@5 := ¬ move var@6 + var@4 := ¬ move var@5 ] **Context**: @@ -9812,46 +8173,45 @@ move var@8 # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> true ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> true ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@4); + drop(l); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> false ; var@5 -> ⊥ : bool ; - var@6 -> true ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } -- op: -move var@6 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - assert(¬move var@5); - return + assert(¬move var@4) ] **Context**: @@ -9861,21 +8221,21 @@ true # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> false ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> false ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@5) + drop(l); + return ] **Context**: @@ -9885,42 +8245,41 @@ true # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> false ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + drop(l) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> false ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } -- op: -move var@5 -[Debug] Value to move: -false +[Debug] drop_value: place: l [Debug] **About to evaluate statement**: [ return @@ -9933,19 +8292,18 @@ false # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> 0: i32 ; - var@4 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -[Debug] test_unit_function: test_is_cons +[Debug] test_unit_function: test_split_list [Debug] **About to evaluate statement**: [ set_discriminant(var@3, 1); @@ -9953,12 +8311,15 @@ false (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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + var@7 := move l; + var@6 := move split_list(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 ] @@ -9972,10 +8333,13 @@ false l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } @@ -9995,10 +8359,13 @@ false l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } @@ -10009,12 +8376,15 @@ false (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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + var@7 := move l; + var@6 := move split_list(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 ] @@ -10028,10 +8398,13 @@ false l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> test1::List::Nil ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } @@ -10051,10 +8424,13 @@ false l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> test1::List::Nil ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } @@ -10064,58 +8440,6 @@ false - type_params: [test1::List] - args: [move var@3] - dest: var@2 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; -} - - -- op: -move var@3 - -[Debug] Value to move: -test1::List::Nil -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 2 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; -} - -# Frame 1: -{ - @return -> ⊥ : std::boxed::Box> ; - var@1 -> test1::List::Nil ; -} - - -- op: -move var@1 - -[Debug] Value to move: -test1::List::Nil [Debug] ctx_pop_frame: # Ended regions: {} # 2 frame(s) @@ -10126,10 +8450,13 @@ test1::List::Nil l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: @@ -10150,10 +8477,13 @@ test1::List::Nil l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: @@ -10162,63 +8492,40 @@ test1::List::Nil var@1 -> ⊥ : test1::List ; } -[Debug] eval_operand: -- ctx: +[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(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**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; + var@2 -> @Box(test1::List::Nil) ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; -} - -# Frame 1: -{ - @return -> @Box(test1::List::Nil) ; - var@1 -> ⊥ : test1::List ; -} - - -- op: -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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); - return -] - -**Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } @@ -10238,34 +8545,16 @@ move @return l -> ⊥ : test1::List ; var@2 -> @Box(test1::List::Nil) ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + 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)) @@ -10274,12 +8563,15 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + var@7 := move l; + var@6 := move split_list(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 ] @@ -10293,10 +8585,13 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; var@2 -> @Box(test1::List::Nil) ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } @@ -10316,46 +8611,29 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; var@2 -> @Box(test1::List::Nil) ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -- op: -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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + var@7 := move l; + var@6 := move split_list(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 ] @@ -10369,10 +8647,13 @@ move var@2 l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } @@ -10392,22 +8673,28 @@ move var@2 l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := &l; - var@6 := copy var@7; - var@5 := move is_cons(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + var@7 := move l; + var@6 := move split_list(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 ] @@ -10421,17 +8708,20 @@ move var@2 l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := &l + var@7 := move l ] **Context**: @@ -10444,21 +8734,27 @@ move var@2 l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@6 := copy var@7; - var@5 := move is_cons(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + var@6 := move split_list(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 ] @@ -10469,20 +8765,23 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@6 := copy var@7 + var@6 := move split_list(move var@7) ] **Context**: @@ -10492,128 +8791,146 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -- op: -copy var@7 -[Debug] Value to copy: -⌊shared@0⌋ [Debug] **About to evaluate statement**: [ - var@5 := move is_cons(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); - return + 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>(move tl); + return + } + _ => { + panic + } + } ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⌊shared@1⌋ ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@5 := move is_cons(move var@6) + var@8 := false ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⌊shared@1⌋ ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: +# Frame 1: { - var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⌊shared@1⌋ ; - var@7 -> ⌊shared@0⌋ ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@6 -[Debug] Value to move: -⌊shared@1⌋ [Debug] **About to evaluate statement**: [ - var@2 := discriminant(*(l)); + var@7 := false; + var@7 := true; + var@8 := true; + var@2 := discriminant(l); switch (move var@2) { 0: isize => { - var@0 := true - } - 1: isize => { - var@0 := false + 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>(move tl); + return } _ => { panic } - }; - return + } ] **Context**: @@ -10623,27 +8940,38 @@ move var@6 # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> ⊥ : bool ; - l -> ⌊shared@1⌋ ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> ⊥ : bool ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@2 := discriminant(*(l)) + var@7 := false ] **Context**: @@ -10653,38 +8981,57 @@ move var@6 # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> ⊥ : bool ; - l -> ⌊shared@1⌋ ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> ⊥ : bool ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ + var@7 := true; + var@8 := true; + var@2 := discriminant(l); switch (move var@2) { 0: isize => { - var@0 := true - } - 1: isize => { - var@0 := false + 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>(move tl); + return } _ => { panic } - }; - return + } ] **Context**: @@ -10694,37 +9041,38 @@ move var@6 # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> ⊥ : bool ; - l -> ⌊shared@1⌋ ; - var@2 -> 0: isize ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - switch (move var@2) { - 0: isize => { - var@0 := true - } - 1: isize => { - var@0 := false - } - _ => { - panic - } - } + var@7 := true ] **Context**: @@ -10734,57 +9082,97 @@ move var@6 # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> ⊥ : bool ; - l -> ⌊shared@1⌋ ; - var@2 -> 0: isize ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; +} + + + +[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>(move tl); + return + } + _ => { + panic + } + } +] + +**Context**: +# Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> ⊥ : bool ; - l -> ⌊shared@1⌋ ; - var@2 -> 0: isize ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@2 -[Debug] Value to move: -0: isize [Debug] **About to evaluate statement**: [ - var@0 := true + var@8 := true ] **Context**: @@ -10794,55 +9182,96 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> ⊥ : bool ; - l -> ⌊shared@1⌋ ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: +[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>(move tl); + return + } + _ => { + panic + } + } +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> ⊥ : bool ; - l -> ⌊shared@1⌋ ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -true [Debug] **About to evaluate statement**: [ - return + var@2 := discriminant(l) ] **Context**: @@ -10852,302 +9281,463 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> true ; - l -> ⌊shared@1⌋ ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] ctx_pop_frame: +[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>(move tl); + return + } + _ => { + panic + } + } +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> true ; - l -> ⌊shared@1⌋ ; - var@2 -> ⊥ : isize ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> 0: isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] ctx_pop_frame: locals to drop: [2,1] -[Debug] drop_value: place: var@2 -[Debug] drop_value: place: l -[Debug] ctx_pop_frame: after dropping local variables: + + +[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>(move tl); + return +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> true ; - l -> ⊥ : &'_ (test1::List) ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: + + +[Debug] +**About to evaluate statement**: [ + var@8 := false +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } # Frame 1: { - var@0 -> true ; - l -> ⊥ : &'_ (test1::List) ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@0 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + 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>(move tl); return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> true ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@4 := ¬ move var@5 + hd := move (l as test1::List::Cons).0 ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> true ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: +# Frame 1: { - var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> true ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@5 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - assert(¬move var@4); - drop(l); + 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>(move tl); return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> false ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> 0: i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@4) + var@7 := false ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> false ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: +# Frame 1: { - var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> false ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> 0: i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@4 -[Debug] Value to move: -false [Debug] **About to evaluate statement**: [ - drop(l); + 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>(move tl); return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> 0: i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - drop(l) + tl := move (l as test1::List::Cons).1 ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); }) ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; -} + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; + var@2 -> ⊥ : isize ; + hd -> 0: i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; +} -[Debug] drop_value: place: l [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>(move tl); return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { @@ -11155,37 +9745,40 @@ false l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> 0: i32 ; + tl -> @Box(test1::List::Nil) ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] test_unit_function: test_split_list [Debug] **About to evaluate statement**: [ - set_discriminant(var@3, 1); - var@2 := move alloc::boxed::Box>::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(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 + var@5 := move hd ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { @@ -11202,16 +9795,35 @@ false var@10 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> 0: i32 ; + tl -> @Box(test1::List::Nil) ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; +} + [Debug] **About to evaluate statement**: [ - set_discriminant(var@3, 1) + 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>(move tl); + return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { @@ -11228,36 +9840,38 @@ false var@10 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> @Box(test1::List::Nil) ; + var@5 -> 0: i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; +} + [Debug] **About to evaluate statement**: [ - var@2 := move alloc::boxed::Box>::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(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 + var@6 := move deref_box(tl) ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; + var@3 -> ⊥ : test1::List ; hd -> ⊥ : i32 ; tl -> ⊥ : test1::List ; var@6 -> ⊥ : (i32, test1::List) ; @@ -11267,23 +9881,41 @@ false var@10 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> @Box(test1::List::Nil) ; + var@5 -> 0: i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; +} + [Debug] **About to evaluate statement**: [ - var@2 := move alloc::boxed::Box>::new(move var@3) + (var@0).0 := move var@5; + (var@0).1 := move var@6; + var@9 := move alloc::alloc::box_free>(move tl); + return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; + var@3 -> ⊥ : test1::List ; hd -> ⊥ : i32 ; tl -> ⊥ : test1::List ; var@6 -> ⊥ : (i32, test1::List) ; @@ -11293,24 +9925,38 @@ false var@10 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> 0: i32 ; + var@6 -> test1::List::Nil ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; +} + -[Debug] eval_non_local_function_call: -- fid:CfimAst.BoxNew -- type_params: [test1::List] -- args: [move var@3] -- dest: var@2 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + (var@0).0 := move var@5 +] + +**Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; + var@3 -> ⊥ : test1::List ; hd -> ⊥ : i32 ; tl -> ⊥ : test1::List ; var@6 -> ⊥ : (i32, test1::List) ; @@ -11320,14 +9966,37 @@ false var@10 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> ⊥ : (i32, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> 0: i32 ; + var@6 -> test1::List::Nil ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; +} + -- op: -move var@3 -[Debug] Value to move: -test1::List::Nil -[Debug] eval_operand: -- ctx: +[Debug] expand_bottom_value_from_projection: +pe: (Expressions.Field ((Expressions.ProjTuple 2), 0)) +ty: (Types.Adt (Types.Tuple, [], + [(Types.Integer Types.I32); + (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>(move tl); + return +] + +**Context**: # Ended regions: {} # 2 frame(s) @@ -11348,17 +10017,27 @@ test1::List::Nil # Frame 1: { - @return -> ⊥ : std::boxed::Box> ; - var@1 -> test1::List::Nil ; + var@0 -> (0: i32, ⊥ : test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> ⊥ : i32 ; + var@6 -> test1::List::Nil ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@1 -[Debug] Value to move: -test1::List::Nil -[Debug] ctx_pop_frame: +[Debug] +**About to evaluate statement**: [ + (var@0).1 := move var@6 +] + +**Context**: # Ended regions: {} # 2 frame(s) @@ -11379,13 +10058,28 @@ test1::List::Nil # Frame 1: { - @return -> @Box(test1::List::Nil) ; - var@1 -> ⊥ : test1::List ; + var@0 -> (0: i32, ⊥ : test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> ⊥ : i32 ; + var@6 -> test1::List::Nil ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] ctx_pop_frame: locals to drop: [1] -[Debug] drop_value: place: var@1 -[Debug] ctx_pop_frame: after dropping local variables: + + +[Debug] +**About to evaluate statement**: [ + var@9 := move alloc::alloc::box_free>(move tl); + return +] + +**Context**: # Ended regions: {} # 2 frame(s) @@ -11406,12 +10100,27 @@ test1::List::Nil # Frame 1: { - @return -> @Box(test1::List::Nil) ; - var@1 -> ⊥ : test1::List ; + var@0 -> (0: i32, test1::List::Nil) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: + + +[Debug] +**About to evaluate statement**: [ + var@9 := move alloc::alloc::box_free>(move tl) +] + +**Context**: # Ended regions: {} # 2 frame(s) @@ -11432,42 +10141,41 @@ test1::List::Nil # Frame 1: { - @return -> @Box(test1::List::Nil) ; - var@1 -> ⊥ : test1::List ; + var@0 -> (0: i32, test1::List::Nil) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move @return -[Debug] Value to move: -@Box(test1::List::Nil) +[Debug] eval_non_local_function_call: +- fid:CfimAst.BoxFree +- type_params: [test1::List] +- args: [move tl] +- dest: var@9 +[Debug] drop_value: place: tl [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(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**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; l -> ⊥ : test1::List ; - var@2 -> @Box(test1::List::Nil) ; + var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; hd -> ⊥ : i32 ; tl -> ⊥ : test1::List ; @@ -11478,22 +10186,32 @@ move @return var@10 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> (0: i32, test1::List::Nil) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> () ; + var@10 -> ⊥ : isize ; +} -[Debug] -**About to evaluate statement**: [ - (l as test1::List::Cons).0 := 0: i32 -] -**Context**: +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; l -> ⊥ : test1::List ; - var@2 -> @Box(test1::List::Nil) ; + var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; hd -> ⊥ : i32 ; tl -> ⊥ : test1::List ; @@ -11504,18 +10222,41 @@ move @return var@10 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> (0: i32, test1::List::Nil) ; + l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> () ; + var@10 -> ⊥ : isize ; +} - -[Debug] eval_operand: -- ctx: +[Debug] ctx_pop_frame: locals to drop: [10,9,8,7,6,5,4,3,2,1] +[Debug] drop_value: place: var@10 +[Debug] drop_value: place: var@9 +[Debug] drop_value: place: var@8 +[Debug] drop_value: place: var@7 +[Debug] drop_value: place: var@6 +[Debug] drop_value: place: var@5 +[Debug] drop_value: place: tl +[Debug] drop_value: place: hd +[Debug] drop_value: place: var@2 +[Debug] drop_value: place: l +[Debug] ctx_pop_frame: after dropping local variables: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; l -> ⊥ : test1::List ; - var@2 -> @Box(test1::List::Nil) ; + var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; hd -> ⊥ : i32 ; tl -> ⊥ : test1::List ; @@ -11526,19 +10267,23 @@ move @return var@10 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> (0: i32, test1::List::Nil) ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : i32 ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : i32 ; + var@6 -> ⊥ : test1::List ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; +} -- 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(move var@7); hd := copy (var@6).0; tl := move (var@6).1; var@10 := copy hd; @@ -11556,12 +10301,12 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> @Box(test1::List::Nil) ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; hd -> ⊥ : i32 ; tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + var@6 -> (0: i32, test1::List::Nil) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; @@ -11572,7 +10317,7 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) [Debug] **About to evaluate statement**: [ - (l as test1::List::Cons).1 := move var@2 + hd := copy (var@6).0 ] **Context**: @@ -11582,34 +10327,12 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> @Box(test1::List::Nil) ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> @Box(test1::List::Nil) ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; hd -> ⊥ : i32 ; tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + var@6 -> (0: i32, test1::List::Nil) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; @@ -11617,17 +10340,9 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) } -- op: -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(move var@7); - hd := copy (var@6).0; tl := move (var@6).1; var@10 := copy hd; var@9 := move var@10 == 0: i32; @@ -11644,12 +10359,12 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; + hd -> 0: i32 ; tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + var@6 -> (0: i32, test1::List::Nil) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; @@ -11660,7 +10375,7 @@ move var@2 [Debug] **About to evaluate statement**: [ - set_discriminant(l, 0) + tl := move (var@6).1 ] **Context**: @@ -11670,12 +10385,12 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; + hd -> 0: i32 ; tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + var@6 -> (0: i32, test1::List::Nil) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; @@ -11686,10 +10401,6 @@ move var@2 [Debug] **About to evaluate statement**: [ - var@7 := move l; - var@6 := move split_list(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; @@ -11705,12 +10416,12 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; @@ -11721,7 +10432,7 @@ move var@2 [Debug] **About to evaluate statement**: [ - var@7 := move l + var@10 := copy hd ] **Context**: @@ -11731,12 +10442,12 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; @@ -11745,43 +10456,39 @@ move var@2 -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@10 -> 0: i32 ; } -- op: -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(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 + var@9 := move var@10 == 0: i32 ] **Context**: @@ -11794,20 +10501,23 @@ test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@10 -> 0: i32 ; } [Debug] **About to evaluate statement**: [ - var@6 := move split_list(move var@7) + var@8 := ¬ move var@9; + assert(¬move var@8); + drop(tl); + return ] **Context**: @@ -11820,19 +10530,23 @@ test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; + var@9 -> true ; var@10 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@8 := ¬ move var@9 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -11842,50 +10556,27 @@ test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; + var@9 -> true ; var@10 -> ⊥ : i32 ; } -- op: -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>(move tl); - return - } - _ => { - panic - } - } + assert(¬move var@8); + drop(tl); + return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { @@ -11893,40 +10584,25 @@ test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; + var@8 -> false ; var@9 -> ⊥ : bool ; var@10 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} - [Debug] **About to evaluate statement**: [ - var@8 := false + assert(¬move var@8) ] **Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { @@ -11934,36 +10610,26 @@ test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; + var@8 -> false ; var@9 -> ⊥ : bool ; var@10 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} +[Debug] +**About to evaluate statement**: [ + drop(tl); + return +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { @@ -11971,62 +10637,25 @@ test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; var@10 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - 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>(move tl); - return - } - _ => { - panic - } - } + drop(tl) ] **Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { @@ -12034,40 +10663,26 @@ false l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + hd -> 0: i32 ; + tl -> test1::List::Nil ; + var@6 -> (0: i32, ⊥ : test1::List) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; var@10 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} - +[Debug] drop_value: place: tl [Debug] **About to evaluate statement**: [ - var@7 := false + return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { @@ -12075,273 +10690,37177 @@ false l -> ⊥ : test1::List ; var@2 -> ⊥ : std::boxed::Box> ; var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; + hd -> 0: i32 ; tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; + var@6 -> (0: i32, ⊥ : test1::List) ; var@7 -> ⊥ : test1::List ; var@8 -> ⊥ : bool ; var@9 -> ⊥ : bool ; var@10 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} +[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(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] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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: -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>(move tl); - return - } - _ => { - panic - } - } + x := 0: i32 ] **Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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**: [ - var@7 := true + 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(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**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 ; } -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} +[Debug] +**About to evaluate statement**: [ + y := 0: i32 +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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: -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>(move tl); - return - } - _ => { - panic - } - } + var@5 := &mut x; + var@4 := &two-phase *(var@5); + var@7 := &mut y; + var@6 := &two-phase *(var@7); + z := move get_elem(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**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; + 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**: +# Ended regions: {} +# 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(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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(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**: +# Ended regions: {} +# 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(true, move var@4, move var@6) +] + +**Context**: +# Ended regions: {} +# 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] 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] 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] +**About to evaluate statement**: [ + var@4 := copy b; + if (move var@4) { + var@0 := &mut *(x) + } + else { + var@0 := move y + }; + return +] + +**Context**: +# Ended regions: {} +# 2 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 -> ⊥ : &'_ 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 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (i32) ; + b -> true ; + x -> &mut@1 (0: i32) ; + y -> &mut@3 (0: i32) ; + var@4 -> ⊥ : bool ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy b +] + +**Context**: +# Ended regions: {} +# 2 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 -> ⊥ : &'_ 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 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (i32) ; + b -> true ; + x -> &mut@1 (0: i32) ; + y -> &mut@3 (0: i32) ; + var@4 -> ⊥ : bool ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + var@0 := &mut *(x) + } + else { + var@0 := move y + }; + return +] + +**Context**: +# Ended regions: {} +# 2 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 -> ⊥ : &'_ 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 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (i32) ; + b -> true ; + x -> &mut@1 (0: i32) ; + y -> &mut@3 (0: i32) ; + var@4 -> true ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + var@0 := &mut *(x) + } + else { + var@0 := move y + } +] + +**Context**: +# Ended regions: {} +# 2 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 -> ⊥ : &'_ 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 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (i32) ; + b -> true ; + x -> &mut@1 (0: i32) ; + y -> &mut@3 (0: i32) ; + var@4 -> true ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@0 := &mut *(x) +] + +**Context**: +# Ended regions: {} +# 2 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 -> ⊥ : &'_ 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 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (i32) ; + b -> true ; + x -> &mut@1 (0: i32) ; + y -> &mut@3 (0: i32) ; + var@4 -> ⊥ : bool ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 2 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 -> ⊥ : &'_ 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 ; +} + +# Frame 1: +{ + var@0 -> &mut@4 (0: i32) ; + b -> true ; + x -> &mut@1 (⌊mut@4⌋) ; + y -> &mut@3 (0: i32) ; + var@4 -> ⊥ : bool ; +} + + + +[Debug] ctx_pop_frame: +# Ended regions: {} +# 2 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 -> ⊥ : &'_ 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 ; +} + +# Frame 1: +{ + var@0 -> &mut@4 (0: i32) ; + b -> true ; + x -> &mut@1 (⌊mut@4⌋) ; + y -> &mut@3 (0: i32) ; + var@4 -> ⊥ : bool ; +} + +[Debug] ctx_pop_frame: locals to drop: [4,3,2,1] +[Debug] drop_value: place: var@4 +[Debug] drop_value: place: y +[Debug] drop_value: place: x +[Debug] drop_value: place: b +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + 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 ; +} + +# Frame 1: +{ + var@0 -> &mut@4 (0: i32) ; + b -> ⊥ : bool ; + x -> ⊥ : &'_ mut (i32) ; + y -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : bool ; +} + +[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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (0: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + 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@8 := copy *(z) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (0: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + 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) := 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (0: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: 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) := copy var@8 + 1: i32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (0: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: 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@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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: 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@12 := copy *(z) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: 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@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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> 1: 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 == 1: i32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> 1: 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; + 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> true ; + 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> true ; + 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); + 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> false ; + 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> false ; + 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 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: 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@15 := copy x +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (1: i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> &mut@0 (⌊mut@4⌋) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: 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@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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: i32 ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : bool ; + var@15 -> 1: i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := move var@15 == 1: i32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: i32 ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : bool ; + var@15 -> 1: i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: i32 ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> true ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@13 := ¬ move var@14 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: i32 ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> true ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; +} + + + +[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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: i32 ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> false ; + 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: i32 ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> false ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; +} + + + +[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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: i32 ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: i32 ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (0: i32) ; + var@8 -> 0: 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@17 := move var@18 == 0: i32; + var@16 := ¬ move var@17; + assert(¬move var@16); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: 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 -> 0: 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 -> 0: i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@17 := move var@18 == 0: i32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: 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 -> 0: 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 -> 0: i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@16 := ¬ move var@17; + assert(¬move var@16); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: 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 -> 0: 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 -> true ; + var@18 -> ⊥ : i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@16 := ¬ move var@17 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: 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 -> 0: 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 -> true ; + var@18 -> ⊥ : i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@16); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: 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 -> 0: 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 -> false ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@16) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: 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 -> 0: 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 -> false ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 1: 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 -> 0: 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_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(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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**: [ + 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(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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**: [ + (p).0 := move var@4; + (p).1 := 1: u32; + pp0 := &mut p; + var@7 := &two-phase *(pp0); + pp1 := move id_mut_pair(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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] 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(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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**: [ + pp0 := &mut p; + var@7 := &two-phase *(pp0); + pp1 := move id_mut_pair(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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(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**: +# Ended regions: {} +# 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**: +# Ended regions: {} +# 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(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**: +# Ended regions: {} +# 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(move var@7) +] + +**Context**: +# Ended regions: {} +# 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] activate_inactivated_mut_borrow: resulting value: +{ Values.value = + (Values.Adt + { Values.variant_id = ; + field_values = + [{ Values.value = + (Values.Borrow + (Values.MutBorrow (, + { 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] +**About to evaluate statement**: [ + var@2 := &mut *(x); + var@0 := &mut *(var@2); + return +] + +**Context**: +# Ended regions: {} +# 2 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 ((&'_ mut (u32), u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + x -> &mut@2 ((&mut@0 (0: u32), 1: u32)) ; + var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@2 := &mut *(x) +] + +**Context**: +# Ended regions: {} +# 2 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 ((&'_ mut (u32), u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + x -> &mut@2 ((&mut@0 (0: u32), 1: u32)) ; + var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@0 := &mut *(var@2); + return +] + +**Context**: +# Ended regions: {} +# 2 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 ((&'_ mut (u32), u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 ((&mut@0 (0: u32), 1: u32)) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@0 := &mut *(var@2) +] + +**Context**: +# Ended regions: {} +# 2 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 ((&'_ mut (u32), u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 ((&mut@0 (0: u32), 1: u32)) ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 2 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 ((&'_ mut (u32), u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + +# Frame 1: +{ + var@0 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (⌊mut@4⌋) ; +} + + + +[Debug] ctx_pop_frame: +# Ended regions: {} +# 2 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 ((&'_ mut (u32), u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + +# Frame 1: +{ + var@0 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (⌊mut@4⌋) ; +} + +[Debug] ctx_pop_frame: locals to drop: [2,1] +[Debug] drop_value: place: var@2 +[Debug] drop_value: place: x +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + +# Frame 1: +{ + var@0 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + x -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), 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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + + + +[Debug] +**About to evaluate statement**: [ + y := 2: u32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⊥ : u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (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**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> 2: u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := &mut y +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> 2: u32 ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> ⊥ : &'_ mut (u32) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := &mut *(var@10); + *((pp1).0) := move var@9; + *((pp1).1) := 3: u32; + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⌊mut@5⌋ ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> &mut@5 (2: u32) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := &mut *(var@10) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⌊mut@5⌋ ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> &mut@5 (2: u32) ; +} + + + +[Debug] +**About to evaluate statement**: [ + *((pp1).0) := move var@9; + *((pp1).1) := 3: u32; + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⌊mut@5⌋ ; + var@9 -> &mut@6 (2: u32) ; + var@10 -> &mut@5 (⌊mut@6⌋) ; +} + + + +[Debug] +**About to evaluate statement**: [ + *((pp1).0) := move var@9 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⌊mut@5⌋ ; + var@9 -> &mut@6 (2: u32) ; + var@10 -> &mut@5 (⌊mut@6⌋) ; +} + + + +[Debug] +**About to evaluate statement**: [ + *((pp1).1) := 3: u32; + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 0: u32 ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@6 (2: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⌊mut@5⌋ ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> &mut@5 (⌊mut@6⌋) ; +} + + + +[Debug] +**About to evaluate statement**: [ + *((pp1).1) := 3: u32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 0: u32 ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@6 (2: u32), 1: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⌊mut@5⌋ ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> &mut@5 (⌊mut@6⌋) ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 0: u32 ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@4⌋) ; + pp1 -> &mut@4 ((&mut@6 (2: u32), 3: u32)) ; + var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + y -> ⌊mut@5⌋ ; + var@9 -> ⊥ : &'_ mut (u32) ; + var@10 -> &mut@5 (⌊mut@6⌋) ; +} + + + +[Debug] test_unit_function: test_char +[Debug] +**About to evaluate statement**: [ + var@0 := a; + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : char ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@0 := a +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : char ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> a ; +} + + + +[Debug] test_unit_function: test_loops +[Debug] +**About to evaluate statement**: [ + x := move test_loop1(2: u32); + var@4 := copy x; + var@3 := move var@4 == 2: u32; + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop1(2: u32) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 0: u32; + s := 0: u32; + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + s := copy s * 2: u32; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32; + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + s := copy s * 2: u32; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + s := copy s * 2: u32; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + continue 0 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + var@6 := copy i; + s := copy s + copy var@6; + i := copy i + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> true ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy i; + s := copy s + copy var@6; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@6; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> 2: u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> 2: u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + var@6 := copy i; + s := copy s + copy var@6; + i := copy i + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> true ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy i; + s := copy s + copy var@6; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@6; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> 2: u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> 2: u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + var@6 := copy i; + s := copy s + copy var@6; + i := copy i + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> false ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s * 2: u32; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s * 2: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] ctx_pop_frame: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + +[Debug] ctx_pop_frame: locals to drop: [9,8,7,6,5,4,3,2,1] +[Debug] drop_value: place: var@9 +[Debug] drop_value: place: var@8 +[Debug] drop_value: place: var@7 +[Debug] drop_value: place: var@6 +[Debug] drop_value: place: var@5 +[Debug] drop_value: place: var@4 +[Debug] drop_value: place: var@3 +[Debug] drop_value: place: i +[Debug] drop_value: place: max +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> ⊥ : u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : (u32, bool) ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + +[Debug] +**About to evaluate statement**: [ + var@4 := copy x; + var@3 := move var@4 == 2: u32; + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy x +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 == 2: u32; + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 == 2: u32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> true ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@2 := ¬ move var@3 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> true ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> false ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@2) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> false ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop2(2: u32) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 0: u32; + s := 0: u32; + loop { + var@4 := copy i; + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32; + loop { + var@4 := copy i; + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + var@4 := copy i; + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + var@4 := copy i; + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i; + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> true ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@6) { + 17: u32 => { + break 0 + } + _ => { + var@7 := copy i; + s := copy s + copy var@7; + i := copy i + 1: u32; + continue 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 0: u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := copy i; + s := copy s + copy var@7; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@7; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@7 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i; + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> true ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@6) { + 17: u32 => { + break 0 + } + _ => { + var@7 := copy i; + s := copy s + copy var@7; + i := copy i + 1: u32; + continue 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> 1: u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := copy i; + s := copy s + copy var@7; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@7; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@7 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i; + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max; + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + 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; + continue 0 + } + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> false ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + + + +[Debug] ctx_pop_frame: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> 1: u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + +[Debug] ctx_pop_frame: locals to drop: [9,8,7,6,5,4,3,2,1] +[Debug] drop_value: place: var@9 +[Debug] drop_value: place: var@8 +[Debug] drop_value: place: var@7 +[Debug] drop_value: place: var@6 +[Debug] drop_value: place: var@5 +[Debug] drop_value: place: var@4 +[Debug] drop_value: place: var@3 +[Debug] drop_value: place: i +[Debug] drop_value: place: max +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> ⊥ : u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : (u32, bool) ; + var@9 -> ⊥ : (u32, bool) ; +} + +[Debug] +**About to evaluate statement**: [ + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy x +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 == 1: u32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> true ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := ¬ move var@7 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> true ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> false ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> false ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop3(2: u32) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32; + s := 0: u32; + loop { + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32; + loop { + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> true ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + nop +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> true ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + nop +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> false ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32; + var@17 := copy i; + s := copy s + copy var@17; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@17 := copy i; + s := copy s + copy var@17; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@17 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@17; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@17 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> true ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 0: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + nop +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 0: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> true ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 2: u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 2: u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + nop +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32; + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + continue 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> false ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32; + var@17 := copy i; + s := copy s + copy var@17; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@17 := copy i; + s := copy s + copy var@17; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@17 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 0: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@17; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@17 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 2: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 2: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> false ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] ctx_pop_frame: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 1: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> 1: u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + +[Debug] ctx_pop_frame: locals to drop: [19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] +[Debug] drop_value: place: var@19 +[Debug] drop_value: place: var@18 +[Debug] drop_value: place: var@17 +[Debug] drop_value: place: var@16 +[Debug] drop_value: place: var@15 +[Debug] drop_value: place: var@14 +[Debug] drop_value: place: var@13 +[Debug] drop_value: place: var@12 +[Debug] drop_value: place: var@11 +[Debug] drop_value: place: var@10 +[Debug] drop_value: place: var@9 +[Debug] drop_value: place: var@8 +[Debug] drop_value: place: var@7 +[Debug] drop_value: place: var@6 +[Debug] drop_value: place: var@5 +[Debug] drop_value: place: var@4 +[Debug] drop_value: place: j +[Debug] drop_value: place: i +[Debug] drop_value: place: max +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 3: u32 ; + max -> ⊥ : u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + +[Debug] +**About to evaluate statement**: [ + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy x +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> 3: u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := move var@12 == 3: u32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> 3: u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> true ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := ¬ move var@11 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> true ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> false ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@10) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> false ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop4(20: u32) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 20: u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 20: u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32; + s := 0: u32; + loop { + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32; + loop { + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 20: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 20: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + 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; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> 20: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> 20: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> true ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i; + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@11 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j; + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@12 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12; + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy var@11 + copy var@12 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + }; + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + switch (move var@10) { + 17: u32 => { + continue 0 + } + _ => { + nop + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + nop +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i; + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14; + j := copy j + 1: u32; + break 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@14 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32; + break 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 1 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + + + +[Debug] ctx_pop_frame: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 20: u32 ; + i -> 1: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> 1: u32 ; + var@12 -> 0: u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> 1: u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + +[Debug] ctx_pop_frame: locals to drop: [19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] +[Debug] drop_value: place: var@19 +[Debug] drop_value: place: var@18 +[Debug] drop_value: place: var@17 +[Debug] drop_value: place: var@16 +[Debug] drop_value: place: var@15 +[Debug] drop_value: place: var@14 +[Debug] drop_value: place: var@13 +[Debug] drop_value: place: var@12 +[Debug] drop_value: place: var@11 +[Debug] drop_value: place: var@10 +[Debug] drop_value: place: var@9 +[Debug] drop_value: place: var@8 +[Debug] drop_value: place: var@7 +[Debug] drop_value: place: var@6 +[Debug] drop_value: place: var@5 +[Debug] drop_value: place: var@4 +[Debug] drop_value: place: j +[Debug] drop_value: place: i +[Debug] drop_value: place: max +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> ⊥ : u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : u32 ; + var@12 -> ⊥ : u32 ; + var@13 -> ⊥ : (u32, bool) ; + var@14 -> ⊥ : u32 ; + var@15 -> ⊥ : (u32, bool) ; + var@16 -> ⊥ : (u32, bool) ; + var@17 -> ⊥ : u32 ; + var@18 -> ⊥ : (u32, bool) ; + var@19 -> ⊥ : (u32, bool) ; +} + +[Debug] +**About to evaluate statement**: [ + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@16 := copy x +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> 1: u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@15 := move var@16 == 1: u32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> 1: u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> true ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@14 := ¬ move var@15 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> true ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> false ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@14) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> false ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop5(2: u32) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@4) { + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + var@13 := copy i; + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32; + s := 0: u32; + loop { + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32; + loop { + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } + }; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 0: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + var@13 := copy i; + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + var@13 := copy i; + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + continue 0 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 0: u32 ; + var@9 -> 2: u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@10 := copy j; + s := copy s + copy var@10; + j := copy j + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> true ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy j; + s := copy s + copy var@10; + j := copy j + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@10; + j := copy j + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@10 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 0: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> 2: u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 1: u32 ; + var@9 -> 2: u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@10 := copy j; + s := copy s + copy var@10; + j := copy j + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy j; + s := copy s + copy var@10; + j := copy j + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@10 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 0: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@10; + j := copy j + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@10 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + j := copy j + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 1: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> 2: u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> 2: u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@10 := copy j; + s := copy s + copy var@10; + j := copy j + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> false ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@13 := copy i; + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@13 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@13 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 1: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + var@13 := copy i; + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> true ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + var@13 := copy i; + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + continue 0 + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@8 := copy j +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> 2: u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 < move var@9 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> 2: u32 ; + var@9 -> 2: u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@7) { + var@10 := copy j; + s := copy s + copy var@10; + j := copy j + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> false ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@13 := copy i; + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@13 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 0: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@13 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32; + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + continue 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@7) { + 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; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 2: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := move var@5 < move var@6 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> 2: u32 ; + var@6 -> 2: u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@4) { + loop { + 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; + continue 0 + } + else { + break 0 + } + }; + var@13 := copy i; + s := copy s + copy var@13; + i := copy i + 1: u32; + continue 0 + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> false ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + + + +[Debug] ctx_pop_frame: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + j -> 2: u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> 1: u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> 1: u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + +[Debug] ctx_pop_frame: locals to drop: [15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] +[Debug] drop_value: place: var@15 +[Debug] drop_value: place: var@14 +[Debug] drop_value: place: var@13 +[Debug] drop_value: place: var@12 +[Debug] drop_value: place: var@11 +[Debug] drop_value: place: var@10 +[Debug] drop_value: place: var@9 +[Debug] drop_value: place: var@8 +[Debug] drop_value: place: var@7 +[Debug] drop_value: place: var@6 +[Debug] drop_value: place: var@5 +[Debug] drop_value: place: var@4 +[Debug] drop_value: place: j +[Debug] drop_value: place: i +[Debug] drop_value: place: max +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> ⊥ : u32 ; + i -> ⊥ : u32 ; + j -> ⊥ : u32 ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : u32 ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : u32 ; + var@10 -> ⊥ : u32 ; + var@11 -> ⊥ : (u32, bool) ; + var@12 -> ⊥ : (u32, bool) ; + var@13 -> ⊥ : u32 ; + var@14 -> ⊥ : (u32, bool) ; + var@15 -> ⊥ : (u32, bool) ; +} + +[Debug] +**About to evaluate statement**: [ + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@20 := copy x +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> 2: u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@19 := move var@20 == 2: u32 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> 2: u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> true ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@18 := ¬ move var@19 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> true ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> false ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + assert(¬move var@18) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> false ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + x := move test_loop6(2: u32) +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 0: u32; + s := 0: u32; + loop { + 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; + if (move var@6) { + break 0 + } + else { + 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; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + i := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32; + loop { + 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; + if (move var@6) { + break 0 + } + else { + 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; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + s := 0: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> ⊥ : u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + if (move var@6) { + break 0 + } + else { + 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; + return +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + loop { + 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; + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 + } + } + else { + break 0 + } + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := copy max +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 0: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + 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; + continue 0 + } + } + else { + break 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> true ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@8 := true + var@7 := copy i ] **Context**: @@ -12351,93 +47870,181 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + 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; + continue 0 + } +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- 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>(move tl); - return - } - _ => { - panic - } + var@6 := move var@7 > 3: u32 +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> 0: u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 } ] @@ -12448,38 +48055,56 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> false ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@2 := discriminant(l) + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 ] **Context**: @@ -12489,54 +48114,53 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [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>(move tl); - return - } - _ => { - panic - } - } + var@8 := copy i ] **Context**: @@ -12546,88 +48170,111 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> 0: isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> 0: isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- 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>(move tl); - return + s := copy s + copy var@8 ] **Context**: @@ -12637,38 +48284,54 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@8 := false + i := copy i + 1: u32; + continue 0 ] **Context**: @@ -12678,85 +48341,109 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 0: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- 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>(move tl); - return + continue 0 ] **Context**: @@ -12766,38 +48453,71 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - hd := move (l as test1::List::Cons).0 + 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; + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 + } + } + else { + break 0 + } ] **Context**: @@ -12807,86 +48527,182 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -# Frame 1: -{ - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} +[Debug] +**About to evaluate statement**: [ + 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; + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 + } + } + else { + break 0 + } +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = 0: i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- op: -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>(move tl); - return + var@5 := copy max ] **Context**: @@ -12896,38 +48712,69 @@ move (l as test1::List::Cons).0 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@7 := false + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + else { + break 0 + } ] **Context**: @@ -12937,83 +48784,124 @@ move (l as test1::List::Cons).0 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 1: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- 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>(move tl); - return + if (move var@3) { + 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; + continue 0 + } + } + else { + break 0 + } ] **Context**: @@ -13023,38 +48911,63 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> true ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - tl := move (l as test1::List::Cons).1 + 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; + continue 0 + } ] **Context**: @@ -13064,84 +48977,118 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@7 := copy i +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = @Box(test1::List::Nil); } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- op: -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>(move tl); - return + 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; + continue 0 + } ] **Context**: @@ -13151,38 +49098,53 @@ move (l as test1::List::Cons).1 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> @Box(test1::List::Nil) ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> 1: u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@5 := move hd + var@6 := move var@7 > 3: u32 ] **Context**: @@ -13192,83 +49154,120 @@ move (l as test1::List::Cons).1 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> @Box(test1::List::Nil) ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> 1: u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 + } +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> 0: i32 ; - tl -> @Box(test1::List::Nil) ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> false ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- op: -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>(move tl); - return + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 ] **Context**: @@ -13278,38 +49277,53 @@ move hd # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(test1::List::Nil) ; - var@5 -> 0: i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@6 := move deref_box(tl) + var@8 := copy i ] **Context**: @@ -13319,82 +49333,111 @@ move hd # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(test1::List::Nil) ; - var@5 -> 0: i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 0: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(test1::List::Nil) ; - var@5 -> 0: i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- op: -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>(move tl); - return + s := copy s + copy var@8 ] **Context**: @@ -13404,38 +49447,54 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> 0: i32 ; - var@6 -> test1::List::Nil ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 0: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - (var@0).0 := move var@5 + i := copy i + 1: u32; + continue 0 ] **Context**: @@ -13445,87 +49504,109 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> 0: i32 ; - var@6 -> test1::List::Nil ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + i := copy i + 1: u32 +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> ⊥ : (i32, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> 0: i32 ; - var@6 -> test1::List::Nil ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 1: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- op: -move var@5 -[Debug] Value to move: -0: i32 -[Debug] expand_bottom_value_from_projection: -pe: (Expressions.Field ((Expressions.ProjTuple 2), 0)) -ty: (Types.Adt (Types.Tuple, [], - [(Types.Integer Types.I32); - (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>(move tl); - return + continue 0 ] **Context**: @@ -13535,38 +49616,71 @@ ty: (Types.Adt (Types.Tuple, [], # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, ⊥ : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : i32 ; - var@6 -> test1::List::Nil ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - (var@0).1 := move var@6 + 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; + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 + } + } + else { + break 0 + } ] **Context**: @@ -13576,80 +49690,126 @@ ty: (Types.Adt (Types.Tuple, [], # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, ⊥ : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : i32 ; - var@6 -> test1::List::Nil ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@4 := copy i +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, ⊥ : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : i32 ; - var@6 -> test1::List::Nil ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- op: -move var@6 -[Debug] Value to move: -test1::List::Nil [Debug] **About to evaluate statement**: [ - var@9 := move alloc::alloc::box_free>(move tl); - return + 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; + if (move var@6) { + break 0 + } + else { + var@8 := copy i; + s := copy s + copy var@8; + i := copy i + 1: u32; + continue 0 + } + } + else { + break 0 + } ] **Context**: @@ -13659,38 +49819,53 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, test1::List::Nil) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@9 := move alloc::alloc::box_free>(move tl) + var@5 := copy max ] **Context**: @@ -13700,44 +49875,69 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, test1::List::Nil) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_non_local_function_call: -- fid:CfimAst.BoxFree -- type_params: [test1::List] -- args: [move tl] -- dest: var@9 -[Debug] drop_value: place: tl [Debug] **About to evaluate statement**: [ - return + var@3 := move var@4 < move var@5; + if (move var@3) { + 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; + continue 0 + } + } + else { + break 0 + } ] **Context**: @@ -13747,332 +49947,559 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, test1::List::Nil) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] ctx_pop_frame: +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 < move var@5 +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, test1::List::Nil) ; - l -> test1::List::Cons { 0 = ⊥ : i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> 2: u32 ; + var@5 -> 2: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] ctx_pop_frame: locals to drop: [10,9,8,7,6,5,4,3,2,1] -[Debug] drop_value: place: var@10 -[Debug] drop_value: place: var@9 -[Debug] drop_value: place: var@8 -[Debug] drop_value: place: var@7 -[Debug] drop_value: place: var@6 -[Debug] drop_value: place: var@5 -[Debug] drop_value: place: tl -[Debug] drop_value: place: hd -[Debug] drop_value: place: var@2 -[Debug] drop_value: place: l -[Debug] ctx_pop_frame: after dropping local variables: + + +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + 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; + continue 0 + } + } + else { + break 0 + } +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, test1::List::Nil) ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> false ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: + + +[Debug] +**About to evaluate statement**: [ + break 0 +] + +**Context**: # Ended regions: {} # 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } # Frame 1: { - var@0 -> (0: i32, test1::List::Nil) ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : i32 ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : i32 ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- op: -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); + s := copy s + 1: u32; return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (0: i32, test1::List::Nil) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - hd := copy (var@6).0 + s := copy s + 1: u32 ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (0: i32, test1::List::Nil) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: +# Frame 1: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (0: i32, test1::List::Nil) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + s -> 1: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; } -- op: -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**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (0: i32, test1::List::Nil) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} -[Debug] -**About to evaluate statement**: [ - tl := move (var@6).1 -] -**Context**: +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (0: i32, test1::List::Nil) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; +} + +# Frame 1: +{ + s -> 2: u32 ; + max -> 2: u32 ; + i -> 2: u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> 1: u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} + +[Debug] ctx_pop_frame: locals to drop: [11,10,9,8,7,6,5,4,3,2,1] +[Debug] drop_value: place: var@11 +[Debug] drop_value: place: var@10 +[Debug] drop_value: place: var@9 +[Debug] drop_value: place: var@8 +[Debug] drop_value: place: var@7 +[Debug] drop_value: place: var@6 +[Debug] drop_value: place: var@5 +[Debug] drop_value: place: var@4 +[Debug] drop_value: place: var@3 +[Debug] drop_value: place: i +[Debug] drop_value: place: max +[Debug] ctx_pop_frame: after dropping local variables: +# Ended regions: {} +# 2 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } +# Frame 1: +{ + s -> 2: u32 ; + max -> ⊥ : u32 ; + i -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : u32 ; + var@8 -> ⊥ : u32 ; + var@9 -> ⊥ : (u32, bool) ; + var@10 -> ⊥ : (u32, bool) ; + var@11 -> ⊥ : (u32, bool) ; +} +[Debug] +**About to evaluate statement**: [ + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (0: i32, test1::List::Nil) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -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 + var@24 := copy x ] **Context**: @@ -14082,23 +50509,40 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@10 := copy hd + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -14108,52 +50552,78 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> 2: u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@23 := move var@24 == 2: u32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> 2: u32 ; } -- op: -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); + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -14164,23 +50634,37 @@ copy hd # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> 0: i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> ⊥ : bool ; + var@23 -> true ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@9 := move var@10 == 0: i32 + var@22 := ¬ move var@23 ] **Context**: @@ -14190,75 +50674,117 @@ copy hd # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> 0: i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> ⊥ : bool ; + var@23 -> true ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> 0: i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> false ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -move var@10 -[Debug] Value to move: -0: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@22) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> false ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -0: i32 [Debug] **About to evaluate statement**: [ - var@8 := ¬ move var@9; - assert(¬move var@8); - drop(tl); return ] @@ -14269,23 +50795,52 @@ move var@10 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> true ; - var@10 -> ⊥ : i32 ; + x -> 2: u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> 1: u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> 3: u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> 1: u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> 2: u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> 2: u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } +[Debug] test_unit_function: id_mut_mut_test1 [Debug] **About to evaluate statement**: [ - var@8 := ¬ move var@9 + x := 0: i32; + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: @@ -14295,50 +50850,63 @@ move var@10 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> true ; - var@10 -> ⊥ : i32 ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := 0: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> true ; - var@10 -> ⊥ : i32 ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -- op: -move var@9 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - assert(¬move var@8); - drop(tl); + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); return ] @@ -14349,23 +50917,24 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> false ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@8) + px := &mut x ] **Context**: @@ -14375,50 +50944,63 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> false ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> false ; + x -> ⌊mut@0⌋ ; + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -- op: -move var@8 -[Debug] Value to move: -false [Debug] **About to evaluate statement**: [ - drop(tl); - return + ppx := &mut px ] **Context**: @@ -14428,23 +51010,35 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; + x -> ⌊mut@0⌋ ; + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - drop(tl) + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: @@ -14454,24 +51048,24 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> test1::List::Nil ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (0: i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -[Debug] drop_value: place: tl [Debug] **About to evaluate statement**: [ - return + var@5 := &two-phase *(ppx) ] **Context**: @@ -14481,44 +51075,33 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> 0: i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (0: i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (0: i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -[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(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); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); return ] @@ -14529,31 +51112,24 @@ false # 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (@shared_loan({2}, &mut@0 (0: i32))) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⌊inactivated_mut@2⌋ ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - x := 0: i32 + ppy := move id_mut_mut(move var@5) ] **Context**: @@ -14563,322 +51139,273 @@ false # 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (@shared_loan({2}, &mut@0 (0: i32))) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⌊inactivated_mut@2⌋ ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] activate_inactivated_mut_borrow: resulting value: +{ Values.value = + (Values.Borrow + (Values.MutBorrow (, + { Values.value = + (Values.Concrete + (Values.Scalar { Values.value = 0; int_ty = Types.I32 })); + ty = (Types.Integer Types.I32) } + ))); + ty = (Types.Ref (Types.Erased, (Types.Integer Types.I32), Types.Mut)) } +[Debug] +**About to evaluate statement**: [ + var@2 := &mut *(x); + var@0 := &mut *(var@2); + return +] + +**Context**: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + x -> &mut@2 (&mut@0 (0: i32)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (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(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 + var@2 := &mut *(x) ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + x -> &mut@2 (&mut@0 (0: i32)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (i32)) ; } [Debug] **About to evaluate statement**: [ - y := 0: i32 + var@0 := &mut *(var@2); + return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (&mut@0 (0: i32)) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@0 := &mut *(var@2) +] + +**Context**: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (&mut@0 (0: 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(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**: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> &mut@4 (&mut@0 (0: i32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (⌊mut@4⌋) ; +} -[Debug] -**About to evaluate statement**: [ - var@5 := &mut x -] -**Context**: +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> &mut@4 (&mut@0 (0: i32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (⌊mut@4⌋) ; +} - -[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(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**: +[Debug] ctx_pop_frame: locals to drop: [2,1] +[Debug] drop_value: place: var@2 +[Debug] drop_value: place: x +[Debug] ctx_pop_frame: after dropping local variables: # Ended regions: {} -# 1 frame(s) +# 2 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } - +# Frame 1: +{ + var@0 -> &mut@4 (&mut@0 (0: i32)) ; + x -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (i32)) ; +} [Debug] **About to evaluate statement**: [ - var@4 := &two-phase *(var@5) + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: @@ -14889,47 +51416,23 @@ false { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (0: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := &mut y; - var@6 := &two-phase *(var@7); - z := move get_elem(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 + *(*(ppy)) := 1: i32 ] **Context**: @@ -14940,30 +51443,31 @@ false { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (0: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := &mut y + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: @@ -14974,46 +51478,23 @@ false { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@6 := &two-phase *(var@7); - z := move get_elem(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 + var@8 := copy *(px) ] **Context**: @@ -15023,31 +51504,31 @@ false # 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 ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@6 := &two-phase *(var@7) + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: @@ -15058,45 +51539,23 @@ false { 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) ; + px -> &mut@0 (1: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> 1: i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - z := move get_elem(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 + var@7 := move var@8 == 1: i32 ] **Context**: @@ -15107,30 +51566,29 @@ false { 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) ; + px -> &mut@0 (1: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> 1: i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - z := move get_elem(true, move var@4, move var@6) + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: @@ -15141,29 +51599,26 @@ false { 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)) ; + px -> &mut@0 (1: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> true ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@6 := ¬ move var@7 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -15171,31 +51626,31 @@ false { 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)) ; + px -> &mut@0 (1: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> true ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } -- op: -true -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -15203,37 +51658,26 @@ true { 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)) ; + px -> &mut@0 (1: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> false ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : 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: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6) +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -15241,533 +51685,387 @@ move var@4 { 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)) ; + px -> &mut@0 (1: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> false ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : 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@4 := copy b; - if (move var@4) { - var@0 := &mut *(x) - } - else { - var@0 := move y - }; + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + px -> &mut@0 (1: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut (i32) ; - b -> true ; - x -> &mut@1 (0: i32) ; - y -> &mut@3 (0: i32) ; - var@4 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@4 := copy b + var@11 := copy x ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + px -> &mut@0 (1: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut (i32) ; - b -> true ; - x -> &mut@1 (0: i32) ; - y -> &mut@3 (0: i32) ; - var@4 -> ⊥ : bool ; -} +[Debug] +**About to evaluate statement**: [ + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut (i32) ; - b -> true ; - x -> &mut@1 (0: i32) ; - y -> &mut@3 (0: i32) ; - var@4 -> ⊥ : bool ; + var@11 -> 1: i32 ; } -- op: -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 + var@10 := move var@11 == 1: i32 ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut (i32) ; - b -> true ; - x -> &mut@1 (0: i32) ; - y -> &mut@3 (0: i32) ; - var@4 -> true ; + var@11 -> 1: i32 ; } [Debug] **About to evaluate statement**: [ - if (move var@4) { - var@0 := &mut *(x) - } - else { - var@0 := move y - } + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; 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 ; + var@9 -> ⊥ : bool ; + var@10 -> true ; + var@11 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut (i32) ; - b -> true ; - x -> &mut@1 (0: i32) ; - y -> &mut@3 (0: i32) ; - var@4 -> true ; -} +[Debug] +**About to evaluate statement**: [ + var@9 := ¬ move var@10 +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut (i32) ; - b -> true ; - x -> &mut@1 (0: i32) ; - y -> &mut@3 (0: i32) ; - var@4 -> true ; + var@9 -> ⊥ : bool ; + var@10 -> true ; + var@11 -> ⊥ : i32 ; } -- op: -move var@4 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - var@0 := &mut *(x) + assert(¬move var@9); + return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> false ; 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 ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut (i32) ; - b -> true ; - x -> &mut@1 (0: i32) ; - y -> &mut@3 (0: i32) ; - var@4 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - return + assert(¬move var@9) ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> false ; 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 ; + var@11 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> &mut@4 (0: i32) ; - b -> true ; - x -> &mut@1 (⌊mut@4⌋) ; - y -> &mut@3 (0: i32) ; - var@4 -> ⊥ : bool ; -} +[Debug] +**About to evaluate statement**: [ + return +] -[Debug] ctx_pop_frame: +**Context**: # Ended regions: {} -# 2 frame(s) +# 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 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (⌊mut@3⌋) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> &mut@4 (0: i32) ; - b -> true ; - x -> &mut@1 (⌊mut@4⌋) ; - y -> &mut@3 (0: i32) ; - var@4 -> ⊥ : bool ; -} -[Debug] ctx_pop_frame: locals to drop: [4,3,2,1] -[Debug] drop_value: place: var@4 -[Debug] drop_value: place: y -[Debug] drop_value: place: x -[Debug] drop_value: place: b -[Debug] ctx_pop_frame: after dropping local variables: + +[Debug] test_unit_function: id_mut_mut_test2 +[Debug] +**About to evaluate statement**: [ + x := 0: i32; + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] + +**Context**: # Ended regions: {} -# 2 frame(s) +# 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@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -# Frame 1: -{ - var@0 -> &mut@4 (0: i32) ; - b -> ⊥ : bool ; - x -> ⊥ : &'_ mut (i32) ; - y -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : bool ; -} -[Debug] eval_operand: -- ctx: + +[Debug] +**About to evaluate statement**: [ + x := 0: i32 +] + +**Context**: # Ended regions: {} -# 2 frame(s) +# 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@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; -} - -# Frame 1: -{ - var@0 -> &mut@4 (0: i32) ; - b -> ⊥ : bool ; - x -> ⊥ : &'_ mut (i32) ; - y -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -- op: -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); + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -15778,31 +52076,30 @@ move var@0 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (0: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@8 := copy *(z) + px := &mut x ] **Context**: @@ -15812,30 +52109,54 @@ move var@0 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (0: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -15843,47 +52164,29 @@ move var@0 { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (0: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> ⊥ : i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -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 + ppx := &mut px ] **Context**: @@ -15894,30 +52197,49 @@ copy *(z) { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (0: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - *(z) := copy var@8 + 1: i32 + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -15928,29 +52250,32 @@ copy *(z) { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (0: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (0: i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@5 := &two-phase *(ppx) +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -15958,33 +52283,51 @@ copy *(z) { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (0: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (0: i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -copy var@8 -[Debug] Value to copy: -0: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -15992,44 +52335,29 @@ copy var@8 { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (0: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (@shared_loan({2}, &mut@0 (0: i32))) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⌊inactivated_mut@2⌋ ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : 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 + ppy := move id_mut_mut(move var@5) ] **Context**: @@ -16040,287 +52368,329 @@ copy var@8 { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (@shared_loan({2}, &mut@0 (0: i32))) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⌊inactivated_mut@2⌋ ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } +[Debug] activate_inactivated_mut_borrow: resulting value: +{ Values.value = + (Values.Borrow + (Values.MutBorrow (, + { Values.value = + (Values.Concrete + (Values.Scalar { Values.value = 0; int_ty = Types.I32 })); + ty = (Types.Integer Types.I32) } + ))); + ty = (Types.Ref (Types.Erased, (Types.Integer Types.I32), Types.Mut)) } [Debug] **About to evaluate statement**: [ - var@12 := copy *(z) + var@2 := &mut *(x); + var@0 := &mut *(var@2); + return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + x -> &mut@2 (&mut@0 (0: i32)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (i32)) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@2 := &mut *(x) +] + +**Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + x -> &mut@2 (&mut@0 (0: i32)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (i32)) ; } -- op: -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); + var@0 := &mut *(var@2); return ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> 1: i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (&mut@0 (0: i32)) ; } [Debug] **About to evaluate statement**: [ - var@11 := move var@12 == 1: i32 + var@0 := &mut *(var@2) ] **Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> 1: i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (&mut@0 (0: i32)) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> 1: i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; +} + +# Frame 1: +{ + var@0 -> &mut@4 (&mut@0 (0: i32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (⌊mut@4⌋) ; } -- op: -move var@12 -[Debug] Value to move: -1: i32 -[Debug] eval_operand: -- ctx: +[Debug] ctx_pop_frame: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } +# Frame 1: +{ + var@0 -> &mut@4 (&mut@0 (0: i32)) ; + x -> &mut@2 (⌊mut@3⌋) ; + var@2 -> &mut@3 (⌊mut@4⌋) ; +} -- 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**: +[Debug] ctx_pop_frame: locals to drop: [2,1] +[Debug] drop_value: place: var@2 +[Debug] drop_value: place: x +[Debug] ctx_pop_frame: after dropping local variables: # Ended regions: {} -# 1 frame(s) +# 2 frame(s) # Frame 0: { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> true ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } - +# Frame 1: +{ + var@0 -> &mut@4 (&mut@0 (0: i32)) ; + x -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (i32)) ; +} [Debug] **About to evaluate statement**: [ - var@10 := ¬ move var@11 + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -16331,29 +52701,32 @@ move var@12 { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (0: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> true ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + *(*(ppy)) := 1: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -16361,42 +52734,45 @@ move var@12 { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (0: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> true ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -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); + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -16408,30 +52784,29 @@ true { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> false ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@10) + y := 2: i32 ] **Context**: @@ -16442,29 +52817,48 @@ true { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> false ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -16472,42 +52866,29 @@ true { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> false ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 2: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -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 + py := &mut y ] **Context**: @@ -16518,30 +52899,44 @@ false { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 2: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@15 := copy x + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -16552,29 +52947,32 @@ false { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (2: i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@8 := &mut *(py) +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -16582,40 +52980,42 @@ false { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (1: i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> &mut@0 (⌊mut@4⌋) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (2: i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -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); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -16626,31 +53026,30 @@ copy x # Frame 0: { var@0 -> ⊥ : () ; - x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> &mut@6 (2: i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> 1: i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@14 := move var@15 == 1: i32 + *(ppy) := move var@8 ] **Context**: @@ -16660,64 +53059,46 @@ copy x # Frame 0: { var@0 -> ⊥ : () ; - x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@0 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> &mut@6 (2: i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> 1: i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> 1: i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; -} - - -- op: -move var@15 +[Debug] +**About to evaluate statement**: [ + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] -[Debug] Value to move: -1: i32 -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 1 frame(s) @@ -16725,38 +53106,29 @@ move var@15 { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@6 (2: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : 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 + var@11 := copy *(px) ] **Context**: @@ -16767,30 +53139,41 @@ move var@15 { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@4⌋) ; + ppy -> &mut@4 (&mut@6 (2: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> true ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@13 := ¬ move var@14 + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -16801,29 +53184,32 @@ move var@15 { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (2: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> 2: i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> true ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@10 := move var@11 == 2: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -16831,38 +53217,39 @@ move var@15 { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (2: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> 2: i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> true ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -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); + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -16874,30 +53261,29 @@ true { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> false ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + px -> &mut@6 (2: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> true ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@13) + var@9 := ¬ move var@10 ] **Context**: @@ -16908,29 +53294,42 @@ true { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> false ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + px -> &mut@6 (2: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> true ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -16938,38 +53337,29 @@ true { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (2: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> false ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> false ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -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 + assert(¬move var@9) ] **Context**: @@ -16980,30 +53370,38 @@ false { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (2: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> false ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@18 := copy y + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -17014,29 +53412,32 @@ false { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (2: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + *(px) := 3: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -17044,36 +53445,36 @@ false { var@0 -> ⊥ : () ; x -> 1: i32 ; - y -> ⌊mut@2⌋ ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> &mut@2 (0: i32) ; - var@8 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (2: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -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); + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -17085,30 +53486,29 @@ copy y { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> 0: i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@17 := move var@18 == 0: i32 + var@14 := copy x ] **Context**: @@ -17119,29 +53519,39 @@ copy y { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> 0: i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -17149,33 +53559,32 @@ copy y { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> 1: i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> 0: i32 ; + var@17 -> ⊥ : i32 ; } -- op: -move var@18 -[Debug] Value to move: -0: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@13 := move var@14 == 1: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -17183,33 +53592,34 @@ move var@18 { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> 1: i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -0: i32 [Debug] **About to evaluate statement**: [ - var@16 := ¬ move var@17; - assert(¬move var@16); + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -17221,30 +53631,29 @@ move var@18 { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> true ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> true ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@16 := ¬ move var@17 + var@12 := ¬ move var@13 ] **Context**: @@ -17255,29 +53664,37 @@ move var@18 { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> true ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> true ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -17285,35 +53702,29 @@ move var@18 { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> false ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> true ; - var@18 -> ⊥ : i32 ; + var@17 -> ⊥ : i32 ; } -- op: -move var@17 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - assert(¬move var@16); - return + assert(¬move var@12) ] **Context**: @@ -17324,30 +53735,33 @@ true { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> false ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> false ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@16) + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -17358,29 +53772,32 @@ true { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> false ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@17 := copy y +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -17388,33 +53805,31 @@ true { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> &mut@6 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> false ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -- op: -move var@16 -[Debug] Value to move: -false [Debug] **About to evaluate statement**: [ + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -17426,44 +53841,29 @@ false { var@0 -> ⊥ : () ; x -> 1: 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 -> 0: i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 3: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@17 -> 3: i32 ; } -[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(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 + var@16 := move var@17 == 3: i32 ] **Context**: @@ -17473,23 +53873,32 @@ false # 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) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 3: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> 3: i32 ; } [Debug] **About to evaluate statement**: [ - x := 0: u32 + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -17499,58 +53908,63 @@ false # 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) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 3: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> true ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@15 := ¬ move var@16 +] + +**Context**: # Ended regions: {} # 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) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 3: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> true ; + var@17 -> ⊥ : i32 ; } -- 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(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + assert(¬move var@15); return ] @@ -17561,23 +53975,30 @@ false # 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) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 3: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> false ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - px := &mut x + assert(¬move var@15) ] **Context**: @@ -17587,33 +54008,29 @@ false # 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) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 3: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> false ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [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(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 ] @@ -17624,23 +54041,34 @@ false # 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) ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 3: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } +[Debug] test_function_symbolic: add_test [Debug] **About to evaluate statement**: [ - var@4 := move px + var@3 := copy x; + var@4 := copy y; + var@0 := copy var@3 + copy var@4; + return ] **Context**: @@ -17649,59 +54077,41 @@ false # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@3 := copy x +] + +**Context**: # Ended regions: {} # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : (u32, bool) ; } -- 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(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + var@4 := copy y; + var@0 := copy var@3 + copy var@4; return ] @@ -17711,24 +54121,19 @@ move px # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - (p).0 := move var@4 + var@4 := copy y ] **Context**: @@ -17737,64 +54142,19 @@ move px # 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: -# Ended regions: {} -# 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : (u32, bool) ; } -- 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(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; +**About to evaluate statement**: [ + var@0 := copy var@3 + copy var@4; return ] @@ -17804,24 +54164,19 @@ ty: (Types.Adt (Types.Tuple, [], # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - (p).1 := 1: u32 + var@0 := copy var@3 + copy var@4 ] **Context**: @@ -17830,55 +54185,43 @@ ty: (Types.Adt (Types.Tuple, [], # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 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) ; + var@0 -> s@2 : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : (u32, bool) ; } -- op: -1: u32 +[Debug] test_function_symbolic: subs_test [Debug] **About to evaluate statement**: [ - pp0 := &mut p; - var@7 := &two-phase *(pp0); - pp1 := move id_mut_pair(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + var@3 := copy x; + var@4 := copy y; + var@0 := copy var@3 - copy var@4; return ] @@ -17888,24 +54231,19 @@ ty: (Types.Adt (Types.Tuple, [], # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - pp0 := &mut p + var@3 := copy x ] **Context**: @@ -17914,30 +54252,20 @@ ty: (Types.Adt (Types.Tuple, [], # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@7 := &two-phase *(pp0); - pp1 := move id_mut_pair(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + var@4 := copy y; + var@0 := copy var@3 - copy var@4; return ] @@ -17947,24 +54275,19 @@ ty: (Types.Adt (Types.Tuple, [], # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - var@7 := &two-phase *(pp0) + var@4 := copy y ] **Context**: @@ -17973,29 +54296,19 @@ ty: (Types.Adt (Types.Tuple, [], # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - pp1 := move id_mut_pair(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + var@0 := copy var@3 - copy var@4; return ] @@ -18005,24 +54318,19 @@ ty: (Types.Adt (Types.Tuple, [], # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : (u32, bool) ; } [Debug] **About to evaluate statement**: [ - pp1 := move id_mut_pair(move var@7) + var@0 := copy var@3 - copy var@4 ] **Context**: @@ -18031,338 +54339,219 @@ ty: (Types.Adt (Types.Tuple, [], # 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) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : (u32, bool) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 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) ; + var@0 -> s@2 : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : (u32, bool) ; } -- op: -move var@7 -[Debug] activate_inactivated_mut_borrow: resulting value: -{ Values.value = - (Values.Adt - { Values.variant_id = ; - field_values = - [{ Values.value = - (Values.Borrow - (Values.MutBorrow (, - { 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] test_function_symbolic: div_test [Debug] **About to evaluate statement**: [ - var@2 := &mut *(x); - var@0 := &mut *(var@2); + var@3 := copy x; + var@4 := copy y; + var@0 := move var@3 / move var@4; return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 ((&'_ mut (u32), u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - x -> &mut@2 ((&mut@0 (0: u32), 1: u32)) ; - var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ - var@2 := &mut *(x) + var@3 := copy x ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 ((&'_ mut (u32), u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - x -> &mut@2 ((&mut@0 (0: u32), 1: u32)) ; - var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2); + var@4 := copy y; + var@0 := move var@3 / move var@4; return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 ((&'_ mut (u32), u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - x -> &mut@2 (⌊mut@3⌋) ; - var@2 -> &mut@3 ((&mut@0 (0: u32), 1: u32)) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2) + var@4 := copy y ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 ((&'_ mut (u32), u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; -} - -# Frame 1: -{ - var@0 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - x -> &mut@2 (⌊mut@3⌋) ; - var@2 -> &mut@3 ((&mut@0 (0: u32), 1: u32)) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ + var@0 := move var@3 / move var@4; return ] **Context**: # Ended regions: {} -# 2 frame(s) +# 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 ((&'_ mut (u32), u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : bool ; } -# Frame 1: -{ - var@0 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - x -> &mut@2 (⌊mut@3⌋) ; - var@2 -> &mut@3 (⌊mut@4⌋) ; -} +[Debug] +**About to evaluate statement**: [ + var@0 := move var@3 / move var@4 +] -[Debug] ctx_pop_frame: +**Context**: # Ended regions: {} -# 2 frame(s) +# 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 ((&'_ mut (u32), u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : bool ; } -# Frame 1: -{ - var@0 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - x -> &mut@2 (⌊mut@3⌋) ; - var@2 -> &mut@3 (⌊mut@4⌋) ; -} -[Debug] ctx_pop_frame: locals to drop: [2,1] -[Debug] drop_value: place: var@2 -[Debug] drop_value: place: x -[Debug] ctx_pop_frame: after dropping local variables: + +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; + var@0 -> s@2 : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } -# Frame 1: -{ - var@0 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - x -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; -} -[Debug] eval_operand: -- ctx: + +[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**: # Ended regions: {} -# 2 frame(s) +# 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; -} - -# Frame 1: -{ - var@0 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - x -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - var@2 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } -- op: -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 + var@3 := copy x ] **Context**: @@ -18371,24 +54560,21 @@ move var@0 # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ - y := 2: u32 + var@4 := copy y; + var@0 := move var@3 % move var@4; + return ] **Context**: @@ -18397,51 +54583,40 @@ move var@0 # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@4 := copy y +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⊥ : u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } -- 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; + var@0 := move var@3 % move var@4; return ] @@ -18451,24 +54626,19 @@ move var@0 # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> 2: u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ - var@10 := &mut y + var@0 := move var@3 % move var@4 ] **Context**: @@ -18477,26 +54647,18 @@ move var@0 # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> 2: u32 ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> ⊥ : &'_ mut (u32) ; + var@0 -> ⊥ : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> s@0 : u32 ; + var@4 -> s@1 : u32 ; + var@5 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; return ] @@ -18506,24 +54668,32 @@ move var@0 # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> &mut@5 (2: u32) ; + var@0 -> s@2 : u32 ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + var@3 -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : bool ; } +[Debug] test_function_symbolic: test2 [Debug] **About to evaluate statement**: [ - var@9 := &mut *(var@10) + 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**: @@ -18533,25 +54703,23 @@ move var@0 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> &mut@5 (2: u32) ; + x -> ⊥ : u32 ; + y -> ⊥ : u32 ; + z -> ⊥ : u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> ⊥ : u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } [Debug] **About to evaluate statement**: [ - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; - return + x := 23: u32 ] **Context**: @@ -18561,23 +54729,34 @@ move var@0 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> &mut@6 (2: u32) ; - var@10 -> &mut@5 (⌊mut@6⌋) ; + x -> ⊥ : u32 ; + y -> ⊥ : u32 ; + z -> ⊥ : u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> ⊥ : u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } [Debug] **About to evaluate statement**: [ - *((pp1).0) := move var@9 + 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**: @@ -18587,49 +54766,58 @@ move var@0 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> &mut@6 (2: u32) ; - var@10 -> &mut@5 (⌊mut@6⌋) ; + x -> 23: u32 ; + y -> ⊥ : u32 ; + z -> ⊥ : u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> ⊥ : u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + y := 44: u32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@0 (0: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> &mut@6 (2: u32) ; - var@10 -> &mut@5 (⌊mut@6⌋) ; + x -> 23: u32 ; + y -> ⊥ : u32 ; + z -> ⊥ : u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> ⊥ : u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -- op: -move var@9 -[Debug] Value to move: -&mut@6 (2: u32) [Debug] **About to evaluate statement**: [ - *((pp1).1) := 3: 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 ] @@ -18640,23 +54828,23 @@ move var@9 # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: u32 ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@6 (2: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> &mut@5 (⌊mut@6⌋) ; + x -> 23: u32 ; + y -> 44: u32 ; + z -> ⊥ : u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> ⊥ : u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } [Debug] **About to evaluate statement**: [ - *((pp1).1) := 3: u32 + z := 67: u32 ] **Context**: @@ -18666,47 +54854,58 @@ move var@9 # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: u32 ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@6 (2: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> &mut@5 (⌊mut@6⌋) ; + x -> 23: u32 ; + y -> 44: u32 ; + z -> ⊥ : u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> ⊥ : u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: u32 ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@6 (2: u32), 1: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> &mut@5 (⌊mut@6⌋) ; + x -> 23: u32 ; + y -> 44: u32 ; + z -> 67: u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> ⊥ : u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -- op: -3: u32 [Debug] **About to evaluate statement**: [ - return + var@5 := copy x ] **Context**: @@ -18716,24 +54915,30 @@ move var@9 # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: u32 ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@4⌋) ; - pp1 -> &mut@4 ((&mut@6 (2: u32), 3: u32)) ; - var@7 -> ⊥ : &'_ mut ((&'_ mut (u32), u32)) ; - y -> ⌊mut@5⌋ ; - var@9 -> ⊥ : &'_ mut (u32) ; - var@10 -> &mut@5 (⌊mut@6⌋) ; + x -> 23: u32 ; + y -> 44: u32 ; + z -> 67: u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> ⊥ : u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -[Debug] test_unit_function: test_char [Debug] **About to evaluate statement**: [ - var@0 := a; + (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 ] @@ -18743,14 +54948,24 @@ move var@9 # Frame 0: { - var@0 -> ⊥ : char ; + var@0 -> ⊥ : () ; + x -> 23: u32 ; + y -> 44: u32 ; + z -> 67: u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> 23: u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } [Debug] **About to evaluate statement**: [ - var@0 := a + (p).x := move var@5 ] **Context**: @@ -18759,28 +54974,61 @@ move var@9 # Frame 0: { - var@0 -> ⊥ : char ; + var@0 -> ⊥ : () ; + x -> 23: u32 ; + y -> 44: u32 ; + z -> 67: u32 ; + p -> ⊥ : test1::Pair ; + var@5 -> 23: u32 ; + s -> ⊥ : test1::Sum ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : char ; + 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 ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -- op: -a [Debug] **About to evaluate statement**: [ - return + (p).y := 67: u32 ] **Context**: @@ -18789,17 +55037,29 @@ a # Frame 0: { - var@0 -> a ; + 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 ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -[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; + (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 ] @@ -18809,19 +55069,24 @@ a # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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 ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } [Debug] **About to evaluate statement**: [ - var@3 := copy x + (s as test1::Sum::Right).0 := true ] **Context**: @@ -18830,42 +55095,58 @@ a # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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 ; + o -> ⊥ : test1::One ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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 ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -- op: -copy x -[Debug] Value to copy: -s@0 : u32 [Debug] **About to evaluate statement**: [ - var@4 := copy y; - var@0 := copy var@3 + copy var@4; - return + set_discriminant(s, 1) ] **Context**: @@ -18874,19 +55155,28 @@ s@0 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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 ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } [Debug] **About to evaluate statement**: [ - var@4 := copy y + (o as test1::One::One).0 := 3: u64; + set_discriminant(o, 0); + set_discriminant(e0, 0); + set_discriminant(enum0, 0); + return ] **Context**: @@ -18895,40 +55185,55 @@ s@0 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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 ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + (o as test1::One::One).0 := 3: u64 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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 ; + e0 -> ⊥ : test1::EmptyEnum ; + e1 -> ⊥ : test1::EmptyEnum ; + enum0 -> ⊥ : test1::Enum ; } -- op: -copy y -[Debug] Value to copy: -s@1 : u32 +[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**: [ - var@0 := copy var@3 + copy var@4; + set_discriminant(o, 0); + set_discriminant(e0, 0); + set_discriminant(enum0, 0); return ] @@ -18938,19 +55243,24 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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**: [ - var@0 := copy var@3 + copy var@4 + set_discriminant(o, 0) ] **Context**: @@ -18959,61 +55269,52 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; -} - - -- op: -copy var@3 +[Debug] +**About to evaluate statement**: [ + set_discriminant(e0, 0); + set_discriminant(enum0, 0); + return +] -[Debug] Value to copy: -s@0 : u32 -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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 ; } -- op: -copy var@4 -[Debug] Value to copy: -s@1 : u32 [Debug] **About to evaluate statement**: [ - return + set_discriminant(e0, 0) ] **Context**: @@ -19022,22 +55323,24 @@ s@1 : u32 # Frame 0: { - var@0 -> s@2 : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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] 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; + set_discriminant(enum0, 0); return ] @@ -19047,19 +55350,24 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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**: [ - var@3 := copy x + set_discriminant(enum0, 0) ] **Context**: @@ -19068,41 +55376,59 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + 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 ; } -- op: -copy x -[Debug] Value to copy: -s@0 : u32 +[Debug] test_function_symbolic: get_max [Debug] **About to evaluate statement**: [ - var@4 := copy y; - var@0 := copy var@3 - copy var@4; + 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 ] @@ -19115,16 +55441,16 @@ s@0 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; + var@3 -> ⊥ : bool ; var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + var@5 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@4 := copy y + var@4 := copy x ] **Context**: @@ -19136,15 +55462,27 @@ s@0 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; + var@3 -> ⊥ : bool ; var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + var@5 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) @@ -19153,21 +55491,16 @@ s@0 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : (u32, bool) ; + var@3 -> ⊥ : bool ; + var@4 -> s@0 : u32 ; + var@5 -> ⊥ : u32 ; } -- op: -copy y -[Debug] Value to copy: -s@1 : u32 [Debug] **About to evaluate statement**: [ - var@0 := copy var@3 - copy var@4; - return + var@5 := copy y ] **Context**: @@ -19179,16 +55512,23 @@ s@1 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + var@3 -> ⊥ : bool ; + var@4 -> s@0 : u32 ; + var@5 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@0 := copy var@3 - copy var@4 + var@3 := move var@4 >= move var@5; + if (move var@3) { + var@0 := copy x + } + else { + var@0 := copy y + }; + return ] **Context**: @@ -19200,15 +55540,19 @@ s@1 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + var@3 -> ⊥ : bool ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 >= move var@5 +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -19217,19 +55561,25 @@ s@1 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + var@3 -> ⊥ : bool ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; } -- op: -copy var@3 -[Debug] Value to copy: -s@0 : u32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + if (move var@3) { + var@0 := copy x + } + else { + var@0 := copy y + }; + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -19238,20 +55588,21 @@ s@0 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + var@3 -> s@2 : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; } -- op: -copy var@4 -[Debug] Value to copy: -s@1 : u32 [Debug] **About to evaluate statement**: [ - return + if (move var@3) { + var@0 := copy x + } + else { + var@0 := copy y + } ] **Context**: @@ -19260,23 +55611,19 @@ s@1 : u32 # Frame 0: { - var@0 -> s@2 : u32 ; + var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : (u32, bool) ; + var@3 -> s@2 : bool ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; } -[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 + var@0 := copy x ] **Context**: @@ -19288,16 +55635,16 @@ s@1 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@3 := copy x + var@0 := copy y ] **Context**: @@ -19309,38 +55656,36 @@ s@1 : u32 var@0 -> ⊥ : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> s@0 : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; + var@3 -> ⊥ : bool ; var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; } -- op: -copy x -[Debug] Value to copy: -s@0 : u32 [Debug] **About to evaluate statement**: [ - var@4 := copy y; - var@0 := move var@3 / move var@4; return ] @@ -19350,19 +55695,29 @@ s@0 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> s@1 : u32 ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; + var@3 -> ⊥ : bool ; var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; } +[Debug] test_function_symbolic: test3 [Debug] **About to evaluate statement**: [ - var@4 := copy y + 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**: @@ -19371,40 +55726,55 @@ s@0 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + y -> ⊥ : u32 ; + z -> ⊥ : u32 ; var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := move get_max(4: u32, 3: u32) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; + var@0 -> ⊥ : () ; + x -> ⊥ : u32 ; + y -> ⊥ : u32 ; + z -> ⊥ : u32 ; var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -- op: -copy y -[Debug] Value to copy: -s@1 : u32 [Debug] **About to evaluate statement**: [ - var@0 := move var@3 / move var@4; + 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 ] @@ -19414,19 +55784,23 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : bool ; + 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**: [ - var@0 := move var@3 / move var@4 + y := move get_max(10: u32, 11: u32) ] **Context**: @@ -19435,60 +55809,85 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : bool ; + 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: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : bool ; + z -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -- op: -move var@3 -[Debug] Value to move: -s@0 : u32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@4 := copy x +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : bool ; + z -> ⊥ : u32 ; + var@4 -> ⊥ : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -- op: -move var@4 -[Debug] Value to move: -s@1 : 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 ] @@ -19498,23 +55897,23 @@ s@1 : u32 # Frame 0: { - var@0 -> s@2 : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + z -> ⊥ : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> ⊥ : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -[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 + var@5 := copy y ] **Context**: @@ -19523,19 +55922,28 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + z -> ⊥ : u32 ; + var@4 -> 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@3 := copy x + 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**: @@ -19544,41 +55952,51 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + z -> ⊥ : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + z := copy var@4 + copy var@5 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + z -> ⊥ : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -- op: -copy x -[Debug] Value to copy: -s@0 : u32 [Debug] **About to evaluate statement**: [ - var@4 := copy y; - var@0 := move var@3 % move var@4; + var@9 := copy z; + var@8 := move var@9 == 15: u32; + var@7 := ¬ move var@8; + assert(¬move var@7); return ] @@ -19588,19 +56006,23 @@ s@0 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@4 := copy y + var@9 := copy z ] **Context**: @@ -19609,41 +56031,51 @@ s@0 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@8 := move var@9 == 15: u32; + var@7 := ¬ move var@8; + assert(¬move var@7); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> s@2 : u32 ; } -- op: -copy y -[Debug] Value to copy: -s@1 : u32 [Debug] **About to evaluate statement**: [ - var@0 := move var@3 % move var@4; - return + var@8 := move var@9 == 15: u32 ] **Context**: @@ -19652,19 +56084,25 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : bool ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : bool ; + var@9 -> s@2 : u32 ; } [Debug] **About to evaluate statement**: [ - var@0 := move var@3 % move var@4 + var@7 := ¬ move var@8; + assert(¬move var@7); + return ] **Context**: @@ -19673,61 +56111,74 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : bool ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> s@3 : bool ; + var@9 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@7 := ¬ move var@8 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> s@0 : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : bool ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> ⊥ : bool ; + var@8 -> s@3 : bool ; + var@9 -> ⊥ : u32 ; } -- op: -move var@3 -[Debug] Value to move: -s@0 : u32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@7); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> s@1 : u32 ; - var@5 -> ⊥ : bool ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> s@4 : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -- op: -move var@4 -[Debug] Value to move: -s@1 : u32 [Debug] **About to evaluate statement**: [ - return + assert(¬move var@7) ] **Context**: @@ -19736,31 +56187,22 @@ s@1 : u32 # Frame 0: { - var@0 -> s@2 : u32 ; + var@0 -> ⊥ : () ; x -> s@0 : u32 ; y -> s@1 : u32 ; - var@3 -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : bool ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> s@1 : u32 ; + var@6 -> ⊥ : (u32, bool) ; + var@7 -> s@4 : bool ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : u32 ; } -[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 ] @@ -19771,23 +56213,27 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> s@0 : u32 ; + y -> s@1 : u32 ; + z -> s@2 : u32 ; + var@4 -> s@0 : u32 ; + var@5 -> 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**: [ - x := 23: u32 + var@2 := copy x; + var@3 := copy var@2 == -2147483648: i32; + assert(¬move var@3); + var@0 := - move var@2; + return ] **Context**: @@ -19796,58 +56242,38 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; + var@2 -> ⊥ : i32 ; + var@3 -> ⊥ : bool ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@2 := copy x +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; + var@2 -> ⊥ : i32 ; + var@3 -> ⊥ : bool ; } -- 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); + var@3 := copy var@2 == -2147483648: i32; + assert(¬move var@3); + var@0 := - move var@2; return ] @@ -19857,24 +56283,17 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; + var@2 -> s@0 : i32 ; + var@3 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ - y := 44: u32 + var@3 := copy var@2 == -2147483648: i32 ] **Context**: @@ -19883,57 +56302,18 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; + var@2 -> s@0 : i32 ; + var@3 -> ⊥ : bool ; } -- 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); + assert(¬move var@3); + var@0 := - move var@2; return ] @@ -19943,24 +56323,17 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; + var@2 -> s@0 : i32 ; + var@3 -> s@1 : bool ; } [Debug] **About to evaluate statement**: [ - z := 67: u32 + assert(¬move var@3) ] **Context**: @@ -19969,57 +56342,37 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; + var@2 -> s@0 : i32 ; + var@3 -> s@1 : bool ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@0 := - move var@2; + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> ⊥ : u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; + var@2 -> s@0 : i32 ; + var@3 -> ⊥ : bool ; } -- 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 + var@0 := - move var@2 ] **Context**: @@ -20028,24 +56381,17 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> 67: u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; + var@2 -> s@0 : i32 ; + var@3 -> ⊥ : bool ; } [Debug] **About to evaluate statement**: [ - var@5 := copy x + return ] **Context**: @@ -20054,58 +56400,38 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> 67: u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + var@0 -> s@2 : i32 ; + x -> s@0 : i32 ; + var@2 -> ⊥ : i32 ; + var@3 -> ⊥ : bool ; } -[Debug] eval_operand: -- ctx: +[Debug] test_function_symbolic: test_neg1 +[Debug] +**About to evaluate statement**: [ + x := 3: i32; + y := -3: i32; + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> 67: u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> ⊥ : u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> ⊥ : i32 ; + y -> ⊥ : i32 ; } -- 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 + x := 3: i32 ] **Context**: @@ -20115,23 +56441,16 @@ copy x # Frame 0: { var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> 67: u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> 23: u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> ⊥ : i32 ; + y -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - (p).x := move var@5 + y := -3: i32; + return ] **Context**: @@ -20141,59 +56460,32 @@ copy x # Frame 0: { var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> 67: u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> 23: u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> 3: i32 ; + y -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) +[Debug] +**About to evaluate statement**: [ + y := -3: i32 +] -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 23: u32 ; - y -> 44: u32 ; - z -> 67: u32 ; - p -> ⊥ : test1::Pair ; - var@5 -> 23: u32 ; - s -> ⊥ : test1::Sum ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 3: i32 ; + y -> ⊥ : i32 ; } -- 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 ] @@ -20204,23 +56496,24 @@ ty: (Types.Adt ((Types.AdtId 0), [], # 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 ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> 3: i32 ; + y -> -3: i32 ; } +[Debug] test_function_symbolic: refs_test1 [Debug] **About to evaluate statement**: [ - (p).y := 67: u32 + 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**: @@ -20230,52 +56523,47 @@ ty: (Types.Adt ((Types.AdtId 0), [], # 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 ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := 0: i32 +] + +**Context**: # Ended regions: {} # 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 ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } -- 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); + 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 ] @@ -20286,23 +56574,19 @@ ty: (Types.Adt ((Types.AdtId 0), [], # 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 ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - (s as test1::Sum::Right).0 := true + px := &mut x ] **Context**: @@ -20312,55 +56596,47 @@ ty: (Types.Adt ((Types.AdtId 0), [], # 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 ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 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 ; - o -> ⊥ : test1::One ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> ⌊mut@0⌋ ; + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } -- 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 + ppx := &mut px ] **Context**: @@ -20370,23 +56646,24 @@ ty: (Types.Adt ((Types.AdtId 6), [], [(Types.Integer Types.U32); Types.Bool])) # 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 ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + 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**: [ - set_discriminant(s, 1) + *(*(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**: @@ -20396,27 +56673,19 @@ ty: (Types.Adt ((Types.AdtId 6), [], [(Types.Integer Types.U32); Types.Bool])) # 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 ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + 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**: [ - (o as test1::One::One).0 := 3: u64; - set_discriminant(o, 0); - set_discriminant(e0, 0); - set_discriminant(enum0, 0); - return + *(*(ppx)) := 1: i32 ] **Context**: @@ -20426,23 +56695,23 @@ ty: (Types.Adt ((Types.AdtId 6), [], [(Types.Integer Types.U32); Types.Bool])) # 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 ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + 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**: [ - (o as test1::One::One).0 := 3: u64 + var@6 := copy x; + var@5 := move var@6 == 1: i32; + var@4 := ¬ move var@5; + assert(¬move var@4); + return ] **Context**: @@ -20452,52 +56721,43 @@ ty: (Types.Adt ((Types.AdtId 6), [], [(Types.Integer Types.U32); Types.Bool])) # 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 ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + 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: +[Debug] +**About to evaluate statement**: [ + var@6 := copy x +] + +**Context**: # Ended regions: {} # 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 ; - e0 -> ⊥ : test1::EmptyEnum ; - e1 -> ⊥ : test1::EmptyEnum ; - enum0 -> ⊥ : test1::Enum ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (1: i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } -- 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); + var@5 := move var@6 == 1: i32; + var@4 := ¬ move var@5; + assert(¬move var@4); return ] @@ -20508,23 +56768,19 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # 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 ; + 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**: [ - set_discriminant(o, 0) + var@5 := move var@6 == 1: i32 ] **Context**: @@ -20534,24 +56790,20 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # 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 ; + 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**: [ - set_discriminant(e0, 0); - set_discriminant(enum0, 0); + var@4 := ¬ move var@5; + assert(¬move var@4); return ] @@ -20562,23 +56814,19 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # 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 ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> s@0 : bool ; + var@6 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - set_discriminant(e0, 0) + var@4 := ¬ move var@5 ] **Context**: @@ -20588,23 +56836,19 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # 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 ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> s@0 : bool ; + var@6 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - set_discriminant(enum0, 0); + assert(¬move var@4); return ] @@ -20615,23 +56859,19 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # 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 ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> s@1 : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - set_discriminant(enum0, 0) + assert(¬move var@4) ] **Context**: @@ -20641,16 +56881,12 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # 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 ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> s@1 : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } @@ -20667,32 +56903,43 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # 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 ; + x -> 1: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : i32 ; } -[Debug] test_function_symbolic: get_max +[Debug] test_function_symbolic: refs_test2 [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 - }; + 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 ] @@ -20702,19 +56949,32 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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**: [ - var@4 := copy x + x := 0: i32 ] **Context**: @@ -20723,48 +56983,89 @@ ty: (Types.Adt ((Types.AdtId 2), [], [(Types.Integer Types.U64)])) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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: -copy x -[Debug] Value to copy: -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 + y := 1: i32 ] **Context**: @@ -20773,19 +57074,54 @@ s@0 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> s@0 : u32 ; - var@5 -> ⊥ : u32 ; + 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**: [ - var@5 := copy y + 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**: @@ -20794,46 +57130,86 @@ s@0 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> s@0 : u32 ; - var@5 -> ⊥ : u32 ; + 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] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + px := &mut x +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> s@0 : u32 ; - var@5 -> ⊥ : u32 ; + 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 ; } -- op: -copy y -[Debug] Value to copy: -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 - }; + 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 ] @@ -20843,19 +57219,32 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; + 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**: [ - var@3 := move var@4 >= move var@5 + py := &mut y ] **Context**: @@ -20864,67 +57253,86 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; + 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] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; -} - - -- op: -move var@4 +[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 +] -[Debug] Value to move: -s@0 : u32 -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> s@1 : u32 ; + 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 ; } -- op: -move var@5 -[Debug] Value to move: -s@1 : u32 [Debug] **About to evaluate statement**: [ - if (move var@3) { - var@0 := copy x - } - else { - var@0 := copy y - }; - return + ppx := &mut px ] **Context**: @@ -20933,24 +57341,51 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@2 : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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**: [ - if (move var@3) { - var@0 := copy x - } - else { - var@0 := copy y - } + 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**: @@ -20959,40 +57394,84 @@ s@1 : u32 # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> s@2 : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@6 := &mut *(py) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> true ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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 ; } -- op: -move var@3 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - var@0 := copy x + *(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**: @@ -21001,61 +57480,83 @@ true # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; -} - - -- op: -copy x +[Debug] +**About to evaluate statement**: [ + *(ppx) := move var@6 +] -[Debug] Value to copy: -s@0 : u32 -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> false ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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@3 -[Debug] Value to move: -false [Debug] **About to evaluate statement**: [ - var@0 := copy y + *(*(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**: @@ -21064,39 +57565,81 @@ false # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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: +[Debug] +**About to evaluate statement**: [ + *(*(ppx)) := 2: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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: -copy y -[Debug] Value to copy: -s@1 : u32 [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 ] @@ -21106,19 +57649,32 @@ s@1 : u32 # Frame 0: { - var@0 -> s@0 : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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**: [ - return + var@9 := copy *(px) ] **Context**: @@ -21127,28 +57683,46 @@ s@1 : u32 # Frame 0: { - var@0 -> s@1 : u32 ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - var@3 -> ⊥ : bool ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; + 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] 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@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 ] @@ -21159,22 +57733,31 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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**: [ - x := move get_max(4: u32, 3: u32) + var@8 := move var@9 == 2: i32 ] **Context**: @@ -21184,75 +57767,125 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + var@8 -> 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: -4: u32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@7 := ¬ move var@8 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + var@8 -> 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: -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); + 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 ] @@ -21263,22 +57896,31 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; + 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 -> s@1 : bool ; var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; + 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 := move get_max(10: u32, 11: u32) + assert(¬move var@7) ] **Context**: @@ -21288,75 +57930,77 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> ⊥ : bool ; + 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 -> s@1 : bool ; var@8 -> ⊥ : bool ; - var@9 -> ⊥ : u32 ; + 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: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 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] +**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] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> ⊥ : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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: -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 + var@12 := copy x ] **Context**: @@ -21366,22 +58010,42 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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@4 := 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**: @@ -21391,52 +58055,74 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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: +[Debug] +**About to evaluate statement**: [ + var@11 := move var@12 == 0: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> ⊥ : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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: -copy x -[Debug] Value to copy: -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); + 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 ] @@ -21447,22 +58133,31 @@ s@0 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> 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@5 := copy y + var@10 := ¬ move var@11 ] **Context**: @@ -21472,52 +58167,74 @@ s@0 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> 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: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> ⊥ : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> 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 ; } -- op: -copy y -[Debug] Value to copy: -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 + assert(¬move var@10) ] **Context**: @@ -21527,22 +58244,39 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> 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**: [ - z := copy var@4 + copy var@5 + 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**: @@ -21552,76 +58286,106 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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: +[Debug] +**About to evaluate statement**: [ + var@15 := copy *(py) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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 var@4 -[Debug] Value to copy: -s@0 : u32 -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> ⊥ : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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: -copy var@5 -[Debug] Value to copy: -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 + var@14 := move var@15 == 2: i32 ] **Context**: @@ -21631,22 +58395,37 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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@9 := copy z + 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**: @@ -21656,49 +58435,69 @@ s@1 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> s@4 : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@13 := ¬ move var@14 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> s@4 : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } -- op: -copy z -[Debug] Value to copy: -s@2 : u32 [Debug] **About to evaluate statement**: [ - var@8 := move var@9 == 15: u32; - var@7 := ¬ move var@8; - assert(¬move var@7); + 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 ] @@ -21709,22 +58508,31 @@ s@2 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> s@2 : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> s@5 : 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 == 15: u32 + assert(¬move var@13) ] **Context**: @@ -21734,71 +58542,105 @@ s@2 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> s@2 : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> s@5 : bool ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> s@2 : u32 ; + 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@9 -[Debug] Value to move: -s@2 : u32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@18 := copy y +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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: -15: u32 [Debug] **About to evaluate statement**: [ - var@7 := ¬ move var@8; - assert(¬move var@7); + var@17 := move var@18 == 2: i32; + var@16 := ¬ move var@17; + assert(¬move var@16); return ] @@ -21809,22 +58651,31 @@ s@2 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> s@3 : bool ; - var@9 -> ⊥ : u32 ; + 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@7 := ¬ move var@8 + var@17 := move var@18 == 2: i32 ] **Context**: @@ -21834,48 +58685,67 @@ s@2 : u32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> s@3 : bool ; - var@9 -> ⊥ : u32 ; + 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: +[Debug] +**About to evaluate statement**: [ + var@16 := ¬ move var@17; + assert(¬move var@16); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> s@3 : bool ; - var@9 -> ⊥ : u32 ; + 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 -> s@6 : bool ; + var@18 -> ⊥ : i32 ; } -- op: -move var@8 -[Debug] Value to move: -s@3 : bool [Debug] **About to evaluate statement**: [ - assert(¬move var@7); - return + var@16 := ¬ move var@17 ] **Context**: @@ -21885,22 +58755,32 @@ s@3 : bool # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> s@4 : bool ; + 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 -> ⊥ : u32 ; + 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 -> s@6 : bool ; + var@18 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@7) + assert(¬move var@16); + return ] **Context**: @@ -21910,44 +58790,62 @@ s@3 : bool # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> s@4 : bool ; + 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 -> ⊥ : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> s@7 : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@16) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; - var@7 -> true ; + 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 -> ⊥ : u32 ; + var@9 -> ⊥ : i32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> s@7 : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } -- op: -move var@7 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ return @@ -21960,26 +58858,37 @@ true # Frame 0: { var@0 -> ⊥ : () ; - x -> s@0 : u32 ; - y -> s@1 : u32 ; - z -> s@2 : u32 ; - var@4 -> s@0 : u32 ; - var@5 -> s@1 : u32 ; - var@6 -> ⊥ : (u32, bool) ; + 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 -> ⊥ : u32 ; + 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_neg +[Debug] test_function_symbolic: test_list1 [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; + set_discriminant(var@3, 1); + var@2 := move alloc::boxed::Box>::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 ] @@ -21989,17 +58898,17 @@ true # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> ⊥ : i32 ; - var@3 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } [Debug] **About to evaluate statement**: [ - var@2 := copy x + set_discriminant(var@3, 1) ] **Context**: @@ -22008,38 +58917,21 @@ true # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> ⊥ : i32 ; - var@3 -> ⊥ : bool ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> ⊥ : i32 ; - var@3 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -- op: -copy x -[Debug] Value to copy: -s@0 : i32 [Debug] **About to evaluate statement**: [ - var@3 := copy var@2 == -2147483648: i32; - assert(¬move var@3); - var@0 := - move var@2; + var@2 := move alloc::boxed::Box>::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 ] @@ -22049,17 +58941,17 @@ s@0 : i32 # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; } [Debug] **About to evaluate statement**: [ - var@3 := copy var@2 == -2147483648: i32 + var@2 := move alloc::boxed::Box>::new(move var@3) ] **Context**: @@ -22068,54 +58960,25 @@ s@0 : i32 # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> ⊥ : bool ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> ⊥ : bool ; -} - - -- op: -copy var@2 - -[Debug] Value to copy: -s@0 : i32 -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; } -- op: --2147483648: i32 +[Debug] eval_non_local_function_call: +- fid:CfimAst.BoxNew +- type_params: [test1::List] +- args: [move var@3] +- dest: var@2 [Debug] **About to evaluate statement**: [ - assert(¬move var@3); - var@0 := - move var@2; + (l as test1::List::Cons).0 := 0: i32; + (l as test1::List::Cons).1 := move var@2; + set_discriminant(l, 0); + drop(l); return ] @@ -22125,17 +58988,17 @@ s@0 : i32 # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> s@1 : bool ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@3) + (l as test1::List::Cons).0 := 0: i32 ] **Context**: @@ -22144,36 +59007,22 @@ s@0 : i32 # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> s@1 : bool ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> true ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -- op: -move var@3 -[Debug] Value to move: -true +[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**: [ - var@0 := - move var@2; + (l as test1::List::Cons).1 := move var@2; + set_discriminant(l, 0); + drop(l); return ] @@ -22183,17 +59032,17 @@ true # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } [Debug] **About to evaluate statement**: [ - var@0 := - move var@2 + (l as test1::List::Cons).1 := move var@2 ] **Context**: @@ -22202,35 +59051,18 @@ true # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> ⊥ : bool ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; - var@2 -> s@0 : i32 ; - var@3 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -- op: -move var@2 -[Debug] Value to move: -s@0 : i32 [Debug] **About to evaluate statement**: [ + set_discriminant(l, 0); + drop(l); return ] @@ -22240,20 +59072,17 @@ s@0 : i32 # Frame 0: { - var@0 -> s@2 : i32 ; - x -> s@0 : i32 ; - var@2 -> ⊥ : i32 ; - var@3 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -[Debug] test_function_symbolic: test_neg1 [Debug] **About to evaluate statement**: [ - x := 3: i32; - y := -3: i32; - return + set_discriminant(l, 0) ] **Context**: @@ -22263,15 +59092,17 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - y -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } [Debug] **About to evaluate statement**: [ - x := 3: i32 + drop(l); + return ] **Context**: @@ -22281,31 +59112,35 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - y -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + drop(l) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - y -> ⊥ : i32 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } -- op: -3: i32 +[Debug] drop_value: place: l [Debug] **About to evaluate statement**: [ - y := -3: i32; return ] @@ -22316,15 +59151,28 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> 3: i32 ; - y -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; } +[Debug] test_function_symbolic: test_box1 [Debug] **About to evaluate statement**: [ - y := -3: i32 + b := move alloc::boxed::Box::new(0: i32); + var@3 := &two-phase b; + x := move core::ops::deref::DerefMut::deref_mut(move var@3); + *(x) := 1: i32; + var@5 := &b; + x := move core::ops::deref::Deref>::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**: @@ -22334,30 +59182,59 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> 3: i32 ; - y -> ⊥ : i32 ; + b -> ⊥ : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + b := move alloc::boxed::Box::new(0: i32) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 3: i32 ; - y -> ⊥ : i32 ; + b -> ⊥ : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } -- op: --3: i32 +[Debug] eval_non_local_function_call: +- fid:CfimAst.BoxNew +- type_params: [i32] +- args: [0: i32] +- dest: b [Debug] **About to evaluate statement**: [ + var@3 := &two-phase b; + x := move core::ops::deref::DerefMut::deref_mut(move var@3); + *(x) := 1: i32; + var@5 := &b; + x := move core::ops::deref::Deref>::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 ] @@ -22368,24 +59245,21 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> 3: i32 ; - y -> -3: i32 ; + b -> s@0 : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : 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 + var@3 := &two-phase b ] **Context**: @@ -22395,19 +59269,30 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : i32 ; + b -> s@0 : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - x := 0: i32 + x := move core::ops::deref::DerefMut::deref_mut(move var@3); + *(x) := 1: i32; + var@5 := &b; + x := move core::ops::deref::Deref>::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**: @@ -22417,45 +59302,67 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⊥ : i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : i32 ; + b -> @shared_loan({0}, s@0 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⌊inactivated_mut@0⌋ ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := move core::ops::deref::DerefMut::deref_mut(move var@3) +] + +**Context**: # Ended regions: {} # 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 ; + b -> @shared_loan({0}, s@0 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⌊inactivated_mut@0⌋ ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } -- op: -0: i32 +[Debug] eval_non_local_function_call: +- fid:CfimAst.BoxDerefMut +- type_params: [i32] +- args: [move var@3] +- dest: x +[Debug] activate_inactivated_mut_borrow: resulting value: +{ Values.value = + (Values.Symbolic + { Values.sv_id = 0; + sv_ty = + (Types.Adt ((Types.Assumed Types.Box), [], [(Types.Integer Types.I32)] + )) + }); + ty = + (Types.Adt ((Types.Assumed Types.Box), [], [(Types.Integer Types.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); + *(x) := 1: i32; + var@5 := &b; + x := move core::ops::deref::Deref>::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 ] @@ -22466,19 +59373,25 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : i32 ; + b -> ⌊mut@0⌋ ; + x -> s@1 : &r@0 mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + proj_loans (s@1 : &r@0 mut (i32)) + } } [Debug] **About to evaluate statement**: [ - px := &mut x + *(x) := 1: i32 ] **Context**: @@ -22488,73 +59401,77 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> 0: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : i32 ; + b -> ⌊mut@0⌋ ; + x -> s@1 : &r@0 mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + proj_loans (s@1 : &r@0 mut (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 -] +[Debug] expand_symbolic_value: s@1 : &r@0 mut (i32) -**Context**: +- original context: # Ended regions: {} # 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 ; + b -> ⌊mut@0⌋ ; + x -> s@1 : &r@0 mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + proj_loans (s@1 : &r@0 mut (i32)) + } } - -[Debug] -**About to evaluate statement**: [ - ppx := &mut px -] - -**Context**: +- new context: # Ended regions: {} # 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 ; + b -> ⌊mut@0⌋ ; + x -> &mut@1 (s@2 : i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + ⌊mut@1, proj_loans (s@2 : 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); + var@5 := &b; + x := move core::ops::deref::Deref>::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 ] @@ -22565,19 +59482,25 @@ s@0 : i32 # 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 ; + b -> ⌊mut@0⌋ ; + x -> &mut@1 (1: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + ⌊mut@1, proj_loans (s@2 : i32)⌋ + } } [Debug] **About to evaluate statement**: [ - *(*(ppx)) := 1: i32 + var@5 := &b ] **Context**: @@ -22587,748 +59510,664 @@ s@0 : i32 # 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 ; + b -> ⌊mut@0⌋ ; + x -> &mut@1 (1: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + ⌊mut@1, proj_loans (s@2 : i32)⌋ + } } -[Debug] eval_operand: -- ctx: +[Debug] end_abstraction: 0 +- original context: # Ended regions: {} # 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 ; + b -> ⌊mut@0⌋ ; + x -> &mut@1 (1: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + ⌊mut@1, proj_loans (s@2 : 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**: +[Debug] end_abstraction: 0 +- context after parent abstractions ended: # Ended regions: {} # 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 ; + b -> ⌊mut@0⌋ ; + x -> &mut@1 (1: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + ⌊mut@1, proj_loans (s@2 : i32)⌋ + } } - - -[Debug] -**About to evaluate statement**: [ - var@6 := copy x -] - -**Context**: +[Debug] end_abstraction: 0 +- context after loans ended: # Ended regions: {} # 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 ; + b -> ⌊mut@0⌋ ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) } + } } - - -[Debug] eval_operand: -- ctx: +[Debug] end_abstraction: 0 +- original context: # Ended regions: {} # 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 ; + b -> ⌊mut@0⌋ ; + x -> &mut@1 (1: i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), + ⌊mut@1, proj_loans (s@2 : i32)⌋ + } } -- op: -copy x +- new context: +# Ended regions: {0} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + b -> s@3 : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; +} -[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); + x := move core::ops::deref::Deref>::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**: -# Ended regions: {} +# Ended regions: {0} # 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 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⌊shared@2⌋ ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@5 := move var@6 == 1: i32 + x := move core::ops::deref::Deref>::deref(move var@5) ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⌊shared@2⌋ ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 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] eval_non_local_function_call: +- fid:CfimAst.BoxDeref +- type_params: [i32] +- args: [move var@5] +- dest: x +[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 +] -[Debug] Value to move: -1: i32 -[Debug] eval_operand: -- ctx: -# Ended regions: {} +**Context**: +# Ended regions: {0} # 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 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> s@4 : &r@1 (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + proj_loans (s@4 : &r@1 (i32)) + } } -- op: -1: i32 [Debug] **About to evaluate statement**: [ - var@4 := ¬ move var@5; - assert(¬move var@4); - return + var@8 := copy *(x) ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> ⊥ : bool ; - var@5 -> s@0 : bool ; - var@6 -> ⊥ : i32 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> s@4 : &r@1 (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + 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@4 := ¬ move var@5 -] +[Debug] expand_symbolic_value: s@4 : &r@1 (i32) -**Context**: -# Ended regions: {} +- original context: +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> ⊥ : bool ; - var@5 -> s@0 : bool ; - var@6 -> ⊥ : i32 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> s@4 : &r@1 (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + 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: -# Ended regions: {} +- new context: +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> ⊥ : bool ; - var@5 -> s@0 : bool ; - var@6 -> ⊥ : i32 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } } -- op: -move var@5 - -[Debug] Value to move: -s@0 : bool [Debug] **About to evaluate statement**: [ - assert(¬move var@4); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + drop(b); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> s@1 : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : i32 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> s@5 : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } } [Debug] **About to evaluate statement**: [ - assert(¬move var@4) + var@7 := move var@8 == 1: i32 ] **Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> 1: i32 ; - px -> ⊥ : &'_ mut (i32) ; - ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; - var@4 -> s@1 : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : i32 ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} +# Ended regions: {0} # 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 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> s@5 : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } } -- op: -move var@4 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ + var@6 := ¬ move var@7; + assert(¬move var@6); + drop(b); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> s@6 : bool ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : 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 +[Debug] +**About to evaluate statement**: [ + var@6 := ¬ move var@7 ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> s@6 : bool ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } } [Debug] **About to evaluate statement**: [ - x := 0: i32 + assert(¬move var@6); + drop(b); + return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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) ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> s@7 : bool ; 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 ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } } -[Debug] eval_operand: -- ctx: -# Ended regions: {} +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6) +] + +**Context**: +# Ended regions: {0} # 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) ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> s@7 : bool ; 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 ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : 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); + drop(b); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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) ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } } [Debug] **About to evaluate statement**: [ - y := 1: i32 + drop(b) ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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) ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } } -[Debug] eval_operand: -- ctx: -# Ended regions: {} +[Debug] drop_value: place: b +[Debug] end_abstraction: 1 +- original context: +# Ended regions: {0} # 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) ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } } +[Debug] end_abstraction: 1 +- context after parent abstractions ended: +# Ended regions: {0} +# 1 frame(s) -- 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 -] +# Frame 0: +{ + var@0 -> ⊥ : () ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } +} -**Context**: -# Ended regions: {} +[Debug] end_abstraction: 1 +- context after loans ended: +# Ended regions: {0} # 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) ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @ended_shared_loan(s@5 : i32, proj_loans (s@5 : i32)) + } } +[Debug] end_abstraction: 1 +- original context: +# Ended regions: {0} +# 1 frame(s) +# Frame 0: +{ + var@0 -> ⊥ : () ; + b -> @shared_loan({2}, s@3 : std::boxed::Box) ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⌊shared@3⌋ ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + ⌊shared@2⌋, + @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) + } +} -[Debug] -**About to evaluate statement**: [ - px := &mut x -] -**Context**: -# Ended regions: {} +- new context: +# Ended regions: {0, 1} # 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) ; + b -> s@3 : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 ; + var@8 -> ⊥ : 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**: -# Ended regions: {} +# Ended regions: {0, 1} # 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) ; + b -> ⊥ : std::boxed::Box ; + x -> ⊥ : &'_ mut (i32) ; + var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; + x -> ⊥ : &'_ (i32) ; + var@5 -> ⊥ : &'_ (std::boxed::Box) ; + var@6 -> ⊥ : bool ; 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 ; + var@8 -> ⊥ : i32 ; } +[Debug] test_function_symbolic: copy_int [Debug] **About to evaluate statement**: [ - py := &mut y + var@0 := copy x; + return ] **Context**: @@ -23337,52 +60176,15 @@ true # 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 ; + var@0 -> ⊥ : i32 ; + x -> s@0 : 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 + var@0 := copy x ] **Context**: @@ -23391,32 +60193,15 @@ true # 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 ; + var@0 -> ⊥ : i32 ; + x -> s@0 : i32 ; } [Debug] **About to evaluate statement**: [ - ppx := &mut px + return ] **Context**: @@ -23425,50 +60210,24 @@ true # 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 ; + var@0 -> s@0 : i32 ; + x -> s@0 : i32 ; } +[Debug] test_function_symbolic: test_copy_int [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); + 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 ] @@ -23479,31 +60238,21 @@ true # 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 ; + 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**: [ - var@6 := &mut *(py) + x := 0: i32 ] **Context**: @@ -23513,48 +60262,28 @@ true # 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 ; + 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**: [ - *(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); + 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 ] @@ -23565,31 +60294,21 @@ true # 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 ; + 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**: [ - *(ppx) := move var@6 + px := &x ] **Context**: @@ -23599,82 +60318,52 @@ true # 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 ; + x -> 0: i32 ; + px -> ⊥ : &'_ (i32) ; + y -> ⊥ : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 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 ; + 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: -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 + var@4 := copy x ] **Context**: @@ -23684,31 +60373,27 @@ move var@6 # 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 ; + 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**: [ - *(*(ppx)) := 2: i32 + 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**: @@ -23718,78 +60403,49 @@ move var@6 # 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 ; + 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: +[Debug] +**About to evaluate statement**: [ + y := move copy_int(move var@4) +] + +**Context**: # Ended regions: {} # 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 ; + 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: -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); + 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 ] @@ -23800,31 +60456,21 @@ move var@6 # 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@9 := copy *(px) + var@7 := copy *(px) ] **Context**: @@ -23834,80 +60480,49 @@ move var@6 # 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[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**: # Ended regions: {} # 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> 0: i32 ; + var@8 -> ⊥ : 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 + var@8 := copy y ] **Context**: @@ -23917,31 +60532,24 @@ copy *(px) # 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> 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 := move var@9 == 2: i32 + var@6 := move var@7 == move var@8; + var@5 := ¬ move var@6; + assert(¬move var@5); + return ] **Context**: @@ -23951,110 +60559,95 @@ copy *(px) # 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> 0: i32 ; + var@8 -> s@0 : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@6 := move var@7 == move var@8 +] + +**Context**: # Ended regions: {} # 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> 0: i32 ; + var@8 -> s@0 : i32 ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@5 := ¬ move var@6; + assert(¬move var@5); + return +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> s@1 : bool ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } -- op: -move var@9 -[Debug] Value to move: -2: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@5 := ¬ move var@6 +] + +**Context**: # Ended regions: {} # 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> s@1 : bool ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : 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); + assert(¬move var@5); return ] @@ -24065,31 +60658,21 @@ move var@9 # 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 -> 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> s@2 : bool ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := ¬ move var@8 + assert(¬move var@5) ] **Context**: @@ -24099,77 +60682,57 @@ move var@9 # 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 -> 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> s@2 : bool ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 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 -> 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 ; + x -> @shared_loan({0}, 0: i32) ; + px -> ⌊shared@0⌋ ; + y -> s@0 : i32 ; + var@4 -> ⊥ : i32 ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : i32 ; + var@8 -> ⊥ : i32 ; } -- op: -move var@8 -[Debug] Value to move: -s@0 : bool +[Debug] test_function_symbolic: is_cons [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); + var@2 := discriminant(*(l)); + switch (move var@2) { + 0: isize => { + var@0 := true + } + 1: isize => { + var@0 := false + } + _ => { + panic + } + }; return ] @@ -24179,32 +60742,19 @@ s@0 : bool # 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 -> 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 ; + abs@0{parents={}}{regions={0}} { + proj_loans (s@0 : &r@0 (test1::List)) + } + var@0 -> ⊥ : bool ; + l -> s@0 : &r@0 (test1::List) ; + var@2 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@7) + var@2 := discriminant(*(l)) ] **Context**: @@ -24213,77 +60763,61 @@ s@0 : bool # 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 -> 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 ; + abs@0{parents={}}{regions={0}} { + proj_loans (s@0 : &r@0 (test1::List)) + } + var@0 -> ⊥ : bool ; + l -> s@0 : &r@0 (test1::List) ; + var@2 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: +[Debug] expand_symbolic_value: s@0 : &r@0 (test1::List) + +- original context: # Ended regions: {} # 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 ; + abs@0{parents={}}{regions={0}} { + proj_loans (s@0 : &r@0 (test1::List)) + } + var@0 -> ⊥ : bool ; + l -> s@0 : &r@0 (test1::List) ; + var@2 -> ⊥ : isize ; } -- op: -move var@7 +- new context: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + abs@0{parents={}}{regions={0}} { + @shared_loan({0}, s@1 : test1::List, proj_loans (s@1 : test1::List)) + } + var@0 -> ⊥ : bool ; + l -> ⌊shared@0⌋ ; + var@2 -> ⊥ : isize ; +} + -[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); + switch (move var@2) { + 0: isize => { + var@0 := true + } + 1: isize => { + var@0 := false + } + _ => { + panic + } + }; return ] @@ -24293,32 +60827,29 @@ true # 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 ; + abs@0{parents={}}{regions={0}} { + @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + } + var@0 -> ⊥ : bool ; + l -> ⌊shared@0⌋ ; + var@2 -> 0: isize ; } [Debug] **About to evaluate statement**: [ - var@12 := copy x + switch (move var@2) { + 0: isize => { + var@0 := true + } + 1: isize => { + var@0 := false + } + _ => { + panic + } + } ] **Context**: @@ -24327,76 +60858,39 @@ true # 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 ; + abs@0{parents={}}{regions={0}} { + @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + } + var@0 -> ⊥ : bool ; + l -> ⌊shared@0⌋ ; + var@2 -> 0: isize ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@0 := true +] + +**Context**: # Ended regions: {} # 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 ; + abs@0{parents={}}{regions={0}} { + @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + } + var@0 -> ⊥ : bool ; + l -> ⌊shared@0⌋ ; + var@2 -> ⊥ : isize ; } -- 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 ] @@ -24406,32 +60900,30 @@ copy x # 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 ; + abs@0{parents={}}{regions={0}} { + @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + } + var@0 -> true ; + l -> ⌊shared@0⌋ ; + var@2 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@11 := move var@12 == 0: i32 + switch (move var@2) { + 0: isize => { + var@0 := true + } + 1: isize => { + var@0 := false + } + _ => { + panic + } + }; + return ] **Context**: @@ -24440,107 +60932,103 @@ copy x # 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 ; + 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: +[Debug] +**About to evaluate statement**: [ + switch (move var@2) { + 0: isize => { + var@0 := true + } + 1: isize => { + var@0 := false + } + _ => { + panic + } + } +] + +**Context**: # Ended regions: {} # 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 ; + 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**: [ + var@0 := false +] + +**Context**: +# Ended regions: {} +# 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: -move var@12 -[Debug] Value to move: -0: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 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 ; + abs@0{parents={}}{regions={0}} { + @shared_loan({0}, test1::List::Nil, test1::List::Nil) + } + var@0 -> false ; + l -> ⌊shared@0⌋ ; + var@2 -> ⊥ : isize ; } -- op: -0: i32 +[Debug] test_function_symbolic: test_is_cons [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); + set_discriminant(var@3, 1); + var@2 := move alloc::boxed::Box>::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(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); return ] @@ -24551,31 +61039,20 @@ move var@12 # 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 -> s@2 : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } [Debug] **About to evaluate statement**: [ - var@10 := ¬ move var@11 + set_discriminant(var@3, 1) ] **Context**: @@ -24585,74 +61062,53 @@ move var@12 # 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 -> s@2 : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@2 := move alloc::boxed::Box>::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(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return +] + +**Context**: # Ended regions: {} # 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 -> s@2 : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -- op: -move var@11 -[Debug] Value to move: -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 + var@2 := move alloc::boxed::Box>::new(move var@3) ] **Context**: @@ -24662,31 +61118,34 @@ s@2 : bool # 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 -> 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 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } +[Debug] eval_non_local_function_call: +- fid:CfimAst.BoxNew +- type_params: [test1::List] +- args: [move var@3] +- dest: var@2 [Debug] **About to evaluate statement**: [ - assert(¬move var@10) + (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(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return ] **Context**: @@ -24696,72 +61155,53 @@ s@2 : bool # 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 -> 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 ; + l -> ⊥ : test1::List ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + (l as test1::List::Cons).0 := 0: i32 +] + +**Context**: # Ended regions: {} # 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 ; + l -> ⊥ : test1::List ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -- op: -move var@10 -[Debug] Value to move: -true +[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**: [ - 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); + (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(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); return ] @@ -24772,31 +61212,20 @@ true # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } [Debug] **About to evaluate statement**: [ - var@15 := copy *(py) + (l as test1::List::Cons).1 := move var@2 ] **Context**: @@ -24806,72 +61235,50 @@ true # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + set_discriminant(l, 0); + var@7 := &l; + var@6 := copy var@7; + var@5 := move is_cons(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return +] + +**Context**: # Ended regions: {} # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -- 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 + set_discriminant(l, 0) ] **Context**: @@ -24881,31 +61288,26 @@ copy *(py) # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } [Debug] **About to evaluate statement**: [ - var@14 := move var@15 == 2: i32 + var@7 := &l; + var@6 := copy var@7; + var@5 := move is_cons(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return ] **Context**: @@ -24915,102 +61317,97 @@ copy *(py) # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@7 := &l +] + +**Context**: # Ended regions: {} # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -- op: -move var@15 -[Debug] Value to move: -2: i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@6 := copy var@7; + var@5 := move is_cons(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return +] + +**Context**: # Ended regions: {} # 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 ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; +} + + + +[Debug] +**About to evaluate statement**: [ + var@6 := copy var@7 +] + +**Context**: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; } -- 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); + var@5 := move is_cons(move var@6); + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); return ] @@ -25021,31 +61418,20 @@ move var@15 # 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 -> s@4 : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⌊shared@1⌋ ; + var@7 -> ⌊shared@0⌋ ; } [Debug] **About to evaluate statement**: [ - var@13 := ¬ move var@14 + var@5 := move is_cons(move var@6) ] **Context**: @@ -25055,70 +61441,50 @@ move var@15 # 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 -> s@4 : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⌊shared@1⌋ ; + var@7 -> ⌊shared@0⌋ ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@4 := ¬ move var@5; + assert(¬move var@4); + drop(l); + return +] + +**Context**: # Ended regions: {} # 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 -> s@4 : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> s@1 : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } } -- op: -move var@14 -[Debug] Value to move: -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 + var@4 := ¬ move var@5 ] **Context**: @@ -25128,31 +61494,26 @@ s@4 : bool # 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 -> s@5 : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> s@1 : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } } [Debug] **About to evaluate statement**: [ - assert(¬move var@13) + assert(¬move var@4); + drop(l); + return ] **Context**: @@ -25162,68 +61523,51 @@ s@4 : bool # 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 -> s@5 : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> s@2 : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@4) +] + +**Context**: # Ended regions: {} # 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 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> s@2 : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } } -- 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); + drop(l); return ] @@ -25234,31 +61578,24 @@ true # 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 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } } [Debug] **About to evaluate statement**: [ - var@18 := copy y + drop(l) ] **Context**: @@ -25268,204 +61605,197 @@ true # 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 ; + l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⌊shared@0⌋ ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } } -[Debug] eval_operand: -- ctx: +[Debug] drop_value: place: l +[Debug] end_abstraction: 0 +- original context: # Ended regions: {} # 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 ; + l -> @shared_loan({1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } } +[Debug] end_abstraction: 0 +- context after parent abstractions ended: +# Ended regions: {} +# 1 frame(s) -- 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 -] +# Frame 0: +{ + var@0 -> ⊥ : () ; + l -> @shared_loan({1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } +} -**Context**: +[Debug] end_abstraction: 0 +- context after loans ended: # Ended regions: {} # 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 ; + l -> @shared_loan({1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } } +[Debug] end_abstraction: 0 +- original context: +# Ended regions: {} +# 1 frame(s) +# Frame 0: +{ + var@0 -> ⊥ : () ; + l -> @shared_loan({1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; + abs@0{parents={}}{regions={0}} { + ⌊shared@1⌋, + proj_loans (s@1 : bool) + } +} -[Debug] -**About to evaluate statement**: [ - var@17 := move var@18 == 2: i32 -] -**Context**: -# Ended regions: {} +- new context: +# Ended regions: {0} # 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 ; + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } +[Debug] +**About to evaluate statement**: [ + return +] - -[Debug] eval_operand: -- ctx: -# Ended regions: {} +**Context**: +# Ended regions: {0} # 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 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + var@4 -> ⊥ : bool ; + var@5 -> ⊥ : bool ; + var@6 -> ⊥ : &'_ (test1::List) ; + var@7 -> ⊥ : &'_ (test1::List) ; } -- op: -move var@18 -[Debug] Value to move: -2: i32 -[Debug] eval_operand: -- ctx: +[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>(move tl); + return + } + _ => { + panic + } + } +] + +**Context**: # Ended regions: {} # 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@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; 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 ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -2: i32 [Debug] **About to evaluate statement**: [ - var@16 := ¬ move var@17; - assert(¬move var@16); - return + var@8 := false ] **Context**: @@ -25474,32 +61804,44 @@ move var@18 # 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@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; 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 -> s@6 : bool ; - var@18 -> ⊥ : i32 ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@16 := ¬ move var@17 + 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>(move tl); + return + } + _ => { + panic + } + } ] **Context**: @@ -25508,67 +61850,69 @@ move var@18 # 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@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; 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 -> s@6 : bool ; - var@18 -> ⊥ : i32 ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@7 := false +] + +**Context**: # Ended regions: {} # 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@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; 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 -> s@6 : bool ; - var@18 -> ⊥ : i32 ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@17 -[Debug] Value to move: -s@6 : bool [Debug] **About to evaluate statement**: [ - assert(¬move var@16); - return + 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>(move tl); + return + } + _ => { + panic + } + } ] **Context**: @@ -25577,32 +61921,24 @@ s@6 : bool # 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 -> s@7 : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@16) + var@7 := true ] **Context**: @@ -25611,66 +61947,68 @@ s@6 : bool # 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 -> s@7 : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: +[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>(move tl); + return + } + _ => { + panic + } + } +] + +**Context**: # Ended regions: {} # 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 ; + var@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@16 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - return + var@8 := true ] **Context**: @@ -25679,39 +62017,41 @@ true # 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 ; + var@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] test_function_symbolic: test_list1 [Debug] **About to evaluate statement**: [ - set_discriminant(var@3, 1); - var@2 := move alloc::boxed::Box>::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 + 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>(move tl); + return + } + _ => { + panic + } + } ] **Context**: @@ -25720,17 +62060,24 @@ true # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - set_discriminant(var@3, 1) + var@2 := discriminant(l) ] **Context**: @@ -25739,22 +62086,40 @@ true # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> s@0 : test1::List ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@2 := move alloc::boxed::Box>::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 + 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>(move tl); + return + } + _ => { + panic + } + } ] **Context**: @@ -25763,17 +62128,33 @@ true # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> 0: isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@2 := move alloc::boxed::Box>::new(move var@3) + 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>(move tl); + return ] **Context**: @@ -25782,44 +62163,57 @@ true # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_non_local_function_call: -- fid:CfimAst.BoxNew -- type_params: [test1::List] -- args: [move var@3] -- dest: var@2 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@8 := false +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- 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); + 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>(move tl); return ] @@ -25829,17 +62223,24 @@ test1::List::Nil # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - (l as test1::List::Cons).0 := 0: i32 + hd := move (l as test1::List::Cons).0 ] **Context**: @@ -25848,40 +62249,57 @@ test1::List::Nil # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: +[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>(move tl); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> s@1 : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- 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 + var@7 := false ] **Context**: @@ -25890,17 +62308,30 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> s@1 : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - (l as test1::List::Cons).1 := move var@2 + 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>(move tl); + return ] **Context**: @@ -25909,37 +62340,54 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> s@1 : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + tl := move (l as test1::List::Cons).1 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> s@1 : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -move var@2 -[Debug] Value to move: -s@0 : std::boxed::Box> [Debug] **About to evaluate statement**: [ - set_discriminant(l, 0); - drop(l); + 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>(move tl); return ] @@ -25949,17 +62397,24 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> s@1 : T ; + tl -> s@2 : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - set_discriminant(l, 0) + var@5 := move hd ] **Context**: @@ -25968,17 +62423,27 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> s@1 : T ; + tl -> s@2 : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - drop(l); + 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>(move tl); return ] @@ -25988,17 +62453,24 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> s@2 : std::boxed::Box> ; + var@5 -> s@1 : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - drop(l) + var@6 := move deref_box(tl) ] **Context**: @@ -26007,73 +62479,69 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> s@2 : std::boxed::Box> ; + var@5 -> s@1 : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] drop_value: place: l -[Debug] -**About to evaluate statement**: [ - return -] +[Debug] expand_symbolic_value: s@2 : std::boxed::Box> -**Context**: +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> s@2 : std::boxed::Box> ; + var@5 -> s@1 : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } - -[Debug] test_function_symbolic: test_box1 -[Debug] -**About to evaluate statement**: [ - b := move alloc::boxed::Box::new(0: i32); - var@3 := &two-phase b; - x := move core::ops::deref::DerefMut::deref_mut(move var@3); - *(x) := 1: i32; - var@5 := &b; - x := move core::ops::deref::Deref>::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**: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> @Box(s@3 : test1::List) ; + var@5 -> s@1 : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } - [Debug] **About to evaluate statement**: [ - b := move alloc::boxed::Box::new(0: i32) + (var@0).0 := move var@5; + (var@0).1 := move var@6; + var@9 := move alloc::alloc::box_free>(move tl); + return ] **Context**: @@ -26082,58 +62550,57 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> s@1 : T ; + var@6 -> s@3 : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_non_local_function_call: -- fid:CfimAst.BoxNew -- type_params: [i32] -- args: [0: i32] -- dest: b -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + (var@0).0 := move var@5 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> s@1 : T ; + var@6 -> s@3 : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -0: i32 +[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@3 := &two-phase b; - x := move core::ops::deref::DerefMut::deref_mut(move var@3); - *(x) := 1: i32; - var@5 := &b; - x := move core::ops::deref::Deref>::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); + (var@0).1 := move var@6; + var@9 := move alloc::alloc::box_free>(move tl); return ] @@ -26143,22 +62610,24 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - b -> s@0 : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@0 -> (s@1 : T, ⊥ : test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> ⊥ : T ; + var@6 -> s@3 : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - var@3 := &two-phase b + (var@0).1 := move var@6 ] **Context**: @@ -26167,30 +62636,24 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - b -> s@0 : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@0 -> (s@1 : T, ⊥ : test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> ⊥ : T ; + var@6 -> s@3 : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - x := move core::ops::deref::DerefMut::deref_mut(move var@3); - *(x) := 1: i32; - var@5 := &b; - x := move core::ops::deref::Deref>::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); + var@9 := move alloc::alloc::box_free>(move tl); return ] @@ -26200,22 +62663,24 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - b -> @shared_loan({0}, s@0 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⌊inactivated_mut@0⌋ ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@0 -> (s@1 : T, s@3 : test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - x := move core::ops::deref::DerefMut::deref_mut(move var@3) + var@9 := move alloc::alloc::box_free>(move tl) ] **Context**: @@ -26224,68 +62689,29 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - b -> @shared_loan({0}, s@0 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⌊inactivated_mut@0⌋ ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + var@0 -> (s@1 : T, s@3 : test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> @Box(⊥ : test1::List) ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } [Debug] eval_non_local_function_call: -- fid:CfimAst.BoxDerefMut -- type_params: [i32] -- args: [move var@3] -- dest: x -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - b -> @shared_loan({0}, s@0 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⌊inactivated_mut@0⌋ ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - 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.sv_id = 0; - sv_ty = - (Types.Adt ((Types.Assumed Types.Box), [], [(Types.Integer Types.I32)] - )) - }); - ty = - (Types.Adt ((Types.Assumed Types.Box), [], [(Types.Integer Types.I32)])) } -[Debug] Value to move: -&mut@0 (s@0 : std::boxed::Box) +- fid:CfimAst.BoxFree +- type_params: [test1::List] +- args: [move tl] +- dest: var@9 +[Debug] drop_value: place: tl [Debug] **About to evaluate statement**: [ - *(x) := 1: i32; - var@5 := &b; - x := move core::ops::deref::Deref>::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 ] @@ -26295,26 +62721,40 @@ move var@3 # Frame 0: { - var@0 -> ⊥ : () ; - b -> ⌊mut@0⌋ ; - x -> s@1 : &r@0 mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@0{parents={}}{regions={0}} { - &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), - proj_loans (s@1 : &r@0 mut (i32)) - } + var@0 -> (s@1 : T, s@3 : test1::List) ; + l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> false ; + var@8 -> false ; + var@9 -> () ; + var@10 -> ⊥ : isize ; } [Debug] **About to evaluate statement**: [ - *(x) := 1: i32 + 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>(move tl); + return + } + _ => { + panic + } + } ] **Context**: @@ -26323,58 +62763,64 @@ move var@3 # Frame 0: { - var@0 -> ⊥ : () ; - b -> ⌊mut@0⌋ ; - x -> s@1 : &r@0 mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@0{parents={}}{regions={0}} { - &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), - proj_loans (s@1 : &r@0 mut (i32)) - } + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Nil ; + var@2 -> 1: isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + panic +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - b -> ⌊mut@0⌋ ; - x -> s@1 : &r@0 mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@0{parents={}}{regions={0}} { - &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), - proj_loans (s@1 : &r@0 mut (i32)) - } + var@0 -> ⊥ : (T, test1::List) ; + l -> test1::List::Nil ; + var@2 -> ⊥ : isize ; + hd -> ⊥ : T ; + tl -> ⊥ : std::boxed::Box> ; + var@5 -> ⊥ : T ; + var@6 -> ⊥ : test1::List ; + var@7 -> true ; + var@8 -> true ; + var@9 -> ⊥ : () ; + var@10 -> ⊥ : isize ; } -- op: -1: i32 +[Debug] test_function_symbolic: test_split_list [Debug] **About to evaluate statement**: [ - var@5 := &b; - x := move core::ops::deref::Deref>::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); + set_discriminant(var@3, 1); + var@2 := move alloc::boxed::Box>::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(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 ] @@ -26385,25 +62831,23 @@ move var@3 # Frame 0: { var@0 -> ⊥ : () ; - b -> ⌊mut@0⌋ ; - x -> &mut@1 (1: i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@0{parents={}}{regions={0}} { - &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), - ⌊mut@1, proj_loans (s@2 : i32)⌋ - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@5 := &b + set_discriminant(var@3, 1) ] **Context**: @@ -26413,568 +62857,596 @@ move var@3 # Frame 0: { var@0 -> ⊥ : () ; - b -> ⌊mut@0⌋ ; - x -> &mut@1 (1: i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@0{parents={}}{regions={0}} { - &mut@0 (proj_borrows (s@0 : std::boxed::Box <: std::boxed::Box)), - ⌊mut@1, proj_loans (s@2 : i32)⌋ - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - x := move core::ops::deref::Deref>::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); + var@2 := move alloc::boxed::Box>::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(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**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⌊shared@2⌋ ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - x := move core::ops::deref::Deref>::deref(move var@5) + var@2 := move alloc::boxed::Box>::new(move var@3) ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⌊shared@2⌋ ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> test1::List::Nil ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] eval_non_local_function_call: -- fid:CfimAst.BoxDeref -- type_params: [i32] -- args: [move var@5] -- dest: x -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +- fid:CfimAst.BoxNew +- type_params: [test1::List] +- args: [move var@3] +- dest: var@2 +[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(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**: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⌊shared@2⌋ ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : 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 + (l as test1::List::Cons).0 := 0: i32 ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> s@4 : &r@1 (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - proj_loans (s@4 : &r@1 (i32)) - } + l -> ⊥ : test1::List ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : 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**: [ - var@8 := copy *(x) + (l as test1::List::Cons).1 := move var@2; + set_discriminant(l, 0); + var@7 := move l; + var@6 := move split_list(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**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> s@4 : &r@1 (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - proj_loans (s@4 : &r@1 (i32)) - } + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +[Debug] +**About to evaluate statement**: [ + (l as test1::List::Cons).1 := move var@2 +] + +**Context**: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> s@4 : &r@1 (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - proj_loans (s@4 : &r@1 (i32)) - } + l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; + var@2 -> s@0 : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -- op: -copy *(x) -[Debug] Value to copy: -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); + set_discriminant(l, 0); + var@7 := move l; + var@6 := move split_list(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**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> s@5 : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := move var@8 == 1: i32 + set_discriminant(l, 0) ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> s@5 : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +[Debug] +**About to evaluate statement**: [ + var@7 := move l; + var@6 := move split_list(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**: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> s@5 : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -- op: -move var@8 -[Debug] Value to move: -s@5 : i32 -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +[Debug] +**About to evaluate statement**: [ + var@7 := move l +] + +**Context**: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -- op: -1: i32 [Debug] **About to evaluate statement**: [ - var@6 := ¬ move var@7; - assert(¬move var@6); - drop(b); + var@6 := move split_list(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**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> s@6 : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@6 := ¬ move var@7 + var@6 := move split_list(move var@7) ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> s@6 : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> ⊥ : (i32, test1::List) ; + var@7 -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +[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**: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> s@6 : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> s@1 : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -- op: -move var@7 -[Debug] Value to move: -s@6 : bool [Debug] **About to evaluate statement**: [ - assert(¬move var@6); - drop(b); - return + hd := copy (var@6).0 ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> s@7 : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> s@1 : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -[Debug] -**About to evaluate statement**: [ - assert(¬move var@6) -] +[Debug] expand_symbolic_value: s@1 : (i32, test1::List) -**Context**: -# Ended regions: {0} +- original context: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> s@7 : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> s@1 : (i32, test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } - -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +- new context: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> true ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> ⊥ : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> (s@2 : i32, s@3 : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -- op: -move var@6 - -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - drop(b); + 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**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> (s@2 : i32, s@3 : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - drop(b) + tl := move (var@6).1 ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> @shared_loan({2}, s@3 : std::boxed::Box) ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⌊shared@3⌋ ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; - abs@1{parents={}}{regions={1}} { - ⌊shared@2⌋, - @shared_loan({3}, s@5 : i32, proj_loans (s@5 : i32)) - } + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> (s@2 : i32, s@3 : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -[Debug] drop_value: place: b [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**: -# Ended regions: {0, 1} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - b -> ⊥ : std::boxed::Box ; - x -> ⊥ : &'_ mut (i32) ; - var@3 -> ⊥ : &'_ mut (std::boxed::Box) ; - x -> ⊥ : &'_ (i32) ; - var@5 -> ⊥ : &'_ (std::boxed::Box) ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : i32 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -[Debug] test_function_symbolic: copy_int [Debug] **About to evaluate statement**: [ - var@0 := copy x; - return + var@10 := copy hd ] **Context**: @@ -26983,15 +63455,28 @@ true # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := copy x + var@9 := move var@10 == 0: i32; + var@8 := ¬ move var@9; + assert(¬move var@8); + drop(tl); + return ] **Context**: @@ -27000,31 +63485,52 @@ true # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> s@2 : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@9 := move var@10 == 0: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : i32 ; - x -> s@0 : i32 ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> s@2 : i32 ; } -- op: -copy x -[Debug] Value to copy: -s@0 : i32 [Debug] **About to evaluate statement**: [ + var@8 := ¬ move var@9; + assert(¬move var@8); + drop(tl); return ] @@ -27034,25 +63540,24 @@ s@0 : i32 # Frame 0: { - var@0 -> s@0 : i32 ; - x -> s@0 : i32 ; + var@0 -> ⊥ : () ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> s@4 : bool ; + var@10 -> ⊥ : 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 + var@8 := ¬ move var@9 ] **Context**: @@ -27062,21 +63567,25 @@ s@0 : i32 # 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 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> s@4 : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - x := 0: i32 + assert(¬move var@8); + drop(tl); + return ] **Context**: @@ -27086,50 +63595,49 @@ s@0 : i32 # 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 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> s@5 : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@8) +] + +**Context**: # Ended regions: {} # 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 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> s@5 : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : 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); + drop(tl); return ] @@ -27140,21 +63648,23 @@ s@0 : i32 # 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 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - px := &x + drop(tl) ] **Context**: @@ -27164,27 +63674,23 @@ s@0 : i32 # 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 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> s@3 : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } +[Debug] drop_value: place: tl [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 ] @@ -27195,21 +63701,31 @@ s@0 : i32 # 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 ; + l -> ⊥ : test1::List ; + var@2 -> ⊥ : std::boxed::Box> ; + var@3 -> ⊥ : test1::List ; + hd -> s@2 : i32 ; + tl -> ⊥ : test1::List ; + var@6 -> (s@2 : i32, ⊥ : test1::List) ; + var@7 -> ⊥ : test1::List ; + var@8 -> ⊥ : bool ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : i32 ; } +[Debug] test_function_symbolic: get_elem [Debug] **About to evaluate statement**: [ - var@4 := copy x + var@4 := copy b; + if (move var@4) { + var@0 := &mut *(x) + } + else { + var@0 := move y + }; + return ] **Context**: @@ -27218,51 +63734,53 @@ s@0 : i32 # 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 ; + 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 -> s@0 : bool ; + x -> s@1 : &r@0 mut (T) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> ⊥ : bool ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@4 := copy b +] + +**Context**: # Ended regions: {} # 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 ; + 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 -> s@0 : bool ; + x -> s@1 : &r@0 mut (T) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> ⊥ : bool ; } -- 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); + if (move var@4) { + var@0 := &mut *(x) + } + else { + var@0 := move y + }; return ] @@ -27272,22 +63790,28 @@ copy x # 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 ; + 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 -> s@0 : bool ; + x -> s@1 : &r@0 mut (T) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> s@0 : bool ; } [Debug] **About to evaluate statement**: [ - y := move copy_int(move var@4) + if (move var@4) { + var@0 := &mut *(x) + } + else { + var@0 := move y + } ] **Context**: @@ -27296,75 +63820,88 @@ copy x # 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 ; + 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 -> s@0 : bool ; + x -> s@1 : &r@0 mut (T) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> s@0 : bool ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@0 := &mut *(x) +] + +**Context**: # Ended regions: {} # 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 ; + 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 -> s@1 : &r@0 mut (T) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> ⊥ : bool ; +} + + + +[Debug] expand_symbolic_value: s@1 : &r@0 mut (T) + +- original context: +# Ended regions: {} +# 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 -> s@1 : &r@0 mut (T) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> ⊥ : bool ; } -- 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**: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + true, + ⌊mut@0, proj_loans (s@3 : T)⌋, + proj_loans (s@2 : &r@0 mut (T)) + } + var@0 -> ⊥ : &'_ mut (T) ; + b -> true ; + x -> &mut@0 (s@3 : T) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> ⊥ : bool ; } - [Debug] **About to evaluate statement**: [ - var@7 := copy *(px) + var@0 := move y ] **Context**: @@ -27373,49 +63910,47 @@ move var@4 # Frame 0: { - var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + 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 -> s@1 : &r@0 mut (T) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> ⊥ : bool ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> ⊥ : i32 ; + 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 (s@3 : T) ; + b -> true ; + x -> &mut@0 (⌊mut@1⌋) ; + y -> s@2 : &r@0 mut (T) ; + var@4 -> ⊥ : bool ; } -- 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 ] @@ -27425,22 +63960,45 @@ copy *(px) # Frame 0: { - var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + false, + proj_loans (s@1 : &r@0 mut (T)), + proj_loans (s@2 : &r@0 mut (T)) + } + var@0 -> s@2 : &r@0 mut (T) ; + b -> false ; + x -> s@1 : &r@0 mut (T) ; + y -> ⊥ : &'_ mut (T) ; + var@4 -> ⊥ : bool ; } +[Debug] test_function_symbolic: get_elem_test [Debug] **About to evaluate statement**: [ - var@8 := copy y + 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(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**: @@ -27450,47 +64008,84 @@ copy *(px) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; + 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: +[Debug] +**About to evaluate statement**: [ + x := 0: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; + 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: -copy y -[Debug] Value to copy: -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); + 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(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 ] @@ -27501,21 +64096,31 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> s@0 : i32 ; + 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**: [ - var@6 := move var@7 == move var@8 + y := 0: i32 ] **Context**: @@ -27525,71 +64130,84 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> s@0 : i32 ; + 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: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> 0: i32 ; - var@8 -> s@0 : i32 ; -} - - -- op: -move var@7 +[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(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] Value to move: -0: i32 -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; - var@8 -> s@0 : i32 ; + 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 ; } -- op: -move var@8 -[Debug] Value to move: -s@0 : i32 [Debug] **About to evaluate statement**: [ - var@5 := ¬ move var@6; - assert(¬move var@5); - return + var@5 := &mut x ] **Context**: @@ -27599,21 +64217,49 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> s@1 : bool ; - var@7 -> ⊥ : i32 ; + 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 := ¬ move var@6 + var@4 := &two-phase *(var@5); + var@7 := &mut y; + var@6 := &two-phase *(var@7); + z := move get_elem(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**: @@ -27623,45 +64269,81 @@ s@0 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> s@1 : bool ; - var@7 -> ⊥ : i32 ; + 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] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@4 := &two-phase *(var@5) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> s@1 : bool ; - var@7 -> ⊥ : i32 ; + 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 ; } -- op: -move var@6 -[Debug] Value to move: -s@1 : bool [Debug] **About to evaluate statement**: [ - assert(¬move var@5); + var@7 := &mut y; + var@6 := &two-phase *(var@7); + z := move get_elem(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 ] @@ -27672,21 +64354,31 @@ s@1 : bool # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> s@2 : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; + 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**: [ - assert(¬move var@5) + var@7 := &mut y ] **Context**: @@ -27696,45 +64388,81 @@ s@1 : bool # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> s@2 : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; + 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] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@6 := &two-phase *(var@7); + z := move get_elem(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**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> true ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; + 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 ; } -- op: -move var@5 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - return + var@6 := &two-phase *(var@7) ] **Context**: @@ -27744,33 +64472,45 @@ true # Frame 0: { var@0 -> ⊥ : () ; - x -> @shared_loan({0}, 0: i32) ; - px -> ⌊shared@0⌋ ; - y -> s@0 : i32 ; - var@4 -> ⊥ : i32 ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : bool ; - var@7 -> ⊥ : i32 ; + 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] 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 - } - }; + z := move get_elem(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 ] @@ -27780,19 +64520,32 @@ true # Frame 0: { - abs@0{parents={}}{regions={0}} { - proj_loans (s@0 : &r@0 (test1::List)) - } - var@0 -> ⊥ : bool ; - l -> s@0 : &r@0 (test1::List) ; - var@2 -> ⊥ : isize ; + 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**: [ - var@2 := discriminant(*(l)) + z := move get_elem(true, move var@4, move var@6) ] **Context**: @@ -27801,29 +64554,53 @@ true # Frame 0: { - abs@0{parents={}}{regions={0}} { - proj_loans (s@0 : &r@0 (test1::List)) - } - var@0 -> ⊥ : bool ; - l -> s@0 : &r@0 (test1::List) ; - var@2 -> ⊥ : isize ; + 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] 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] 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] **About to evaluate statement**: [ - switch (move var@2) { - 0: isize => { - var@0 := true - } - 1: isize => { - var@0 := false - } - _ => { - panic - } - }; + 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 ] @@ -27833,29 +64610,38 @@ true # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> 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}} { - @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + proj_loans (s@0 : &r@0 mut (i32)) } - 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 - } - } + var@8 := copy *(z) ] **Context**: @@ -27864,79 +64650,120 @@ true # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> 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}} { - @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) - } - var@0 -> ⊥ : bool ; - l -> ⌊shared@0⌋ ; - var@2 -> 0: isize ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - abs@0{parents={}}{regions={0}} { - @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + proj_loans (s@0 : &r@0 mut (i32)) } - 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 -] +[Debug] expand_symbolic_value: s@0 : &r@0 mut (i32) -**Context**: +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> 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}} { - @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + proj_loans (s@0 : &r@0 mut (i32)) } - var@0 -> ⊥ : bool ; - l -> ⌊shared@0⌋ ; - var@2 -> ⊥ : isize ; } - -[Debug] eval_operand: -- ctx: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> ⊥ : 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}} { - @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + ⌊mut@4, proj_loans (s@1 : i32)⌋ } - var@0 -> ⊥ : bool ; - l -> ⌊shared@0⌋ ; - var@2 -> ⊥ : isize ; } -- op: -true - [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 ] @@ -27946,30 +64773,38 @@ true # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> 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}} { - @shared_loan({0}, test1::List::Cons { 0 = s@2 : T; 1 = s@3 : std::boxed::Box>; }, test1::List::Cons { 0 = proj_loans (s@2 : T); 1 = proj_loans (s@3 : std::boxed::Box>); }) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + ⌊mut@4, proj_loans (s@1 : i32)⌋ } - 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 + *(z) := copy var@8 + 1: i32 ] **Context**: @@ -27978,29 +64813,50 @@ true # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> 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}} { - @shared_loan({0}, test1::List::Nil, test1::List::Nil) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + ⌊mut@4, proj_loans (s@1 : i32)⌋ } - 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 - } - } + 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**: @@ -28009,40 +64865,38 @@ true # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> 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}} { - @shared_loan({0}, test1::List::Nil, test1::List::Nil) - } - var@0 -> ⊥ : bool ; - l -> ⌊shared@0⌋ ; - var@2 -> 1: isize ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - abs@0{parents={}}{regions={0}} { - @shared_loan({0}, test1::List::Nil, test1::List::Nil) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + ⌊mut@4, proj_loans (s@1 : i32)⌋ } - 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 + var@12 := copy *(z) ] **Context**: @@ -28051,37 +64905,48 @@ move var@2 # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> 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}} { - @shared_loan({0}, test1::List::Nil, test1::List::Nil) - } - var@0 -> ⊥ : bool ; - l -> ⌊shared@0⌋ ; - var@2 -> ⊥ : isize ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - abs@0{parents={}}{regions={0}} { - @shared_loan({0}, test1::List::Nil, test1::List::Nil) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + ⌊mut@4, proj_loans (s@1 : i32)⌋ } - var@0 -> ⊥ : bool ; - l -> ⌊shared@0⌋ ; - var@2 -> ⊥ : isize ; } -- op: -false [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 ] @@ -28091,31 +64956,38 @@ false # Frame 0: { + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> 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}} { - @shared_loan({0}, test1::List::Nil, test1::List::Nil) + true, + &mut@1 (0: i32), + &mut@3 (0: i32), + ⌊mut@4, proj_loans (s@1 : i32)⌋ } - 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>::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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); - return + var@11 := move var@12 == 1: i32 ] **Context**: @@ -28125,20 +64997,47 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> 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**: [ - set_discriminant(var@3, 1) + 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**: @@ -28148,30 +65047,37 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> 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@2 := move alloc::boxed::Box>::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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); - return + var@10 := ¬ move var@11 ] **Context**: @@ -28181,20 +65087,46 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> 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@2 := move alloc::boxed::Box>::new(move var@3) + 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**: @@ -28204,56 +65136,84 @@ false # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> 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_non_local_function_call: -- fid:CfimAst.BoxNew -- type_params: [test1::List] -- args: [move var@3] -- dest: var@2 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@10) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> 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)⌋ + } } -- 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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + 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 ] @@ -28264,20 +65224,37 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> 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**: [ - (l as test1::List::Cons).0 := 0: i32 + var@15 := copy x ] **Context**: @@ -28287,641 +65264,766 @@ test1::List::Nil # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@0⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (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 -> 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: +[Debug] end_abstraction: 0 +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@1⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (s@2 : i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (⌊mut@3⌋) ; + var@8 -> 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: -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(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); - return -] - -**Context**: +[Debug] end_abstraction: 0 +- context after parent abstractions ended: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@1⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (s@2 : i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (⌊mut@3⌋) ; + var@8 -> 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**: [ - (l as test1::List::Cons).1 := move var@2 -] - -**Context**: +[Debug] end_abstraction: 0 +- context after loans ended: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@1⌋ ; + y -> ⌊mut@2⌋ ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (⌊mut@3⌋) ; + var@8 -> 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), + @ended_mut_loan{ given_back=proj_borrows (s@2 : i32 <: i32); child=proj_loans (s@1 : i32) } + } } - - -[Debug] eval_operand: -- ctx: +[Debug] end_abstraction: 0 +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> ⌊mut@1⌋ ; + y -> ⌊mut@2⌋ ; + z -> &mut@4 (s@2 : i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> &mut@2 (⌊mut@3⌋) ; + var@8 -> 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: -move var@2 +- new context: +# Ended regions: {0} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> 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 (s@6 : i32) ; + var@8 -> 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] Value to move: -s@0 : std::boxed::Box> [Debug] **About to evaluate statement**: [ - set_discriminant(l, 0); - var@7 := &l; - var@6 := copy var@7; - var@5 := move is_cons(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + 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**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> 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 (s@6 : i32) ; + var@8 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : bool ; + var@15 -> s@5 : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - set_discriminant(l, 0) + var@14 := move var@15 == 1: i32 ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> 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 (s@6 : i32) ; + var@8 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : bool ; + var@15 -> s@5 : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := &l; - var@6 := copy var@7; - var@5 := move is_cons(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + 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**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> 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 (s@6 : i32) ; + var@8 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> s@7 : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@7 := &l + var@13 := ¬ move var@14 ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + x -> 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 (s@6 : i32) ; + var@8 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> ⊥ : bool ; + var@14 -> s@7 : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@6 := copy var@7; - var@5 := move is_cons(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + 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**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + x -> 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 (s@6 : i32) ; + var@8 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> s@8 : bool ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@6 := copy var@7 + assert(¬move var@13) ] **Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; + x -> 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 (s@6 : i32) ; + var@8 -> s@1 : i32 ; + var@9 -> ⊥ : (i32, bool) ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : i32 ; + var@13 -> s@8 : bool ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : i32 ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } -- op: -copy var@7 -[Debug] Value to copy: -⌊shared@0⌋ [Debug] **About to evaluate statement**: [ - var@5 := move is_cons(move var@6); - var@4 := ¬ move var@5; - assert(¬move var@4); - drop(l); + var@18 := copy y; + var@17 := move var@18 == 0: i32; + var@16 := ¬ move var@17; + assert(¬move var@16); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⌊shared@1⌋ ; - var@7 -> ⌊shared@0⌋ ; + x -> 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 (s@6 : i32) ; + var@8 -> 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@5 := move is_cons(move var@6) + var@18 := copy y ] **Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⌊shared@1⌋ ; - var@7 -> ⌊shared@0⌋ ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⌊shared@1⌋ ; - var@7 -> ⌊shared@0⌋ ; + x -> 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 (s@6 : i32) ; + var@8 -> 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: -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); + var@17 := move var@18 == 0: i32; + var@16 := ¬ move var@17; + assert(¬move var@16); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> s@1 : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; - abs@0{parents={}}{regions={0}} { - ⌊shared@1⌋, - proj_loans (s@1 : bool) - } + x -> s@5 : i32 ; + y -> s@6 : i32 ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> ⊥ : &'_ mut (i32) ; + var@8 -> 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 -> s@6 : i32 ; } [Debug] **About to evaluate statement**: [ - var@4 := ¬ move var@5 + var@17 := move var@18 == 0: i32 ] **Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> s@1 : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; - abs@0{parents={}}{regions={0}} { - ⌊shared@1⌋, - proj_loans (s@1 : bool) - } -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> s@1 : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; - abs@0{parents={}}{regions={0}} { - ⌊shared@1⌋, - proj_loans (s@1 : bool) - } + x -> s@5 : i32 ; + y -> s@6 : i32 ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> ⊥ : &'_ mut (i32) ; + var@8 -> 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 -> s@6 : i32 ; } -- op: -move var@5 -[Debug] Value to move: -s@1 : bool [Debug] **About to evaluate statement**: [ - assert(¬move var@4); - drop(l); + var@16 := ¬ move var@17; + assert(¬move var@16); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> s@2 : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; - abs@0{parents={}}{regions={0}} { - ⌊shared@1⌋, - proj_loans (s@1 : bool) - } + x -> s@5 : i32 ; + y -> s@6 : i32 ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> ⊥ : &'_ mut (i32) ; + var@8 -> 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 -> s@9 : bool ; + var@18 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@4) + var@16 := ¬ move var@17 ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> s@2 : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; - abs@0{parents={}}{regions={0}} { - ⌊shared@1⌋, - proj_loans (s@1 : bool) - } + x -> s@5 : i32 ; + y -> s@6 : i32 ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> ⊥ : &'_ mut (i32) ; + var@8 -> 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 -> s@9 : bool ; + var@18 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {} +[Debug] +**About to evaluate statement**: [ + assert(¬move var@16); + return +] + +**Context**: +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> true ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; - abs@0{parents={}}{regions={0}} { - ⌊shared@1⌋, - proj_loans (s@1 : bool) - } + x -> s@5 : i32 ; + y -> s@6 : i32 ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> ⊥ : &'_ mut (i32) ; + var@8 -> 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 -> s@10 : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } -- op: -move var@4 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - drop(l); - return + assert(¬move var@16) ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; - abs@0{parents={}}{regions={0}} { - ⌊shared@1⌋, - proj_loans (s@1 : bool) - } + x -> s@5 : i32 ; + y -> s@6 : i32 ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> ⊥ : &'_ mut (i32) ; + var@8 -> 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 -> s@10 : bool ; + var@17 -> ⊥ : bool ; + var@18 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - drop(l) + return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> @shared_loan({0, 1}, test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; }) ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⌊shared@0⌋ ; - abs@0{parents={}}{regions={0}} { - ⌊shared@1⌋, - proj_loans (s@1 : bool) - } + x -> s@5 : i32 ; + y -> s@6 : i32 ; + z -> ⊥ : &'_ mut (i32) ; + var@4 -> ⊥ : &'_ mut (i32) ; + var@5 -> ⊥ : &'_ mut (i32) ; + var@6 -> ⊥ : &'_ mut (i32) ; + var@7 -> ⊥ : &'_ mut (i32) ; + var@8 -> 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] drop_value: place: l +[Debug] test_function_symbolic: id_mut_mut [Debug] **About to evaluate statement**: [ + var@2 := &mut *(x); + var@0 := &mut *(var@2); return ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - var@4 -> ⊥ : bool ; - var@5 -> ⊥ : bool ; - var@6 -> ⊥ : &'_ (test1::List) ; - var@7 -> ⊥ : &'_ (test1::List) ; + 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 -> s@0 : &r@0 mut (&r@1 mut (T)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (T)) ; } -[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>(move tl); - return - } - _ => { - panic - } - } + var@2 := &mut *(x) ] **Context**: @@ -28930,94 +66032,61 @@ true # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 -> s@0 : &r@0 mut (&r@1 mut (T)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (T)) ; } -[Debug] -**About to evaluate statement**: [ - var@8 := false -] +[Debug] expand_symbolic_value: s@0 : &r@0 mut (&r@1 mut (T)) -**Context**: +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 -> s@0 : &r@0 mut (&r@1 mut (T)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (T)) ; } - -[Debug] eval_operand: -- ctx: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 (s@1 : &r@1 mut (T)) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (T)) ; } -- 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>(move tl); - return - } - _ => { - panic - } - } + var@0 := &mut *(var@2); + return ] **Context**: @@ -29026,24 +66095,22 @@ false # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 (s@1 : &r@1 mut (T)) ; } [Debug] **About to evaluate statement**: [ - var@7 := false + var@0 := &mut *(var@2) ] **Context**: @@ -29052,67 +66119,49 @@ false # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 (s@1 : &r@1 mut (T)) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> ⊥ : bool ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 (s@1 : &r@1 mut (T)) ; + x -> &mut@0 (⌊mut@1⌋) ; + var@2 -> &mut@1 (⌊mut@2⌋) ; } -- op: -false +[Debug] test_function_symbolic: id_mut_pair [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>(move tl); - return - } - _ => { - panic - } - } + var@2 := &mut *(x); + var@0 := &mut *(var@2); + return ] **Context**: @@ -29121,24 +66170,19 @@ false # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + abs@0{parents={}}{regions={0}} { + proj_loans (s@0 : &r@0 mut ((&r@0 mut (T), u32))) + } + var@0 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; + x -> s@0 : &r@0 mut ((&r@0 mut (T), u32)) ; + var@2 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; } [Debug] **About to evaluate statement**: [ - var@7 := true + var@2 := &mut *(x) ] **Context**: @@ -29147,92 +66191,52 @@ false # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + abs@0{parents={}}{regions={0}} { + proj_loans (s@0 : &r@0 mut ((&r@0 mut (T), u32))) + } + var@0 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; + x -> s@0 : &r@0 mut ((&r@0 mut (T), u32)) ; + var@2 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; } -[Debug] eval_operand: -- ctx: +[Debug] expand_symbolic_value: s@0 : &r@0 mut ((&r@0 mut (T), u32)) + +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + abs@0{parents={}}{regions={0}} { + proj_loans (s@0 : &r@0 mut ((&r@0 mut (T), u32))) + } + var@0 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; + x -> s@0 : &r@0 mut ((&r@0 mut (T), u32)) ; + var@2 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; } -- 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>(move tl); - return - } - _ => { - panic - } - } -] - -**Context**: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 (s@1 : (&r@0 mut (T), u32)) ; + var@2 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; } - [Debug] **About to evaluate statement**: [ - var@8 := true + var@0 := &mut *(var@2); + return ] **Context**: @@ -29241,65 +66245,19 @@ true # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 (s@1 : (&r@0 mut (T), u32)) ; } -- 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>(move tl); - return - } - _ => { - panic - } - } + var@0 := &mut *(var@2) ] **Context**: @@ -29308,24 +66266,19 @@ true # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 (s@1 : (&r@0 mut (T), u32)) ; } [Debug] **About to evaluate statement**: [ - var@2 := discriminant(l) + return ] **Context**: @@ -29334,40 +66287,33 @@ true # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> s@0 : test1::List ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + abs@0{parents={}}{regions={0}} { + ⌊mut@0, proj_loans (s@1 : (&r@0 mut (T), u32))⌋ + } + var@0 -> &mut@2 (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**: [ - 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>(move tl); - return - } - _ => { - panic - } - } + 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(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**: @@ -29376,58 +66322,61 @@ true # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> 0: isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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: +[Debug] +**About to evaluate statement**: [ + x := 0: u32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> 0: isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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: -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>(move tl); + 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(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 ] @@ -29437,24 +66386,24 @@ move var@2 # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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@8 := false + px := &mut x ] **Context**: @@ -29463,56 +66412,61 @@ move var@2 # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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] eval_operand: -- ctx: +[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(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**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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: -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>(move tl); - return + var@4 := move px ] **Context**: @@ -29521,24 +66475,34 @@ false # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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**: [ - hd := move (l as test1::List::Cons).0 + (p).0 := move var@4; + (p).1 := 1: u32; + pp0 := &mut p; + var@7 := &two-phase *(pp0); + pp1 := move id_mut_pair(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**: @@ -29547,56 +66511,64 @@ false # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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: +[Debug] +**About to evaluate statement**: [ + (p).0 := move var@4 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = s@1 : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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 (l as test1::List::Cons).0 -[Debug] Value to move: -s@1 : T +[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**: [ - 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>(move tl); + (p).1 := 1: u32; + pp0 := &mut p; + var@7 := &two-phase *(pp0); + pp1 := move id_mut_pair(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 ] @@ -29606,24 +66578,24 @@ s@1 : T # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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**: [ - var@7 := false + (p).1 := 1: u32 ] **Context**: @@ -29632,54 +66604,58 @@ s@1 : T # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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: +[Debug] +**About to evaluate statement**: [ + pp0 := &mut p; + var@7 := &two-phase *(pp0); + pp1 := move id_mut_pair(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**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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) ; } -- 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>(move tl); - return + pp0 := &mut p ] **Context**: @@ -29688,24 +66664,31 @@ false # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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**: [ - tl := move (l as test1::List::Cons).1 + var@7 := &two-phase *(pp0); + pp1 := move id_mut_pair(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**: @@ -29714,54 +66697,55 @@ false # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@7 := &two-phase *(pp0) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = s@2 : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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) ; } -- op: -move (l as test1::List::Cons).1 -[Debug] Value to move: -s@2 : std::boxed::Box> [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>(move tl); + pp1 := move id_mut_pair(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 ] @@ -29771,24 +66755,24 @@ s@2 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> s@2 : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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**: [ - var@5 := move hd + pp1 := move id_mut_pair(move var@7) ] **Context**: @@ -29797,54 +66781,86 @@ s@2 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> s@2 : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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: +[Debug] activate_inactivated_mut_borrow: resulting value: +{ Values.value = + (Values.Adt + { Values.variant_id = ; + field_values = + [{ Values.value = + (Values.Borrow + (Values.MutBorrow (, + { 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] +**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**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> s@1 : T ; - tl -> s@2 : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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: -move hd -[Debug] Value to move: -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>(move tl); - return + y := 2: u32 ] **Context**: @@ -29853,24 +66869,32 @@ s@1 : T # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> s@2 : std::boxed::Box> ; - var@5 -> s@1 : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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**: [ - var@6 := move deref_box(tl) + var@10 := &mut y; + var@9 := &mut *(var@10); + *((pp1).0) := move var@9; + *((pp1).1) := 3: u32; + return ] **Context**: @@ -29879,52 +66903,60 @@ s@1 : T # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> s@2 : std::boxed::Box> ; - var@5 -> s@1 : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@10 := &mut y +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> s@2 : std::boxed::Box> ; - var@5 -> s@1 : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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))) + } } -- op: -move deref_box(tl) -[Debug] Value to move: -s@3 : test1::List [Debug] **About to evaluate statement**: [ - (var@0).0 := move var@5; - (var@0).1 := move var@6; - var@9 := move alloc::alloc::box_free>(move tl); + var@9 := &mut *(var@10); + *((pp1).0) := move var@9; + *((pp1).1) := 3: u32; return ] @@ -29934,24 +66966,28 @@ s@3 : test1::List # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> s@1 : T ; - var@6 -> s@3 : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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@0).0 := move var@5 + var@9 := &mut *(var@10) ] **Context**: @@ -29960,57 +66996,29 @@ s@3 : test1::List # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> s@1 : T ; - var@6 -> s@3 : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> s@1 : T ; - var@6 -> s@3 : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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))) + } } -- op: -move var@5 -[Debug] Value to move: -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>(move tl); + *((pp1).0) := move var@9; + *((pp1).1) := 3: u32; return ] @@ -30020,24 +67028,28 @@ ty: (Types.Adt (Types.Tuple, [], # Frame 0: { - var@0 -> (s@1 : T, ⊥ : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : T ; - var@6 -> s@3 : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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**: [ - (var@0).1 := move var@6 + *((pp1).0) := move var@9 ] **Context**: @@ -30046,151 +67058,129 @@ ty: (Types.Adt (Types.Tuple, [], # Frame 0: { - var@0 -> (s@1 : T, ⊥ : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : T ; - var@6 -> s@3 : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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: +[Debug] expand_symbolic_value: s@0 : &r@0 mut ((&r@0 mut (u32), u32)) + +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> (s@1 : T, ⊥ : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : T ; - var@6 -> s@3 : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> 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 (⌊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@6 - -[Debug] Value to move: -s@3 : test1::List -[Debug] -**About to evaluate statement**: [ - var@9 := move alloc::alloc::box_free>(move tl); - return -] - -**Context**: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> (s@1 : T, s@3 : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> &mut@5 (s@1 : (&r@0 mut (u32), 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@1 : (&r@0 mut (u32), u32))⌋ + } } +[Debug] expand_symbolic_value: s@1 : (&r@0 mut (u32), u32) -[Debug] -**About to evaluate statement**: [ - var@9 := move alloc::alloc::box_free>(move tl) -] - -**Context**: +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> (s@1 : T, s@3 : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> @Box(⊥ : test1::List) ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> &mut@5 (s@1 : (&r@0 mut (u32), 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@1 : (&r@0 mut (u32), u32))⌋ + } } - -[Debug] eval_non_local_function_call: -- fid:CfimAst.BoxFree -- type_params: [test1::List] -- args: [move tl] -- dest: var@9 -[Debug] drop_value: place: tl -[Debug] -**About to evaluate statement**: [ - return -] - -**Context**: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> (s@1 : T, s@3 : test1::List) ; - l -> test1::List::Cons { 0 = ⊥ : T; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> false ; - var@8 -> false ; - var@9 -> () ; - var@10 -> ⊥ : isize ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (u32) ; + p -> ⌊mut@1⌋ ; + var@4 -> ⊥ : &'_ mut (u32) ; + pp0 -> &mut@1 (⌊mut@2⌋) ; + pp1 -> &mut@5 ((s@2 : &r@0 mut (u32), 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**: [ - 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>(move tl); - return - } - _ => { - panic - } - } + *((pp1).1) := 3: u32; + return ] **Context**: @@ -30199,50 +67189,28 @@ s@3 : test1::List # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Nil ; - var@2 -> 1: isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Nil ; - var@2 -> 1: isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - var@7 -> true ; - var@8 -> true ; - var@9 -> ⊥ : () ; - var@10 -> ⊥ : isize ; + 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), 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: -move var@2 -[Debug] Value to move: -1: isize [Debug] **About to evaluate statement**: [ - panic + *((pp1).1) := 3: u32 ] **Context**: @@ -30251,38 +67219,27 @@ move var@2 # Frame 0: { - var@0 -> ⊥ : (T, test1::List) ; - l -> test1::List::Nil ; - var@2 -> ⊥ : isize ; - hd -> ⊥ : T ; - tl -> ⊥ : std::boxed::Box> ; - var@5 -> ⊥ : T ; - var@6 -> ⊥ : test1::List ; - 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>::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(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); + 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), 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**: [ return ] @@ -30293,23 +67250,30 @@ move var@2 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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**: [ - set_discriminant(var@3, 1) + var@2 := &mut *(x); + var@0 := &mut *(var@2); + return ] **Context**: @@ -30318,37 +67282,19 @@ move var@2 # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 -> 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 := move alloc::boxed::Box>::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(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 + var@2 := &mut *(x) ] **Context**: @@ -30357,92 +67303,51 @@ move var@2 # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 -> 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 := move alloc::boxed::Box>::new(move var@3) -] +[Debug] expand_symbolic_value: s@0 : &r@0 mut (&r@0 mut ((&r@0 mut (T), u32))) -**Context**: +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 -> s@0 : &r@0 mut (&r@0 mut ((&r@0 mut (T), u32))) ; + var@2 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ; } - -[Debug] eval_non_local_function_call: -- fid:CfimAst.BoxNew -- type_params: [test1::List] -- args: [move var@3] -- dest: var@2 -[Debug] eval_operand: -- ctx: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> test1::List::Nil ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 (s@1 : &r@0 mut ((&r@0 mut (T), u32))) ; + var@2 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ; } -- 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(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); + var@0 := &mut *(var@2); return ] @@ -30452,24 +67357,19 @@ test1::List::Nil # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 (s@1 : &r@0 mut ((&r@0 mut (T), u32))) ; } [Debug] **About to evaluate statement**: [ - (l as test1::List::Cons).0 := 0: i32 + var@0 := &mut *(var@2) ] **Context**: @@ -30478,61 +67378,42 @@ test1::List::Nil # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 (s@1 : &r@0 mut ((&r@0 mut (T), u32))) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + ⌊mut@0, proj_loans (s@1 : &r@0 mut ((&r@0 mut (T), u32)))⌋ + } + var@0 -> &mut@2 (s@1 : &r@0 mut ((&r@0 mut (T), u32))) ; + x -> &mut@0 (⌊mut@1⌋) ; + var@2 -> &mut@1 (⌊mut@2⌋) ; } -- 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] test_function_symbolic: id_mut_mut_mut_same [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(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); + var@2 := &mut *(x); + var@0 := &mut *(var@2); return ] @@ -30542,24 +67423,19 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 -> s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32))) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ; } [Debug] **About to evaluate statement**: [ - (l as test1::List::Cons).1 := move var@2 + var@2 := &mut *(x) ] **Context**: @@ -30568,86 +67444,52 @@ ty: (Types.Adt ((Types.AdtId 1), [], [(Types.Integer Types.I32)])) # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 -> s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32))) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ; } -[Debug] eval_operand: -- ctx: +[Debug] expand_symbolic_value: s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32))) + +- original context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = ⊥ : std::boxed::Box>; } ; - var@2 -> s@0 : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 -> s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32))) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ; } -- op: -move var@2 - -[Debug] Value to move: -s@0 : std::boxed::Box> -[Debug] -**About to evaluate statement**: [ - set_discriminant(l, 0); - var@7 := move l; - var@6 := move split_list(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**: +- new context: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 (s@1 : &r@0 mut (&r@0 mut (u32))) ; + var@2 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ; } - [Debug] **About to evaluate statement**: [ - set_discriminant(l, 0) + var@0 := &mut *(var@2); + return ] **Context**: @@ -30656,33 +67498,19 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 (s@1 : &r@0 mut (&r@0 mut (u32))) ; } [Debug] **About to evaluate statement**: [ - var@7 := move l; - var@6 := move split_list(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 + var@0 := &mut *(var@2) ] **Context**: @@ -30691,24 +67519,19 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + 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 (s@1 : &r@0 mut (&r@0 mut (u32))) ; } [Debug] **About to evaluate statement**: [ - var@7 := move l + return ] **Context**: @@ -30717,57 +67540,19 @@ s@0 : std::boxed::Box> # Frame 0: { - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : () ; - l -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + ⌊mut@0, proj_loans (s@1 : &r@0 mut (&r@0 mut (u32)))⌋ + } + var@0 -> &mut@2 (s@1 : &r@0 mut (&r@0 mut (u32))) ; + x -> &mut@0 (⌊mut@1⌋) ; + var@2 -> &mut@1 (⌊mut@2⌋) ; } -- op: -move l -[Debug] Value to move: -test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } +[Debug] test_function_symbolic: id_borrow1 [Debug] **About to evaluate statement**: [ - var@6 := move split_list(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 ] @@ -30777,24 +67562,26 @@ test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } # 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 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + _x -> s@0 : &r@0 mut (&r@1 (u32)) ; + _y -> s@1 : &r@0 (&r@0 mut (u32)) ; } +[Debug] test_function_symbolic: test_static [Debug] **About to evaluate statement**: [ - var@6 := move split_list(move var@7) + var@0 := copy x; + return ] **Context**: @@ -30803,56 +67590,31 @@ test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@0 -> ⊥ : &'_ (u32) ; + x -> s@0 : &'static (u32) ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@0 := copy x +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> ⊥ : (i32, test1::List) ; - var@7 -> test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@0 -> ⊥ : &'_ (u32) ; + x -> s@0 : &'static (u32) ; } -- op: -move var@7 -[Debug] Value to move: -test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } [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 ] @@ -30862,24 +67624,17 @@ test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> s@1 : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@0 -> s@0 : &'static (u32) ; + x -> s@0 : &'static (u32) ; } +[Debug] test_function_symbolic: test_char [Debug] **About to evaluate statement**: [ - hd := copy (var@6).0 + var@0 := a; + return ] **Context**: @@ -30888,55 +67643,29 @@ test1::List::Cons { 0 = 0: i32; 1 = s@0 : std::boxed::Box>; } # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> s@1 : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@0 -> ⊥ : char ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@0 := a +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> ⊥ : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> s@1 : (i32, test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@0 -> ⊥ : char ; } -- op: -copy (var@6).0 -[Debug] Value to copy: -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 ] @@ -30946,24 +67675,45 @@ s@2 : i32 # Frame 0: { - var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (s@2 : i32, s@3 : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + var@0 -> a ; } +[Debug] test_function_symbolic: test_loops [Debug] **About to evaluate statement**: [ - tl := move (var@6).1 + x := move test_loop1(2: u32); + var@4 := copy x; + var@3 := move var@4 == 2: u32; + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -30973,53 +67723,105 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (s@2 : i32, s@3 : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := move test_loop1(2: u32) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (s@2 : i32, s@3 : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> ⊥ : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -move (var@6).1 -[Debug] Value to move: -s@3 : test1::List [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); + var@4 := copy x; + var@3 := move var@4 == 2: u32; + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -31030,23 +67832,37 @@ s@3 : test1::List # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@10 := copy hd + var@4 := copy x ] **Context**: @@ -31056,53 +67872,105 @@ s@3 : test1::List # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@3 := move var@4 == 2: u32; + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> s@0 : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -copy hd -[Debug] Value to copy: -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 + var@3 := move var@4 == 2: u32 ] **Context**: @@ -31112,23 +67980,64 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> s@2 : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> s@0 : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@9 := move var@10 == 0: i32 + var@2 := ¬ move var@3; + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -31138,76 +68047,143 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> s@2 : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> s@1 : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@2 := ¬ move var@3 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> s@2 : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> s@1 : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -move var@10 -[Debug] Value to move: -s@2 : i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@2); + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> s@2 : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -0: i32 [Debug] **About to evaluate statement**: [ - var@8 := ¬ move var@9; - assert(¬move var@8); - drop(tl); - return + assert(¬move var@2) ] **Context**: @@ -31217,23 +68193,62 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> s@4 : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> s@2 : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@8 := ¬ move var@9 + x := move test_loop2(2: u32); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -31243,50 +68258,100 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> s@4 : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := move test_loop2(2: u32) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> s@4 : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -move var@9 -[Debug] Value to move: -s@4 : bool [Debug] **About to evaluate statement**: [ - assert(¬move var@8); - drop(tl); + var@8 := copy x; + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -31297,23 +68362,37 @@ s@4 : bool # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> s@5 : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@8) + var@8 := copy x ] **Context**: @@ -31323,50 +68402,100 @@ s@4 : bool # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> s@5 : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 == 1: u32; + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> true ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> s@3 : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -move var@8 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - drop(tl); - return + var@7 := move var@8 == 1: u32 ] **Context**: @@ -31376,23 +68505,59 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> s@3 : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - drop(tl) + var@6 := ¬ move var@7; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -31402,24 +68567,37 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> s@3 : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> s@4 : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] drop_value: place: tl [Debug] **About to evaluate statement**: [ - return + var@6 := ¬ move var@7 ] **Context**: @@ -31429,30 +68607,57 @@ true # Frame 0: { var@0 -> ⊥ : () ; - l -> ⊥ : test1::List ; - var@2 -> ⊥ : std::boxed::Box> ; - var@3 -> ⊥ : test1::List ; - hd -> s@2 : i32 ; - tl -> ⊥ : test1::List ; - var@6 -> (s@2 : i32, ⊥ : test1::List) ; - var@7 -> ⊥ : test1::List ; - var@8 -> ⊥ : bool ; - var@9 -> ⊥ : bool ; - var@10 -> ⊥ : i32 ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> s@4 : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[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 - }; + assert(¬move var@6); + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -31462,23 +68667,38 @@ true # 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 -> s@0 : bool ; - x -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> s@5 : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@4 := copy b + assert(¬move var@6) ] **Context**: @@ -31487,54 +68707,98 @@ true # 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 -> s@0 : bool ; - x -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> s@5 : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := move test_loop3(2: u32); + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 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 -> s@0 : bool ; - x -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -copy b -[Debug] Value to copy: -s@0 : bool [Debug] **About to evaluate statement**: [ - if (move var@4) { - var@0 := &mut *(x) - } - else { - var@0 := move y - }; - return + x := move test_loop3(2: u32) ] **Context**: @@ -31543,28 +68807,57 @@ s@0 : bool # 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 -> s@0 : bool ; - x -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> s@0 : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - if (move var@4) { - var@0 := &mut *(x) - } - else { - var@0 := move y - } + var@12 := copy x; + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -31573,48 +68866,96 @@ s@0 : bool # 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 -> s@0 : bool ; - x -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> s@0 : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@12 := copy x +] + +**Context**: # Ended regions: {} # 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 -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> true ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -move var@4 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - var@0 := &mut *(x) + var@11 := move var@12 == 3: u32; + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -31623,48 +68964,95 @@ true # 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 -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> s@6 : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@11 := move var@12 == 3: u32 +] + +**Context**: # Ended regions: {} # 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 -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> false ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : bool ; + var@12 -> s@6 : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -move var@4 -[Debug] Value to move: -false [Debug] **About to evaluate statement**: [ - var@0 := move y + var@10 := ¬ move var@11; + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -31673,47 +69061,93 @@ false # 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 -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> s@7 : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@10 := ¬ move var@11 +] + +**Context**: # Ended regions: {} # 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 -> s@1 : &r@0 mut (T) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; + var@10 -> ⊥ : bool ; + var@11 -> s@7 : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -move y -[Debug] Value to move: -s@2 : &r@0 mut (T) [Debug] **About to evaluate statement**: [ + assert(¬move var@10); + x := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -31723,23 +69157,38 @@ s@2 : &r@0 mut (T) # 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 (s@3 : T) ; - b -> true ; - x -> &mut@0 (⌊mut@1⌋) ; - y -> s@2 : &r@0 mut (T) ; - var@4 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; + var@10 -> s@8 : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - return + assert(¬move var@10) ] **Context**: @@ -31748,44 +69197,52 @@ s@2 : &r@0 mut (T) # 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 -> s@2 : &r@0 mut (T) ; - b -> false ; - x -> s@1 : &r@0 mut (T) ; - y -> ⊥ : &'_ mut (T) ; - var@4 -> ⊥ : bool ; + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; + var@10 -> s@8 : bool ; + var@11 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@14 -> ⊥ : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[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(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 := move test_loop4(20: u32); + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -31796,31 +69253,37 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - x := 0: i32 + x := move test_loop4(20: u32) ] **Context**: @@ -31830,83 +69293,91 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> ⊥ : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@16 := copy x; + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- 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(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 + var@16 := copy x ] **Context**: @@ -31916,115 +69387,141 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - y := 0: i32 + var@15 := move var@16 == 1: u32; + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: # Ended regions: {} -# 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) ; +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> s@9 : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@15 := move var@16 == 1: u32 +] + +**Context**: # Ended regions: {} # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> s@9 : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- 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(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); + var@14 := ¬ move var@15; + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -32035,31 +69532,37 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> s@10 : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@5 := &mut x + var@14 := ¬ move var@15 ] **Context**: @@ -32069,48 +69572,47 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> s@10 : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [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(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); + assert(¬move var@14); + x := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -32121,31 +69623,37 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; 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 ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; + var@14 -> s@11 : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@4 := &two-phase *(var@5) + assert(¬move var@14) ] **Context**: @@ -32155,47 +69663,46 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; 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 ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; + var@14 -> s@11 : bool ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@7 := &mut y; - var@6 := &two-phase *(var@7); - z := move get_elem(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 := move test_loop5(2: u32); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -32206,31 +69713,37 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@7 := &mut y + x := move test_loop5(2: u32) ] **Context**: @@ -32240,46 +69753,45 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@6 := &two-phase *(var@7); - z := move get_elem(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); + var@20 := copy x; + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -32290,31 +69802,37 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@6 := &two-phase *(var@7) + var@20 := copy x ] **Context**: @@ -32324,45 +69842,44 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - z := move get_elem(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); + var@19 := move var@20 == 2: u32; + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -32373,31 +69890,37 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> s@12 : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - z := move get_elem(true, move var@4, move var@6) + var@19 := move var@20 == 2: u32 ] **Context**: @@ -32407,153 +69930,170 @@ s@2 : &r@0 mut (T) # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> s@12 : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@18 := ¬ move var@19; + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> s@13 : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -true -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@18 := ¬ move var@19 +] + +**Context**: # Ended regions: {} # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> s@13 : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- 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: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@18); + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> s@14 : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- 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 + assert(¬move var@18) ] **Context**: @@ -32563,37 +70103,42 @@ move var@6 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)) - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> s@14 : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@8 := copy *(z) + x := move test_loop6(2: u32); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return ] **Context**: @@ -32603,89 +70148,80 @@ move var@6 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)) - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := move test_loop6(2: u32) +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> 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) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)) - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> ⊥ : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -copy *(z) -[Debug] Value to copy: -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); + var@24 := copy x; + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -32696,37 +70232,37 @@ s@1 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - *(z) := copy var@8 + 1: i32 + var@24 := copy x ] **Context**: @@ -32736,126 +70272,121 @@ s@1 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@23 := move var@24 == 2: u32; + var@22 := ¬ move var@23; + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> s@15 : u32 ; } -- op: -copy var@8 -[Debug] Value to copy: -s@1 : i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@23 := move var@24 == 2: u32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> s@15 : u32 ; } -- 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); + var@22 := ¬ move var@23; + assert(¬move var@22); return ] @@ -32866,37 +70397,37 @@ s@1 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> s@16 : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@12 := copy *(z) + var@22 := ¬ move var@23 ] **Context**: @@ -32906,88 +70437,78 @@ s@1 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> s@16 : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@22); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> s@17 : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -- op: -copy *(z) -[Debug] Value to copy: -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 + assert(¬move var@22) ] **Context**: @@ -32997,37 +70518,37 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> s@2 : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> s@17 : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } [Debug] **About to evaluate statement**: [ - var@11 := move var@12 == 1: i32 + return ] **Context**: @@ -33037,124 +70558,118 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@0 : u32 ; + var@2 -> ⊥ : bool ; + var@3 -> ⊥ : bool ; + var@4 -> ⊥ : u32 ; + x -> s@3 : u32 ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : u32 ; + x -> s@6 : u32 ; var@10 -> ⊥ : bool ; var@11 -> ⊥ : bool ; - var@12 -> s@2 : i32 ; - var@13 -> ⊥ : bool ; + var@12 -> ⊥ : u32 ; + x -> s@9 : u32 ; 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)⌋ - } + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : u32 ; + x -> s@12 : u32 ; + var@18 -> ⊥ : bool ; + var@19 -> ⊥ : bool ; + var@20 -> ⊥ : u32 ; + x -> s@15 : u32 ; + var@22 -> ⊥ : bool ; + var@23 -> ⊥ : bool ; + var@24 -> ⊥ : u32 ; } -[Debug] eval_operand: -- ctx: +[Debug] test_function_symbolic: id_mut_mut_test1 +[Debug] +**About to evaluate statement**: [ + x := 0: i32; + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> 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)⌋ - } + var@11 -> ⊥ : i32 ; } -- op: -move var@12 -[Debug] Value to move: -s@2 : i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + x := 0: i32 +] + +**Context**: # Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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)⌋ - } + var@11 -> ⊥ : 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); + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); return ] @@ -33165,37 +70680,24 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> 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)⌋ - } + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@10 := ¬ move var@11 + px := &mut x ] **Context**: @@ -33205,36 +70707,39 @@ s@2 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> 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)⌋ - } + var@11 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -33242,49 +70747,23 @@ s@2 : i32 { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> ⊥ : bool ; - var@11 -> 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)⌋ - } + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -- op: -move var@11 -[Debug] Value to move: -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 + ppx := &mut px ] **Context**: @@ -33295,36 +70774,34 @@ s@3 : bool { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> 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)⌋ - } + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - assert(¬move var@10) + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: @@ -33335,35 +70812,26 @@ s@3 : bool { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; - var@10 -> 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)⌋ - } + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (0: i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@5 := &two-phase *(ppx) +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -33371,47 +70839,32 @@ s@3 : bool { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> 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)⌋ - } + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (0: i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : 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); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); return ] @@ -33423,36 +70876,23 @@ true { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (@shared_loan({2}, &mut@0 (0: i32))) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⌊inactivated_mut@2⌋ ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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)⌋ - } + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@15 := copy x + ppy := move id_mut_mut(move var@5) ] **Context**: @@ -33463,35 +70903,45 @@ true { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (@shared_loan({2}, &mut@0 (0: i32))) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⌊inactivated_mut@2⌋ ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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)⌋ - } + var@11 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] activate_inactivated_mut_borrow: resulting value: +{ Values.value = + (Values.Borrow + (Values.MutBorrow (, + { Values.value = + (Values.Concrete + (Values.Scalar { Values.value = 0; int_ty = Types.I32 })); + ty = (Types.Integer Types.I32) } + ))); + ty = (Types.Ref (Types.Erased, (Types.Integer Types.I32), Types.Mut)) } +[Debug] +**About to evaluate statement**: [ + *(*(ppy)) := 1: i32; + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -33499,434 +70949,464 @@ true { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - y -> ⌊mut@2⌋ ; - z -> &mut@4 (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 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> s@0 : &r@0 mut (&r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; abs@0{parents={}}{regions={0}} { - true, - &mut@1 (0: i32), - &mut@3 (0: i32), - ⌊mut@4, proj_loans (s@1 : i32)⌋ + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) } } -- op: -copy x -[Debug] Value to copy: -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 + *(*(ppy)) := 1: i32 ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> s@0 : &r@0 mut (&r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> s@5 : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } } -[Debug] -**About to evaluate statement**: [ - var@14 := move var@15 == 1: i32 -] +[Debug] expand_symbolic_value: s@0 : &r@0 mut (&r@1 mut (i32)) -**Context**: -# Ended regions: {0} +- original context: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> s@0 : &r@0 mut (&r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> s@5 : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } } - -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +- new context: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (s@1 : &r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> s@5 : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, proj_loans (s@1 : &r@1 mut (i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, proj_loans (s@1 : &r@1 mut (i32))) + } } -- op: -move var@15 +[Debug] expand_symbolic_value: s@1 : &r@1 mut (i32) -[Debug] Value to move: -s@5 : i32 -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +- original context: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (s@1 : &r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, proj_loans (s@1 : &r@1 mut (i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, proj_loans (s@1 : &r@1 mut (i32))) + } } -- op: -1: i32 +- new context: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (s@2 : i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@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 == 0: i32; - var@16 := ¬ move var@17; - assert(¬move var@16); + var@8 := copy *(px); + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); return ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> s@7 : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } [Debug] **About to evaluate statement**: [ - var@13 := ¬ move var@14 + var@8 := copy *(px) ] **Context**: -# Ended regions: {0} +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> s@7 : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +[Debug] end_abstraction: 0 +- original context: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@2⌋ ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> s@7 : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } +[Debug] end_abstraction: 0 +- context after parent abstractions ended: +# Ended regions: {} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@2⌋ ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } +} -- op: -move var@14 +[Debug] end_abstraction: 0 +- context after loans ended: +# Ended regions: {} +# 1 frame(s) -[Debug] Value to move: -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 -] +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@2⌋ ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + @ended_mut_loan{ given_back=@ignored_mut_borrow(None, 1: i32); child=@ignored_mut_loan(4, proj_loans (s@2 : i32)) } + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } +} -**Context**: -# Ended regions: {0} +[Debug] end_abstraction: 0 +- original context: +# Ended regions: {} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@2⌋ ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> s@8 : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } - -[Debug] -**About to evaluate statement**: [ - assert(¬move var@13) -] - -**Context**: +- new context: # Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> s@3 : &r@1 mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> s@8 : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=proj_loans (s@3 : &r@1 mut (i32)); child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } +[Debug] expand_symbolic_value: s@3 : &r@1 mut (i32) - -[Debug] eval_operand: -- ctx: +- original context: # Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> s@3 : &r@1 mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=proj_loans (s@3 : &r@1 mut (i32)); child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : 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**: +- new context: # Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } - [Debug] **About to evaluate statement**: [ - var@18 := copy y + var@7 := move var@8 == 1: i32; + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return ] **Context**: @@ -33936,67 +71416,64 @@ true # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> s@4 : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@7 := move var@8 == 1: i32 +] + +**Context**: # Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> 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 (s@6 : i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> s@4 : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } -- op: -copy y -[Debug] Value to copy: -s@6 : i32 [Debug] **About to evaluate statement**: [ - var@17 := move var@18 == 0: i32; - var@16 := ¬ move var@17; - assert(¬move var@16); + var@6 := ¬ move var@7; + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); return ] @@ -34007,31 +71484,28 @@ s@6 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> s@5 : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 -> s@6 : i32 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } [Debug] **About to evaluate statement**: [ - var@17 := move var@18 == 0: i32 + var@6 := ¬ move var@7 ] **Context**: @@ -34041,98 +71515,98 @@ s@6 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> s@5 : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 -> s@6 : i32 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +] + +**Context**: # Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> s@6 : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 -> s@6 : i32 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } -- op: -move var@18 -[Debug] Value to move: -s@6 : i32 -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + assert(¬move var@6) +] + +**Context**: # Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> s@6 : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } -- op: -0: i32 [Debug] **About to evaluate statement**: [ - var@16 := ¬ move var@17; - assert(¬move var@16); + var@11 := copy x; + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); return ] @@ -34143,31 +71617,28 @@ s@6 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> s@9 : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } [Debug] **About to evaluate statement**: [ - var@16 := ¬ move var@17 + var@11 := copy x ] **Context**: @@ -34177,295 +71648,310 @@ s@6 : i32 # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> s@9 : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } -[Debug] eval_operand: -- ctx: +[Debug] end_abstraction: 1 +- original context: # Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> ⊥ : bool ; - var@17 -> s@9 : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } } +[Debug] end_abstraction: 1 +- context after parent abstractions ended: +# Ended regions: {0} +# 1 frame(s) -- op: -move var@17 - -[Debug] Value to move: -s@9 : bool -[Debug] -**About to evaluate statement**: [ - assert(¬move var@16); - return -] +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } +} -**Context**: +[Debug] end_abstraction: 1 +- context after loans ended: # Ended regions: {0} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> s@10 : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=@ended_mut_loan{ given_back=proj_borrows (s@4 : i32 <: i32); child=proj_loans (s@4 : i32) }; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=⊥ : &r@1 mut (i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} + } } +[Debug] end_abstraction: 1 +- original context: +# Ended regions: {0} +# 1 frame(s) +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> &mut@5 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@5, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@4 (1: i32); child: ⌊mut@4, proj_loans (s@2 : i32)⌋} + } +} -[Debug] -**About to evaluate statement**: [ - assert(¬move var@16) -] -**Context**: -# Ended regions: {0} +- new context: +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; var@10 -> ⊥ : bool ; - var@11 -> ⊥ : bool ; - var@12 -> ⊥ : i32 ; - var@13 -> ⊥ : bool ; - var@14 -> ⊥ : bool ; - var@15 -> ⊥ : i32 ; - var@16 -> s@10 : bool ; - var@17 -> ⊥ : bool ; - var@18 -> ⊥ : i32 ; + var@11 -> ⊥ : i32 ; } +[Debug] +**About to evaluate statement**: [ + var@10 := move var@11 == 1: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + return +] - -[Debug] eval_operand: -- ctx: -# Ended regions: {0} +**Context**: +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> s@7 : i32 ; } -- op: -move var@16 -[Debug] Value to move: -true [Debug] **About to evaluate statement**: [ - return + var@10 := move var@11 == 1: i32 ] **Context**: -# Ended regions: {0} +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { var@0 -> ⊥ : () ; - x -> s@5 : i32 ; - y -> s@6 : i32 ; - z -> ⊥ : &'_ mut (i32) ; - var@4 -> ⊥ : &'_ mut (i32) ; - var@5 -> ⊥ : &'_ mut (i32) ; - var@6 -> ⊥ : &'_ mut (i32) ; - var@7 -> ⊥ : &'_ mut (i32) ; - var@8 -> s@1 : i32 ; - var@9 -> ⊥ : (i32, bool) ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : 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 ; + var@11 -> s@7 : i32 ; } -[Debug] test_function_symbolic: id_mut_mut [Debug] **About to evaluate statement**: [ - var@2 := &mut *(x); - var@0 := &mut *(var@2); + var@9 := ¬ move var@10; + assert(¬move var@9); return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 -> s@0 : &r@0 mut (&r@1 mut (T)) ; - var@2 -> ⊥ : &'_ mut (&'_ mut (T)) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> s@8 : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@2 := &mut *(x) + var@9 := ¬ move var@10 ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 -> s@0 : &r@0 mut (&r@1 mut (T)) ; - var@2 -> ⊥ : &'_ mut (&'_ mut (T)) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> s@8 : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2); + assert(¬move var@9); return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 (s@1 : &r@1 mut (T)) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> s@9 : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2) + assert(¬move var@9) ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 (s@1 : &r@1 mut (T)) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> s@9 : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } @@ -34476,29 +71962,53 @@ true ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 (s@1 : &r@1 mut (T)) ; - x -> &mut@0 (⌊mut@1⌋) ; - var@2 -> &mut@1 (⌊mut@2⌋) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@6 -> ⊥ : bool ; + var@7 -> ⊥ : bool ; + var@8 -> ⊥ : i32 ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; } -[Debug] test_function_symbolic: id_mut_pair +[Debug] test_function_symbolic: id_mut_mut_test2 [Debug] **About to evaluate statement**: [ - var@2 := &mut *(x); - var@0 := &mut *(var@2); + x := 0: i32; + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -34508,19 +72018,31 @@ true # 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 -> s@0 : &r@0 mut ((&r@0 mut (T), u32)) ; - var@2 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; + var@0 -> ⊥ : () ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@2 := &mut *(x) + x := 0: i32 ] **Context**: @@ -34529,19 +72051,52 @@ true # 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 -> s@0 : &r@0 mut ((&r@0 mut (T), u32)) ; - var@2 -> ⊥ : &'_ mut ((&'_ mut (T), u32)) ; + var@0 -> ⊥ : () ; + x -> ⊥ : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2); + px := &mut x; + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -34551,19 +72106,31 @@ true # 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 (s@1 : (&r@0 mut (T), u32)) ; + var@0 -> ⊥ : () ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2) + px := &mut x ] **Context**: @@ -34572,18 +72139,51 @@ true # 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 (s@1 : (&r@0 mut (T), u32)) ; + var@0 -> ⊥ : () ; + x -> 0: i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ + ppx := &mut px; + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -34593,33 +72193,31 @@ true # Frame 0: { - abs@0{parents={}}{regions={0}} { - ⌊mut@0, proj_loans (s@1 : (&r@0 mut (T), u32))⌋ - } - var@0 -> &mut@2 (s@1 : (&r@0 mut (T), u32)) ; - x -> &mut@0 (⌊mut@1⌋) ; - var@2 -> &mut@1 (⌊mut@2⌋) ; + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -[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(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 + ppx := &mut px ] **Context**: @@ -34629,23 +72227,50 @@ true # 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) ; + x -> ⌊mut@0⌋ ; + px -> &mut@0 (0: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - x := 0: u32 + var@5 := &two-phase *(ppx); + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -34655,58 +72280,81 @@ true # 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (0: i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + var@5 := &two-phase *(ppx) +] + +**Context**: # Ended regions: {} # 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (&mut@0 (0: i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -- 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(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + ppy := move id_mut_mut(move var@5); + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -34717,23 +72365,30 @@ true # 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (@shared_loan({2}, &mut@0 (0: i32))) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⌊inactivated_mut@2⌋ ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - px := &mut x + ppy := move id_mut_mut(move var@5) ] **Context**: @@ -34743,33 +72398,57 @@ true # 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) ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (@shared_loan({2}, &mut@0 (0: i32))) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⌊inactivated_mut@2⌋ ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } +[Debug] activate_inactivated_mut_borrow: resulting value: +{ Values.value = + (Values.Borrow + (Values.MutBorrow (, + { Values.value = + (Values.Concrete + (Values.Scalar { Values.value = 0; int_ty = Types.I32 })); + ty = (Types.Integer Types.I32) } + ))); + ty = (Types.Ref (Types.Erased, (Types.Integer Types.I32), Types.Mut)) } [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(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + *(*(ppy)) := 1: i32; + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -34781,22 +72460,37 @@ true { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> s@0 : &r@0 mut (&r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } } [Debug] **About to evaluate statement**: [ - var@4 := move px + *(*(ppy)) := 1: i32 ] **Context**: @@ -34807,21 +72501,37 @@ true { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> s@0 : &r@0 mut (&r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } } -[Debug] eval_operand: -- ctx: +[Debug] expand_symbolic_value: s@0 : &r@0 mut (&r@1 mut (i32)) + +- original context: # Ended regions: {} # 1 frame(s) @@ -34829,39 +72539,34 @@ true { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> s@0 : &r@0 mut (&r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + proj_loans (s@0 : &r@0 mut (&r@1 mut (i32))) + } } -- 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(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**: +- new context: # Ended regions: {} # 1 frame(s) @@ -34869,25 +72574,71 @@ move px { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (s@1 : &r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, proj_loans (s@1 : &r@1 mut (i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, proj_loans (s@1 : &r@1 mut (i32))) + } } +[Debug] expand_symbolic_value: s@1 : &r@1 mut (i32) -[Debug] -**About to evaluate statement**: [ - (p).0 := move var@4 -] +- original context: +# Ended regions: {} +# 1 frame(s) -**Context**: +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (s@1 : &r@1 mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, proj_loans (s@1 : &r@1 mut (i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, proj_loans (s@1 : &r@1 mut (i32))) + } +} + + +- new context: # Ended regions: {} # 1 frame(s) @@ -34895,21 +72646,56 @@ move px { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (s@2 : i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } +[Debug] +**About to evaluate statement**: [ + y := 2: i32; + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return +] -[Debug] eval_operand: -- ctx: +**Context**: # Ended regions: {} # 1 frame(s) @@ -34917,41 +72703,37 @@ move px { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } -- 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(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 + y := 2: i32 ] **Context**: @@ -34962,22 +72744,53 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⊥ : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } [Debug] **About to evaluate statement**: [ - (p).1 := 1: u32 + py := &mut y; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: @@ -34988,21 +72801,40 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 2: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } -[Debug] eval_operand: -- ctx: +[Debug] +**About to evaluate statement**: [ + py := &mut y +] + +**Context**: # Ended regions: {} # 1 frame(s) @@ -35010,31 +72842,51 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> 2: i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } -- op: -1: u32 [Debug] **About to evaluate statement**: [ - pp0 := &mut p; - var@7 := &two-phase *(pp0); - pp1 := move id_mut_pair(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + var@8 := &mut *(py); + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -35046,22 +72898,37 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (2: i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } [Debug] **About to evaluate statement**: [ - pp0 := &mut p + var@8 := &mut *(py) ] **Context**: @@ -35072,28 +72939,50 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (2: i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } [Debug] **About to evaluate statement**: [ - var@7 := &two-phase *(pp0); - pp1 := move id_mut_pair(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + *(ppy) := move var@8; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -35105,22 +72994,37 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> &mut@6 (2: i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } [Debug] **About to evaluate statement**: [ - var@7 := &two-phase *(pp0) + *(ppy) := move var@8 ] **Context**: @@ -35131,27 +73035,49 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@4 (1: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> &mut@6 (2: i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ignored_mut_loan(4, proj_loans (s@2 : i32))⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, ⌊mut@4, proj_loans (s@2 : i32)⌋) + } } [Debug] **About to evaluate statement**: [ - pp1 := move id_mut_pair(move var@7); - y := 2: u32; - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + var@11 := copy *(px); + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] @@ -35163,22 +73089,37 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@6 (2: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ended_ignored_mut_loan{ given_back=1: i32; child: proj_loans (s@2 : i32)}⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }) + } } [Debug] **About to evaluate statement**: [ - pp1 := move id_mut_pair(move var@7) + var@11 := copy *(px) ] **Context**: @@ -35189,21 +73130,36 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@1⌋ ; + ppx -> &mut@1 (⌊mut@2⌋) ; + ppy -> &mut@3 (&mut@6 (2: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ended_ignored_mut_loan{ given_back=1: i32; child: proj_loans (s@2 : i32)}⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }) + } } -[Debug] eval_operand: -- ctx: +[Debug] end_abstraction: 0 +- original context: # Ended regions: {} # 1 frame(s) @@ -35211,61 +73167,69 @@ ty: (Types.Adt (Types.Tuple, [], { 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) ; + px -> ⌊mut@2⌋ ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> &mut@3 (&mut@6 (2: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ended_ignored_mut_loan{ given_back=1: i32; child: proj_loans (s@2 : i32)}⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }) + } } +[Debug] end_abstraction: 0 +- context after parent abstractions ended: +# Ended regions: {} +# 1 frame(s) -- op: -move var@7 - -[Debug] activate_inactivated_mut_borrow: resulting value: -{ Values.value = - (Values.Adt - { Values.variant_id = ; - field_values = - [{ Values.value = - (Values.Borrow - (Values.MutBorrow (, - { 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)] - )) +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⌊mut@2⌋ ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> &mut@3 (&mut@6 (2: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@0{parents={}}{regions={0}} { + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ended_ignored_mut_loan{ given_back=1: i32; child: proj_loans (s@2 : i32)}⌋ } -[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 -] + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }) + } +} -**Context**: +[Debug] end_abstraction: 0 +- context after loans ended: # Ended regions: {} # 1 frame(s) @@ -35273,29 +73237,34 @@ move var@7 { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@2⌋) ; - pp1 -> 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) ; + px -> ⌊mut@2⌋ ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; 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))) + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + @ended_mut_loan{ given_back=@ignored_mut_borrow(None, 2: i32); child=@ended_ignored_mut_loan{ given_back=1: i32; child: proj_loans (s@2 : i32)} } + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } - - -[Debug] -**About to evaluate statement**: [ - y := 2: u32 -] - -**Context**: +[Debug] end_abstraction: 0 +- original context: # Ended regions: {} # 1 frame(s) @@ -35303,80 +73272,171 @@ move var@7 { var@0 -> ⊥ : () ; x -> ⌊mut@0⌋ ; - px -> ⊥ : &'_ mut (u32) ; - p -> ⌊mut@1⌋ ; - var@4 -> ⊥ : &'_ mut (u32) ; - pp0 -> &mut@1 (⌊mut@2⌋) ; - pp1 -> 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) ; + px -> ⌊mut@2⌋ ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> &mut@3 (&mut@6 (2: i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; 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))) + &mut@2 (@ignored_mut_borrow(None, 0: i32)), + ⌊mut@3, @ended_ignored_mut_loan{ given_back=1: i32; child: proj_loans (s@2 : i32)}⌋ + } + abs@1{parents={0}}{regions={1}} { + @ignored_mut_borrow(Some (2), &mut@0 (0: i32)), + @ignored_mut_loan(3, @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }) } } +- new context: +# Ended regions: {0} +# 1 frame(s) -[Debug] eval_operand: -- ctx: -# Ended regions: {} +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> s@3 : &r@1 mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=proj_loans (s@3 : &r@1 mut (i32)); child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} + } +} + +[Debug] expand_symbolic_value: s@3 : &r@1 mut (i32) + +- original context: +# Ended regions: {0} # 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 -> 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))) + px -> s@3 : &r@1 mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=proj_loans (s@3 : &r@1 mut (i32)); child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } -- op: -2: u32 +- new context: +# Ended regions: {0} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} + } +} + [Debug] **About to evaluate statement**: [ - var@10 := &mut y; - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + var@10 := move var@11 == 2: i32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 -> 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))) + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> s@4 : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } @@ -35384,29 +73444,36 @@ move var@7 [Debug] **About to evaluate statement**: [ - var@10 := &mut y + var@10 := move var@11 == 2: i32 ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 -> 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))) + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> s@4 : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } @@ -35414,32 +73481,84 @@ move var@7 [Debug] **About to evaluate statement**: [ - var@9 := &mut *(var@10); - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; + var@9 := ¬ move var@10; + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 -> 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))) + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> s@5 : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} + } +} + + + +[Debug] +**About to evaluate statement**: [ + var@9 := ¬ move var@10 +] + +**Context**: +# Ended regions: {0} +# 1 frame(s) + +# Frame 0: +{ + var@0 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> s@5 : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } @@ -35447,29 +73566,46 @@ move var@7 [Debug] **About to evaluate statement**: [ - var@9 := &mut *(var@10) + assert(¬move var@9); + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 -> 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))) + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> s@6 : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } @@ -35477,31 +73613,36 @@ move var@7 [Debug] **About to evaluate statement**: [ - *((pp1).0) := move var@9; - *((pp1).1) := 3: u32; - return + assert(¬move var@9) ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 -> 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))) + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> s@6 : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } @@ -35509,90 +73650,127 @@ move var@7 [Debug] **About to evaluate statement**: [ - *((pp1).0) := move var@9 + *(px) := 3: i32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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 -> 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))) + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } -[Debug] eval_operand: -- ctx: -# Ended regions: {} +[Debug] +**About to evaluate statement**: [ + *(px) := 3: i32 +] + +**Context**: +# Ended regions: {0} # 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 -> 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))) + px -> &mut@7 (s@4 : i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } -- op: -move var@9 -[Debug] Value to move: -&mut@4 (2: u32) [Debug] **About to evaluate statement**: [ - *((pp1).1) := 3: u32; + var@14 := copy x; + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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), 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))⌋ + px -> &mut@7 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } @@ -35600,454 +73778,681 @@ move var@9 [Debug] **About to evaluate statement**: [ - *((pp1).1) := 3: u32 + var@14 := copy x ] **Context**: -# Ended regions: {} +# Ended regions: {0} # 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), 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))⌋ + px -> &mut@7 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } -[Debug] eval_operand: -- ctx: -# Ended regions: {} +[Debug] end_abstraction: 1 +- original context: +# Ended regions: {0} # 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), 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))⌋ + px -> &mut@7 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } - -- op: -3: u32 - -[Debug] -**About to evaluate statement**: [ - return -] - -**Context**: -# Ended regions: {} +[Debug] end_abstraction: 1 +- context after parent abstractions ended: +# Ended regions: {0} # 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))⌋ + px -> &mut@7 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } } - - -[Debug] test_function_symbolic: id_mut_mut_pair -[Debug] -**About to evaluate statement**: [ - var@2 := &mut *(x); - var@0 := &mut *(var@2); - return -] - -**Context**: -# Ended regions: {} +[Debug] end_abstraction: 1 +- context after loans ended: +# Ended regions: {0} # 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 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=@ended_mut_loan{ given_back=3: i32; child=proj_loans (s@4 : i32) }; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } - var@0 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ; - x -> 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**: -# Ended regions: {} +[Debug] end_abstraction: 1 +- original context: +# Ended regions: {0} # 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 -> ⊥ : () ; + x -> ⌊mut@0⌋ ; + px -> &mut@7 (3: i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (⌊mut@6⌋) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; + abs@1{parents={}}{regions={1}} { + @ended_ignored_mut_borrow{ given_back_loans_proj=⌊mut@7, proj_loans (s@4 : i32)⌋; child=&mut@0 (0: i32)), + @ended_ignored_mut_loan{ given_back=&mut@6 (2: i32); child: @ended_mut_loan{ given_back=1: i32; child=proj_loans (s@2 : i32) }} } - var@0 -> ⊥ : &'_ mut (&'_ mut ((&'_ mut (T), u32))) ; - x -> 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**: -# Ended regions: {} +- new context: +# Ended regions: {0, 1} # 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 (s@1 : &r@0 mut ((&r@0 mut (T), u32))) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } - - [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2) + var@13 := move var@14 == 1: i32; + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); + return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 (s@1 : &r@0 mut ((&r@0 mut (T), u32))) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> s@7 : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - return + var@13 := move var@14 == 1: i32 ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 (s@1 : &r@0 mut ((&r@0 mut (T), u32))) ; - x -> &mut@0 (⌊mut@1⌋) ; - var@2 -> &mut@1 (⌊mut@2⌋) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> s@7 : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -[Debug] test_function_symbolic: id_mut_mut_mut_same [Debug] **About to evaluate statement**: [ - var@2 := &mut *(x); - var@0 := &mut *(var@2); + var@12 := ¬ move var@13; + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 -> s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32))) ; - var@2 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> s@9 : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@2 := &mut *(x) + var@12 := ¬ move var@13 ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 -> s@0 : &r@0 mut (&r@0 mut (&r@0 mut (u32))) ; - var@2 -> ⊥ : &'_ mut (&'_ mut (&'_ mut (u32))) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> s@9 : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2); + assert(¬move var@12); + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 (s@1 : &r@0 mut (&r@0 mut (u32))) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> s@10 : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := &mut *(var@2) + assert(¬move var@12) ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 (s@1 : &r@0 mut (&r@0 mut (u32))) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> s@10 : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ + var@17 := copy y; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 (s@1 : &r@0 mut (&r@0 mut (u32))) ; - x -> &mut@0 (⌊mut@1⌋) ; - var@2 -> &mut@1 (⌊mut@2⌋) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -[Debug] test_function_symbolic: id_borrow1 [Debug] **About to evaluate statement**: [ - return + var@17 := copy y ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 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 -> s@0 : &r@0 mut (&r@1 (u32)) ; - _y -> s@1 : &r@0 (&r@0 mut (u32)) ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> ⌊mut@5⌋ ; + py -> &mut@5 (s@8 : i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -[Debug] test_function_symbolic: test_static [Debug] **About to evaluate statement**: [ - var@0 := copy x; + var@16 := move var@17 == 3: i32; + var@15 := ¬ move var@16; + assert(¬move var@15); return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : &'_ (u32) ; - x -> s@0 : &'static (u32) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> s@8 : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> s@8 : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := copy x + var@16 := move var@17 == 3: i32 ] **Context**: -# Ended regions: {} -# 1 frame(s) - -# Frame 0: -{ - var@0 -> ⊥ : &'_ (u32) ; - x -> s@0 : &'static (u32) ; -} - - - -[Debug] eval_operand: -- ctx: -# Ended regions: {} +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : &'_ (u32) ; - x -> s@0 : &'static (u32) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> s@8 : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> s@8 : i32 ; } -- op: -copy x -[Debug] Value to copy: -s@0 : &'static (u32) [Debug] **About to evaluate statement**: [ + var@15 := ¬ move var@16; + assert(¬move var@15); return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { - var@0 -> s@0 : &'static (u32) ; - x -> s@0 : &'static (u32) ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> s@8 : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> s@11 : bool ; + var@17 -> ⊥ : i32 ; } -[Debug] test_function_symbolic: test_char [Debug] **About to evaluate statement**: [ - var@0 := a; - return + var@15 := ¬ move var@16 ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : char ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> s@8 : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> s@11 : bool ; + var@17 -> ⊥ : i32 ; } [Debug] **About to evaluate statement**: [ - var@0 := a + assert(¬move var@15); + return ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : char ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> s@8 : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> s@12 : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -[Debug] eval_operand: -- ctx: -# Ended regions: {} +[Debug] +**About to evaluate statement**: [ + assert(¬move var@15) +] + +**Context**: +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { - var@0 -> ⊥ : char ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> s@8 : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> s@12 : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -- op: -a [Debug] **About to evaluate statement**: [ @@ -36055,12 +74460,29 @@ a ] **Context**: -# Ended regions: {} +# Ended regions: {0, 1} # 1 frame(s) # Frame 0: { - var@0 -> a ; + var@0 -> ⊥ : () ; + x -> s@7 : i32 ; + px -> ⊥ : &'_ mut (i32) ; + ppx -> ⊥ : &'_ mut (&'_ mut (i32)) ; + ppy -> ⊥ : &'_ mut (&'_ mut (i32)) ; + var@5 -> ⊥ : &'_ mut (&'_ mut (i32)) ; + y -> s@8 : i32 ; + py -> ⊥ : &'_ mut (i32) ; + var@8 -> ⊥ : &'_ mut (i32) ; + var@9 -> ⊥ : bool ; + var@10 -> ⊥ : bool ; + var@11 -> ⊥ : i32 ; + var@12 -> ⊥ : bool ; + var@13 -> ⊥ : bool ; + var@14 -> ⊥ : i32 ; + var@15 -> ⊥ : bool ; + var@16 -> ⊥ : bool ; + var@17 -> ⊥ : i32 ; } -- cgit v1.2.3