Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(engine) Fix return inside closure. #1303

Merged
merged 1 commit into from
Feb 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion engine/lib/side_effect_utils.ml
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,12 @@ struct
@@ List.map ~f:U.Reducers.variables_of_pat params
in
let body = lets_of_bindings lbs body in
let effects = SideEffects.without_rw_vars vars effects in
let effects =
{
(SideEffects.without_rw_vars vars effects) with
return = None;
}
in
(body, { lbs = []; effects })
in
({ e with e = Closure { params; body; captures } }, body_effects)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,52 @@ let test (x y: Core.Option.t_Option i32) : Core.Option.t_Option i32 =
| Core.Option.Option_Some some -> some
| Core.Option.Option_None -> Core.Option.Option_None <: Core.Option.t_Option i32
'''
"Side_effects.Issue_1300_.fst" = '''
module Side_effects.Issue_1300_
#set-options "--fuel 0 --ifuel 1 --z3rlimit 15"
open Core
open FStar.Mul

let v_fun (_: Prims.unit) : Core.Result.t_Result Prims.unit u8 =
match
Core.Iter.Traits.Iterator.f_collect #(Core.Iter.Adapters.Map.t_Map (Core.Slice.Iter.t_Iter u8)
(u8 -> Core.Result.t_Result (u8 & t_Array u8 (mk_usize 32)) u8))
#FStar.Tactics.Typeclasses.solve
#(Core.Result.t_Result (Alloc.Vec.t_Vec (u8 & t_Array u8 (mk_usize 32)) Alloc.Alloc.t_Global)
u8)
(Core.Iter.Traits.Iterator.f_map #(Core.Slice.Iter.t_Iter u8)
#FStar.Tactics.Typeclasses.solve
#(Core.Result.t_Result (u8 & t_Array u8 (mk_usize 32)) u8)
(Core.Slice.impl__iter #u8
(Rust_primitives.Hax.repeat (mk_u8 0) (mk_usize 5) <: t_Slice u8)
<:
Core.Slice.Iter.t_Iter u8)
(fun prev ->
let prev:u8 = prev in
match
Core.Result.Result_Ok
(Rust_primitives.Hax.repeat (mk_u8 0) (mk_usize 32) <: t_Array u8 (mk_usize 32))
<:
Core.Result.t_Result (t_Array u8 (mk_usize 32)) u8
with
| Core.Result.Result_Ok hoist45 ->
Core.Result.Result_Ok (prev, hoist45 <: (u8 & t_Array u8 (mk_usize 32)))
<:
Core.Result.t_Result (u8 & t_Array u8 (mk_usize 32)) u8
| Core.Result.Result_Err err ->
Core.Result.Result_Err err
<:
Core.Result.t_Result (u8 & t_Array u8 (mk_usize 32)) u8)
<:
Core.Iter.Adapters.Map.t_Map (Core.Slice.Iter.t_Iter u8)
(u8 -> Core.Result.t_Result (u8 & t_Array u8 (mk_usize 32)) u8))
<:
Core.Result.t_Result (Alloc.Vec.t_Vec (u8 & t_Array u8 (mk_usize 32)) Alloc.Alloc.t_Global) u8
with
| Core.Result.Result_Ok v_val ->
Core.Result.Result_Ok (() <: Prims.unit) <: Core.Result.t_Result Prims.unit u8
| Core.Result.Result_Err err -> Core.Result.Result_Err err <: Core.Result.t_Result Prims.unit u8
'''
"Side_effects.Nested_return.fst" = '''
module Side_effects.Nested_return
#set-options "--fuel 0 --ifuel 1 --z3rlimit 15"
Expand All @@ -97,8 +143,8 @@ let v_fun (rng: i8) : (i8 & Core.Result.t_Result Prims.unit Prims.unit) =
let tmp0, out:(i8 & Core.Result.t_Result Prims.unit Prims.unit) = other_fun rng in
let rng:i8 = tmp0 in
match out <: Core.Result.t_Result Prims.unit Prims.unit with
| Core.Result.Result_Ok hoist43 ->
rng, (Core.Result.Result_Ok hoist43 <: Core.Result.t_Result Prims.unit Prims.unit)
| Core.Result.Result_Ok hoist41 ->
rng, (Core.Result.Result_Ok hoist41 <: Core.Result.t_Result Prims.unit Prims.unit)
<:
(i8 & Core.Result.t_Result Prims.unit Prims.unit)
| Core.Result.Result_Err err ->
Expand Down
Loading