@ -122,13 +122,11 @@ let rec format_string_type_names
let printf_args_name = " CHECKERS_PRINTF_ARGS "
let printf_args_name = " CHECKERS_PRINTF_ARGS "
let callback_printf_args
let check_printf_args_ok
( all_procs : Procname . t list )
( node : Cfg . Node . t )
( get_proc_desc : Procname . t -> Cfg . Procdesc . t option )
( instr : Sil . instr )
( idenv : Idenv . t )
( tenv : Sil . tenv )
( proc_name : Procname . t )
( proc_name : Procname . t )
( proc_desc : Cfg . Procdesc . t ) : unit =
( proc_desc : Cfg . Procdesc . t ) : unit =
(* Check if format string lines up with arguments *)
(* Check if format string lines up with arguments *)
let rec check_type_names instr_loc n_arg instr_proc_name fmt_type_names arg_type_names =
let rec check_type_names instr_loc n_arg instr_proc_name fmt_type_names arg_type_names =
@ -184,9 +182,6 @@ let callback_printf_args
| Sil . Const c -> PatternMatch . java_get_const_type_name c
| Sil . Const c -> PatternMatch . java_get_const_type_name c
| _ -> raise ( Failure " Could not resolve fixed type name " ) in
| _ -> raise ( Failure " Could not resolve fixed type name " ) in
let do_instr
( node : Cfg . Node . t )
( instr : Sil . instr ) : unit =
match instr with
match instr with
| Sil . Call ( _ , Sil . Const ( Sil . Cfun pn ) , args , cl , _ ) -> (
| Sil . Call ( _ , Sil . Const ( Sil . Cfun pn ) , args , cl , _ ) -> (
match printf_like_function pn with
match printf_like_function pn with
@ -222,6 +217,14 @@ let callback_printf_args
( Procname . to_string proc_name )
( Procname . to_string proc_name )
( Printexc . to_string e ) )
( Printexc . to_string e ) )
| None -> () )
| None -> () )
| _ -> () in
| _ -> ()
let callback_printf_args
( all_procs : Procname . t list )
( get_proc_desc : Procname . t -> Cfg . Procdesc . t option )
( idenv : Idenv . t )
( tenv : Sil . tenv )
( proc_name : Procname . t )
( proc_desc : Cfg . Procdesc . t ) : unit =
Cfg . Procdesc . iter_instrs ( fun n i -> check_printf_args_ok n i proc_name proc_desc ) proc_desc
Cfg . Procdesc . iter_instrs do_instr proc_desc