From 9cf8d0fd3bc03a17e00243b79fd0432c05791eeb Mon Sep 17 00:00:00 2001 From: Jeremy Dubreil Date: Tue, 25 Jul 2017 18:00:28 -0700 Subject: [PATCH] [infer][java] fail early on broken CFGs Summary: Only in the case of Java to begin with Reviewed By: jvillard Differential Revision: D5476102 fbshipit-source-id: f7abd98 --- infer/src/IR/Cfg.ml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/infer/src/IR/Cfg.ml b/infer/src/IR/Cfg.ml index f57a3f308..2a571d2f5 100644 --- a/infer/src/IR/Cfg.ml +++ b/infer/src/IR/Cfg.ml @@ -80,10 +80,11 @@ let check_cfg_connectedness cfg = match succs with [n'] when is_exit_node n' -> false | _ -> Int.equal (List.length preds) 0 in let do_pdesc pd = - let pname = Typ.Procname.to_string (Procdesc.get_proc_name pd) in + let pname = Procdesc.get_proc_name pd in let nodes = Procdesc.get_nodes pd in - let broken = List.exists ~f:broken_node nodes in - if broken then L.internal_error "@\n ***BROKEN CFG: '%s'@\n" pname + (* TODO (T20302015): also check the CFGs for the C-like procedures *) + if not Config.keep_going && Typ.Procname.is_java pname && List.exists ~f:broken_node nodes then + failwithf "Broken CFG on %a" Typ.Procname.pp pname in let pdescs = get_all_procs cfg in List.iter ~f:do_pdesc pdescs