let clean_graph cfg =
  let graph = cfg_graph cfg in
  let rec reach n =
    if !n.reachable then ()
    else (!n.reachable <- true; iter_succ reach cfg n)
  in reach (cfg_start cfg);
  let clean n acc =
    if !n.reachable then acc
    else begin
      Wp_parameters.debug ~level:3
         "[cfg] remove unreachable node %a@." VL.pretty n;
      let v = !n.kind in
       CFG.remove_vertex graph n;
       Hashtbl.remove cfg.stmt_node (node_type_id v);
       v::acc
    end
  in
  let unreach = fold_nodes clean cfg [] in
     cfg, unreach