let get_jump_controled_stmts ctrl_dpds_infos jump =
let lex_succ_graph, infos = ctrl_dpds_infos in
let controled_stmts =
try
let lex_suc = Lexical_successors.find lex_succ_graph jump in
Pdg_parameters.debug ~level:2 "lex_succ %d = %d" jump.sid lex_suc.sid;
match jump.succs with
| [label] ->
Pdg_parameters.debug ~level:2 "jump succ %d = %d" jump.sid label.sid;
if lex_suc.sid = label.sid then begin
Pdg_parameters.debug "useless jump %d" jump.sid;
S.empty
end else
let pdb_jump_lex_suc = pd_b_but_not_a infos jump lex_suc in
let pdb_lex_suc_label = pd_b_but_not_a infos lex_suc label in
let pdb_lex_suc_label = S.remove lex_suc pdb_lex_suc_label in
S.union pdb_jump_lex_suc pdb_lex_suc_label
| _ -> assert false
with Not_found ->
Pdg_parameters.debug "lex_succ %d = (none)" jump.sid;
let _, pd_jump = (get_postdoms infos ~without:false jump) in
S.remove jump pd_jump
in
Pdg_parameters.debug "controled_stmt for jump %d = %a"
jump.sid S.pretty controled_stmts;
let controled_stmt_list = S.elements controled_stmts in
controled_stmt_list