let blocks_closed_by_edge cfg e =
let v_before = edge_src e in
let blocks = match !v_before.kind with
| Vstmt s | Vtest (true, s, _) | Vloop (_, s) | Vswitch (s,_) ->
Cfg.clearFileCFG ~clear_id:false (Ast.get ());
Cfg.computeFileCFG (Ast.get ());
begin match s.succs with
| [s'] -> Kernel_function.blocks_closed_by_edge s s'
| [] | _ :: _ ->
let s' = get_edge_next_stmt cfg e in
match s' with
| None -> []
| Some s' ->
Wp_parameters.debug ~level:3
"[blocks_closed_by_edge] found sid:%d -> sid:%d@."
s.sid s'.sid;
Kernel_function.blocks_closed_by_edge s s'
end
| _ -> []
in
let v_after = edge_dst e in
let blocks = match !v_after.kind with
| VblkOut (Bfct, b) -> b::blocks
| _ -> blocks
in blocks