diff --git a/infer/src/IR/Cfg.re b/infer/src/IR/Cfg.re index 860af9211..5a11ace11 100644 --- a/infer/src/IR/Cfg.re +++ b/infer/src/IR/Cfg.re @@ -53,6 +53,7 @@ let module Node = { pd_attributes: ProcAttributes.t, /** attributes of the procedure */ pd_id: int, /** unique proc_desc identifier */ mutable pd_nodes: list t, /** list of nodes of this procedure */ + mutable pd_nodes_num: int, /** number of nodes */ mutable pd_start_node: t, /** start node of this procedure */ mutable pd_exit_node: t /** exit node of ths procedure */ }; @@ -61,14 +62,10 @@ let module Node = { let throw_kind = Stmt_node "throw"; /** data type for the control flow graph */ - type cfg = { - mutable node_id: int, - mutable node_list: list t, - name_pdesc_tbl: Procname.Hash.t proc_desc /** Map proc name to procdesc */ - }; + type cfg = {name_pdesc_tbl: Procname.Hash.t proc_desc /** Map proc name to procdesc */}; /** create a new empty cfg */ - let create_cfg () => {node_id: 0, node_list: [], name_pdesc_tbl: Procname.Hash.create 16}; + let create_cfg () => {name_pdesc_tbl: Procname.Hash.create 16}; /** compute the list of procedures added or changed in [cfg_new] over [cfg_old] */ let mark_unchanged_pdescs cfg_new cfg_old => { @@ -137,10 +134,6 @@ let module Node = { }; Procname.Hash.iter mark_pdesc_if_unchanged new_procs }; - let node_id_gen cfg => { - cfg.node_id = cfg.node_id + 1; - cfg.node_id - }; let pdesc_tbl_add cfg proc_name proc_desc => Procname.Hash.add cfg.name_pdesc_tbl proc_name proc_desc; let pdesc_tbl_remove cfg proc_name => Procname.Hash.remove cfg.name_pdesc_tbl proc_name; @@ -160,9 +153,11 @@ let module Node = { let compare node1 node2 => int_compare node1.nd_id node2.nd_id; let hash node => Hashtbl.hash node.nd_id; let equal node1 node2 => compare node1 node2 == 0; - let get_all_nodes cfg => cfg.node_list; - let create cfg loc kind instrs pdesc => { - let node_id = node_id_gen cfg; + + /** Create a new cfg node */ + let create loc kind instrs pdesc => { + pdesc.pd_nodes_num = pdesc.pd_nodes_num + 1; + let node_id = pdesc.pd_nodes_num; let node = { nd_id: node_id, nd_dist_exit: None, @@ -174,7 +169,6 @@ let module Node = { nd_succs: [], nd_exn: [] }; - cfg.node_list = [node, ...cfg.node_list]; pdesc.pd_nodes = [node, ...pdesc.pd_nodes]; node }; @@ -251,12 +245,12 @@ let module Node = { /** Set the successor and exception nodes. If this is a join node right before the exit node, add an extra node in the middle, otherwise nullify and abstract instructions cannot be added after a conditional. */ - let set_succs_exn cfg node succs exn => + let set_succs_exn node succs exn => switch (node.nd_kind, succs) { | (Join_node, [{nd_kind: Exit_node _} as exit_node]) => let kind = Stmt_node "between_join_and_exit"; let pdesc = get_proc_desc node; - let node' = create cfg node.nd_loc kind node.nd_instrs pdesc; + let node' = create node.nd_loc kind node.nd_instrs pdesc; set_succs_exn_base node [node'] exn; set_succs_exn_base node' [exit_node] exn | _ => set_succs_exn_base node succs exn @@ -383,26 +377,14 @@ let module Node = { pd_attributes: proc_attributes, pd_id: !proc_desc_id_counter, pd_nodes: [], + pd_nodes_num: 0, pd_start_node: dummy (), pd_exit_node: dummy () }; pdesc_tbl_add cfg proc_attributes.ProcAttributes.proc_name pdesc; pdesc }; - let remove_node' filter_out_fun cfg => { - let remove_node_in_cfg nodes => IList.filter filter_out_fun nodes; - cfg.node_list = remove_node_in_cfg cfg.node_list - }; - let remove_node_set cfg nodes => remove_node' (fun node' => not (NodeSet.mem node' nodes)) cfg; - let proc_desc_remove cfg name remove_nodes => { - if remove_nodes { - let pdesc = pdesc_tbl_find cfg name; - let proc_nodes = - IList.fold_right (fun node set => NodeSet.add node set) pdesc.pd_nodes NodeSet.empty; - remove_node_set cfg proc_nodes - }; - pdesc_tbl_remove cfg name - }; + let proc_desc_remove cfg name => pdesc_tbl_remove cfg name; let proc_desc_get_start_node proc_desc => proc_desc.pd_start_node; let proc_desc_get_err_log proc_desc => proc_desc.pd_attributes.ProcAttributes.err_log; let proc_desc_get_attributes proc_desc => proc_desc.pd_attributes; @@ -611,11 +593,6 @@ let module Node = { IList.fold_left (fun acc instr => f acc node instr) acc (get_instrs node); proc_desc_fold_nodes fold_node acc proc_desc }; - /* - let remove_node cfg node = - remove_node' (fun node' -> not (equal node node')) - cfg node - */ /* clone a procedure description and apply the type substitutions where the parameters are used */ let proc_desc_specialize_types callee_proc_desc resolved_attributes substitutions => { @@ -716,7 +693,7 @@ let module Node = { let loc = get_loc node and kind = convert_node_kind (get_kind node) and instrs = IList.fold_left convert_instr [] (get_instrs node) |> IList.rev; - create cfg loc kind instrs resolved_proc_desc + create loc kind instrs resolved_proc_desc } and loop callee_nodes => switch callee_nodes { @@ -735,7 +712,7 @@ let module Node = { if (equal node callee_exit_node) { proc_desc_set_exit_node resolved_proc_desc new_node }; - set_succs_exn cfg new_node (loop successors) (loop exn_nodes); + set_succs_exn new_node (loop successors) (loop exn_nodes); new_node }; [converted_node, ...loop other_node] @@ -807,11 +784,12 @@ let module IdMap = Node.IdMap; let iter_proc_desc = Node.iter_proc_desc; -let rec pp_node_list f => - fun - | [] => () - | [node] => Node.pp f node - | [node, ...nodes] => F.fprintf f "%a, %a" Node.pp node pp_node_list nodes; + +/** Iterate over all the nodes in the cfg */ +let iter_all_nodes f (cfg: cfg) => { + let do_proc_desc _ (pdesc: Procdesc.t) => IList.iter (fun node => f pdesc node) pdesc.pd_nodes; + iter_proc_desc cfg do_proc_desc +}; /** Get all the procdescs (defined and declared) */ diff --git a/infer/src/IR/Cfg.rei b/infer/src/IR/Cfg.rei index 5daaf9e8b..79106a75b 100644 --- a/infer/src/IR/Cfg.rei +++ b/infer/src/IR/Cfg.rei @@ -50,9 +50,7 @@ let module Procdesc: { /** [remove cfg name remove_nodes] remove the procdesc [name] from the control flow graph [cfg]. */ - - /** It also removes all the nodes from the procedure from the cfg if remove_nodes is true */ - let remove: cfg => Procname.t => bool => unit; + let remove: cfg => Procname.t => unit; /** Find the procdesc given the proc name. Return None if not found. */ let find_from_name: cfg => Procname.t => option t; @@ -168,10 +166,9 @@ let module Node: { /** Compare two nodes */ let compare: t => t => int; - /** [create cfg loc kind instrs proc_desc] create a new cfg node - with the given location, kind, list of instructions, - procdesc */ - let create: cfg => Location.t => nodekind => list Sil.instr => Procdesc.t => t; + /** Create a new cfg node with the given location, kind, list of instructions, + and add it to the procdesc. */ + let create: Location.t => nodekind => list Sil.instr => Procdesc.t => t; /** create a new empty cfg */ let create_cfg: unit => cfg; @@ -185,9 +182,6 @@ let module Node: { /** Check if two nodes are equal */ let equal: t => t => bool; - /** Get all the nodes */ - let get_all_nodes: cfg => list t; - /** Get the distance to the exit node, if it has been computed */ let get_distance_to_exit: t => option int; @@ -255,7 +249,7 @@ let module Node: { let replace_instrs: t => list Sil.instr => unit; /** Set the successor nodes and exception nodes, and build predecessor links */ - let set_succs_exn: cfg => t => list t => list t => unit; + let set_succs_exn: t => list t => list t => unit; }; @@ -270,8 +264,6 @@ let module NodeSet: Set.S with type elt = Node.t; /** Map with node id keys. */ let module IdMap: Map.S with type key = Node.id; -let pp_node_list: Format.formatter => list Node.t => unit; - /** {2 Functions for manipulating an interprocedural CFG} */ @@ -287,6 +279,10 @@ let get_all_procs: cfg => list Procdesc.t; let get_defined_procs: cfg => list Procdesc.t; +/** Iterate over all the nodes in the cfg */ +let iter_all_nodes: (Procdesc.t => Node.t => unit) => cfg => unit; + + /** checks whether a cfg is connected or not */ let check_cfg_connectedness: cfg => unit; diff --git a/infer/src/backend/dotty.ml b/infer/src/backend/dotty.ml index 016a153c4..ac25b423d 100644 --- a/infer/src/backend/dotty.ml +++ b/infer/src/backend/dotty.ml @@ -936,8 +936,8 @@ let pp_proplist_parsed2dotty_file filename plist = (********** Print control flow graph (in dot form) for fundec to *) (* channel. You have to compute an interprocedural cfg first *) -let pp_cfgnodename fmt (n : Cfg.Node.t) = - F.fprintf fmt "%d" (Cfg.Node.get_id n :> int) +let pp_cfgnodename pname fmt (n : Cfg.Node.t) = + F.fprintf fmt "\"%a%d\"" Procname.pp pname (Cfg.Node.get_id n :> int) let pp_etlist fmt etl = IList.iter (fun (id, ty) -> @@ -983,16 +983,10 @@ let pp_cfgnodeshape fmt (n: Cfg.Node.t) = | Cfg.Node.Stmt_node _ -> F.fprintf fmt "shape=\"box\"" | _ -> F.fprintf fmt "" -(* -let pp_cfgedge fmt src dest = -F.fprintf fmt "%a -> %a" -pp_cfgnodename src -pp_cfgnodename dest -*) - let pp_cfgnode pdesc fmt (n: Cfg.Node.t) = + let pname = Cfg.Procdesc.get_proc_name pdesc in F.fprintf fmt "%a [label=\"%a\" %a]\n\t\n" - pp_cfgnodename n + (pp_cfgnodename pname) n (pp_cfgnodelabel pdesc) n pp_cfgnodeshape n; let print_edge n1 n2 is_exn = @@ -1001,9 +995,9 @@ let pp_cfgnode pdesc fmt (n: Cfg.Node.t) = | Cfg.Node.Exit_node _ when is_exn = true -> (* don't print exception edges to the exit node *) () | _ -> - F.fprintf fmt "\n\t %d -> %d %s;" - (Cfg.Node.get_id n1 :> int) - (Cfg.Node.get_id n2 :> int) + F.fprintf fmt "\n\t %a -> %a %s;" + (pp_cfgnodename pname) n1 + (pp_cfgnodename pname) n2 color in IList.iter (fun n' -> print_edge n n' false) (Cfg.Node.get_succs n); IList.iter (fun n' -> print_edge n n' true) (Cfg.Node.get_exn n) @@ -1019,12 +1013,11 @@ let pp_cfgnode pdesc fmt (n: Cfg.Node.t) = (* Print the extra information related to the inteprocedural aspect, ie., *) (* special node, and call / return edges *) let print_icfg source fmt cfg = - let print_node node = + let print_node pdesc node = let loc = Cfg.Node.get_loc node in - let pdesc = Cfg.Node.get_proc_desc node in if (Config.dotty_cfg_libs || DB.source_file_equal loc.Location.file source) then F.fprintf fmt "%a\n" (pp_cfgnode pdesc) node in - IList.iter print_node (Cfg.Node.get_all_nodes cfg) + Cfg.iter_all_nodes print_node cfg let write_icfg_dotty_to_file source cfg fname = let chan = open_out fname in diff --git a/infer/src/backend/interproc.ml b/infer/src/backend/interproc.ml index 65b814f6e..117df45bd 100644 --- a/infer/src/backend/interproc.ml +++ b/infer/src/backend/interproc.ml @@ -1513,8 +1513,10 @@ let do_analysis exe_env = let visited_and_total_nodes cfg = let all_nodes = - let add s n = Cfg.NodeSet.add n s in - IList.fold_left add Cfg.NodeSet.empty (Cfg.Node.get_all_nodes cfg) in + let set = ref Cfg.NodeSet.empty in + let add _ n = set := Cfg.NodeSet.add n !set in + Cfg.iter_all_nodes add cfg; + !set in let filter_node n = Cfg.Procdesc.is_defined (Cfg.Node.get_proc_desc n) && match Cfg.Node.get_kind n with diff --git a/infer/src/clang/cFrontend_decl.ml b/infer/src/clang/cFrontend_decl.ml index ea797c1b4..b6975d9d6 100644 --- a/infer/src/clang/cFrontend_decl.ml +++ b/infer/src/clang/cFrontend_decl.ml @@ -39,7 +39,7 @@ struct (Procname.to_string procname); let meth_body_nodes = T.instructions_trans context body extra_instrs exit_node in Cfg.Node.add_locals_ret_declaration start_node (Cfg.Procdesc.get_locals procdesc); - Cfg.Node.set_succs_exn cfg start_node meth_body_nodes []; + Cfg.Node.set_succs_exn start_node meth_body_nodes []; Cg.add_defined_node (CContext.get_cg context) (Cfg.Procdesc.get_proc_name procdesc)) | None -> ()) with @@ -50,7 +50,7 @@ struct assert false | Assert_failure (file, line, column) -> Logging.out "Fatal error: exception Assert_failure(%s, %d, %d)\n%!" file line column; - Cfg.Procdesc.remove cfg procname true; + Cfg.Procdesc.remove cfg procname; CMethod_trans.create_external_procdesc cfg procname is_objc_method None; () diff --git a/infer/src/clang/cMethod_trans.ml b/infer/src/clang/cMethod_trans.ml index 68490f513..1e6c36f15 100644 --- a/infer/src/clang/cMethod_trans.ml +++ b/infer/src/clang/cMethod_trans.ml @@ -332,7 +332,7 @@ let should_create_procdesc cfg procname defined = | Some previous_procdesc -> let is_defined_previous = Cfg.Procdesc.is_defined previous_procdesc in if defined && (not is_defined_previous) then - (Cfg.Procdesc.remove cfg (Cfg.Procdesc.get_proc_name previous_procdesc) true; + (Cfg.Procdesc.remove cfg (Cfg.Procdesc.get_proc_name previous_procdesc); true) else false | None -> true @@ -423,9 +423,9 @@ let create_local_procdesc trans_unit_ctx cfg tenv ms fbody captured is_objc_inst (if !Config.arc_mode then Cfg.Procdesc.set_flag procdesc Mleak_buckets.objc_arc_flag "true"; let start_kind = Cfg.Node.Start_node proc_name in - let start_node = Cfg.Node.create cfg loc_start start_kind [] procdesc in + let start_node = Cfg.Node.create loc_start start_kind [] procdesc in let exit_kind = Cfg.Node.Exit_node proc_name in - let exit_node = Cfg.Node.create cfg loc_exit exit_kind [] procdesc in + let exit_node = Cfg.Node.create loc_exit exit_kind [] procdesc in Cfg.Procdesc.set_start_node procdesc start_node; Cfg.Procdesc.set_exit_node procdesc exit_node) in if should_create_procdesc cfg proc_name defined then diff --git a/infer/src/clang/cTrans.ml b/infer/src/clang/cTrans.ml index fd38911ab..7b50c019f 100644 --- a/infer/src/clang/cTrans.ml +++ b/infer/src/clang/cTrans.ml @@ -599,7 +599,7 @@ struct (* create the label root node into the hashtbl *) let sil_loc = CLocation.get_sil_location stmt_info trans_state.context in let root_node' = GotoLabel.find_goto_label trans_state.context label_name sil_loc in - Cfg.Node.set_succs_exn trans_state.context.cfg root_node' res_trans.root_nodes []; + Cfg.Node.set_succs_exn root_node' res_trans.root_nodes []; { empty_res_trans with root_nodes = [root_node']; leaf_nodes = trans_state.succ_nodes } and var_deref_trans trans_state stmt_info (decl_ref : Clang_ast_t.decl_ref) = @@ -748,7 +748,7 @@ struct if res_trans_idx.root_nodes <> [] then IList.iter - (fun n -> Cfg.Node.set_succs_exn trans_state.context.cfg n res_trans_idx.root_nodes []) + (fun n -> Cfg.Node.set_succs_exn n res_trans_idx.root_nodes []) res_trans_a.leaf_nodes; (* Note the order of res_trans_idx.ids @ res_trans_a.ids is important. *) @@ -1110,7 +1110,6 @@ struct and conditionalOperator_trans trans_state stmt_info stmt_list expr_info = let context = trans_state.context in - let cfg = context.cfg in let succ_nodes = trans_state.succ_nodes in let procdesc = context.CContext.procdesc in let sil_loc = CLocation.get_sil_location stmt_info context in @@ -1130,7 +1129,7 @@ struct "ConditinalStmt Branch" stmt_info all_res_trans in let prune_nodes_t, prune_nodes_f = IList.partition is_true_prune_node prune_nodes in let prune_nodes' = if branch then prune_nodes_t else prune_nodes_f in - IList.iter (fun n -> Cfg.Node.set_succs_exn cfg n res_trans.root_nodes []) prune_nodes' in + IList.iter (fun n -> Cfg.Node.set_succs_exn n res_trans.root_nodes []) prune_nodes' in (match stmt_list with | [cond; exp1; exp2] -> let typ = @@ -1138,7 +1137,7 @@ struct context.CContext.tenv expr_info.Clang_ast_t.ei_type_ptr in let var_typ = add_reference_if_glvalue typ expr_info in let join_node = create_node (Cfg.Node.Join_node) [] sil_loc context in - Cfg.Node.set_succs_exn cfg join_node succ_nodes []; + Cfg.Node.set_succs_exn join_node succ_nodes []; let pvar = mk_temp_sil_var procdesc "SIL_temp_conditional___" in Cfg.Procdesc.append_locals procdesc [(Pvar.get_name pvar, var_typ)]; let continuation' = mk_cond_continuation trans_state.continuation in @@ -1211,7 +1210,7 @@ struct let prune_t = mk_prune_node true e' instrs' in let prune_f = mk_prune_node false e' instrs' in IList.iter - (fun n' -> Cfg.Node.set_succs_exn context.cfg n' [prune_t; prune_f] []) + (fun n' -> Cfg.Node.set_succs_exn n' [prune_t; prune_f] []) res_trans_cond.leaf_nodes; let rnodes = if (IList.length res_trans_cond.root_nodes) = 0 then [prune_t; prune_f] @@ -1244,7 +1243,7 @@ struct | Binop.LOr -> prune_nodes_f, prune_nodes_t | _ -> assert false) in IList.iter - (fun n -> Cfg.Node.set_succs_exn context.cfg n res_trans_s2.root_nodes []) + (fun n -> Cfg.Node.set_succs_exn n res_trans_s2.root_nodes []) prune_to_s2; let root_nodes_to_parent = if (IList.length res_trans_s1.root_nodes) = 0 @@ -1285,7 +1284,7 @@ struct let succ_nodes = trans_state.succ_nodes in let sil_loc = CLocation.get_sil_location stmt_info context in let join_node = create_node (Cfg.Node.Join_node) [] sil_loc context in - Cfg.Node.set_succs_exn context.cfg join_node succ_nodes []; + Cfg.Node.set_succs_exn join_node succ_nodes []; let trans_state' = { trans_state with succ_nodes = [join_node] } in let do_branch branch stmt_branch prune_nodes = (* leaf nodes are ignored here as they will be already attached to join_node *) @@ -1298,7 +1297,7 @@ struct res_trans_b.root_nodes) in let prune_nodes_t, prune_nodes_f = IList.partition is_true_prune_node prune_nodes in let prune_nodes' = if branch then prune_nodes_t else prune_nodes_f in - IList.iter (fun n -> Cfg.Node.set_succs_exn context.cfg n nodes_branch []) prune_nodes' in + IList.iter (fun n -> Cfg.Node.set_succs_exn n nodes_branch []) prune_nodes' in (match stmt_list with | [_; decl_stmt; cond; stmt1; stmt2] -> (* set the flat to inform that we are translating a condition of a if *) @@ -1334,7 +1333,7 @@ struct let node_kind = Cfg.Node.Stmt_node "Switch_stmt" in create_node node_kind res_trans_cond_tmp.instrs sil_loc context in IList.iter - (fun n' -> Cfg.Node.set_succs_exn context.cfg n' [switch_special_cond_node] []) + (fun n' -> Cfg.Node.set_succs_exn n' [switch_special_cond_node] []) res_trans_cond_tmp.leaf_nodes; let root_nodes = if res_trans_cond_tmp.root_nodes <> [] then res_trans_cond_tmp.root_nodes @@ -1432,8 +1431,8 @@ struct let case_entry_point = connected_instruction (IList.rev case_content) last_nodes in (* connects between cases, then continuation has priority about breaks *) let prune_node_t, prune_node_f = create_prune_nodes_for_case case in - Cfg.Node.set_succs_exn context.cfg prune_node_t case_entry_point []; - Cfg.Node.set_succs_exn context.cfg prune_node_f last_prune_nodes []; + Cfg.Node.set_succs_exn prune_node_t case_entry_point []; + Cfg.Node.set_succs_exn prune_node_f last_prune_nodes []; case_entry_point, [prune_node_t; prune_node_f] | DefaultStmt(stmt_info, default_content) :: rest -> let sil_loc = CLocation.get_sil_location stmt_info context in @@ -1443,13 +1442,13 @@ struct translate_and_connect_cases rest next_nodes [placeholder_entry_point] in let default_entry_point = connected_instruction (IList.rev default_content) last_nodes in - Cfg.Node.set_succs_exn context.cfg placeholder_entry_point default_entry_point []; + Cfg.Node.set_succs_exn placeholder_entry_point default_entry_point []; default_entry_point, last_prune_nodes | _ -> assert false in let top_entry_point, top_prune_nodes = translate_and_connect_cases list_of_cases succ_nodes succ_nodes in let _ = connected_instruction (IList.rev pre_case_stmts) top_entry_point in - Cfg.Node.set_succs_exn context.cfg switch_special_cond_node top_prune_nodes []; + Cfg.Node.set_succs_exn switch_special_cond_node top_prune_nodes []; let top_nodes = res_trans_decl.root_nodes in IList.iter (fun n' -> Cfg.Node.append_instrs n' []) succ_nodes; @@ -1530,9 +1529,9 @@ struct match loop_kind with | Loops.For _ | Loops.While _ -> res_trans_body.root_nodes | Loops.DoWhile _ -> [join_node] in - Cfg.Node.set_succs_exn context.cfg join_node join_succ_nodes []; - IList.iter (fun n -> Cfg.Node.set_succs_exn context.cfg n prune_t_succ_nodes []) prune_nodes_t; - IList.iter (fun n -> Cfg.Node.set_succs_exn context.cfg n succ_nodes []) prune_nodes_f; + Cfg.Node.set_succs_exn join_node join_succ_nodes []; + IList.iter (fun n -> Cfg.Node.set_succs_exn n prune_t_succ_nodes []) prune_nodes_t; + IList.iter (fun n -> Cfg.Node.set_succs_exn n succ_nodes []) prune_nodes_f; let root_nodes = match loop_kind with | Loops.For _ -> @@ -1881,7 +1880,7 @@ struct let mk_ret_node instrs = let ret_node = create_node (Cfg.Node.Stmt_node "Return Stmt") instrs sil_loc context in Cfg.Node.set_succs_exn - context.cfg ret_node [(Cfg.Procdesc.get_exit_node context.CContext.procdesc)] []; + ret_node [(Cfg.Procdesc.get_exit_node context.CContext.procdesc)] []; ret_node in let trans_result = (match stmt_list with | [stmt] -> (* return exp; *) @@ -1913,7 +1912,7 @@ struct let instrs = var_instrs @ res_trans_stmt.instrs @ ret_instrs @ autorelease_instrs in let ret_node = mk_ret_node instrs in IList.iter - (fun n -> Cfg.Node.set_succs_exn context.cfg n [ret_node] []) + (fun n -> Cfg.Node.set_succs_exn n [ret_node] []) res_trans_stmt.leaf_nodes; let root_nodes_to_parent = if IList.length res_trans_stmt.root_nodes >0 @@ -2000,7 +1999,7 @@ struct autorelease_pool_vars, sil_loc, CallFlags.default) in let node_kind = Cfg.Node.Stmt_node ("Release the autorelease pool") in let call_node = create_node node_kind [stmt_call] sil_loc context in - Cfg.Node.set_succs_exn context.cfg call_node trans_state.succ_nodes []; + Cfg.Node.set_succs_exn call_node trans_state.succ_nodes []; let trans_state'={ trans_state with continuation = None; succ_nodes =[call_node] } in instructions trans_state' stmts @@ -2136,7 +2135,7 @@ struct let (var_exp, typ) = var_exp_typ in let res_trans_init_list = initListExpr_initializers_trans trans_state_init var_exp 0 stmts typ is_dyn_array stmt_info in - CTrans_utils.collect_res_trans context.cfg res_trans_init_list + CTrans_utils.collect_res_trans res_trans_init_list else init_expr_trans trans_state_init var_exp_typ init_stmt_info stmt_opt in let all_res_trans = [res_trans_size; res_trans_new; res_trans_init] in let nname = "CXXNewExpr" in diff --git a/infer/src/clang/cTrans_utils.ml b/infer/src/clang/cTrans_utils.ml index ee2dd3af5..e446b7b68 100644 --- a/infer/src/clang/cTrans_utils.ml +++ b/infer/src/clang/cTrans_utils.ml @@ -54,7 +54,7 @@ struct let create_node node_kind instrs loc context = let procdesc = CContext.get_procdesc context in - Cfg.Node.create (CContext.get_cfg context) loc node_kind instrs procdesc + Cfg.Node.create loc node_kind instrs procdesc let create_prune_node branch e_cond instrs_cond loc ik context = let (e_cond', _) = extract_exp_from_list e_cond @@ -158,7 +158,7 @@ let empty_res_trans = { let undefined_expression () = Exp.Var (Ident.create_fresh Ident.knormal) (** Collect the results of translating a list of instructions, and link up the nodes created. *) -let collect_res_trans cfg l = +let collect_res_trans l = let rec collect l rt = match l with | [] -> rt @@ -170,7 +170,7 @@ let collect_res_trans cfg l = if rt'.leaf_nodes <> [] then rt'.leaf_nodes else rt.leaf_nodes in if rt'.root_nodes <> [] then - IList.iter (fun n -> Cfg.Node.set_succs_exn cfg n rt'.root_nodes []) rt.leaf_nodes; + IList.iter (fun n -> Cfg.Node.set_succs_exn n rt'.root_nodes []) rt.leaf_nodes; collect l' { root_nodes = root_nodes; leaf_nodes = leaf_nodes; @@ -238,15 +238,14 @@ struct (* deals with creating or not a cfg node depending of owning the *) (* priority_node. It returns nodes, ids, instrs that should be passed to parent *) let compute_results_to_parent trans_state loc nd_name stmt_info res_states_children = - let cfg = trans_state.context.cfg in - let res_state = collect_res_trans cfg res_states_children in + let res_state = collect_res_trans res_states_children in let create_node = own_priority_node trans_state.priority stmt_info && res_state.instrs <> [] in if create_node then (* We need to create a node *) let node_kind = Cfg.Node.Stmt_node (nd_name) in let node = Nodes.create_node node_kind res_state.instrs loc trans_state.context in - Cfg.Node.set_succs_exn cfg node trans_state.succ_nodes []; - IList.iter (fun leaf -> Cfg.Node.set_succs_exn cfg leaf [node] []) res_state.leaf_nodes; + Cfg.Node.set_succs_exn node trans_state.succ_nodes []; + IList.iter (fun leaf -> Cfg.Node.set_succs_exn leaf [node] []) res_state.leaf_nodes; (* Invariant: if root_nodes is empty then the params have not created a node.*) let root_nodes = (if res_state.root_nodes <> [] then res_state.root_nodes else [node]) in @@ -446,13 +445,13 @@ let trans_assertion_failure sil_loc context = let exit_node = Cfg.Procdesc.get_exit_node (CContext.get_procdesc context) and failure_node = Nodes.create_node (Cfg.Node.Stmt_node "Assertion failure") [call_instr] sil_loc context in - Cfg.Node.set_succs_exn context.CContext.cfg failure_node [exit_node] []; + Cfg.Node.set_succs_exn failure_node [exit_node] []; { empty_res_trans with root_nodes = [failure_node]; } let trans_assume_false sil_loc context succ_nodes = let instrs_cond = [Sil.Prune (Exp.zero, sil_loc, true, Sil.Ik_land_lor)] in let prune_node = Nodes.create_node (Nodes.prune_kind true) instrs_cond sil_loc context in - Cfg.Node.set_succs_exn context.CContext.cfg prune_node succ_nodes []; + Cfg.Node.set_succs_exn prune_node succ_nodes []; { empty_res_trans with root_nodes = [prune_node]; leaf_nodes = [prune_node] } let trans_assertion trans_state sil_loc = diff --git a/infer/src/clang/cTrans_utils.mli b/infer/src/clang/cTrans_utils.mli index 784c696e9..8fd56a710 100644 --- a/infer/src/clang/cTrans_utils.mli +++ b/infer/src/clang/cTrans_utils.mli @@ -44,7 +44,7 @@ val empty_res_trans: trans_result val undefined_expression: unit -> Exp.t -val collect_res_trans : Cfg.cfg -> trans_result list -> trans_result +val collect_res_trans : trans_result list -> trans_result val extract_var_exp_or_fail : trans_state -> Exp.t * Typ.t diff --git a/infer/src/harness/inhabit.ml b/infer/src/harness/inhabit.ml index b5efd323c..f72fa5f9c 100644 --- a/infer/src/harness/inhabit.ml +++ b/infer/src/harness/inhabit.ml @@ -249,17 +249,17 @@ let setup_harness_cfg harness_name env cg cfg = (* important to reverse the list or there will be scoping issues! *) let instrs = (IList.rev env.instrs) in let nodekind = Cfg.Node.Stmt_node "method_body" in - Cfg.Node.create cfg env.pc nodekind instrs procdesc in + Cfg.Node.create env.pc nodekind instrs procdesc in let (start_node, exit_node) = - let create_node kind = Cfg.Node.create cfg env.pc kind [] procdesc in + let create_node kind = Cfg.Node.create env.pc kind [] procdesc in let start_kind = Cfg.Node.Start_node procname in let exit_kind = Cfg.Node.Exit_node procname in (create_node start_kind, create_node exit_kind) in Cfg.Procdesc.set_start_node procdesc start_node; Cfg.Procdesc.set_exit_node procdesc exit_node; Cfg.Node.add_locals_ret_declaration start_node []; - Cfg.Node.set_succs_exn cfg start_node [harness_node] [exit_node]; - Cfg.Node.set_succs_exn cfg harness_node [exit_node] [exit_node]; + Cfg.Node.set_succs_exn start_node [harness_node] [exit_node]; + Cfg.Node.set_succs_exn harness_node [exit_node] [exit_node]; add_harness_to_cg harness_name harness_node cg (** create a procedure named harness_name that calls each of the methods in trace in the specified diff --git a/infer/src/java/jFrontend.ml b/infer/src/java/jFrontend.ml index 3eaf96269..848397909 100644 --- a/infer/src/java/jFrontend.ml +++ b/infer/src/java/jFrontend.ml @@ -18,7 +18,6 @@ module L = Logging let add_edges (context : JContext.t) start_node exn_node exit_nodes method_body_nodes impl super_call = - let cfg = context.icfg.cfg in let pc_nb = Array.length method_body_nodes in let last_pc = pc_nb - 1 in let is_last pc = (pc = last_pc) in @@ -49,7 +48,7 @@ let add_edges if super_call then (fun _ -> exit_nodes) else JTransExn.create_exception_handlers context [exn_node] get_body_nodes impl in let connect node pc = - Cfg.Node.set_succs_exn cfg node (get_succ_nodes node pc) (get_exn_nodes pc) in + Cfg.Node.set_succs_exn node (get_succ_nodes node pc) (get_exn_nodes pc) in let connect_nodes pc translated_instruction = match translated_instruction with | JTrans.Skip -> () @@ -58,7 +57,7 @@ let add_edges connect node_true pc; connect node_false pc | JTrans.Loop (join_node, node_true, node_false) -> - Cfg.Node.set_succs_exn cfg join_node [node_true; node_false] []; + Cfg.Node.set_succs_exn join_node [node_true; node_false] []; connect node_true pc; connect node_false pc in let first_nodes = @@ -66,11 +65,11 @@ let add_edges direct_successors (-1) in (* the exceptions edges here are going directly to the exit node *) - Cfg.Node.set_succs_exn cfg start_node first_nodes exit_nodes; + Cfg.Node.set_succs_exn start_node first_nodes exit_nodes; if not super_call then (* the exceptions node is just before the exit node *) - Cfg.Node.set_succs_exn cfg exn_node exit_nodes exit_nodes; + Cfg.Node.set_succs_exn exn_node exit_nodes exit_nodes; Array.iteri connect_nodes method_body_nodes diff --git a/infer/src/java/jTrans.ml b/infer/src/java/jTrans.ml index 11affbe23..18206d61f 100644 --- a/infer/src/java/jTrans.ml +++ b/infer/src/java/jTrans.ml @@ -269,10 +269,10 @@ let create_procdesc source_file program linereader icfg m : Cfg.Procdesc.t optio } in Cfg.Procdesc.create cfg proc_attributes in let start_kind = Cfg.Node.Start_node proc_name in - let start_node = Cfg.Node.create cfg Location.dummy start_kind [] procdesc in + let start_node = Cfg.Node.create Location.dummy start_kind [] procdesc in let exit_kind = (Cfg.Node.Exit_node proc_name) in - let exit_node = Cfg.Node.create cfg Location.dummy exit_kind [] procdesc in - Cfg.Node.set_succs_exn cfg start_node [exit_node] [exit_node]; + let exit_node = Cfg.Node.create Location.dummy exit_kind [] procdesc in + Cfg.Node.set_succs_exn start_node [exit_node] [exit_node]; Cfg.Procdesc.set_start_node procdesc start_node; Cfg.Procdesc.set_exit_node procdesc exit_node; procdesc @@ -321,11 +321,11 @@ let create_procdesc source_file program linereader icfg m : Cfg.Procdesc.t optio } in Cfg.Procdesc.create cfg proc_attributes in let start_kind = Cfg.Node.Start_node proc_name in - let start_node = Cfg.Node.create cfg loc_start start_kind [] procdesc in + let start_node = Cfg.Node.create loc_start start_kind [] procdesc in let exit_kind = (Cfg.Node.Exit_node proc_name) in - let exit_node = Cfg.Node.create cfg loc_exit exit_kind [] procdesc in + let exit_node = Cfg.Node.create loc_exit exit_kind [] procdesc in let exn_kind = Cfg.Node.exn_sink_kind in - let exn_node = Cfg.Node.create cfg loc_exit exn_kind [] procdesc in + let exn_node = Cfg.Node.create loc_exit exn_kind [] procdesc in JContext.add_exn_node proc_name exn_node; Cfg.Procdesc.set_start_node procdesc start_node; Cfg.Procdesc.set_exit_node procdesc exit_node; @@ -699,7 +699,6 @@ let assume_not_null loc sil_expr = let rec instruction (context : JContext.t) pc instr : translation = - let cfg = JContext.get_cfg context in let tenv = JContext.get_tenv context in let cg = JContext.get_cg context in let program = context.program in @@ -710,7 +709,7 @@ let rec instruction (context : JContext.t) pc instr : translation = let file = loc.Location.file in let match_never_null = Inferconfig.never_return_null_matcher in let create_node node_kind sil_instrs = - Cfg.Node.create cfg loc node_kind sil_instrs context.procdesc in + Cfg.Node.create loc node_kind sil_instrs context.procdesc in let return_not_null () = match_never_null loc.Location.file proc_name in let trans_monitor_enter_exit context expr pc loc builtin node_desc = diff --git a/infer/src/java/jTransExn.ml b/infer/src/java/jTransExn.ml index 31ca8a68b..95db3ca11 100644 --- a/infer/src/java/jTransExn.ml +++ b/infer/src/java/jTransExn.ml @@ -30,8 +30,7 @@ let translate_exceptions (context : JContext.t) exit_nodes get_body_nodes handle let catch_block_table = Hashtbl.create 1 in let exn_message = "exception handler" in let procdesc = context.procdesc in - let cfg = JContext.get_cfg context in - let create_node loc node_kind instrs = Cfg.Node.create cfg loc node_kind instrs procdesc in + let create_node loc node_kind instrs = Cfg.Node.create loc node_kind instrs procdesc in let ret_var = Cfg.Procdesc.get_ret_var procdesc in let ret_type = Cfg.Procdesc.get_ret_type procdesc in let id_ret_val = Ident.create_fresh Ident.knormal in @@ -92,8 +91,8 @@ let translate_exceptions (context : JContext.t) exit_nodes get_body_nodes handle let node_false = let instrs_false = [instr_call_instanceof; instr_prune_false] @ (if rethrow_exception then [instr_rethrow_exn] else []) in create_node loc node_kind_false instrs_false in - Cfg.Node.set_succs_exn cfg node_true catch_nodes exit_nodes; - Cfg.Node.set_succs_exn cfg node_false succ_nodes exit_nodes; + Cfg.Node.set_succs_exn node_true catch_nodes exit_nodes; + Cfg.Node.set_succs_exn node_false succ_nodes exit_nodes; let is_finally = handler.JBir.e_catch_type = None in if is_finally then [node_true] (* TODO (#4759480): clean up the translation so prune nodes are not created at all *) @@ -110,7 +109,7 @@ let translate_exceptions (context : JContext.t) exit_nodes get_body_nodes handle | n:: _ -> Cfg.Node.get_loc n | [] -> Location.dummy in let entry_node = create_entry_node loc in - Cfg.Node.set_succs_exn cfg entry_node nodes_first_handler exit_nodes; + Cfg.Node.set_succs_exn entry_node nodes_first_handler exit_nodes; Hashtbl.add catch_block_table handler_list [entry_node] in Hashtbl.iter (fun _ handler_list -> create_entry_block handler_list) handler_table; catch_block_table diff --git a/infer/src/unit/analyzerTester.ml b/infer/src/unit/analyzerTester.ml index cd54fa458..96fbcc01a 100644 --- a/infer/src/unit/analyzerTester.ml +++ b/infer/src/unit/analyzerTester.ml @@ -174,9 +174,9 @@ module Make let pname = Cfg.Procdesc.get_proc_name pdesc in let create_node kind cmds = - Cfg.Node.create cfg dummy_loc kind cmds pdesc in + Cfg.Node.create dummy_loc kind cmds pdesc in let set_succs cur_node succs ~exn_handlers= - Cfg.Node.set_succs_exn cfg cur_node succs exn_handlers in + Cfg.Node.set_succs_exn cur_node succs exn_handlers in let mk_prune_nodes_for_cond cond_exp if_kind = let mk_prune_node cond_exp if_kind true_branch = let prune_instr = Sil.Prune (cond_exp, dummy_loc, true_branch, if_kind) in diff --git a/infer/src/unit/procCfgTests.ml b/infer/src/unit/procCfgTests.ml index 9607f4143..b842e610e 100644 --- a/infer/src/unit/procCfgTests.ml +++ b/infer/src/unit/procCfgTests.ml @@ -27,19 +27,19 @@ let tests = let instrs2 = [dummy_instr3] in let instrs3 = [dummy_instr4] in let instrs4 = [] in - let create_node cfg instrs = - Cfg.Node.create cfg Location.dummy (Cfg.Node.Stmt_node "") instrs test_pdesc in - let n1 = create_node cfg instrs1 in - let n2 = create_node cfg instrs2 in - let n3 = create_node cfg instrs3 in - let n4 = create_node cfg instrs4 in + let create_node instrs = + Cfg.Node.create Location.dummy (Cfg.Node.Stmt_node "") instrs test_pdesc in + let n1 = create_node instrs1 in + let n2 = create_node instrs2 in + let n3 = create_node instrs3 in + let n4 = create_node instrs4 in Cfg.Procdesc.set_start_node test_pdesc n1; (* let -> represent normal transitions and -*-> represent exceptional transitions *) (* creating graph n1 -> n2, n1 -*-> n3, n2 -> n4, n2 -*-> n3, n3 -> n4 , n3 -*> n4 *) - Cfg.Node.set_succs_exn cfg n1 [n2] [n3]; - Cfg.Node.set_succs_exn cfg n2 [n4] [n3]; - Cfg.Node.set_succs_exn cfg n3 [n4] [n4]; + Cfg.Node.set_succs_exn n1 [n2] [n3]; + Cfg.Node.set_succs_exn n2 [n4] [n3]; + Cfg.Node.set_succs_exn n3 [n4] [n4]; let normal_proc_cfg = ProcCfg.Normal.from_pdesc test_pdesc in let exceptional_proc_cfg = ProcCfg.Exceptional.from_pdesc test_pdesc in diff --git a/infer/tests/codetoanalyze/c/frontend/arithmetic/compound_assignment.c.dot b/infer/tests/codetoanalyze/c/frontend/arithmetic/compound_assignment.c.dot index 9c9dff8bf..9cf9ba60b 100644 --- a/infer/tests/codetoanalyze/c/frontend/arithmetic/compound_assignment.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/arithmetic/compound_assignment.c.dot @@ -1,62 +1,62 @@ /* @generated */ digraph iCFG { -15 [label="15: DeclStmt \n *&x:double =1.000000 [line 11]\n " shape="box"] +"main15" [label="15: DeclStmt \n *&x:double =1.000000 [line 11]\n " shape="box"] - 15 -> 14 ; -14 [label="14: BinaryOperatorStmt: AddAssign \n n$9=*&x:double [line 12]\n *&x:double =(n$9 + 1.000000) [line 12]\n " shape="box"] + "main15" -> "main14" ; +"main14" [label="14: BinaryOperatorStmt: AddAssign \n n$9=*&x:double [line 12]\n *&x:double =(n$9 + 1.000000) [line 12]\n " shape="box"] - 14 -> 13 ; -13 [label="13: BinaryOperatorStmt: SubAssign \n n$8=*&x:double [line 13]\n *&x:double =(n$8 - 1.000000) [line 13]\n " shape="box"] + "main14" -> "main13" ; +"main13" [label="13: BinaryOperatorStmt: SubAssign \n n$8=*&x:double [line 13]\n *&x:double =(n$8 - 1.000000) [line 13]\n " shape="box"] - 13 -> 12 ; -12 [label="12: BinaryOperatorStmt: DivAssign \n n$7=*&x:double [line 14]\n *&x:double =(n$7 / 1.000000) [line 14]\n " shape="box"] + "main13" -> "main12" ; +"main12" [label="12: BinaryOperatorStmt: DivAssign \n n$7=*&x:double [line 14]\n *&x:double =(n$7 / 1.000000) [line 14]\n " shape="box"] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: MulAssign \n n$6=*&x:double [line 15]\n *&x:double =(n$6 * 1.000000) [line 15]\n " shape="box"] + "main12" -> "main11" ; +"main11" [label="11: BinaryOperatorStmt: MulAssign \n n$6=*&x:double [line 15]\n *&x:double =(n$6 * 1.000000) [line 15]\n " shape="box"] - 11 -> 10 ; -10 [label="10: DeclStmt \n *&b:int =1 [line 16]\n " shape="box"] + "main11" -> "main10" ; +"main10" [label="10: DeclStmt \n *&b:int =1 [line 16]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: ShlAssign \n n$5=*&b:int [line 17]\n *&b:int =(n$5 << 1) [line 17]\n " shape="box"] + "main10" -> "main9" ; +"main9" [label="9: BinaryOperatorStmt: ShlAssign \n n$5=*&b:int [line 17]\n *&b:int =(n$5 << 1) [line 17]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: ShrAssign \n n$4=*&b:int [line 18]\n *&b:int =(n$4 >> 1) [line 18]\n " shape="box"] + "main9" -> "main8" ; +"main8" [label="8: BinaryOperatorStmt: ShrAssign \n n$4=*&b:int [line 18]\n *&b:int =(n$4 >> 1) [line 18]\n " shape="box"] - 8 -> 7 ; -7 [label="7: BinaryOperatorStmt: RemAssing \n n$3=*&b:int [line 19]\n *&b:int =(n$3 % 1) [line 19]\n " shape="box"] + "main8" -> "main7" ; +"main7" [label="7: BinaryOperatorStmt: RemAssing \n n$3=*&b:int [line 19]\n *&b:int =(n$3 % 1) [line 19]\n " shape="box"] - 7 -> 6 ; -6 [label="6: BinaryOperatorStmt: AndAssign \n n$2=*&b:int [line 20]\n *&b:int =(n$2 & 1) [line 20]\n " shape="box"] + "main7" -> "main6" ; +"main6" [label="6: BinaryOperatorStmt: AndAssign \n n$2=*&b:int [line 20]\n *&b:int =(n$2 & 1) [line 20]\n " shape="box"] - 6 -> 5 ; -5 [label="5: BinaryOperatorStmt: OrAssign \n n$1=*&b:int [line 21]\n *&b:int =(n$1 | 1) [line 21]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: BinaryOperatorStmt: OrAssign \n n$1=*&b:int [line 21]\n *&b:int =(n$1 | 1) [line 21]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: XorAssign \n n$0=*&b:int [line 22]\n *&b:int =(n$0 ^ 1) [line 22]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: XorAssign \n n$0=*&b:int [line 22]\n *&b:int =(n$0 ^ 1) [line 22]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 23]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 23]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int x:double \n DECLARE_LOCALS(&return,&b,&x); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int x:double \n DECLARE_LOCALS(&return,&b,&x); [line 10]\n " color=yellow style=filled] - 1 -> 15 ; + "main1" -> "main15" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/arithmetic/int_const.c.dot b/infer/tests/codetoanalyze/c/frontend/arithmetic/int_const.c.dot index 0b2fd7f7a..95dd56f61 100644 --- a/infer/tests/codetoanalyze/c/frontend/arithmetic/int_const.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/arithmetic/int_const.c.dot @@ -1,26 +1,26 @@ /* @generated */ digraph iCFG { -6 [label="6: DeclStmt \n *&#GB$main_kDuration:int =3 [line 17]\n " shape="box"] +"main6" [label="6: DeclStmt \n *&#GB$main_kDuration:int =3 [line 17]\n " shape="box"] - 6 -> 5 ; -5 [label="5: DeclStmt \n *&large_int:int =9223372036854775807 [line 19]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: DeclStmt \n *&large_int:int =9223372036854775807 [line 19]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n *&overflow_int:int =n$0 [line 20]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: DeclStmt \n *&overflow_int:int =n$0 [line 20]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 22]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 22]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: overflow_int:int large_int:int d:long double c:float * b:int * a:int \n DECLARE_LOCALS(&return,&overflow_int,&large_int,&d,&c,&b,&a); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: overflow_int:int large_int:int d:long double c:float * b:int * a:int \n DECLARE_LOCALS(&return,&overflow_int,&large_int,&d,&c,&b,&a); [line 10]\n " color=yellow style=filled] - 1 -> 6 ; + "main1" -> "main6" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/arithmetic/negate.c.dot b/infer/tests/codetoanalyze/c/frontend/arithmetic/negate.c.dot index 8f49c3b87..947d01dd3 100644 --- a/infer/tests/codetoanalyze/c/frontend/arithmetic/negate.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/arithmetic/negate.c.dot @@ -1,99 +1,99 @@ /* @generated */ digraph iCFG { -24 [label="24: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 14]\n *&return:int =n$2 [line 14]\n " shape="box"] +"neg_bool8" [label="8: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 14]\n *&return:int =n$2 [line 14]\n " shape="box"] - 24 -> 18 ; -23 [label="23: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 14]\n " shape="box"] + "neg_bool8" -> "neg_bool2" ; +"neg_bool7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 14]\n " shape="box"] - 23 -> 19 ; -22 [label="22: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 14]\n " shape="box"] + "neg_bool7" -> "neg_bool3" ; +"neg_bool6" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 14]\n " shape="box"] - 22 -> 19 ; -21 [label="21: Prune (false branch) \n n$1=*&a:_Bool [line 14]\n PRUNE((n$1 == 0), false); [line 14]\n " shape="invhouse"] + "neg_bool6" -> "neg_bool3" ; +"neg_bool5" [label="5: Prune (false branch) \n n$1=*&a:_Bool [line 14]\n PRUNE((n$1 == 0), false); [line 14]\n " shape="invhouse"] - 21 -> 23 ; -20 [label="20: Prune (true branch) \n n$1=*&a:_Bool [line 14]\n PRUNE((n$1 != 0), true); [line 14]\n " shape="invhouse"] + "neg_bool5" -> "neg_bool7" ; +"neg_bool4" [label="4: Prune (true branch) \n n$1=*&a:_Bool [line 14]\n PRUNE((n$1 != 0), true); [line 14]\n " shape="invhouse"] - 20 -> 22 ; -19 [label="19: + \n " ] + "neg_bool4" -> "neg_bool6" ; +"neg_bool3" [label="3: + \n " ] - 19 -> 24 ; -18 [label="18: Exit neg_bool \n " color=yellow style=filled] + "neg_bool3" -> "neg_bool8" ; +"neg_bool2" [label="2: Exit neg_bool \n " color=yellow style=filled] -17 [label="17: Start neg_bool\nFormals: a:_Bool \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 14]\n " color=yellow style=filled] +"neg_bool1" [label="1: Start neg_bool\nFormals: a:_Bool \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 14]\n " color=yellow style=filled] - 17 -> 20 ; - 17 -> 21 ; -16 [label="16: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 12]\n *&return:int =n$2 [line 12]\n " shape="box"] + "neg_bool1" -> "neg_bool4" ; + "neg_bool1" -> "neg_bool5" ; +"neg_char8" [label="8: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 12]\n *&return:int =n$2 [line 12]\n " shape="box"] - 16 -> 10 ; -15 [label="15: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 12]\n " shape="box"] + "neg_char8" -> "neg_char2" ; +"neg_char7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 12]\n " shape="box"] - 15 -> 11 ; -14 [label="14: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 12]\n " shape="box"] + "neg_char7" -> "neg_char3" ; +"neg_char6" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 12]\n " shape="box"] - 14 -> 11 ; -13 [label="13: Prune (false branch) \n n$1=*&a:char [line 12]\n PRUNE((n$1 == 0), false); [line 12]\n " shape="invhouse"] + "neg_char6" -> "neg_char3" ; +"neg_char5" [label="5: Prune (false branch) \n n$1=*&a:char [line 12]\n PRUNE((n$1 == 0), false); [line 12]\n " shape="invhouse"] - 13 -> 15 ; -12 [label="12: Prune (true branch) \n n$1=*&a:char [line 12]\n PRUNE((n$1 != 0), true); [line 12]\n " shape="invhouse"] + "neg_char5" -> "neg_char7" ; +"neg_char4" [label="4: Prune (true branch) \n n$1=*&a:char [line 12]\n PRUNE((n$1 != 0), true); [line 12]\n " shape="invhouse"] - 12 -> 14 ; -11 [label="11: + \n " ] + "neg_char4" -> "neg_char6" ; +"neg_char3" [label="3: + \n " ] - 11 -> 16 ; -10 [label="10: Exit neg_char \n " color=yellow style=filled] + "neg_char3" -> "neg_char8" ; +"neg_char2" [label="2: Exit neg_char \n " color=yellow style=filled] -9 [label="9: Start neg_char\nFormals: a:char \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 12]\n " color=yellow style=filled] +"neg_char1" [label="1: Start neg_char\nFormals: a:char \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 12]\n " color=yellow style=filled] - 9 -> 12 ; - 9 -> 13 ; -8 [label="8: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 10]\n *&return:int =n$2 [line 10]\n " shape="box"] + "neg_char1" -> "neg_char4" ; + "neg_char1" -> "neg_char5" ; +"neg_int8" [label="8: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 10]\n *&return:int =n$2 [line 10]\n " shape="box"] - 8 -> 2 ; -7 [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 10]\n " shape="box"] + "neg_int8" -> "neg_int2" ; +"neg_int7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 10]\n " shape="box"] - 7 -> 3 ; -6 [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 10]\n " shape="box"] + "neg_int7" -> "neg_int3" ; +"neg_int6" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 10]\n " shape="box"] - 6 -> 3 ; -5 [label="5: Prune (false branch) \n n$1=*&a:int [line 10]\n PRUNE((n$1 == 0), false); [line 10]\n " shape="invhouse"] + "neg_int6" -> "neg_int3" ; +"neg_int5" [label="5: Prune (false branch) \n n$1=*&a:int [line 10]\n PRUNE((n$1 == 0), false); [line 10]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: Prune (true branch) \n n$1=*&a:int [line 10]\n PRUNE((n$1 != 0), true); [line 10]\n " shape="invhouse"] + "neg_int5" -> "neg_int7" ; +"neg_int4" [label="4: Prune (true branch) \n n$1=*&a:int [line 10]\n PRUNE((n$1 != 0), true); [line 10]\n " shape="invhouse"] - 4 -> 6 ; -3 [label="3: + \n " ] + "neg_int4" -> "neg_int6" ; +"neg_int3" [label="3: + \n " ] - 3 -> 8 ; -2 [label="2: Exit neg_int \n " color=yellow style=filled] + "neg_int3" -> "neg_int8" ; +"neg_int2" [label="2: Exit neg_int \n " color=yellow style=filled] -1 [label="1: Start neg_int\nFormals: a:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 10]\n " color=yellow style=filled] +"neg_int1" [label="1: Start neg_int\nFormals: a:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 10]\n " color=yellow style=filled] - 1 -> 4 ; - 1 -> 5 ; + "neg_int1" -> "neg_int4" ; + "neg_int1" -> "neg_int5" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/arithmetic/plus_expr.c.dot b/infer/tests/codetoanalyze/c/frontend/arithmetic/plus_expr.c.dot index 4bacfe355..5ca6d7a74 100644 --- a/infer/tests/codetoanalyze/c/frontend/arithmetic/plus_expr.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/arithmetic/plus_expr.c.dot @@ -1,22 +1,22 @@ /* @generated */ digraph iCFG { -5 [label="5: DeclStmt \n *&x:int =2 [line 11]\n " shape="box"] +"main5" [label="5: DeclStmt \n *&x:int =2 [line 11]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n *&z:int =3 [line 12]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: DeclStmt \n *&z:int =3 [line 12]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&x:int [line 13]\n n$1=*&z:int [line 13]\n *&return:int =(n$0 + n$1) [line 13]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n n$0=*&x:int [line 13]\n n$1=*&z:int [line 13]\n *&return:int =(n$0 + n$1) [line 13]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: z:int x:int \n DECLARE_LOCALS(&return,&z,&x); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: z:int x:int \n DECLARE_LOCALS(&return,&z,&x); [line 10]\n " color=yellow style=filled] - 1 -> 5 ; + "main1" -> "main5" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/arithmetic/unary.c.dot b/infer/tests/codetoanalyze/c/frontend/arithmetic/unary.c.dot index 49694f941..650c57454 100644 --- a/infer/tests/codetoanalyze/c/frontend/arithmetic/unary.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/arithmetic/unary.c.dot @@ -1,62 +1,62 @@ /* @generated */ digraph iCFG { -15 [label="15: DeclStmt \n *&x:int =1 [line 11]\n " shape="box"] +"main15" [label="15: DeclStmt \n *&x:int =1 [line 11]\n " shape="box"] - 15 -> 14 ; -14 [label="14: BinaryOperatorStmt: Assign \n n$12=*&x:int [line 14]\n *&y:int =~n$12 [line 14]\n " shape="box"] + "main15" -> "main14" ; +"main14" [label="14: BinaryOperatorStmt: Assign \n n$12=*&x:int [line 14]\n *&y:int =~n$12 [line 14]\n " shape="box"] - 14 -> 13 ; -13 [label="13: BinaryOperatorStmt: Assign \n n$11=*&x:int [line 15]\n *&y:int =-n$11 [line 15]\n " shape="box"] + "main14" -> "main13" ; +"main13" [label="13: BinaryOperatorStmt: Assign \n n$11=*&x:int [line 15]\n *&y:int =-n$11 [line 15]\n " shape="box"] - 13 -> 12 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$10=*&x:int [line 16]\n *&y:int =n$10 [line 16]\n " shape="box"] + "main13" -> "main12" ; +"main12" [label="12: BinaryOperatorStmt: Assign \n n$10=*&x:int [line 16]\n *&y:int =n$10 [line 16]\n " shape="box"] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$9=*&x:int [line 18]\n *&x:int =(n$9 + 1) [line 18]\n *&y:int =n$9 [line 18]\n " shape="box"] + "main12" -> "main11" ; +"main11" [label="11: BinaryOperatorStmt: Assign \n n$9=*&x:int [line 18]\n *&x:int =(n$9 + 1) [line 18]\n *&y:int =n$9 [line 18]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$8=*&x:int [line 19]\n *&x:int =(n$8 + 1) [line 19]\n *&y:int =(n$8 + 1) [line 19]\n " shape="box"] + "main11" -> "main10" ; +"main10" [label="10: BinaryOperatorStmt: Assign \n n$8=*&x:int [line 19]\n *&x:int =(n$8 + 1) [line 19]\n *&y:int =(n$8 + 1) [line 19]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$7=*&x:int [line 21]\n *&x:int =(n$7 - 1) [line 21]\n *&y:int =(n$7 - 1) [line 21]\n " shape="box"] + "main10" -> "main9" ; +"main9" [label="9: BinaryOperatorStmt: Assign \n n$7=*&x:int [line 21]\n *&x:int =(n$7 - 1) [line 21]\n *&y:int =(n$7 - 1) [line 21]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$6=*&x:int [line 22]\n *&x:int =(n$6 - 1) [line 22]\n *&y:int =n$6 [line 22]\n " shape="box"] + "main9" -> "main8" ; +"main8" [label="8: BinaryOperatorStmt: Assign \n n$6=*&x:int [line 22]\n *&x:int =(n$6 - 1) [line 22]\n *&y:int =n$6 [line 22]\n " shape="box"] - 8 -> 7 ; -7 [label="7: BinaryOperatorStmt: Assign \n *&b:int *=&a [line 27]\n " shape="box"] + "main8" -> "main7" ; +"main7" [label="7: BinaryOperatorStmt: Assign \n *&b:int *=&a [line 27]\n " shape="box"] - 7 -> 6 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$4=*&b:int * [line 28]\n n$5=*(n$4 + 1):int [line 28]\n *&a:int =n$5 [line 28]\n " shape="box"] + "main7" -> "main6" ; +"main6" [label="6: BinaryOperatorStmt: Assign \n n$4=*&b:int * [line 28]\n n$5=*(n$4 + 1):int [line 28]\n *&a:int =n$5 [line 28]\n " shape="box"] - 6 -> 5 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$1=*&b:int * [line 29]\n n$2=*&b:int * [line 29]\n n$3=*n$2:int [line 29]\n *n$1:int =(n$3 + 1) [line 29]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n n$1=*&b:int * [line 29]\n n$2=*&b:int * [line 29]\n n$3=*n$2:int [line 29]\n *n$1:int =(n$3 + 1) [line 29]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$0=*&a:int [line 30]\n *&a:int =n$0 [line 30]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: Assign \n n$0=*&a:int [line 30]\n *&a:int =n$0 [line 30]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 32]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 32]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int * a:int y:int x:int \n DECLARE_LOCALS(&return,&b,&a,&y,&x); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int * a:int y:int x:int \n DECLARE_LOCALS(&return,&b,&a,&y,&x); [line 10]\n " color=yellow style=filled] - 1 -> 15 ; + "main1" -> "main15" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/booleans/bool_example.c.dot b/infer/tests/codetoanalyze/c/frontend/booleans/bool_example.c.dot index 1d88a05dc..aae93602f 100644 --- a/infer/tests/codetoanalyze/c/frontend/booleans/bool_example.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/booleans/bool_example.c.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: Return Stmt \n n$0=*&e:_Bool [line 12]\n *&return:_Bool =n$0 [line 12]\n " shape="box"] +"revert3" [label="3: Return Stmt \n n$0=*&e:_Bool [line 12]\n *&return:_Bool =n$0 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit revert \n " color=yellow style=filled] + "revert3" -> "revert2" ; +"revert2" [label="2: Exit revert \n " color=yellow style=filled] -1 [label="1: Start revert\nFormals: e:_Bool \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"revert1" [label="1: Start revert\nFormals: e:_Bool \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "revert1" -> "revert3" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/booleans/condition_as_param.c.dot b/infer/tests/codetoanalyze/c/frontend/booleans/condition_as_param.c.dot index 5dfd96e33..77857bca3 100644 --- a/infer/tests/codetoanalyze/c/frontend/booleans/condition_as_param.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/booleans/condition_as_param.c.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: DeclStmt \n *&x:int =3 [line 13]\n " shape="box"] +"main4" [label="4: DeclStmt \n *&x:int =3 [line 13]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Call _fun_check \n n$0=*&x:int [line 14]\n _fun_check((n$0 < 2):int ) [line 14]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Call _fun_check \n n$0=*&x:int [line 14]\n _fun_check((n$0 < 2):int ) [line 14]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -3 [label="3: Start main\nFormals: \nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 12]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 12]\n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit check \n " color=yellow style=filled] + "main1" -> "main4" ; +"check2" [label="2: Exit check \n " color=yellow style=filled] -1 [label="1: Start check\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"check1" [label="1: Start check\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 1 -> 2 ; + "check1" -> "check2" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/c_prototype/prototype.c.dot b/infer/tests/codetoanalyze/c/frontend/c_prototype/prototype.c.dot index 6f7f7d87d..de9bbef73 100644 --- a/infer/tests/codetoanalyze/c/frontend/c_prototype/prototype.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/c_prototype/prototype.c.dot @@ -1,29 +1,29 @@ /* @generated */ digraph iCFG { -7 [label="7: BinaryOperatorStmt: Assign \n n$0=_fun_sum(2:int ,3:int ) [line 20]\n *&total:int =n$0 [line 20]\n " shape="box"] +"main4" [label="4: BinaryOperatorStmt: Assign \n n$0=_fun_sum(2:int ,3:int ) [line 20]\n *&total:int =n$0 [line 20]\n " shape="box"] - 7 -> 3 ; -6 [label="6: Return Stmt \n n$0=*&a:int [line 25]\n n$1=*&b:int [line 25]\n *&return:int =(n$0 + n$1) [line 25]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 22]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit sum \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -4 [label="4: Start sum\nFormals: a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: total:int \n DECLARE_LOCALS(&return,&total); [line 17]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 22]\n " shape="box"] + "main1" -> "main4" ; +"sum3" [label="3: Return Stmt \n n$0=*&a:int [line 25]\n n$1=*&b:int [line 25]\n *&return:int =(n$0 + n$1) [line 25]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "sum3" -> "sum2" ; +"sum2" [label="2: Exit sum \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: total:int \n DECLARE_LOCALS(&return,&total); [line 17]\n " color=yellow style=filled] +"sum1" [label="1: Start sum\nFormals: a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 1 -> 7 ; + "sum1" -> "sum3" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/comma/comma.c.dot b/infer/tests/codetoanalyze/c/frontend/comma/comma.c.dot index 5a35d53bb..670c9be87 100644 --- a/infer/tests/codetoanalyze/c/frontend/comma/comma.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/comma/comma.c.dot @@ -1,76 +1,76 @@ /* @generated */ digraph iCFG { -19 [label="19: DeclStmt \n *&a:int =9 [line 23]\n " shape="box"] +"comma_16" [label="6: DeclStmt \n *&a:int =9 [line 11]\n " shape="box"] - 19 -> 18 ; -18 [label="18: DeclStmt \n *&b:int =7 [line 23]\n " shape="box"] + "comma_16" -> "comma_15" ; +"comma_15" [label="5: DeclStmt \n *&b:int =7 [line 11]\n " shape="box"] - 18 -> 17 ; -17 [label="17: DeclStmt \n *&c:int =3 [line 23]\n " shape="box"] + "comma_15" -> "comma_14" ; +"comma_14" [label="4: DeclStmt \n n$1=*&a:int [line 12]\n *&a:int =(n$1 * 2) [line 12]\n n$2=*&a:int [line 12]\n n$3=*&a:int [line 12]\n *&a:int =(n$3 + 1) [line 12]\n *&b:int =(7 * n$3) [line 12]\n n$4=*&b:int [line 12]\n *&d:int =n$4 [line 12]\n " shape="box"] - 17 -> 16 ; -16 [label="16: DeclStmt \n n$1=*&a:int [line 24]\n *&a:int =(n$1 * 2) [line 24]\n n$2=*&a:int [line 24]\n n$3=*&a:int [line 24]\n *&a:int =(n$3 + 1) [line 24]\n *&b:int =(7 * n$3) [line 24]\n n$4=*&b:int [line 24]\n n$5=*&a:int [line 24]\n n$6=*&b:int [line 24]\n *&c:int =((n$5 + n$6) + 9) [line 24]\n n$7=*&c:int [line 24]\n n$8=*&c:int [line 24]\n *&d:int =n$8 [line 24]\n " shape="box"] + "comma_14" -> "comma_13" ; +"comma_13" [label="3: Return Stmt \n n$0=*&d:int [line 13]\n *&return:int =n$0 [line 13]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Return Stmt \n n$0=*&d:int [line 25]\n *&return:int =n$0 [line 25]\n " shape="box"] + "comma_13" -> "comma_12" ; +"comma_12" [label="2: Exit comma_1 \n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit comma_3 \n " color=yellow style=filled] +"comma_11" [label="1: Start comma_1\nFormals: \nLocals: d:int b:int a:int \n DECLARE_LOCALS(&return,&d,&b,&a); [line 10]\n " color=yellow style=filled] -13 [label="13: Start comma_3\nFormals: \nLocals: d:int c:int b:int a:int \n DECLARE_LOCALS(&return,&d,&c,&b,&a); [line 22]\n " color=yellow style=filled] + "comma_11" -> "comma_16" ; +"comma_26" [label="6: DeclStmt \n *&a:int =9 [line 17]\n " shape="box"] - 13 -> 19 ; -12 [label="12: DeclStmt \n *&a:int =9 [line 17]\n " shape="box"] + "comma_26" -> "comma_25" ; +"comma_25" [label="5: DeclStmt \n *&b:int =7 [line 17]\n " shape="box"] - 12 -> 11 ; -11 [label="11: DeclStmt \n *&b:int =7 [line 17]\n " shape="box"] + "comma_25" -> "comma_24" ; +"comma_24" [label="4: DeclStmt \n n$1=*&a:int [line 18]\n *&a:int =(n$1 * 2) [line 18]\n n$2=*&a:int [line 18]\n n$3=*&a:int [line 18]\n *&a:int =(n$3 + 1) [line 18]\n *&b:int =(7 * n$3) [line 18]\n n$4=*&b:int [line 18]\n n$5=*&a:int [line 18]\n n$6=*&b:int [line 18]\n *&d:int =((n$5 + n$6) + 9) [line 18]\n " shape="box"] - 11 -> 10 ; -10 [label="10: DeclStmt \n n$1=*&a:int [line 18]\n *&a:int =(n$1 * 2) [line 18]\n n$2=*&a:int [line 18]\n n$3=*&a:int [line 18]\n *&a:int =(n$3 + 1) [line 18]\n *&b:int =(7 * n$3) [line 18]\n n$4=*&b:int [line 18]\n n$5=*&a:int [line 18]\n n$6=*&b:int [line 18]\n *&d:int =((n$5 + n$6) + 9) [line 18]\n " shape="box"] + "comma_24" -> "comma_23" ; +"comma_23" [label="3: Return Stmt \n n$0=*&d:int [line 19]\n *&return:int =n$0 [line 19]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Return Stmt \n n$0=*&d:int [line 19]\n *&return:int =n$0 [line 19]\n " shape="box"] + "comma_23" -> "comma_22" ; +"comma_22" [label="2: Exit comma_2 \n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit comma_2 \n " color=yellow style=filled] +"comma_21" [label="1: Start comma_2\nFormals: \nLocals: d:int b:int a:int \n DECLARE_LOCALS(&return,&d,&b,&a); [line 16]\n " color=yellow style=filled] -7 [label="7: Start comma_2\nFormals: \nLocals: d:int b:int a:int \n DECLARE_LOCALS(&return,&d,&b,&a); [line 16]\n " color=yellow style=filled] + "comma_21" -> "comma_26" ; +"comma_37" [label="7: DeclStmt \n *&a:int =9 [line 23]\n " shape="box"] - 7 -> 12 ; -6 [label="6: DeclStmt \n *&a:int =9 [line 11]\n " shape="box"] + "comma_37" -> "comma_36" ; +"comma_36" [label="6: DeclStmt \n *&b:int =7 [line 23]\n " shape="box"] - 6 -> 5 ; -5 [label="5: DeclStmt \n *&b:int =7 [line 11]\n " shape="box"] + "comma_36" -> "comma_35" ; +"comma_35" [label="5: DeclStmt \n *&c:int =3 [line 23]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n n$1=*&a:int [line 12]\n *&a:int =(n$1 * 2) [line 12]\n n$2=*&a:int [line 12]\n n$3=*&a:int [line 12]\n *&a:int =(n$3 + 1) [line 12]\n *&b:int =(7 * n$3) [line 12]\n n$4=*&b:int [line 12]\n *&d:int =n$4 [line 12]\n " shape="box"] + "comma_35" -> "comma_34" ; +"comma_34" [label="4: DeclStmt \n n$1=*&a:int [line 24]\n *&a:int =(n$1 * 2) [line 24]\n n$2=*&a:int [line 24]\n n$3=*&a:int [line 24]\n *&a:int =(n$3 + 1) [line 24]\n *&b:int =(7 * n$3) [line 24]\n n$4=*&b:int [line 24]\n n$5=*&a:int [line 24]\n n$6=*&b:int [line 24]\n *&c:int =((n$5 + n$6) + 9) [line 24]\n n$7=*&c:int [line 24]\n n$8=*&c:int [line 24]\n *&d:int =n$8 [line 24]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&d:int [line 13]\n *&return:int =n$0 [line 13]\n " shape="box"] + "comma_34" -> "comma_33" ; +"comma_33" [label="3: Return Stmt \n n$0=*&d:int [line 25]\n *&return:int =n$0 [line 25]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit comma_1 \n " color=yellow style=filled] + "comma_33" -> "comma_32" ; +"comma_32" [label="2: Exit comma_3 \n " color=yellow style=filled] -1 [label="1: Start comma_1\nFormals: \nLocals: d:int b:int a:int \n DECLARE_LOCALS(&return,&d,&b,&a); [line 10]\n " color=yellow style=filled] +"comma_31" [label="1: Start comma_3\nFormals: \nLocals: d:int c:int b:int a:int \n DECLARE_LOCALS(&return,&d,&c,&b,&a); [line 22]\n " color=yellow style=filled] - 1 -> 6 ; + "comma_31" -> "comma_37" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/array_access.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/array_access.c.dot index eed19c4e6..60edeca3f 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/array_access.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/array_access.c.dot @@ -1,82 +1,82 @@ /* @generated */ digraph iCFG { -19 [label="19: Prune (false branch) \n n$14=*&p:int ** [line 11]\n n$15=*n$14[0]:int * [line 11]\n PRUNE((n$15 == 0), false); [line 11]\n " shape="invhouse"] +"dereference_in_array_access19" [label="19: Prune (false branch) \n n$14=*&p:int ** [line 11]\n n$15=*n$14[0]:int * [line 11]\n PRUNE((n$15 == 0), false); [line 11]\n " shape="invhouse"] - 19 -> 17 ; -18 [label="18: Prune (true branch) \n n$14=*&p:int ** [line 11]\n n$15=*n$14[0]:int * [line 11]\n PRUNE((n$15 != 0), true); [line 11]\n " shape="invhouse"] + "dereference_in_array_access19" -> "dereference_in_array_access17" ; +"dereference_in_array_access18" [label="18: Prune (true branch) \n n$14=*&p:int ** [line 11]\n n$15=*n$14[0]:int * [line 11]\n PRUNE((n$15 != 0), true); [line 11]\n " shape="invhouse"] - 18 -> 17 ; -17 [label="17: + \n " ] + "dereference_in_array_access18" -> "dereference_in_array_access17" ; +"dereference_in_array_access17" [label="17: + \n " ] - 17 -> 14 ; -16 [label="16: Prune (false branch) \n n$12=*n$11:int * [line 13]\n n$13=*n$12[1]:int [line 13]\n PRUNE((n$13 == 0), false); [line 13]\n " shape="invhouse"] + "dereference_in_array_access17" -> "dereference_in_array_access14" ; +"dereference_in_array_access16" [label="16: Prune (false branch) \n n$12=*n$11:int * [line 13]\n n$13=*n$12[1]:int [line 13]\n PRUNE((n$13 == 0), false); [line 13]\n " shape="invhouse"] - 16 -> 13 ; -15 [label="15: Prune (true branch) \n n$12=*n$11:int * [line 13]\n n$13=*n$12[1]:int [line 13]\n PRUNE((n$13 != 0), true); [line 13]\n " shape="invhouse"] + "dereference_in_array_access16" -> "dereference_in_array_access13" ; +"dereference_in_array_access15" [label="15: Prune (true branch) \n n$12=*n$11:int * [line 13]\n n$13=*n$12[1]:int [line 13]\n PRUNE((n$13 != 0), true); [line 13]\n " shape="invhouse"] - 15 -> 13 ; -14 [label="14: UnaryOperator \n n$11=*&p:int ** [line 13]\n " shape="box"] + "dereference_in_array_access15" -> "dereference_in_array_access13" ; +"dereference_in_array_access14" [label="14: UnaryOperator \n n$11=*&p:int ** [line 13]\n " shape="box"] - 14 -> 15 ; - 14 -> 16 ; -13 [label="13: + \n " ] + "dereference_in_array_access14" -> "dereference_in_array_access15" ; + "dereference_in_array_access14" -> "dereference_in_array_access16" ; +"dereference_in_array_access13" [label="13: + \n " ] - 13 -> 10 ; -12 [label="12: Prune (false branch) \n n$6=*&p:int ** [line 15]\n n$9=*n$8:int [line 15]\n n$10=*n$6[n$9]:int * [line 15]\n PRUNE((n$10 == 0), false); [line 15]\n " shape="invhouse"] + "dereference_in_array_access13" -> "dereference_in_array_access10" ; +"dereference_in_array_access12" [label="12: Prune (false branch) \n n$6=*&p:int ** [line 15]\n n$9=*n$8:int [line 15]\n n$10=*n$6[n$9]:int * [line 15]\n PRUNE((n$10 == 0), false); [line 15]\n " shape="invhouse"] - 12 -> 9 ; -11 [label="11: Prune (true branch) \n n$6=*&p:int ** [line 15]\n n$9=*n$8:int [line 15]\n n$10=*n$6[n$9]:int * [line 15]\n PRUNE((n$10 != 0), true); [line 15]\n " shape="invhouse"] + "dereference_in_array_access12" -> "dereference_in_array_access9" ; +"dereference_in_array_access11" [label="11: Prune (true branch) \n n$6=*&p:int ** [line 15]\n n$9=*n$8:int [line 15]\n n$10=*n$6[n$9]:int * [line 15]\n PRUNE((n$10 != 0), true); [line 15]\n " shape="invhouse"] - 11 -> 9 ; -10 [label="10: UnaryOperator \n n$7=*&p:int ** [line 15]\n n$8=*n$7:int * [line 15]\n " shape="box"] + "dereference_in_array_access11" -> "dereference_in_array_access9" ; +"dereference_in_array_access10" [label="10: UnaryOperator \n n$7=*&p:int ** [line 15]\n n$8=*n$7:int * [line 15]\n " shape="box"] - 10 -> 11 ; - 10 -> 12 ; -9 [label="9: + \n " ] + "dereference_in_array_access10" -> "dereference_in_array_access11" ; + "dereference_in_array_access10" -> "dereference_in_array_access12" ; +"dereference_in_array_access9" [label="9: + \n " ] - 9 -> 5 ; -8 [label="8: Prune (false branch) \n n$1=*n$0:int * [line 17]\n n$4=*n$3:int [line 17]\n n$5=*n$1[n$4]:int [line 17]\n PRUNE((n$5 == 0), false); [line 17]\n " shape="invhouse"] + "dereference_in_array_access9" -> "dereference_in_array_access5" ; +"dereference_in_array_access8" [label="8: Prune (false branch) \n n$1=*n$0:int * [line 17]\n n$4=*n$3:int [line 17]\n n$5=*n$1[n$4]:int [line 17]\n PRUNE((n$5 == 0), false); [line 17]\n " shape="invhouse"] - 8 -> 3 ; -7 [label="7: Prune (true branch) \n n$1=*n$0:int * [line 17]\n n$4=*n$3:int [line 17]\n n$5=*n$1[n$4]:int [line 17]\n PRUNE((n$5 != 0), true); [line 17]\n " shape="invhouse"] + "dereference_in_array_access8" -> "dereference_in_array_access3" ; +"dereference_in_array_access7" [label="7: Prune (true branch) \n n$1=*n$0:int * [line 17]\n n$4=*n$3:int [line 17]\n n$5=*n$1[n$4]:int [line 17]\n PRUNE((n$5 != 0), true); [line 17]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: UnaryOperator \n n$2=*&p:int ** [line 17]\n n$3=*n$2:int * [line 17]\n " shape="box"] + "dereference_in_array_access7" -> "dereference_in_array_access3" ; +"dereference_in_array_access6" [label="6: UnaryOperator \n n$2=*&p:int ** [line 17]\n n$3=*n$2:int * [line 17]\n " shape="box"] - 6 -> 7 ; - 6 -> 8 ; -5 [label="5: UnaryOperator \n n$0=*&p:int ** [line 17]\n " shape="box"] + "dereference_in_array_access6" -> "dereference_in_array_access7" ; + "dereference_in_array_access6" -> "dereference_in_array_access8" ; +"dereference_in_array_access5" [label="5: UnaryOperator \n n$0=*&p:int ** [line 17]\n " shape="box"] - 5 -> 6 ; -4 [label="4: between_join_and_exit \n " shape="box"] + "dereference_in_array_access5" -> "dereference_in_array_access6" ; +"dereference_in_array_access4" [label="4: between_join_and_exit \n " shape="box"] - 4 -> 2 ; -3 [label="3: + \n " ] + "dereference_in_array_access4" -> "dereference_in_array_access2" ; +"dereference_in_array_access3" [label="3: + \n " ] - 3 -> 4 ; -2 [label="2: Exit dereference_in_array_access \n " color=yellow style=filled] + "dereference_in_array_access3" -> "dereference_in_array_access4" ; +"dereference_in_array_access2" [label="2: Exit dereference_in_array_access \n " color=yellow style=filled] -1 [label="1: Start dereference_in_array_access\nFormals: p:int **\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"dereference_in_array_access1" [label="1: Start dereference_in_array_access\nFormals: p:int **\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 1 -> 18 ; - 1 -> 19 ; + "dereference_in_array_access1" -> "dereference_in_array_access18" ; + "dereference_in_array_access1" -> "dereference_in_array_access19" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/binary_operator.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/binary_operator.c.dot index 3c2fafcb7..0654c3582 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/binary_operator.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/binary_operator.c.dot @@ -1,202 +1,202 @@ /* @generated */ digraph iCFG { -48 [label="48: BinaryOperatorStmt: Assign \n n$31=*&0$?%__sil_tmpSIL_temp_conditional___n$28:int [line 13]\n *&x1:int =(n$31 + 77) [line 13]\n " shape="box"] +"binop_with_side_effects48" [label="48: BinaryOperatorStmt: Assign \n n$31=*&0$?%__sil_tmpSIL_temp_conditional___n$28:int [line 13]\n *&x1:int =(n$31 + 77) [line 13]\n " shape="box"] - 48 -> 38 ; - 48 -> 39 ; -47 [label="47: ConditinalStmt Branch \n n$30=*&z:int [line 13]\n *&0$?%__sil_tmpSIL_temp_conditional___n$28:int =n$30 [line 13]\n " shape="box"] + "binop_with_side_effects48" -> "binop_with_side_effects38" ; + "binop_with_side_effects48" -> "binop_with_side_effects39" ; +"binop_with_side_effects47" [label="47: ConditinalStmt Branch \n n$30=*&z:int [line 13]\n *&0$?%__sil_tmpSIL_temp_conditional___n$28:int =n$30 [line 13]\n " shape="box"] - 47 -> 43 ; -46 [label="46: ConditinalStmt Branch \n n$29=*&z:int [line 13]\n *&0$?%__sil_tmpSIL_temp_conditional___n$28:int =n$29 [line 13]\n " shape="box"] + "binop_with_side_effects47" -> "binop_with_side_effects43" ; +"binop_with_side_effects46" [label="46: ConditinalStmt Branch \n n$29=*&z:int [line 13]\n *&0$?%__sil_tmpSIL_temp_conditional___n$28:int =n$29 [line 13]\n " shape="box"] - 46 -> 43 ; -45 [label="45: Prune (false branch) \n PRUNE((1 == 0), false); [line 13]\n " shape="invhouse"] + "binop_with_side_effects46" -> "binop_with_side_effects43" ; +"binop_with_side_effects45" [label="45: Prune (false branch) \n PRUNE((1 == 0), false); [line 13]\n " shape="invhouse"] - 45 -> 47 ; -44 [label="44: Prune (true branch) \n PRUNE((1 != 0), true); [line 13]\n " shape="invhouse"] + "binop_with_side_effects45" -> "binop_with_side_effects47" ; +"binop_with_side_effects44" [label="44: Prune (true branch) \n PRUNE((1 != 0), true); [line 13]\n " shape="invhouse"] - 44 -> 46 ; -43 [label="43: + \n " ] + "binop_with_side_effects44" -> "binop_with_side_effects46" ; +"binop_with_side_effects43" [label="43: + \n " ] - 43 -> 48 ; -42 [label="42: BinaryOperatorStmt: Assign \n n$27=*&0$?%__sil_tmpSIL_temp_conditional___n$24:int [line 16]\n *&x2:int =(77 + n$27) [line 16]\n " shape="box"] + "binop_with_side_effects43" -> "binop_with_side_effects48" ; +"binop_with_side_effects42" [label="42: BinaryOperatorStmt: Assign \n n$27=*&0$?%__sil_tmpSIL_temp_conditional___n$24:int [line 16]\n *&x2:int =(77 + n$27) [line 16]\n " shape="box"] - 42 -> 27 ; - 42 -> 28 ; -41 [label="41: ConditinalStmt Branch \n n$26=*&z:int [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$24:int =n$26 [line 16]\n " shape="box"] + "binop_with_side_effects42" -> "binop_with_side_effects27" ; + "binop_with_side_effects42" -> "binop_with_side_effects28" ; +"binop_with_side_effects41" [label="41: ConditinalStmt Branch \n n$26=*&z:int [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$24:int =n$26 [line 16]\n " shape="box"] - 41 -> 37 ; -40 [label="40: ConditinalStmt Branch \n n$25=*&z:int [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$24:int =n$25 [line 16]\n " shape="box"] + "binop_with_side_effects41" -> "binop_with_side_effects37" ; +"binop_with_side_effects40" [label="40: ConditinalStmt Branch \n n$25=*&z:int [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$24:int =n$25 [line 16]\n " shape="box"] - 40 -> 37 ; -39 [label="39: Prune (false branch) \n PRUNE((1 == 0), false); [line 16]\n " shape="invhouse"] + "binop_with_side_effects40" -> "binop_with_side_effects37" ; +"binop_with_side_effects39" [label="39: Prune (false branch) \n PRUNE((1 == 0), false); [line 16]\n " shape="invhouse"] - 39 -> 41 ; -38 [label="38: Prune (true branch) \n PRUNE((1 != 0), true); [line 16]\n " shape="invhouse"] + "binop_with_side_effects39" -> "binop_with_side_effects41" ; +"binop_with_side_effects38" [label="38: Prune (true branch) \n PRUNE((1 != 0), true); [line 16]\n " shape="invhouse"] - 38 -> 40 ; -37 [label="37: + \n " ] + "binop_with_side_effects38" -> "binop_with_side_effects40" ; +"binop_with_side_effects37" [label="37: + \n " ] - 37 -> 42 ; -36 [label="36: BinaryOperatorStmt: Assign \n n$19=*&0$?%__sil_tmpSIL_temp_conditional___n$16:int [line 19]\n n$23=*&0$?%__sil_tmpSIL_temp_conditional___n$20:int [line 19]\n *&x3:int =(n$19 + n$23) [line 19]\n " shape="box"] + "binop_with_side_effects37" -> "binop_with_side_effects42" ; +"binop_with_side_effects36" [label="36: BinaryOperatorStmt: Assign \n n$19=*&0$?%__sil_tmpSIL_temp_conditional___n$16:int [line 19]\n n$23=*&0$?%__sil_tmpSIL_temp_conditional___n$20:int [line 19]\n *&x3:int =(n$19 + n$23) [line 19]\n " shape="box"] - 36 -> 21 ; - 36 -> 22 ; -35 [label="35: ConditinalStmt Branch \n n$22=*&z:int [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$20:int =n$22 [line 19]\n " shape="box"] + "binop_with_side_effects36" -> "binop_with_side_effects21" ; + "binop_with_side_effects36" -> "binop_with_side_effects22" ; +"binop_with_side_effects35" [label="35: ConditinalStmt Branch \n n$22=*&z:int [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$20:int =n$22 [line 19]\n " shape="box"] - 35 -> 31 ; -34 [label="34: ConditinalStmt Branch \n n$21=*&z:int [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$20:int =n$21 [line 19]\n " shape="box"] + "binop_with_side_effects35" -> "binop_with_side_effects31" ; +"binop_with_side_effects34" [label="34: ConditinalStmt Branch \n n$21=*&z:int [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$20:int =n$21 [line 19]\n " shape="box"] - 34 -> 31 ; -33 [label="33: Prune (false branch) \n PRUNE((1 == 0), false); [line 19]\n " shape="invhouse"] + "binop_with_side_effects34" -> "binop_with_side_effects31" ; +"binop_with_side_effects33" [label="33: Prune (false branch) \n PRUNE((1 == 0), false); [line 19]\n " shape="invhouse"] - 33 -> 35 ; -32 [label="32: Prune (true branch) \n PRUNE((1 != 0), true); [line 19]\n " shape="invhouse"] + "binop_with_side_effects33" -> "binop_with_side_effects35" ; +"binop_with_side_effects32" [label="32: Prune (true branch) \n PRUNE((1 != 0), true); [line 19]\n " shape="invhouse"] - 32 -> 34 ; -31 [label="31: + \n " ] + "binop_with_side_effects32" -> "binop_with_side_effects34" ; +"binop_with_side_effects31" [label="31: + \n " ] - 31 -> 36 ; -30 [label="30: ConditinalStmt Branch \n n$18=*&z:int [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$16:int =n$18 [line 19]\n " shape="box"] + "binop_with_side_effects31" -> "binop_with_side_effects36" ; +"binop_with_side_effects30" [label="30: ConditinalStmt Branch \n n$18=*&z:int [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$16:int =n$18 [line 19]\n " shape="box"] - 30 -> 26 ; -29 [label="29: ConditinalStmt Branch \n n$17=*&z:int [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$16:int =n$17 [line 19]\n " shape="box"] + "binop_with_side_effects30" -> "binop_with_side_effects26" ; +"binop_with_side_effects29" [label="29: ConditinalStmt Branch \n n$17=*&z:int [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$16:int =n$17 [line 19]\n " shape="box"] - 29 -> 26 ; -28 [label="28: Prune (false branch) \n PRUNE((1 == 0), false); [line 19]\n " shape="invhouse"] + "binop_with_side_effects29" -> "binop_with_side_effects26" ; +"binop_with_side_effects28" [label="28: Prune (false branch) \n PRUNE((1 == 0), false); [line 19]\n " shape="invhouse"] - 28 -> 30 ; -27 [label="27: Prune (true branch) \n PRUNE((1 != 0), true); [line 19]\n " shape="invhouse"] + "binop_with_side_effects28" -> "binop_with_side_effects30" ; +"binop_with_side_effects27" [label="27: Prune (true branch) \n PRUNE((1 != 0), true); [line 19]\n " shape="invhouse"] - 27 -> 29 ; -26 [label="26: + \n " ] + "binop_with_side_effects27" -> "binop_with_side_effects29" ; +"binop_with_side_effects26" [label="26: + \n " ] - 26 -> 32 ; - 26 -> 33 ; -25 [label="25: DeclStmt \n n$15=*&0$?%__sil_tmpSIL_temp_conditional___n$12:int [line 22]\n *&y1:int =(n$15 + 77) [line 22]\n " shape="box"] + "binop_with_side_effects26" -> "binop_with_side_effects32" ; + "binop_with_side_effects26" -> "binop_with_side_effects33" ; +"binop_with_side_effects25" [label="25: DeclStmt \n n$15=*&0$?%__sil_tmpSIL_temp_conditional___n$12:int [line 22]\n *&y1:int =(n$15 + 77) [line 22]\n " shape="box"] - 25 -> 15 ; - 25 -> 16 ; -24 [label="24: ConditinalStmt Branch \n n$14=*&z:int [line 22]\n *&0$?%__sil_tmpSIL_temp_conditional___n$12:int =n$14 [line 22]\n " shape="box"] + "binop_with_side_effects25" -> "binop_with_side_effects15" ; + "binop_with_side_effects25" -> "binop_with_side_effects16" ; +"binop_with_side_effects24" [label="24: ConditinalStmt Branch \n n$14=*&z:int [line 22]\n *&0$?%__sil_tmpSIL_temp_conditional___n$12:int =n$14 [line 22]\n " shape="box"] - 24 -> 20 ; -23 [label="23: ConditinalStmt Branch \n n$13=*&z:int [line 22]\n *&0$?%__sil_tmpSIL_temp_conditional___n$12:int =n$13 [line 22]\n " shape="box"] + "binop_with_side_effects24" -> "binop_with_side_effects20" ; +"binop_with_side_effects23" [label="23: ConditinalStmt Branch \n n$13=*&z:int [line 22]\n *&0$?%__sil_tmpSIL_temp_conditional___n$12:int =n$13 [line 22]\n " shape="box"] - 23 -> 20 ; -22 [label="22: Prune (false branch) \n PRUNE((1 == 0), false); [line 22]\n " shape="invhouse"] + "binop_with_side_effects23" -> "binop_with_side_effects20" ; +"binop_with_side_effects22" [label="22: Prune (false branch) \n PRUNE((1 == 0), false); [line 22]\n " shape="invhouse"] - 22 -> 24 ; -21 [label="21: Prune (true branch) \n PRUNE((1 != 0), true); [line 22]\n " shape="invhouse"] + "binop_with_side_effects22" -> "binop_with_side_effects24" ; +"binop_with_side_effects21" [label="21: Prune (true branch) \n PRUNE((1 != 0), true); [line 22]\n " shape="invhouse"] - 21 -> 23 ; -20 [label="20: + \n " ] + "binop_with_side_effects21" -> "binop_with_side_effects23" ; +"binop_with_side_effects20" [label="20: + \n " ] - 20 -> 25 ; -19 [label="19: DeclStmt \n n$11=*&0$?%__sil_tmpSIL_temp_conditional___n$8:int [line 24]\n *&y2:int =(77 + n$11) [line 24]\n " shape="box"] + "binop_with_side_effects20" -> "binop_with_side_effects25" ; +"binop_with_side_effects19" [label="19: DeclStmt \n n$11=*&0$?%__sil_tmpSIL_temp_conditional___n$8:int [line 24]\n *&y2:int =(77 + n$11) [line 24]\n " shape="box"] - 19 -> 4 ; - 19 -> 5 ; -18 [label="18: ConditinalStmt Branch \n n$10=*&z:int [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$8:int =n$10 [line 24]\n " shape="box"] + "binop_with_side_effects19" -> "binop_with_side_effects4" ; + "binop_with_side_effects19" -> "binop_with_side_effects5" ; +"binop_with_side_effects18" [label="18: ConditinalStmt Branch \n n$10=*&z:int [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$8:int =n$10 [line 24]\n " shape="box"] - 18 -> 14 ; -17 [label="17: ConditinalStmt Branch \n n$9=*&z:int [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$8:int =n$9 [line 24]\n " shape="box"] + "binop_with_side_effects18" -> "binop_with_side_effects14" ; +"binop_with_side_effects17" [label="17: ConditinalStmt Branch \n n$9=*&z:int [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$8:int =n$9 [line 24]\n " shape="box"] - 17 -> 14 ; -16 [label="16: Prune (false branch) \n PRUNE((1 == 0), false); [line 24]\n " shape="invhouse"] + "binop_with_side_effects17" -> "binop_with_side_effects14" ; +"binop_with_side_effects16" [label="16: Prune (false branch) \n PRUNE((1 == 0), false); [line 24]\n " shape="invhouse"] - 16 -> 18 ; -15 [label="15: Prune (true branch) \n PRUNE((1 != 0), true); [line 24]\n " shape="invhouse"] + "binop_with_side_effects16" -> "binop_with_side_effects18" ; +"binop_with_side_effects15" [label="15: Prune (true branch) \n PRUNE((1 != 0), true); [line 24]\n " shape="invhouse"] - 15 -> 17 ; -14 [label="14: + \n " ] + "binop_with_side_effects15" -> "binop_with_side_effects17" ; +"binop_with_side_effects14" [label="14: + \n " ] - 14 -> 19 ; -13 [label="13: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 26]\n n$7=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 26]\n *&y3:int =(n$3 + n$7) [line 26]\n " shape="box"] + "binop_with_side_effects14" -> "binop_with_side_effects19" ; +"binop_with_side_effects13" [label="13: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 26]\n n$7=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 26]\n *&y3:int =(n$3 + n$7) [line 26]\n " shape="box"] - 13 -> 2 ; -12 [label="12: ConditinalStmt Branch \n n$6=*&z:int [line 26]\n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =n$6 [line 26]\n " shape="box"] + "binop_with_side_effects13" -> "binop_with_side_effects2" ; +"binop_with_side_effects12" [label="12: ConditinalStmt Branch \n n$6=*&z:int [line 26]\n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =n$6 [line 26]\n " shape="box"] - 12 -> 8 ; -11 [label="11: ConditinalStmt Branch \n n$5=*&z:int [line 26]\n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =n$5 [line 26]\n " shape="box"] + "binop_with_side_effects12" -> "binop_with_side_effects8" ; +"binop_with_side_effects11" [label="11: ConditinalStmt Branch \n n$5=*&z:int [line 26]\n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =n$5 [line 26]\n " shape="box"] - 11 -> 8 ; -10 [label="10: Prune (false branch) \n PRUNE((1 == 0), false); [line 26]\n " shape="invhouse"] + "binop_with_side_effects11" -> "binop_with_side_effects8" ; +"binop_with_side_effects10" [label="10: Prune (false branch) \n PRUNE((1 == 0), false); [line 26]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: Prune (true branch) \n PRUNE((1 != 0), true); [line 26]\n " shape="invhouse"] + "binop_with_side_effects10" -> "binop_with_side_effects12" ; +"binop_with_side_effects9" [label="9: Prune (true branch) \n PRUNE((1 != 0), true); [line 26]\n " shape="invhouse"] - 9 -> 11 ; -8 [label="8: + \n " ] + "binop_with_side_effects9" -> "binop_with_side_effects11" ; +"binop_with_side_effects8" [label="8: + \n " ] - 8 -> 13 ; -7 [label="7: ConditinalStmt Branch \n n$2=*&z:int [line 26]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$2 [line 26]\n " shape="box"] + "binop_with_side_effects8" -> "binop_with_side_effects13" ; +"binop_with_side_effects7" [label="7: ConditinalStmt Branch \n n$2=*&z:int [line 26]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$2 [line 26]\n " shape="box"] - 7 -> 3 ; -6 [label="6: ConditinalStmt Branch \n n$1=*&z:int [line 26]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$1 [line 26]\n " shape="box"] + "binop_with_side_effects7" -> "binop_with_side_effects3" ; +"binop_with_side_effects6" [label="6: ConditinalStmt Branch \n n$1=*&z:int [line 26]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$1 [line 26]\n " shape="box"] - 6 -> 3 ; -5 [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 26]\n " shape="invhouse"] + "binop_with_side_effects6" -> "binop_with_side_effects3" ; +"binop_with_side_effects5" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 26]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 26]\n " shape="invhouse"] + "binop_with_side_effects5" -> "binop_with_side_effects7" ; +"binop_with_side_effects4" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 26]\n " shape="invhouse"] - 4 -> 6 ; -3 [label="3: + \n " ] + "binop_with_side_effects4" -> "binop_with_side_effects6" ; +"binop_with_side_effects3" [label="3: + \n " ] - 3 -> 9 ; - 3 -> 10 ; -2 [label="2: Exit binop_with_side_effects \n " color=yellow style=filled] + "binop_with_side_effects3" -> "binop_with_side_effects9" ; + "binop_with_side_effects3" -> "binop_with_side_effects10" ; +"binop_with_side_effects2" [label="2: Exit binop_with_side_effects \n " color=yellow style=filled] -1 [label="1: Start binop_with_side_effects\nFormals: z:int \nLocals: y3:int 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int y2:int 0$?%__sil_tmpSIL_temp_conditional___n$8:int y1:int 0$?%__sil_tmpSIL_temp_conditional___n$12:int 0$?%__sil_tmpSIL_temp_conditional___n$16:int 0$?%__sil_tmpSIL_temp_conditional___n$20:int x3:int 0$?%__sil_tmpSIL_temp_conditional___n$24:int x2:int 0$?%__sil_tmpSIL_temp_conditional___n$28:int x1:int \n DECLARE_LOCALS(&return,&y3,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$4,&y2,&0$?%__sil_tmpSIL_temp_conditional___n$8,&y1,&0$?%__sil_tmpSIL_temp_conditional___n$12,&0$?%__sil_tmpSIL_temp_conditional___n$16,&0$?%__sil_tmpSIL_temp_conditional___n$20,&x3,&0$?%__sil_tmpSIL_temp_conditional___n$24,&x2,&0$?%__sil_tmpSIL_temp_conditional___n$28,&x1); [line 10]\n " color=yellow style=filled] +"binop_with_side_effects1" [label="1: Start binop_with_side_effects\nFormals: z:int \nLocals: y3:int 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int y2:int 0$?%__sil_tmpSIL_temp_conditional___n$8:int y1:int 0$?%__sil_tmpSIL_temp_conditional___n$12:int 0$?%__sil_tmpSIL_temp_conditional___n$16:int 0$?%__sil_tmpSIL_temp_conditional___n$20:int x3:int 0$?%__sil_tmpSIL_temp_conditional___n$24:int x2:int 0$?%__sil_tmpSIL_temp_conditional___n$28:int x1:int \n DECLARE_LOCALS(&return,&y3,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$4,&y2,&0$?%__sil_tmpSIL_temp_conditional___n$8,&y1,&0$?%__sil_tmpSIL_temp_conditional___n$12,&0$?%__sil_tmpSIL_temp_conditional___n$16,&0$?%__sil_tmpSIL_temp_conditional___n$20,&x3,&0$?%__sil_tmpSIL_temp_conditional___n$24,&x2,&0$?%__sil_tmpSIL_temp_conditional___n$28,&x1); [line 10]\n " color=yellow style=filled] - 1 -> 44 ; - 1 -> 45 ; + "binop_with_side_effects1" -> "binop_with_side_effects44" ; + "binop_with_side_effects1" -> "binop_with_side_effects45" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/cond2.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/cond2.c.dot index aad9d96ec..629abf42c 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/cond2.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/cond2.c.dot @@ -1,243 +1,243 @@ /* @generated */ digraph iCFG { -58 [label="58: BinaryOperatorStmt: Assign \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$5:int [line 23]\n *&y:int =n$9 [line 23]\n " shape="box"] +"foo37" [label="37: DeclStmt \n *&x:int =5 [line 11]\n " shape="box"] - 58 -> 42 ; - 58 -> 43 ; -57 [label="57: ConditinalStmt Branch \n n$8=*&x:int [line 23]\n *&x:int =(n$8 - 1) [line 23]\n *&0$?%__sil_tmpSIL_temp_conditional___n$5:int =n$8 [line 23]\n " shape="box"] + "foo37" -> "foo31" ; + "foo37" -> "foo32" ; +"foo36" [label="36: BinaryOperatorStmt: Assign \n *&x:int =0 [line 13]\n " shape="box"] - 57 -> 52 ; -56 [label="56: ConditinalStmt Branch \n n$7=*&x:int [line 23]\n *&x:int =(n$7 + 1) [line 23]\n *&0$?%__sil_tmpSIL_temp_conditional___n$5:int =(n$7 + 1) [line 23]\n " shape="box"] + "foo36" -> "foo30" ; +"foo35" [label="35: Prune (false branch) \n PRUNE(((7 < n$10) == 0), false); [line 12]\n " shape="invhouse"] - 56 -> 52 ; -55 [label="55: Prune (false branch) \n PRUNE(((n$6 > 1) == 0), false); [line 23]\n " shape="invhouse"] + "foo35" -> "foo30" ; +"foo34" [label="34: Prune (true branch) \n PRUNE(((7 < n$10) != 0), true); [line 12]\n " shape="invhouse"] - 55 -> 57 ; -54 [label="54: Prune (true branch) \n PRUNE(((n$6 > 1) != 0), true); [line 23]\n " shape="invhouse"] + "foo34" -> "foo36" ; +"foo33" [label="33: BinaryOperatorStmt: LT \n n$10=*&x:int [line 12]\n *&x:int =(n$10 + 1) [line 12]\n " shape="box"] - 54 -> 56 ; -53 [label="53: BinaryOperatorStmt: GT \n *&x:int =1 [line 23]\n n$6=*&x:int [line 23]\n " shape="box"] + "foo33" -> "foo34" ; + "foo33" -> "foo35" ; +"foo32" [label="32: Prune (false branch) \n PRUNE(((3 < 4) == 0), false); [line 12]\n " shape="invhouse"] - 53 -> 54 ; - 53 -> 55 ; -52 [label="52: + \n " ] + "foo32" -> "foo33" ; +"foo31" [label="31: Prune (true branch) \n PRUNE(((3 < 4) != 0), true); [line 12]\n " shape="invhouse"] - 52 -> 58 ; -51 [label="51: Return Stmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 24]\n *&return:int =(0 + n$4) [line 24]\n " shape="box"] + "foo31" -> "foo36" ; +"foo30" [label="30: + \n " ] - 51 -> 39 ; -50 [label="50: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 24]\n " shape="box"] + "foo30" -> "foo29" ; +"foo29" [label="29: DeclStmt \n *&y:int =19 [line 15]\n " shape="box"] - 50 -> 40 ; -49 [label="49: ConditinalStmt Branch \n *&x:int =1 [line 24]\n n$3=*&x:int [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$3 [line 24]\n " shape="box"] + "foo29" -> "foo21" ; + "foo29" -> "foo22" ; +"foo28" [label="28: DeclStmt \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 16]\n *&n:int =n$9 [line 16]\n " shape="box"] - 49 -> 40 ; -48 [label="48: Prune (false branch) \n PRUNE(((n$2 > 1) == 0), false); [line 24]\n " shape="invhouse"] + "foo28" -> "foo10" ; + "foo28" -> "foo11" ; +"foo27" [label="27: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =2 [line 16]\n " shape="box"] - 48 -> 50 ; -47 [label="47: Prune (true branch) \n PRUNE(((n$2 > 1) != 0), true); [line 24]\n " shape="invhouse"] + "foo27" -> "foo20" ; +"foo26" [label="26: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =1 [line 16]\n " shape="box"] - 47 -> 49 ; -46 [label="46: BinaryOperatorStmt: GT \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 24]\n " shape="box"] + "foo26" -> "foo20" ; +"foo25" [label="25: Prune (false branch) \n PRUNE(((7 < (n$7 - n$8)) == 0), false); [line 16]\n " shape="invhouse"] - 46 -> 47 ; - 46 -> 48 ; -45 [label="45: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =2 [line 24]\n " shape="box"] + "foo25" -> "foo27" ; +"foo24" [label="24: Prune (true branch) \n PRUNE(((7 < (n$7 - n$8)) != 0), true); [line 16]\n " shape="invhouse"] - 45 -> 41 ; -44 [label="44: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 24]\n " shape="box"] + "foo24" -> "foo26" ; +"foo23" [label="23: BinaryOperatorStmt: LT \n n$7=*&x:int [line 16]\n *&x:int =(n$7 + 1) [line 16]\n n$8=*&y:int [line 16]\n " shape="box"] - 44 -> 41 ; -43 [label="43: Prune (false branch) \n PRUNE(((3 > 4) == 0), false); [line 24]\n " shape="invhouse"] + "foo23" -> "foo24" ; + "foo23" -> "foo25" ; +"foo22" [label="22: Prune (false branch) \n PRUNE(((3 < 4) == 0), false); [line 16]\n " shape="invhouse"] - 43 -> 45 ; -42 [label="42: Prune (true branch) \n PRUNE(((3 > 4) != 0), true); [line 24]\n " shape="invhouse"] + "foo22" -> "foo23" ; +"foo21" [label="21: Prune (true branch) \n PRUNE(((3 < 4) != 0), true); [line 16]\n " shape="invhouse"] - 42 -> 44 ; -41 [label="41: + \n " ] + "foo21" -> "foo26" ; +"foo20" [label="20: + \n " ] - 41 -> 46 ; -40 [label="40: + \n " ] + "foo20" -> "foo28" ; +"foo19" [label="19: BinaryOperatorStmt: Assign \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 17]\n *&n:int =n$5 [line 17]\n " shape="box"] - 40 -> 51 ; -39 [label="39: Exit bar \n " color=yellow style=filled] + "foo19" -> "foo4" ; + "foo19" -> "foo5" ; +"foo18" [label="18: ConditinalStmt Branch \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 17]\n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =n$4 [line 17]\n " shape="box"] -38 [label="38: Start bar\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int 0$?%__sil_tmpSIL_temp_conditional___n$5:int y:int x:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$1,&0$?%__sil_tmpSIL_temp_conditional___n$5,&y,&x); [line 21]\n " color=yellow style=filled] + "foo18" -> "foo9" ; +"foo17" [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =2 [line 17]\n " shape="box"] - 38 -> 53 ; -37 [label="37: DeclStmt \n *&x:int =5 [line 11]\n " shape="box"] + "foo17" -> "foo13" ; +"foo16" [label="16: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 17]\n " shape="box"] - 37 -> 31 ; - 37 -> 32 ; -36 [label="36: BinaryOperatorStmt: Assign \n *&x:int =0 [line 13]\n " shape="box"] + "foo16" -> "foo13" ; +"foo15" [label="15: Prune (false branch) \n PRUNE(((5 > 4) == 0), false); [line 17]\n " shape="invhouse"] - 36 -> 30 ; -35 [label="35: Prune (false branch) \n PRUNE(((7 < n$10) == 0), false); [line 12]\n " shape="invhouse"] + "foo15" -> "foo17" ; +"foo14" [label="14: Prune (true branch) \n PRUNE(((5 > 4) != 0), true); [line 17]\n " shape="invhouse"] - 35 -> 30 ; -34 [label="34: Prune (true branch) \n PRUNE(((7 < n$10) != 0), true); [line 12]\n " shape="invhouse"] + "foo14" -> "foo16" ; +"foo13" [label="13: + \n " ] - 34 -> 36 ; -33 [label="33: BinaryOperatorStmt: LT \n n$10=*&x:int [line 12]\n *&x:int =(n$10 + 1) [line 12]\n " shape="box"] + "foo13" -> "foo18" ; +"foo12" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 17]\n " shape="box"] - 33 -> 34 ; - 33 -> 35 ; -32 [label="32: Prune (false branch) \n PRUNE(((3 < 4) == 0), false); [line 12]\n " shape="invhouse"] + "foo12" -> "foo9" ; +"foo11" [label="11: Prune (false branch) \n PRUNE(((2 < 1) == 0), false); [line 17]\n " shape="invhouse"] - 32 -> 33 ; -31 [label="31: Prune (true branch) \n PRUNE(((3 < 4) != 0), true); [line 12]\n " shape="invhouse"] + "foo11" -> "foo14" ; + "foo11" -> "foo15" ; +"foo10" [label="10: Prune (true branch) \n PRUNE(((2 < 1) != 0), true); [line 17]\n " shape="invhouse"] - 31 -> 36 ; -30 [label="30: + \n " ] + "foo10" -> "foo12" ; +"foo9" [label="9: + \n " ] - 30 -> 29 ; -29 [label="29: DeclStmt \n *&y:int =19 [line 15]\n " shape="box"] + "foo9" -> "foo19" ; +"foo8" [label="8: Return Stmt \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 18]\n *&return:int =(0 + n$1) [line 18]\n " shape="box"] - 29 -> 21 ; - 29 -> 22 ; -28 [label="28: DeclStmt \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 16]\n *&n:int =n$9 [line 16]\n " shape="box"] + "foo8" -> "foo2" ; +"foo7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 18]\n " shape="box"] - 28 -> 10 ; - 28 -> 11 ; -27 [label="27: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =2 [line 16]\n " shape="box"] + "foo7" -> "foo3" ; +"foo6" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 18]\n " shape="box"] - 27 -> 20 ; -26 [label="26: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =1 [line 16]\n " shape="box"] + "foo6" -> "foo3" ; +"foo5" [label="5: Prune (false branch) \n PRUNE(((7 > 9) == 0), false); [line 18]\n " shape="invhouse"] - 26 -> 20 ; -25 [label="25: Prune (false branch) \n PRUNE(((7 < (n$7 - n$8)) == 0), false); [line 16]\n " shape="invhouse"] + "foo5" -> "foo7" ; +"foo4" [label="4: Prune (true branch) \n PRUNE(((7 > 9) != 0), true); [line 18]\n " shape="invhouse"] - 25 -> 27 ; -24 [label="24: Prune (true branch) \n PRUNE(((7 < (n$7 - n$8)) != 0), true); [line 16]\n " shape="invhouse"] + "foo4" -> "foo6" ; +"foo3" [label="3: + \n " ] - 24 -> 26 ; -23 [label="23: BinaryOperatorStmt: LT \n n$7=*&x:int [line 16]\n *&x:int =(n$7 + 1) [line 16]\n n$8=*&y:int [line 16]\n " shape="box"] + "foo3" -> "foo8" ; +"foo2" [label="2: Exit foo \n " color=yellow style=filled] - 23 -> 24 ; - 23 -> 25 ; -22 [label="22: Prune (false branch) \n PRUNE(((3 < 4) == 0), false); [line 16]\n " shape="invhouse"] +"foo1" [label="1: Start foo\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int n:int 0$?%__sil_tmpSIL_temp_conditional___n$6:int y:int x:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$3,&n,&0$?%__sil_tmpSIL_temp_conditional___n$6,&y,&x); [line 10]\n " color=yellow style=filled] - 22 -> 23 ; -21 [label="21: Prune (true branch) \n PRUNE(((3 < 4) != 0), true); [line 16]\n " shape="invhouse"] + "foo1" -> "foo37" ; +"bar21" [label="21: BinaryOperatorStmt: Assign \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$5:int [line 23]\n *&y:int =n$9 [line 23]\n " shape="box"] - 21 -> 26 ; -20 [label="20: + \n " ] + "bar21" -> "bar5" ; + "bar21" -> "bar6" ; +"bar20" [label="20: ConditinalStmt Branch \n n$8=*&x:int [line 23]\n *&x:int =(n$8 - 1) [line 23]\n *&0$?%__sil_tmpSIL_temp_conditional___n$5:int =n$8 [line 23]\n " shape="box"] - 20 -> 28 ; -19 [label="19: BinaryOperatorStmt: Assign \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 17]\n *&n:int =n$5 [line 17]\n " shape="box"] + "bar20" -> "bar15" ; +"bar19" [label="19: ConditinalStmt Branch \n n$7=*&x:int [line 23]\n *&x:int =(n$7 + 1) [line 23]\n *&0$?%__sil_tmpSIL_temp_conditional___n$5:int =(n$7 + 1) [line 23]\n " shape="box"] - 19 -> 4 ; - 19 -> 5 ; -18 [label="18: ConditinalStmt Branch \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 17]\n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =n$4 [line 17]\n " shape="box"] + "bar19" -> "bar15" ; +"bar18" [label="18: Prune (false branch) \n PRUNE(((n$6 > 1) == 0), false); [line 23]\n " shape="invhouse"] - 18 -> 9 ; -17 [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =2 [line 17]\n " shape="box"] + "bar18" -> "bar20" ; +"bar17" [label="17: Prune (true branch) \n PRUNE(((n$6 > 1) != 0), true); [line 23]\n " shape="invhouse"] - 17 -> 13 ; -16 [label="16: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 17]\n " shape="box"] + "bar17" -> "bar19" ; +"bar16" [label="16: BinaryOperatorStmt: GT \n *&x:int =1 [line 23]\n n$6=*&x:int [line 23]\n " shape="box"] - 16 -> 13 ; -15 [label="15: Prune (false branch) \n PRUNE(((5 > 4) == 0), false); [line 17]\n " shape="invhouse"] + "bar16" -> "bar17" ; + "bar16" -> "bar18" ; +"bar15" [label="15: + \n " ] - 15 -> 17 ; -14 [label="14: Prune (true branch) \n PRUNE(((5 > 4) != 0), true); [line 17]\n " shape="invhouse"] + "bar15" -> "bar21" ; +"bar14" [label="14: Return Stmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 24]\n *&return:int =(0 + n$4) [line 24]\n " shape="box"] - 14 -> 16 ; -13 [label="13: + \n " ] + "bar14" -> "bar2" ; +"bar13" [label="13: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 24]\n " shape="box"] - 13 -> 18 ; -12 [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 17]\n " shape="box"] + "bar13" -> "bar3" ; +"bar12" [label="12: ConditinalStmt Branch \n *&x:int =1 [line 24]\n n$3=*&x:int [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$3 [line 24]\n " shape="box"] - 12 -> 9 ; -11 [label="11: Prune (false branch) \n PRUNE(((2 < 1) == 0), false); [line 17]\n " shape="invhouse"] + "bar12" -> "bar3" ; +"bar11" [label="11: Prune (false branch) \n PRUNE(((n$2 > 1) == 0), false); [line 24]\n " shape="invhouse"] - 11 -> 14 ; - 11 -> 15 ; -10 [label="10: Prune (true branch) \n PRUNE(((2 < 1) != 0), true); [line 17]\n " shape="invhouse"] + "bar11" -> "bar13" ; +"bar10" [label="10: Prune (true branch) \n PRUNE(((n$2 > 1) != 0), true); [line 24]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: + \n " ] + "bar10" -> "bar12" ; +"bar9" [label="9: BinaryOperatorStmt: GT \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 24]\n " shape="box"] - 9 -> 19 ; -8 [label="8: Return Stmt \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 18]\n *&return:int =(0 + n$1) [line 18]\n " shape="box"] + "bar9" -> "bar10" ; + "bar9" -> "bar11" ; +"bar8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =2 [line 24]\n " shape="box"] - 8 -> 2 ; -7 [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 18]\n " shape="box"] + "bar8" -> "bar4" ; +"bar7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 24]\n " shape="box"] - 7 -> 3 ; -6 [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 18]\n " shape="box"] + "bar7" -> "bar4" ; +"bar6" [label="6: Prune (false branch) \n PRUNE(((3 > 4) == 0), false); [line 24]\n " shape="invhouse"] - 6 -> 3 ; -5 [label="5: Prune (false branch) \n PRUNE(((7 > 9) == 0), false); [line 18]\n " shape="invhouse"] + "bar6" -> "bar8" ; +"bar5" [label="5: Prune (true branch) \n PRUNE(((3 > 4) != 0), true); [line 24]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: Prune (true branch) \n PRUNE(((7 > 9) != 0), true); [line 18]\n " shape="invhouse"] + "bar5" -> "bar7" ; +"bar4" [label="4: + \n " ] - 4 -> 6 ; -3 [label="3: + \n " ] + "bar4" -> "bar9" ; +"bar3" [label="3: + \n " ] - 3 -> 8 ; -2 [label="2: Exit foo \n " color=yellow style=filled] + "bar3" -> "bar14" ; +"bar2" [label="2: Exit bar \n " color=yellow style=filled] -1 [label="1: Start foo\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int n:int 0$?%__sil_tmpSIL_temp_conditional___n$6:int y:int x:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$3,&n,&0$?%__sil_tmpSIL_temp_conditional___n$6,&y,&x); [line 10]\n " color=yellow style=filled] +"bar1" [label="1: Start bar\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int 0$?%__sil_tmpSIL_temp_conditional___n$5:int y:int x:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$1,&0$?%__sil_tmpSIL_temp_conditional___n$5,&y,&x); [line 21]\n " color=yellow style=filled] - 1 -> 37 ; + "bar1" -> "bar16" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/conditional_operator.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/conditional_operator.c.dot index 2b69acaa8..67c74b832 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/conditional_operator.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/conditional_operator.c.dot @@ -1,266 +1,266 @@ /* @generated */ digraph iCFG { -66 [label="66: Return Stmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 35]\n *&return:int =n$3 [line 35]\n " shape="box"] +"test310" [label="10: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 22]\n *&x:int =n$3 [line 22]\n " shape="box"] - 66 -> 59 ; -65 [label="65: BinaryConditinalStmt Init \n n$0=_fun_test2(2:int ) [line 35]\n n$1=_fun_test2((2 + n$0):int ) [line 35]\n " shape="box"] + "test310" -> "test33" ; +"test39" [label="9: BinaryConditinalStmt Init \n n$1=*&b:int [line 22]\n " shape="box"] - 65 -> 61 ; - 65 -> 62 ; -64 [label="64: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =2 [line 35]\n " shape="box"] + "test39" -> "test35" ; + "test39" -> "test36" ; +"test38" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 22]\n " shape="box"] - 64 -> 60 ; -63 [label="63: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =n$1 [line 35]\n " shape="box"] + "test38" -> "test34" ; +"test37" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =n$1 [line 22]\n " shape="box"] - 63 -> 60 ; -62 [label="62: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 35]\n " shape="invhouse"] + "test37" -> "test34" ; +"test36" [label="6: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 22]\n " shape="invhouse"] - 62 -> 64 ; -61 [label="61: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 35]\n " shape="invhouse"] + "test36" -> "test38" ; +"test35" [label="5: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 22]\n " shape="invhouse"] - 61 -> 63 ; -60 [label="60: + \n " ] + "test35" -> "test37" ; +"test34" [label="4: + \n " ] - 60 -> 66 ; -59 [label="59: Exit test7 \n " color=yellow style=filled] + "test34" -> "test310" ; +"test33" [label="3: Return Stmt \n n$0=*&x:int [line 23]\n *&return:int =n$0 [line 23]\n " shape="box"] -58 [label="58: Start test7\nFormals: b:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2); [line 35]\n " color=yellow style=filled] + "test33" -> "test32" ; +"test32" [label="2: Exit test3 \n " color=yellow style=filled] - 58 -> 65 ; -57 [label="57: DeclStmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 31]\n *&z:int =n$4 [line 31]\n " shape="box"] +"test31" [label="1: Start test3\nFormals: b:int \nLocals: x:int 0$?%__sil_tmpSIL_temp_conditional___n$2:int \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_temp_conditional___n$2); [line 21]\n " color=yellow style=filled] - 57 -> 51 ; -56 [label="56: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =0 [line 31]\n " shape="box"] + "test31" -> "test39" ; +"test59" [label="9: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 28]\n *&return:int =n$2 [line 28]\n " shape="box"] - 56 -> 52 ; -55 [label="55: ConditinalStmt Branch \n n$2=*&p:int * [line 31]\n n$3=*n$2:int [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$3 [line 31]\n " shape="box"] + "test59" -> "test52" ; +"test58" [label="8: BinaryConditinalStmt Init \n n$0=*&b:int [line 28]\n " shape="box"] - 55 -> 52 ; -54 [label="54: Prune (false branch) \n PRUNE((1 == 0), false); [line 31]\n " shape="invhouse"] + "test58" -> "test54" ; + "test58" -> "test55" ; +"test57" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 28]\n " shape="box"] - 54 -> 56 ; -53 [label="53: Prune (true branch) \n PRUNE((1 != 0), true); [line 31]\n " shape="invhouse"] + "test57" -> "test53" ; +"test56" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$0 [line 28]\n " shape="box"] - 53 -> 55 ; -52 [label="52: + \n " ] + "test56" -> "test53" ; +"test55" [label="5: Prune (false branch) \n PRUNE((n$0 == 0), false); [line 28]\n " shape="invhouse"] - 52 -> 57 ; -51 [label="51: Return Stmt \n n$0=*&z:int [line 32]\n *&return:int =n$0 [line 32]\n " shape="box"] + "test55" -> "test57" ; +"test54" [label="4: Prune (true branch) \n PRUNE((n$0 != 0), true); [line 28]\n " shape="invhouse"] - 51 -> 50 ; -50 [label="50: Exit test6 \n " color=yellow style=filled] + "test54" -> "test56" ; +"test53" [label="3: + \n " ] -49 [label="49: Start test6\nFormals: p:int *\nLocals: z:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&z,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 30]\n " color=yellow style=filled] + "test53" -> "test59" ; +"test52" [label="2: Exit test5 \n " color=yellow style=filled] - 49 -> 53 ; - 49 -> 54 ; -48 [label="48: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 28]\n *&return:int =n$2 [line 28]\n " shape="box"] +"test51" [label="1: Start test5\nFormals: b:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 28]\n " color=yellow style=filled] - 48 -> 41 ; -47 [label="47: BinaryConditinalStmt Init \n n$0=*&b:int [line 28]\n " shape="box"] + "test51" -> "test58" ; +"test49" [label="9: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 26]\n n$3=_fun_test2(n$2:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] - 47 -> 43 ; - 47 -> 44 ; -46 [label="46: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 28]\n " shape="box"] + "test49" -> "test42" ; +"test48" [label="8: BinaryConditinalStmt Init \n n$0=*&b:int [line 26]\n " shape="box"] - 46 -> 42 ; -45 [label="45: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$0 [line 28]\n " shape="box"] + "test48" -> "test44" ; + "test48" -> "test45" ; +"test47" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 26]\n " shape="box"] - 45 -> 42 ; -44 [label="44: Prune (false branch) \n PRUNE((n$0 == 0), false); [line 28]\n " shape="invhouse"] + "test47" -> "test43" ; +"test46" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$0 [line 26]\n " shape="box"] - 44 -> 46 ; -43 [label="43: Prune (true branch) \n PRUNE((n$0 != 0), true); [line 28]\n " shape="invhouse"] + "test46" -> "test43" ; +"test45" [label="5: Prune (false branch) \n PRUNE((n$0 == 0), false); [line 26]\n " shape="invhouse"] - 43 -> 45 ; -42 [label="42: + \n " ] + "test45" -> "test47" ; +"test44" [label="4: Prune (true branch) \n PRUNE((n$0 != 0), true); [line 26]\n " shape="invhouse"] - 42 -> 48 ; -41 [label="41: Exit test5 \n " color=yellow style=filled] + "test44" -> "test46" ; +"test43" [label="3: + \n " ] -40 [label="40: Start test5\nFormals: b:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 28]\n " color=yellow style=filled] + "test43" -> "test49" ; +"test42" [label="2: Exit test4 \n " color=yellow style=filled] - 40 -> 47 ; -39 [label="39: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 26]\n n$3=_fun_test2(n$2:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] +"test41" [label="1: Start test4\nFormals: b:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 26]\n " color=yellow style=filled] - 39 -> 32 ; -38 [label="38: BinaryConditinalStmt Init \n n$0=*&b:int [line 26]\n " shape="box"] + "test41" -> "test48" ; +"test23" [label="3: Return Stmt \n n$0=*&x:int [line 12]\n *&return:int =n$0 [line 12]\n " shape="box"] - 38 -> 34 ; - 38 -> 35 ; -37 [label="37: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 26]\n " shape="box"] + "test23" -> "test22" ; +"test22" [label="2: Exit test2 \n " color=yellow style=filled] - 37 -> 33 ; -36 [label="36: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$0 [line 26]\n " shape="box"] +"test21" [label="1: Start test2\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 36 -> 33 ; -35 [label="35: Prune (false branch) \n PRUNE((n$0 == 0), false); [line 26]\n " shape="invhouse"] + "test21" -> "test23" ; +"test19" [label="9: DeclStmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 17]\n *&x:int =n$4 [line 17]\n " shape="box"] - 35 -> 37 ; -34 [label="34: Prune (true branch) \n PRUNE((n$0 != 0), true); [line 26]\n " shape="invhouse"] + "test19" -> "test13" ; +"test18" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 17]\n " shape="box"] - 34 -> 36 ; -33 [label="33: + \n " ] + "test18" -> "test14" ; +"test17" [label="7: ConditinalStmt Branch \n n$3=*&b:int [line 17]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$3 [line 17]\n " shape="box"] - 33 -> 39 ; -32 [label="32: Exit test4 \n " color=yellow style=filled] + "test17" -> "test14" ; +"test16" [label="6: Prune (false branch) \n n$2=*&b:int [line 17]\n PRUNE((n$2 == 0), false); [line 17]\n " shape="invhouse"] -31 [label="31: Start test4\nFormals: b:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 26]\n " color=yellow style=filled] + "test16" -> "test18" ; +"test15" [label="5: Prune (true branch) \n n$2=*&b:int [line 17]\n PRUNE((n$2 != 0), true); [line 17]\n " shape="invhouse"] - 31 -> 38 ; -30 [label="30: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 22]\n *&x:int =n$3 [line 22]\n " shape="box"] + "test15" -> "test17" ; +"test14" [label="4: + \n " ] - 30 -> 23 ; -29 [label="29: BinaryConditinalStmt Init \n n$1=*&b:int [line 22]\n " shape="box"] + "test14" -> "test19" ; +"test13" [label="3: Return Stmt \n n$0=*&x:int [line 18]\n *&return:int =n$0 [line 18]\n " shape="box"] - 29 -> 25 ; - 29 -> 26 ; -28 [label="28: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 22]\n " shape="box"] + "test13" -> "test12" ; +"test12" [label="2: Exit test1 \n " color=yellow style=filled] - 28 -> 24 ; -27 [label="27: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =n$1 [line 22]\n " shape="box"] +"test11" [label="1: Start test1\nFormals: b:int \nLocals: x:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 16]\n " color=yellow style=filled] - 27 -> 24 ; -26 [label="26: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 22]\n " shape="invhouse"] + "test11" -> "test15" ; + "test11" -> "test16" ; +"test79" [label="9: Return Stmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 35]\n *&return:int =n$3 [line 35]\n " shape="box"] - 26 -> 28 ; -25 [label="25: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 22]\n " shape="invhouse"] + "test79" -> "test72" ; +"test78" [label="8: BinaryConditinalStmt Init \n n$0=_fun_test2(2:int ) [line 35]\n n$1=_fun_test2((2 + n$0):int ) [line 35]\n " shape="box"] - 25 -> 27 ; -24 [label="24: + \n " ] + "test78" -> "test74" ; + "test78" -> "test75" ; +"test77" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =2 [line 35]\n " shape="box"] - 24 -> 30 ; -23 [label="23: Return Stmt \n n$0=*&x:int [line 23]\n *&return:int =n$0 [line 23]\n " shape="box"] + "test77" -> "test73" ; +"test76" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =n$1 [line 35]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Exit test3 \n " color=yellow style=filled] + "test76" -> "test73" ; +"test75" [label="5: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 35]\n " shape="invhouse"] -21 [label="21: Start test3\nFormals: b:int \nLocals: x:int 0$?%__sil_tmpSIL_temp_conditional___n$2:int \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_temp_conditional___n$2); [line 21]\n " color=yellow style=filled] + "test75" -> "test77" ; +"test74" [label="4: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 35]\n " shape="invhouse"] - 21 -> 29 ; -20 [label="20: DeclStmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 17]\n *&x:int =n$4 [line 17]\n " shape="box"] + "test74" -> "test76" ; +"test73" [label="3: + \n " ] - 20 -> 14 ; -19 [label="19: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 17]\n " shape="box"] + "test73" -> "test79" ; +"test72" [label="2: Exit test7 \n " color=yellow style=filled] - 19 -> 15 ; -18 [label="18: ConditinalStmt Branch \n n$3=*&b:int [line 17]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$3 [line 17]\n " shape="box"] +"test71" [label="1: Start test7\nFormals: b:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2); [line 35]\n " color=yellow style=filled] - 18 -> 15 ; -17 [label="17: Prune (false branch) \n n$2=*&b:int [line 17]\n PRUNE((n$2 == 0), false); [line 17]\n " shape="invhouse"] + "test71" -> "test78" ; +"test69" [label="9: DeclStmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 31]\n *&z:int =n$4 [line 31]\n " shape="box"] - 17 -> 19 ; -16 [label="16: Prune (true branch) \n n$2=*&b:int [line 17]\n PRUNE((n$2 != 0), true); [line 17]\n " shape="invhouse"] + "test69" -> "test63" ; +"test68" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =0 [line 31]\n " shape="box"] - 16 -> 18 ; -15 [label="15: + \n " ] + "test68" -> "test64" ; +"test67" [label="7: ConditinalStmt Branch \n n$2=*&p:int * [line 31]\n n$3=*n$2:int [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$3 [line 31]\n " shape="box"] - 15 -> 20 ; -14 [label="14: Return Stmt \n n$0=*&x:int [line 18]\n *&return:int =n$0 [line 18]\n " shape="box"] + "test67" -> "test64" ; +"test66" [label="6: Prune (false branch) \n PRUNE((1 == 0), false); [line 31]\n " shape="invhouse"] - 14 -> 13 ; -13 [label="13: Exit test1 \n " color=yellow style=filled] + "test66" -> "test68" ; +"test65" [label="5: Prune (true branch) \n PRUNE((1 != 0), true); [line 31]\n " shape="invhouse"] -12 [label="12: Start test1\nFormals: b:int \nLocals: x:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 16]\n " color=yellow style=filled] + "test65" -> "test67" ; +"test64" [label="4: + \n " ] - 12 -> 16 ; - 12 -> 17 ; -11 [label="11: Return Stmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 14]\n n$4=_fun_test2(n$3:int ) [line 14]\n *&return:int =n$4 [line 14]\n " shape="box"] + "test64" -> "test69" ; +"test63" [label="3: Return Stmt \n n$0=*&z:int [line 32]\n *&return:int =n$0 [line 32]\n " shape="box"] - 11 -> 5 ; -10 [label="10: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 14]\n " shape="box"] + "test63" -> "test62" ; +"test62" [label="2: Exit test6 \n " color=yellow style=filled] - 10 -> 6 ; -9 [label="9: ConditinalStmt Branch \n n$2=*&b:int [line 14]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$2 [line 14]\n " shape="box"] +"test61" [label="1: Start test6\nFormals: p:int *\nLocals: z:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&z,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 30]\n " color=yellow style=filled] - 9 -> 6 ; -8 [label="8: Prune (false branch) \n n$1=*&b:int [line 14]\n PRUNE((n$1 == 0), false); [line 14]\n " shape="invhouse"] + "test61" -> "test65" ; + "test61" -> "test66" ; +"test8" [label="8: Return Stmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 14]\n n$4=_fun_test2(n$3:int ) [line 14]\n *&return:int =n$4 [line 14]\n " shape="box"] - 8 -> 10 ; -7 [label="7: Prune (true branch) \n n$1=*&b:int [line 14]\n PRUNE((n$1 != 0), true); [line 14]\n " shape="invhouse"] + "test8" -> "test2" ; +"test7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 14]\n " shape="box"] - 7 -> 9 ; -6 [label="6: + \n " ] + "test7" -> "test3" ; +"test6" [label="6: ConditinalStmt Branch \n n$2=*&b:int [line 14]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$2 [line 14]\n " shape="box"] - 6 -> 11 ; -5 [label="5: Exit test \n " color=yellow style=filled] + "test6" -> "test3" ; +"test5" [label="5: Prune (false branch) \n n$1=*&b:int [line 14]\n PRUNE((n$1 == 0), false); [line 14]\n " shape="invhouse"] -4 [label="4: Start test\nFormals: b:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 14]\n " color=yellow style=filled] + "test5" -> "test7" ; +"test4" [label="4: Prune (true branch) \n n$1=*&b:int [line 14]\n PRUNE((n$1 != 0), true); [line 14]\n " shape="invhouse"] - 4 -> 7 ; - 4 -> 8 ; -3 [label="3: Return Stmt \n n$0=*&x:int [line 12]\n *&return:int =n$0 [line 12]\n " shape="box"] + "test4" -> "test6" ; +"test3" [label="3: + \n " ] - 3 -> 2 ; -2 [label="2: Exit test2 \n " color=yellow style=filled] + "test3" -> "test8" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start test2\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: b:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 14]\n " color=yellow style=filled] - 1 -> 3 ; + "test1" -> "test4" ; + "test1" -> "test5" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/function_call.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/function_call.c.dot index 280151193..89e02714d 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/function_call.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/function_call.c.dot @@ -1,278 +1,278 @@ /* @generated */ digraph iCFG { -67 [label="67: Call n$1 \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) [line 20]\n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 20]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 20]\n n$1(n$3:int ,2:int ,n$5:int ) [line 20]\n " shape="box"] +"fun_ifthenelse223" [label="23: Call n$1 \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) [line 15]\n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 15]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 15]\n n$7=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 15]\n n$1(n$3:int ,n$5:int ,n$7:int ) [line 15]\n " shape="box"] - 67 -> 51 ; -66 [label="66: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 20]\n " shape="box"] + "fun_ifthenelse223" -> "fun_ifthenelse22" ; +"fun_ifthenelse222" [label="22: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =3 [line 15]\n " shape="box"] - 66 -> 62 ; -65 [label="65: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 20]\n " shape="box"] + "fun_ifthenelse222" -> "fun_ifthenelse218" ; +"fun_ifthenelse221" [label="21: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =3 [line 15]\n " shape="box"] - 65 -> 62 ; -64 [label="64: Prune (false branch) \n PRUNE((0 == 0), false); [line 20]\n " shape="invhouse"] + "fun_ifthenelse221" -> "fun_ifthenelse218" ; +"fun_ifthenelse220" [label="20: Prune (false branch) \n PRUNE((0 == 0), false); [line 15]\n " shape="invhouse"] - 64 -> 66 ; -63 [label="63: Prune (true branch) \n PRUNE((0 != 0), true); [line 20]\n " shape="invhouse"] + "fun_ifthenelse220" -> "fun_ifthenelse222" ; +"fun_ifthenelse219" [label="19: Prune (true branch) \n PRUNE((0 != 0), true); [line 15]\n " shape="invhouse"] - 63 -> 65 ; -62 [label="62: + \n " ] + "fun_ifthenelse219" -> "fun_ifthenelse221" ; +"fun_ifthenelse218" [label="18: + \n " ] - 62 -> 67 ; -61 [label="61: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 20]\n " shape="box"] + "fun_ifthenelse218" -> "fun_ifthenelse223" ; +"fun_ifthenelse217" [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =2 [line 15]\n " shape="box"] - 61 -> 57 ; -60 [label="60: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 20]\n " shape="box"] + "fun_ifthenelse217" -> "fun_ifthenelse213" ; +"fun_ifthenelse216" [label="16: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =2 [line 15]\n " shape="box"] - 60 -> 57 ; -59 [label="59: Prune (false branch) \n PRUNE((0 == 0), false); [line 20]\n " shape="invhouse"] + "fun_ifthenelse216" -> "fun_ifthenelse213" ; +"fun_ifthenelse215" [label="15: Prune (false branch) \n PRUNE((0 == 0), false); [line 15]\n " shape="invhouse"] - 59 -> 61 ; -58 [label="58: Prune (true branch) \n PRUNE((0 != 0), true); [line 20]\n " shape="invhouse"] + "fun_ifthenelse215" -> "fun_ifthenelse217" ; +"fun_ifthenelse214" [label="14: Prune (true branch) \n PRUNE((0 != 0), true); [line 15]\n " shape="invhouse"] - 58 -> 60 ; -57 [label="57: + \n " ] + "fun_ifthenelse214" -> "fun_ifthenelse216" ; +"fun_ifthenelse213" [label="13: + \n " ] - 57 -> 63 ; - 57 -> 64 ; -56 [label="56: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 20]\n " shape="box"] + "fun_ifthenelse213" -> "fun_ifthenelse219" ; + "fun_ifthenelse213" -> "fun_ifthenelse220" ; +"fun_ifthenelse212" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 15]\n " shape="box"] - 56 -> 52 ; -55 [label="55: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 20]\n " shape="box"] + "fun_ifthenelse212" -> "fun_ifthenelse28" ; +"fun_ifthenelse211" [label="11: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 15]\n " shape="box"] - 55 -> 52 ; -54 [label="54: Prune (false branch) \n PRUNE((1 == 0), false); [line 20]\n " shape="invhouse"] + "fun_ifthenelse211" -> "fun_ifthenelse28" ; +"fun_ifthenelse210" [label="10: Prune (false branch) \n PRUNE((0 == 0), false); [line 15]\n " shape="invhouse"] - 54 -> 56 ; -53 [label="53: Prune (true branch) \n PRUNE((1 != 0), true); [line 20]\n " shape="invhouse"] + "fun_ifthenelse210" -> "fun_ifthenelse212" ; +"fun_ifthenelse29" [label="9: Prune (true branch) \n PRUNE((0 != 0), true); [line 15]\n " shape="invhouse"] - 53 -> 55 ; -52 [label="52: + \n " ] + "fun_ifthenelse29" -> "fun_ifthenelse211" ; +"fun_ifthenelse28" [label="8: + \n " ] - 52 -> 58 ; - 52 -> 59 ; -51 [label="51: Exit fun_ifthenelse4 \n " color=yellow style=filled] + "fun_ifthenelse28" -> "fun_ifthenelse214" ; + "fun_ifthenelse28" -> "fun_ifthenelse215" ; +"fun_ifthenelse27" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 15]\n " shape="box"] -50 [label="50: Start fun_ifthenelse4\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$4); [line 20]\n " color=yellow style=filled] + "fun_ifthenelse27" -> "fun_ifthenelse23" ; +"fun_ifthenelse26" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 15]\n " shape="box"] - 50 -> 53 ; - 50 -> 54 ; -49 [label="49: Call _fun_some_f \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 18]\n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 18]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 18]\n _fun_some_f(n$1:int ,n$3:int ,n$5:int ) [line 18]\n " shape="box"] + "fun_ifthenelse26" -> "fun_ifthenelse23" ; +"fun_ifthenelse25" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 15]\n " shape="invhouse"] - 49 -> 33 ; -48 [label="48: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 18]\n " shape="box"] + "fun_ifthenelse25" -> "fun_ifthenelse27" ; +"fun_ifthenelse24" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 15]\n " shape="invhouse"] - 48 -> 44 ; -47 [label="47: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 18]\n " shape="box"] + "fun_ifthenelse24" -> "fun_ifthenelse26" ; +"fun_ifthenelse23" [label="3: + \n " ] - 47 -> 44 ; -46 [label="46: Prune (false branch) \n PRUNE((0 == 0), false); [line 18]\n " shape="invhouse"] + "fun_ifthenelse23" -> "fun_ifthenelse29" ; + "fun_ifthenelse23" -> "fun_ifthenelse210" ; +"fun_ifthenelse22" [label="2: Exit fun_ifthenelse2 \n " color=yellow style=filled] - 46 -> 48 ; -45 [label="45: Prune (true branch) \n PRUNE((0 != 0), true); [line 18]\n " shape="invhouse"] +"fun_ifthenelse21" [label="1: Start fun_ifthenelse2\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int 0$?%__sil_tmpSIL_temp_conditional___n$6:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$4,&0$?%__sil_tmpSIL_temp_conditional___n$6); [line 14]\n " color=yellow style=filled] - 45 -> 47 ; -44 [label="44: + \n " ] + "fun_ifthenelse21" -> "fun_ifthenelse24" ; + "fun_ifthenelse21" -> "fun_ifthenelse25" ; +"fun_ifthenelse418" [label="18: Call n$1 \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) [line 20]\n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 20]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 20]\n n$1(n$3:int ,2:int ,n$5:int ) [line 20]\n " shape="box"] - 44 -> 49 ; -43 [label="43: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =2 [line 18]\n " shape="box"] + "fun_ifthenelse418" -> "fun_ifthenelse42" ; +"fun_ifthenelse417" [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 20]\n " shape="box"] - 43 -> 39 ; -42 [label="42: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =2 [line 18]\n " shape="box"] + "fun_ifthenelse417" -> "fun_ifthenelse413" ; +"fun_ifthenelse416" [label="16: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 20]\n " shape="box"] - 42 -> 39 ; -41 [label="41: Prune (false branch) \n PRUNE((0 == 0), false); [line 18]\n " shape="invhouse"] + "fun_ifthenelse416" -> "fun_ifthenelse413" ; +"fun_ifthenelse415" [label="15: Prune (false branch) \n PRUNE((0 == 0), false); [line 20]\n " shape="invhouse"] - 41 -> 43 ; -40 [label="40: Prune (true branch) \n PRUNE((0 != 0), true); [line 18]\n " shape="invhouse"] + "fun_ifthenelse415" -> "fun_ifthenelse417" ; +"fun_ifthenelse414" [label="14: Prune (true branch) \n PRUNE((0 != 0), true); [line 20]\n " shape="invhouse"] - 40 -> 42 ; -39 [label="39: + \n " ] + "fun_ifthenelse414" -> "fun_ifthenelse416" ; +"fun_ifthenelse413" [label="13: + \n " ] - 39 -> 45 ; - 39 -> 46 ; -38 [label="38: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 18]\n " shape="box"] + "fun_ifthenelse413" -> "fun_ifthenelse418" ; +"fun_ifthenelse412" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 20]\n " shape="box"] - 38 -> 34 ; -37 [label="37: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 18]\n " shape="box"] + "fun_ifthenelse412" -> "fun_ifthenelse48" ; +"fun_ifthenelse411" [label="11: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 20]\n " shape="box"] - 37 -> 34 ; -36 [label="36: Prune (false branch) \n PRUNE((0 == 0), false); [line 18]\n " shape="invhouse"] + "fun_ifthenelse411" -> "fun_ifthenelse48" ; +"fun_ifthenelse410" [label="10: Prune (false branch) \n PRUNE((0 == 0), false); [line 20]\n " shape="invhouse"] - 36 -> 38 ; -35 [label="35: Prune (true branch) \n PRUNE((0 != 0), true); [line 18]\n " shape="invhouse"] + "fun_ifthenelse410" -> "fun_ifthenelse412" ; +"fun_ifthenelse49" [label="9: Prune (true branch) \n PRUNE((0 != 0), true); [line 20]\n " shape="invhouse"] - 35 -> 37 ; -34 [label="34: + \n " ] + "fun_ifthenelse49" -> "fun_ifthenelse411" ; +"fun_ifthenelse48" [label="8: + \n " ] - 34 -> 40 ; - 34 -> 41 ; -33 [label="33: Exit fun_ifthenelse3 \n " color=yellow style=filled] + "fun_ifthenelse48" -> "fun_ifthenelse414" ; + "fun_ifthenelse48" -> "fun_ifthenelse415" ; +"fun_ifthenelse47" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 20]\n " shape="box"] -32 [label="32: Start fun_ifthenelse3\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$4); [line 18]\n " color=yellow style=filled] + "fun_ifthenelse47" -> "fun_ifthenelse43" ; +"fun_ifthenelse46" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 20]\n " shape="box"] - 32 -> 35 ; - 32 -> 36 ; -31 [label="31: Call n$1 \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) [line 15]\n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 15]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 15]\n n$7=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 15]\n n$1(n$3:int ,n$5:int ,n$7:int ) [line 15]\n " shape="box"] + "fun_ifthenelse46" -> "fun_ifthenelse43" ; +"fun_ifthenelse45" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 20]\n " shape="invhouse"] - 31 -> 10 ; -30 [label="30: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =3 [line 15]\n " shape="box"] + "fun_ifthenelse45" -> "fun_ifthenelse47" ; +"fun_ifthenelse44" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 20]\n " shape="invhouse"] - 30 -> 26 ; -29 [label="29: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =3 [line 15]\n " shape="box"] + "fun_ifthenelse44" -> "fun_ifthenelse46" ; +"fun_ifthenelse43" [label="3: + \n " ] - 29 -> 26 ; -28 [label="28: Prune (false branch) \n PRUNE((0 == 0), false); [line 15]\n " shape="invhouse"] + "fun_ifthenelse43" -> "fun_ifthenelse49" ; + "fun_ifthenelse43" -> "fun_ifthenelse410" ; +"fun_ifthenelse42" [label="2: Exit fun_ifthenelse4 \n " color=yellow style=filled] - 28 -> 30 ; -27 [label="27: Prune (true branch) \n PRUNE((0 != 0), true); [line 15]\n " shape="invhouse"] +"fun_ifthenelse41" [label="1: Start fun_ifthenelse4\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$4); [line 20]\n " color=yellow style=filled] - 27 -> 29 ; -26 [label="26: + \n " ] + "fun_ifthenelse41" -> "fun_ifthenelse44" ; + "fun_ifthenelse41" -> "fun_ifthenelse45" ; +"fun_ifthenelse318" [label="18: Call _fun_some_f \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 18]\n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 18]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 18]\n _fun_some_f(n$1:int ,n$3:int ,n$5:int ) [line 18]\n " shape="box"] - 26 -> 31 ; -25 [label="25: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =2 [line 15]\n " shape="box"] + "fun_ifthenelse318" -> "fun_ifthenelse32" ; +"fun_ifthenelse317" [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 18]\n " shape="box"] - 25 -> 21 ; -24 [label="24: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =2 [line 15]\n " shape="box"] + "fun_ifthenelse317" -> "fun_ifthenelse313" ; +"fun_ifthenelse316" [label="16: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 18]\n " shape="box"] - 24 -> 21 ; -23 [label="23: Prune (false branch) \n PRUNE((0 == 0), false); [line 15]\n " shape="invhouse"] + "fun_ifthenelse316" -> "fun_ifthenelse313" ; +"fun_ifthenelse315" [label="15: Prune (false branch) \n PRUNE((0 == 0), false); [line 18]\n " shape="invhouse"] - 23 -> 25 ; -22 [label="22: Prune (true branch) \n PRUNE((0 != 0), true); [line 15]\n " shape="invhouse"] + "fun_ifthenelse315" -> "fun_ifthenelse317" ; +"fun_ifthenelse314" [label="14: Prune (true branch) \n PRUNE((0 != 0), true); [line 18]\n " shape="invhouse"] - 22 -> 24 ; -21 [label="21: + \n " ] + "fun_ifthenelse314" -> "fun_ifthenelse316" ; +"fun_ifthenelse313" [label="13: + \n " ] - 21 -> 27 ; - 21 -> 28 ; -20 [label="20: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 15]\n " shape="box"] + "fun_ifthenelse313" -> "fun_ifthenelse318" ; +"fun_ifthenelse312" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =2 [line 18]\n " shape="box"] - 20 -> 16 ; -19 [label="19: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 15]\n " shape="box"] + "fun_ifthenelse312" -> "fun_ifthenelse38" ; +"fun_ifthenelse311" [label="11: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =2 [line 18]\n " shape="box"] - 19 -> 16 ; -18 [label="18: Prune (false branch) \n PRUNE((0 == 0), false); [line 15]\n " shape="invhouse"] + "fun_ifthenelse311" -> "fun_ifthenelse38" ; +"fun_ifthenelse310" [label="10: Prune (false branch) \n PRUNE((0 == 0), false); [line 18]\n " shape="invhouse"] - 18 -> 20 ; -17 [label="17: Prune (true branch) \n PRUNE((0 != 0), true); [line 15]\n " shape="invhouse"] + "fun_ifthenelse310" -> "fun_ifthenelse312" ; +"fun_ifthenelse39" [label="9: Prune (true branch) \n PRUNE((0 != 0), true); [line 18]\n " shape="invhouse"] - 17 -> 19 ; -16 [label="16: + \n " ] + "fun_ifthenelse39" -> "fun_ifthenelse311" ; +"fun_ifthenelse38" [label="8: + \n " ] - 16 -> 22 ; - 16 -> 23 ; -15 [label="15: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 15]\n " shape="box"] + "fun_ifthenelse38" -> "fun_ifthenelse314" ; + "fun_ifthenelse38" -> "fun_ifthenelse315" ; +"fun_ifthenelse37" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 18]\n " shape="box"] - 15 -> 11 ; -14 [label="14: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 15]\n " shape="box"] + "fun_ifthenelse37" -> "fun_ifthenelse33" ; +"fun_ifthenelse36" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 18]\n " shape="box"] - 14 -> 11 ; -13 [label="13: Prune (false branch) \n PRUNE((1 == 0), false); [line 15]\n " shape="invhouse"] + "fun_ifthenelse36" -> "fun_ifthenelse33" ; +"fun_ifthenelse35" [label="5: Prune (false branch) \n PRUNE((0 == 0), false); [line 18]\n " shape="invhouse"] - 13 -> 15 ; -12 [label="12: Prune (true branch) \n PRUNE((1 != 0), true); [line 15]\n " shape="invhouse"] + "fun_ifthenelse35" -> "fun_ifthenelse37" ; +"fun_ifthenelse34" [label="4: Prune (true branch) \n PRUNE((0 != 0), true); [line 18]\n " shape="invhouse"] - 12 -> 14 ; -11 [label="11: + \n " ] + "fun_ifthenelse34" -> "fun_ifthenelse36" ; +"fun_ifthenelse33" [label="3: + \n " ] - 11 -> 17 ; - 11 -> 18 ; -10 [label="10: Exit fun_ifthenelse2 \n " color=yellow style=filled] + "fun_ifthenelse33" -> "fun_ifthenelse39" ; + "fun_ifthenelse33" -> "fun_ifthenelse310" ; +"fun_ifthenelse32" [label="2: Exit fun_ifthenelse3 \n " color=yellow style=filled] -9 [label="9: Start fun_ifthenelse2\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int 0$?%__sil_tmpSIL_temp_conditional___n$6:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$4,&0$?%__sil_tmpSIL_temp_conditional___n$6); [line 14]\n " color=yellow style=filled] +"fun_ifthenelse31" [label="1: Start fun_ifthenelse3\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$4); [line 18]\n " color=yellow style=filled] - 9 -> 12 ; - 9 -> 13 ; -8 [label="8: Call n$1 \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) [line 12]\n n$1(1:int ,2:int ,3:int ) [line 12]\n " shape="box"] + "fun_ifthenelse31" -> "fun_ifthenelse34" ; + "fun_ifthenelse31" -> "fun_ifthenelse35" ; +"fun_ifthenelse18" [label="8: Call n$1 \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) [line 12]\n n$1(1:int ,2:int ,3:int ) [line 12]\n " shape="box"] - 8 -> 2 ; -7 [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 12]\n " shape="box"] + "fun_ifthenelse18" -> "fun_ifthenelse12" ; +"fun_ifthenelse17" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 12]\n " shape="box"] - 7 -> 3 ; -6 [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 12]\n " shape="box"] + "fun_ifthenelse17" -> "fun_ifthenelse13" ; +"fun_ifthenelse16" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*)=_fun_some_f [line 12]\n " shape="box"] - 6 -> 3 ; -5 [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] + "fun_ifthenelse16" -> "fun_ifthenelse13" ; +"fun_ifthenelse15" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] + "fun_ifthenelse15" -> "fun_ifthenelse17" ; +"fun_ifthenelse14" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] - 4 -> 6 ; -3 [label="3: + \n " ] + "fun_ifthenelse14" -> "fun_ifthenelse16" ; +"fun_ifthenelse13" [label="3: + \n " ] - 3 -> 8 ; -2 [label="2: Exit fun_ifthenelse1 \n " color=yellow style=filled] + "fun_ifthenelse13" -> "fun_ifthenelse18" ; +"fun_ifthenelse12" [label="2: Exit fun_ifthenelse1 \n " color=yellow style=filled] -1 [label="1: Start fun_ifthenelse1\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 12]\n " color=yellow style=filled] +"fun_ifthenelse11" [label="1: Start fun_ifthenelse1\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:_fn_ (*) \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 12]\n " color=yellow style=filled] - 1 -> 4 ; - 1 -> 5 ; + "fun_ifthenelse11" -> "fun_ifthenelse14" ; + "fun_ifthenelse11" -> "fun_ifthenelse15" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/if_short_circuit.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/if_short_circuit.c.dot index 9177362c1..8a4b64a24 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/if_short_circuit.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/if_short_circuit.c.dot @@ -1,398 +1,398 @@ /* @generated */ digraph iCFG { -95 [label="95: BinaryOperatorStmt: Assign \n n$13=_fun_getenv(\"BLOCK\":char *) [line 47]\n *&spec:char *=n$13 [line 47]\n " shape="box"] +"shortcircuit_or12" [label="12: BinaryOperatorStmt: Assign \n *&x:int *=32 [line 17]\n " shape="box"] - 95 -> 67 ; - 95 -> 68 ; -94 [label="94: BinaryOperatorStmt: Assign \n *&block_size:char *=0 [line 53]\n " shape="box"] + "shortcircuit_or12" -> "shortcircuit_or3" ; +"shortcircuit_or11" [label="11: BinaryOperatorStmt: Assign \n *&x:int *=17 [line 15]\n " shape="box"] - 94 -> 90 ; -93 [label="93: Prune (false branch) \n PRUNE(((n$12 == 39) == 0), false); [line 52]\n " shape="invhouse"] + "shortcircuit_or11" -> "shortcircuit_or3" ; +"shortcircuit_or10" [label="10: Prune (false branch) \n PRUNE(((n$2 == 2) == 0), false); [line 14]\n " shape="invhouse"] - 93 -> 90 ; -92 [label="92: Prune (true branch) \n PRUNE(((n$12 == 39) != 0), true); [line 52]\n " shape="invhouse"] + "shortcircuit_or10" -> "shortcircuit_or12" ; +"shortcircuit_or9" [label="9: Prune (true branch) \n PRUNE(((n$2 == 2) != 0), true); [line 14]\n " shape="invhouse"] - 92 -> 94 ; -91 [label="91: BinaryOperatorStmt: EQ \n n$11=*&spec:char * [line 52]\n n$12=*n$11:char [line 52]\n " shape="box"] + "shortcircuit_or9" -> "shortcircuit_or11" ; +"shortcircuit_or8" [label="8: BinaryOperatorStmt: EQ \n n$1=*&x:int * [line 14]\n n$2=*n$1:int [line 14]\n " shape="box"] - 91 -> 92 ; - 91 -> 93 ; -90 [label="90: + \n " ] + "shortcircuit_or8" -> "shortcircuit_or9" ; + "shortcircuit_or8" -> "shortcircuit_or10" ; +"shortcircuit_or7" [label="7: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 14]\n " shape="invhouse"] - 90 -> 65 ; -89 [label="89: BinaryOperatorStmt: Assign \n *&block_size:char *=0 [line 50]\n " shape="box"] + "shortcircuit_or7" -> "shortcircuit_or8" ; +"shortcircuit_or6" [label="6: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 14]\n " shape="invhouse"] - 89 -> 65 ; -88 [label="88: Prune (false branch) \n n$10=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 49]\n PRUNE((n$10 == 0), false); [line 49]\n " shape="invhouse"] + "shortcircuit_or6" -> "shortcircuit_or11" ; +"shortcircuit_or5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&x:int * [line 14]\n " shape="box"] - 88 -> 91 ; -87 [label="87: Prune (true branch) \n n$10=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 49]\n PRUNE((n$10 != 0), true); [line 49]\n " shape="invhouse"] + "shortcircuit_or5" -> "shortcircuit_or6" ; + "shortcircuit_or5" -> "shortcircuit_or7" ; +"shortcircuit_or4" [label="4: between_join_and_exit \n " shape="box"] - 87 -> 89 ; -86 [label="86: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =1 [line 49]\n " shape="box"] + "shortcircuit_or4" -> "shortcircuit_or2" ; +"shortcircuit_or3" [label="3: + \n " ] - 86 -> 81 ; -85 [label="85: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =0 [line 49]\n " shape="box"] + "shortcircuit_or3" -> "shortcircuit_or4" ; +"shortcircuit_or2" [label="2: Exit shortcircuit_or \n " color=yellow style=filled] - 85 -> 81 ; -84 [label="84: Prune (false branch) \n PRUNE((n$9 == 0), false); [line 49]\n " shape="invhouse"] +"shortcircuit_or1" [label="1: Start shortcircuit_or\nFormals: x:int *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 84 -> 86 ; -83 [label="83: Prune (true branch) \n PRUNE((n$9 != 0), true); [line 49]\n " shape="invhouse"] + "shortcircuit_or1" -> "shortcircuit_or5" ; +"shortcircuit_and21" [label="21: BinaryOperatorStmt: Assign \n n$7=*&x:int * [line 25]\n *n$7:int =32 [line 25]\n " shape="box"] - 83 -> 85 ; -82 [label="82: BinaryOperatorStmt: Assign \n n$8=_fun_getenv(\"BLOCKSIZE\":char *) [line 49]\n *&spec:char *=n$8 [line 49]\n n$9=*&spec:char * [line 49]\n " shape="box"] + "shortcircuit_and21" -> "shortcircuit_and3" ; +"shortcircuit_and20" [label="20: BinaryOperatorStmt: Assign \n *&x:int *=17 [line 23]\n " shape="box"] - 82 -> 83 ; - 82 -> 84 ; -81 [label="81: + \n " ] + "shortcircuit_and20" -> "shortcircuit_and3" ; +"shortcircuit_and19" [label="19: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 22]\n PRUNE((n$6 == 0), false); [line 22]\n " shape="invhouse"] - 81 -> 87 ; - 81 -> 88 ; -80 [label="80: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 49]\n PRUNE((n$6 == 0), false); [line 49]\n " shape="invhouse"] + "shortcircuit_and19" -> "shortcircuit_and21" ; +"shortcircuit_and18" [label="18: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 22]\n PRUNE((n$6 != 0), true); [line 22]\n " shape="invhouse"] - 80 -> 91 ; -79 [label="79: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 49]\n PRUNE((n$6 != 0), true); [line 49]\n " shape="invhouse"] + "shortcircuit_and18" -> "shortcircuit_and20" ; +"shortcircuit_and17" [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 22]\n " shape="box"] - 79 -> 82 ; -78 [label="78: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 49]\n " shape="box"] + "shortcircuit_and17" -> "shortcircuit_and12" ; +"shortcircuit_and16" [label="16: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 22]\n " shape="box"] - 78 -> 73 ; -77 [label="77: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 49]\n " shape="box"] + "shortcircuit_and16" -> "shortcircuit_and12" ; +"shortcircuit_and15" [label="15: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 22]\n " shape="invhouse"] - 77 -> 73 ; -76 [label="76: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 49]\n " shape="invhouse"] + "shortcircuit_and15" -> "shortcircuit_and17" ; +"shortcircuit_and14" [label="14: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 22]\n " shape="invhouse"] - 76 -> 78 ; -75 [label="75: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 49]\n " shape="invhouse"] + "shortcircuit_and14" -> "shortcircuit_and16" ; +"shortcircuit_and13" [label="13: BinaryOperatorStmt: Assign \n n$4=_fun_getenv(\"BLOCK\":char *) [line 22]\n *&x:int *=n$4 [line 22]\n n$5=*&x:int * [line 22]\n " shape="box"] - 75 -> 77 ; -74 [label="74: BinaryOperatorStmt: Assign \n n$4=_fun_getenv(\"BLOCK_SIZE\":char *) [line 49]\n *&spec:char *=n$4 [line 49]\n n$5=*&spec:char * [line 49]\n " shape="box"] + "shortcircuit_and13" -> "shortcircuit_and14" ; + "shortcircuit_and13" -> "shortcircuit_and15" ; +"shortcircuit_and12" [label="12: + \n " ] - 74 -> 75 ; - 74 -> 76 ; -73 [label="73: + \n " ] + "shortcircuit_and12" -> "shortcircuit_and18" ; + "shortcircuit_and12" -> "shortcircuit_and19" ; +"shortcircuit_and11" [label="11: Prune (false branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 22]\n PRUNE((n$2 == 0), false); [line 22]\n " shape="invhouse"] - 73 -> 79 ; - 73 -> 80 ; -72 [label="72: Prune (false branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 49]\n PRUNE((n$2 == 0), false); [line 49]\n " shape="invhouse"] + "shortcircuit_and11" -> "shortcircuit_and21" ; +"shortcircuit_and10" [label="10: Prune (true branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 22]\n PRUNE((n$2 != 0), true); [line 22]\n " shape="invhouse"] - 72 -> 91 ; -71 [label="71: Prune (true branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 49]\n PRUNE((n$2 != 0), true); [line 49]\n " shape="invhouse"] + "shortcircuit_and10" -> "shortcircuit_and13" ; +"shortcircuit_and9" [label="9: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 22]\n " shape="box"] - 71 -> 74 ; -70 [label="70: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 49]\n " shape="box"] + "shortcircuit_and9" -> "shortcircuit_and5" ; +"shortcircuit_and8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 22]\n " shape="box"] - 70 -> 66 ; -69 [label="69: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 49]\n " shape="box"] + "shortcircuit_and8" -> "shortcircuit_and5" ; +"shortcircuit_and7" [label="7: Prune (false branch) \n n$1=*&x:int * [line 22]\n PRUNE((n$1 == 0), false); [line 22]\n " shape="invhouse"] - 69 -> 66 ; -68 [label="68: Prune (false branch) \n n$1=*&spec:char * [line 49]\n PRUNE((n$1 == 0), false); [line 49]\n " shape="invhouse"] + "shortcircuit_and7" -> "shortcircuit_and9" ; +"shortcircuit_and6" [label="6: Prune (true branch) \n n$1=*&x:int * [line 22]\n PRUNE((n$1 != 0), true); [line 22]\n " shape="invhouse"] - 68 -> 70 ; -67 [label="67: Prune (true branch) \n n$1=*&spec:char * [line 49]\n PRUNE((n$1 != 0), true); [line 49]\n " shape="invhouse"] + "shortcircuit_and6" -> "shortcircuit_and8" ; +"shortcircuit_and5" [label="5: + \n " ] - 67 -> 69 ; -66 [label="66: + \n " ] + "shortcircuit_and5" -> "shortcircuit_and10" ; + "shortcircuit_and5" -> "shortcircuit_and11" ; +"shortcircuit_and4" [label="4: between_join_and_exit \n " shape="box"] - 66 -> 71 ; - 66 -> 72 ; -65 [label="65: + \n " ] + "shortcircuit_and4" -> "shortcircuit_and2" ; +"shortcircuit_and3" [label="3: + \n " ] - 65 -> 64 ; -64 [label="64: Return Stmt \n *&return:int =0 [line 56]\n " shape="box"] + "shortcircuit_and3" -> "shortcircuit_and4" ; +"shortcircuit_and2" [label="2: Exit shortcircuit_and \n " color=yellow style=filled] - 64 -> 63 ; -63 [label="63: Exit main \n " color=yellow style=filled] +"shortcircuit_and1" [label="1: Start shortcircuit_and\nFormals: x:int *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$3); [line 21]\n " color=yellow style=filled] -62 [label="62: Start main\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int 0$?%__sil_tmpSIL_temp_conditional___n$7:int block_size:char * spec:char * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$3,&0$?%__sil_tmpSIL_temp_conditional___n$7,&block_size,&spec); [line 42]\n " color=yellow style=filled] + "shortcircuit_and1" -> "shortcircuit_and6" ; + "shortcircuit_and1" -> "shortcircuit_and7" ; +"test_loop28" [label="28: BinaryOperatorStmt: Assign \n n$11=_fun_getenv(\"BLOCK\":char *) [line 34]\n *&spec:char *=n$11 [line 34]\n " shape="box"] - 62 -> 95 ; -61 [label="61: BinaryOperatorStmt: Assign \n n$11=_fun_getenv(\"BLOCK\":char *) [line 34]\n *&spec:char *=n$11 [line 34]\n " shape="box"] + "test_loop28" -> "test_loop3" ; +"test_loop27" [label="27: BinaryOperatorStmt: Assign \n *&block_size:char *=0 [line 38]\n " shape="box"] - 61 -> 36 ; -60 [label="60: BinaryOperatorStmt: Assign \n *&block_size:char *=0 [line 38]\n " shape="box"] + "test_loop27" -> "test_loop3" ; +"test_loop26" [label="26: Prune (false branch) \n n$10=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 37]\n PRUNE((n$10 == 0), false); [line 37]\n " shape="invhouse"] - 60 -> 36 ; -59 [label="59: Prune (false branch) \n n$10=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 37]\n PRUNE((n$10 == 0), false); [line 37]\n " shape="invhouse"] + "test_loop26" -> "test_loop2" ; +"test_loop25" [label="25: Prune (true branch) \n n$10=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 37]\n PRUNE((n$10 != 0), true); [line 37]\n " shape="invhouse"] - 59 -> 35 ; -58 [label="58: Prune (true branch) \n n$10=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 37]\n PRUNE((n$10 != 0), true); [line 37]\n " shape="invhouse"] + "test_loop25" -> "test_loop27" ; +"test_loop24" [label="24: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =1 [line 37]\n " shape="box"] - 58 -> 60 ; -57 [label="57: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =1 [line 37]\n " shape="box"] + "test_loop24" -> "test_loop19" ; +"test_loop23" [label="23: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =0 [line 37]\n " shape="box"] - 57 -> 52 ; -56 [label="56: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =0 [line 37]\n " shape="box"] + "test_loop23" -> "test_loop19" ; +"test_loop22" [label="22: Prune (false branch) \n PRUNE((n$9 == 0), false); [line 37]\n " shape="invhouse"] - 56 -> 52 ; -55 [label="55: Prune (false branch) \n PRUNE((n$9 == 0), false); [line 37]\n " shape="invhouse"] + "test_loop22" -> "test_loop24" ; +"test_loop21" [label="21: Prune (true branch) \n PRUNE((n$9 != 0), true); [line 37]\n " shape="invhouse"] - 55 -> 57 ; -54 [label="54: Prune (true branch) \n PRUNE((n$9 != 0), true); [line 37]\n " shape="invhouse"] + "test_loop21" -> "test_loop23" ; +"test_loop20" [label="20: BinaryOperatorStmt: Assign \n n$8=_fun_getenv(\"BLOCKSIZE\":char *) [line 37]\n *&spec:char *=n$8 [line 37]\n n$9=*&spec:char * [line 37]\n " shape="box"] - 54 -> 56 ; -53 [label="53: BinaryOperatorStmt: Assign \n n$8=_fun_getenv(\"BLOCKSIZE\":char *) [line 37]\n *&spec:char *=n$8 [line 37]\n n$9=*&spec:char * [line 37]\n " shape="box"] + "test_loop20" -> "test_loop21" ; + "test_loop20" -> "test_loop22" ; +"test_loop19" [label="19: + \n " ] - 53 -> 54 ; - 53 -> 55 ; -52 [label="52: + \n " ] + "test_loop19" -> "test_loop25" ; + "test_loop19" -> "test_loop26" ; +"test_loop18" [label="18: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 36]\n PRUNE((n$6 == 0), false); [line 36]\n " shape="invhouse"] - 52 -> 58 ; - 52 -> 59 ; -51 [label="51: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 36]\n PRUNE((n$6 == 0), false); [line 36]\n " shape="invhouse"] + "test_loop18" -> "test_loop2" ; +"test_loop17" [label="17: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 36]\n PRUNE((n$6 != 0), true); [line 36]\n " shape="invhouse"] - 51 -> 35 ; -50 [label="50: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 36]\n PRUNE((n$6 != 0), true); [line 36]\n " shape="invhouse"] + "test_loop17" -> "test_loop20" ; +"test_loop16" [label="16: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 36]\n " shape="box"] - 50 -> 53 ; -49 [label="49: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 36]\n " shape="box"] + "test_loop16" -> "test_loop11" ; +"test_loop15" [label="15: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 36]\n " shape="box"] - 49 -> 44 ; -48 [label="48: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 36]\n " shape="box"] + "test_loop15" -> "test_loop11" ; +"test_loop14" [label="14: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 36]\n " shape="invhouse"] - 48 -> 44 ; -47 [label="47: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 36]\n " shape="invhouse"] + "test_loop14" -> "test_loop16" ; +"test_loop13" [label="13: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 36]\n " shape="invhouse"] - 47 -> 49 ; -46 [label="46: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 36]\n " shape="invhouse"] + "test_loop13" -> "test_loop15" ; +"test_loop12" [label="12: BinaryOperatorStmt: Assign \n n$4=_fun_getenv(\"BLOCK_SIZE\":char *) [line 36]\n *&spec:char *=n$4 [line 36]\n n$5=*&spec:char * [line 36]\n " shape="box"] - 46 -> 48 ; -45 [label="45: BinaryOperatorStmt: Assign \n n$4=_fun_getenv(\"BLOCK_SIZE\":char *) [line 36]\n *&spec:char *=n$4 [line 36]\n n$5=*&spec:char * [line 36]\n " shape="box"] + "test_loop12" -> "test_loop13" ; + "test_loop12" -> "test_loop14" ; +"test_loop11" [label="11: + \n " ] - 45 -> 46 ; - 45 -> 47 ; -44 [label="44: + \n " ] + "test_loop11" -> "test_loop17" ; + "test_loop11" -> "test_loop18" ; +"test_loop10" [label="10: Prune (false branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 36]\n PRUNE((n$2 == 0), false); [line 36]\n " shape="invhouse"] - 44 -> 50 ; - 44 -> 51 ; -43 [label="43: Prune (false branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 36]\n PRUNE((n$2 == 0), false); [line 36]\n " shape="invhouse"] + "test_loop10" -> "test_loop2" ; +"test_loop9" [label="9: Prune (true branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 36]\n PRUNE((n$2 != 0), true); [line 36]\n " shape="invhouse"] - 43 -> 35 ; -42 [label="42: Prune (true branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 36]\n PRUNE((n$2 != 0), true); [line 36]\n " shape="invhouse"] + "test_loop9" -> "test_loop12" ; +"test_loop8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 36]\n " shape="box"] - 42 -> 45 ; -41 [label="41: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 36]\n " shape="box"] + "test_loop8" -> "test_loop4" ; +"test_loop7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 36]\n " shape="box"] - 41 -> 37 ; -40 [label="40: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 36]\n " shape="box"] + "test_loop7" -> "test_loop4" ; +"test_loop6" [label="6: Prune (false branch) \n n$1=*&spec:char * [line 36]\n PRUNE((n$1 == 0), false); [line 36]\n " shape="invhouse"] - 40 -> 37 ; -39 [label="39: Prune (false branch) \n n$1=*&spec:char * [line 36]\n PRUNE((n$1 == 0), false); [line 36]\n " shape="invhouse"] + "test_loop6" -> "test_loop8" ; +"test_loop5" [label="5: Prune (true branch) \n n$1=*&spec:char * [line 36]\n PRUNE((n$1 != 0), true); [line 36]\n " shape="invhouse"] - 39 -> 41 ; -38 [label="38: Prune (true branch) \n n$1=*&spec:char * [line 36]\n PRUNE((n$1 != 0), true); [line 36]\n " shape="invhouse"] + "test_loop5" -> "test_loop7" ; +"test_loop4" [label="4: + \n " ] - 38 -> 40 ; -37 [label="37: + \n " ] + "test_loop4" -> "test_loop9" ; + "test_loop4" -> "test_loop10" ; +"test_loop3" [label="3: + \n " ] - 37 -> 42 ; - 37 -> 43 ; -36 [label="36: + \n " ] + "test_loop3" -> "test_loop5" ; + "test_loop3" -> "test_loop6" ; +"test_loop2" [label="2: Exit test_loop \n " color=yellow style=filled] - 36 -> 38 ; - 36 -> 39 ; -35 [label="35: Exit test_loop \n " color=yellow style=filled] +"test_loop1" [label="1: Start test_loop\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int 0$?%__sil_tmpSIL_temp_conditional___n$7:int block_size:char * spec:char * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$3,&0$?%__sil_tmpSIL_temp_conditional___n$7,&block_size,&spec); [line 29]\n " color=yellow style=filled] -34 [label="34: Start test_loop\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int 0$?%__sil_tmpSIL_temp_conditional___n$7:int block_size:char * spec:char * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$3,&0$?%__sil_tmpSIL_temp_conditional___n$7,&block_size,&spec); [line 29]\n " color=yellow style=filled] + "test_loop1" -> "test_loop28" ; +"main34" [label="34: BinaryOperatorStmt: Assign \n n$13=_fun_getenv(\"BLOCK\":char *) [line 47]\n *&spec:char *=n$13 [line 47]\n " shape="box"] - 34 -> 61 ; -33 [label="33: BinaryOperatorStmt: Assign \n n$7=*&x:int * [line 25]\n *n$7:int =32 [line 25]\n " shape="box"] + "main34" -> "main6" ; + "main34" -> "main7" ; +"main33" [label="33: BinaryOperatorStmt: Assign \n *&block_size:char *=0 [line 53]\n " shape="box"] - 33 -> 15 ; -32 [label="32: BinaryOperatorStmt: Assign \n *&x:int *=17 [line 23]\n " shape="box"] + "main33" -> "main29" ; +"main32" [label="32: Prune (false branch) \n PRUNE(((n$12 == 39) == 0), false); [line 52]\n " shape="invhouse"] - 32 -> 15 ; -31 [label="31: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 22]\n PRUNE((n$6 == 0), false); [line 22]\n " shape="invhouse"] + "main32" -> "main29" ; +"main31" [label="31: Prune (true branch) \n PRUNE(((n$12 == 39) != 0), true); [line 52]\n " shape="invhouse"] - 31 -> 33 ; -30 [label="30: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 22]\n PRUNE((n$6 != 0), true); [line 22]\n " shape="invhouse"] + "main31" -> "main33" ; +"main30" [label="30: BinaryOperatorStmt: EQ \n n$11=*&spec:char * [line 52]\n n$12=*n$11:char [line 52]\n " shape="box"] - 30 -> 32 ; -29 [label="29: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 22]\n " shape="box"] + "main30" -> "main31" ; + "main30" -> "main32" ; +"main29" [label="29: + \n " ] - 29 -> 24 ; -28 [label="28: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 22]\n " shape="box"] + "main29" -> "main4" ; +"main28" [label="28: BinaryOperatorStmt: Assign \n *&block_size:char *=0 [line 50]\n " shape="box"] - 28 -> 24 ; -27 [label="27: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 22]\n " shape="invhouse"] + "main28" -> "main4" ; +"main27" [label="27: Prune (false branch) \n n$10=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 49]\n PRUNE((n$10 == 0), false); [line 49]\n " shape="invhouse"] - 27 -> 29 ; -26 [label="26: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 22]\n " shape="invhouse"] + "main27" -> "main30" ; +"main26" [label="26: Prune (true branch) \n n$10=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 49]\n PRUNE((n$10 != 0), true); [line 49]\n " shape="invhouse"] - 26 -> 28 ; -25 [label="25: BinaryOperatorStmt: Assign \n n$4=_fun_getenv(\"BLOCK\":char *) [line 22]\n *&x:int *=n$4 [line 22]\n n$5=*&x:int * [line 22]\n " shape="box"] + "main26" -> "main28" ; +"main25" [label="25: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =1 [line 49]\n " shape="box"] - 25 -> 26 ; - 25 -> 27 ; -24 [label="24: + \n " ] + "main25" -> "main20" ; +"main24" [label="24: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =0 [line 49]\n " shape="box"] - 24 -> 30 ; - 24 -> 31 ; -23 [label="23: Prune (false branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 22]\n PRUNE((n$2 == 0), false); [line 22]\n " shape="invhouse"] + "main24" -> "main20" ; +"main23" [label="23: Prune (false branch) \n PRUNE((n$9 == 0), false); [line 49]\n " shape="invhouse"] - 23 -> 33 ; -22 [label="22: Prune (true branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 22]\n PRUNE((n$2 != 0), true); [line 22]\n " shape="invhouse"] + "main23" -> "main25" ; +"main22" [label="22: Prune (true branch) \n PRUNE((n$9 != 0), true); [line 49]\n " shape="invhouse"] - 22 -> 25 ; -21 [label="21: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 22]\n " shape="box"] + "main22" -> "main24" ; +"main21" [label="21: BinaryOperatorStmt: Assign \n n$8=_fun_getenv(\"BLOCKSIZE\":char *) [line 49]\n *&spec:char *=n$8 [line 49]\n n$9=*&spec:char * [line 49]\n " shape="box"] - 21 -> 17 ; -20 [label="20: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 22]\n " shape="box"] + "main21" -> "main22" ; + "main21" -> "main23" ; +"main20" [label="20: + \n " ] - 20 -> 17 ; -19 [label="19: Prune (false branch) \n n$1=*&x:int * [line 22]\n PRUNE((n$1 == 0), false); [line 22]\n " shape="invhouse"] + "main20" -> "main26" ; + "main20" -> "main27" ; +"main19" [label="19: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 49]\n PRUNE((n$6 == 0), false); [line 49]\n " shape="invhouse"] - 19 -> 21 ; -18 [label="18: Prune (true branch) \n n$1=*&x:int * [line 22]\n PRUNE((n$1 != 0), true); [line 22]\n " shape="invhouse"] + "main19" -> "main30" ; +"main18" [label="18: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 49]\n PRUNE((n$6 != 0), true); [line 49]\n " shape="invhouse"] - 18 -> 20 ; -17 [label="17: + \n " ] + "main18" -> "main21" ; +"main17" [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 49]\n " shape="box"] - 17 -> 22 ; - 17 -> 23 ; -16 [label="16: between_join_and_exit \n " shape="box"] + "main17" -> "main12" ; +"main16" [label="16: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 49]\n " shape="box"] - 16 -> 14 ; -15 [label="15: + \n " ] + "main16" -> "main12" ; +"main15" [label="15: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 49]\n " shape="invhouse"] - 15 -> 16 ; -14 [label="14: Exit shortcircuit_and \n " color=yellow style=filled] + "main15" -> "main17" ; +"main14" [label="14: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 49]\n " shape="invhouse"] -13 [label="13: Start shortcircuit_and\nFormals: x:int *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$3); [line 21]\n " color=yellow style=filled] + "main14" -> "main16" ; +"main13" [label="13: BinaryOperatorStmt: Assign \n n$4=_fun_getenv(\"BLOCK_SIZE\":char *) [line 49]\n *&spec:char *=n$4 [line 49]\n n$5=*&spec:char * [line 49]\n " shape="box"] - 13 -> 18 ; - 13 -> 19 ; -12 [label="12: BinaryOperatorStmt: Assign \n *&x:int *=32 [line 17]\n " shape="box"] + "main13" -> "main14" ; + "main13" -> "main15" ; +"main12" [label="12: + \n " ] - 12 -> 3 ; -11 [label="11: BinaryOperatorStmt: Assign \n *&x:int *=17 [line 15]\n " shape="box"] + "main12" -> "main18" ; + "main12" -> "main19" ; +"main11" [label="11: Prune (false branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 49]\n PRUNE((n$2 == 0), false); [line 49]\n " shape="invhouse"] - 11 -> 3 ; -10 [label="10: Prune (false branch) \n PRUNE(((n$2 == 2) == 0), false); [line 14]\n " shape="invhouse"] + "main11" -> "main30" ; +"main10" [label="10: Prune (true branch) \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 49]\n PRUNE((n$2 != 0), true); [line 49]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: Prune (true branch) \n PRUNE(((n$2 == 2) != 0), true); [line 14]\n " shape="invhouse"] + "main10" -> "main13" ; +"main9" [label="9: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 49]\n " shape="box"] - 9 -> 11 ; -8 [label="8: BinaryOperatorStmt: EQ \n n$1=*&x:int * [line 14]\n n$2=*n$1:int [line 14]\n " shape="box"] + "main9" -> "main5" ; +"main8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 49]\n " shape="box"] - 8 -> 9 ; - 8 -> 10 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 14]\n " shape="invhouse"] + "main8" -> "main5" ; +"main7" [label="7: Prune (false branch) \n n$1=*&spec:char * [line 49]\n PRUNE((n$1 == 0), false); [line 49]\n " shape="invhouse"] - 7 -> 8 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 14]\n " shape="invhouse"] + "main7" -> "main9" ; +"main6" [label="6: Prune (true branch) \n n$1=*&spec:char * [line 49]\n PRUNE((n$1 != 0), true); [line 49]\n " shape="invhouse"] - 6 -> 11 ; -5 [label="5: BinaryOperatorStmt: EQ \n n$0=*&x:int * [line 14]\n " shape="box"] + "main6" -> "main8" ; +"main5" [label="5: + \n " ] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: between_join_and_exit \n " shape="box"] + "main5" -> "main10" ; + "main5" -> "main11" ; +"main4" [label="4: + \n " ] - 4 -> 2 ; -3 [label="3: + \n " ] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 56]\n " shape="box"] - 3 -> 4 ; -2 [label="2: Exit shortcircuit_or \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start shortcircuit_or\nFormals: x:int *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int 0$?%__sil_tmpSIL_temp_conditional___n$7:int block_size:char * spec:char * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$3,&0$?%__sil_tmpSIL_temp_conditional___n$7,&block_size,&spec); [line 42]\n " color=yellow style=filled] - 1 -> 5 ; + "main1" -> "main34" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/int_negation.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/int_negation.c.dot index 9adc0a555..3adb61d78 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/int_negation.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/int_negation.c.dot @@ -1,139 +1,139 @@ /* @generated */ digraph iCFG { -34 [label="34: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 29]\n *&return:int =n$2 [line 29]\n " shape="box"] +"neg8" [label="8: Return Stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 29]\n *&return:int =n$2 [line 29]\n " shape="box"] - 34 -> 28 ; -33 [label="33: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 29]\n " shape="box"] + "neg8" -> "neg2" ; +"neg7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 29]\n " shape="box"] - 33 -> 29 ; -32 [label="32: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 29]\n " shape="box"] + "neg7" -> "neg3" ; +"neg6" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 29]\n " shape="box"] - 32 -> 29 ; -31 [label="31: Prune (false branch) \n n$1=*&x:int [line 29]\n PRUNE((n$1 == 0), false); [line 29]\n " shape="invhouse"] + "neg6" -> "neg3" ; +"neg5" [label="5: Prune (false branch) \n n$1=*&x:int [line 29]\n PRUNE((n$1 == 0), false); [line 29]\n " shape="invhouse"] - 31 -> 33 ; -30 [label="30: Prune (true branch) \n n$1=*&x:int [line 29]\n PRUNE((n$1 != 0), true); [line 29]\n " shape="invhouse"] + "neg5" -> "neg7" ; +"neg4" [label="4: Prune (true branch) \n n$1=*&x:int [line 29]\n PRUNE((n$1 != 0), true); [line 29]\n " shape="invhouse"] - 30 -> 32 ; -29 [label="29: + \n " ] + "neg4" -> "neg6" ; +"neg3" [label="3: + \n " ] - 29 -> 34 ; -28 [label="28: Exit neg \n " color=yellow style=filled] + "neg3" -> "neg8" ; +"neg2" [label="2: Exit neg \n " color=yellow style=filled] -27 [label="27: Start neg\nFormals: x:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 29]\n " color=yellow style=filled] +"neg1" [label="1: Start neg\nFormals: x:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 29]\n " color=yellow style=filled] - 27 -> 30 ; - 27 -> 31 ; -26 [label="26: Return Stmt \n *&return:int =0 [line 25]\n " shape="box"] + "neg1" -> "neg4" ; + "neg1" -> "neg5" ; +"baz14" [label="14: Return Stmt \n *&return:int =0 [line 25]\n " shape="box"] - 26 -> 14 ; -25 [label="25: Return Stmt \n *&return:int =1 [line 23]\n " shape="box"] + "baz14" -> "baz2" ; +"baz13" [label="13: Return Stmt \n *&return:int =1 [line 23]\n " shape="box"] - 25 -> 14 ; -24 [label="24: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 22]\n " shape="invhouse"] + "baz13" -> "baz2" ; +"baz12" [label="12: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 22]\n " shape="invhouse"] - 24 -> 26 ; -23 [label="23: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 22]\n " shape="invhouse"] + "baz12" -> "baz14" ; +"baz11" [label="11: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 22]\n " shape="invhouse"] - 23 -> 25 ; -22 [label="22: Call _fun_identity \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 22]\n n$3=_fun_identity(n$2:int ) [line 22]\n " shape="box"] + "baz11" -> "baz13" ; +"baz10" [label="10: Call _fun_identity \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 22]\n n$3=_fun_identity(n$2:int ) [line 22]\n " shape="box"] - 22 -> 23 ; - 22 -> 24 ; -21 [label="21: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 22]\n " shape="box"] + "baz10" -> "baz11" ; + "baz10" -> "baz12" ; +"baz9" [label="9: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 22]\n " shape="box"] - 21 -> 17 ; -20 [label="20: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 22]\n " shape="box"] + "baz9" -> "baz5" ; +"baz8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 22]\n " shape="box"] - 20 -> 17 ; -19 [label="19: Prune (false branch) \n n$1=*&x:int [line 22]\n PRUNE((n$1 == 0), false); [line 22]\n " shape="invhouse"] + "baz8" -> "baz5" ; +"baz7" [label="7: Prune (false branch) \n n$1=*&x:int [line 22]\n PRUNE((n$1 == 0), false); [line 22]\n " shape="invhouse"] - 19 -> 21 ; -18 [label="18: Prune (true branch) \n n$1=*&x:int [line 22]\n PRUNE((n$1 != 0), true); [line 22]\n " shape="invhouse"] + "baz7" -> "baz9" ; +"baz6" [label="6: Prune (true branch) \n n$1=*&x:int [line 22]\n PRUNE((n$1 != 0), true); [line 22]\n " shape="invhouse"] - 18 -> 20 ; -17 [label="17: + \n " ] + "baz6" -> "baz8" ; +"baz5" [label="5: + \n " ] - 17 -> 22 ; -16 [label="16: between_join_and_exit \n " shape="box"] + "baz5" -> "baz10" ; +"baz4" [label="4: between_join_and_exit \n " shape="box"] - 16 -> 14 ; -15 [label="15: + \n " ] + "baz4" -> "baz2" ; +"baz3" [label="3: + \n " ] - 15 -> 16 ; -14 [label="14: Exit baz \n " color=yellow style=filled] + "baz3" -> "baz4" ; +"baz2" [label="2: Exit baz \n " color=yellow style=filled] -13 [label="13: Start baz\nFormals: x:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 20]\n " color=yellow style=filled] +"baz1" [label="1: Start baz\nFormals: x:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 20]\n " color=yellow style=filled] - 13 -> 18 ; - 13 -> 19 ; -12 [label="12: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] + "baz1" -> "baz6" ; + "baz1" -> "baz7" ; +"identity3" [label="3: Return Stmt \n n$0=*&x:int [line 10]\n *&return:int =n$0 [line 10]\n " shape="box"] - 12 -> 5 ; -11 [label="11: Return Stmt \n *&return:int =1 [line 14]\n " shape="box"] + "identity3" -> "identity2" ; +"identity2" [label="2: Exit identity \n " color=yellow style=filled] - 11 -> 5 ; -10 [label="10: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 13]\n " shape="invhouse"] +"identity1" [label="1: Start identity\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 13]\n " shape="invhouse"] + "identity1" -> "identity3" ; +"bar9" [label="9: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] - 9 -> 11 ; -8 [label="8: Call _fun_identity \n n$0=*&x:int [line 13]\n n$1=_fun_identity(n$0:int ) [line 13]\n " shape="box"] + "bar9" -> "bar2" ; +"bar8" [label="8: Return Stmt \n *&return:int =1 [line 14]\n " shape="box"] - 8 -> 9 ; - 8 -> 10 ; -7 [label="7: between_join_and_exit \n " shape="box"] + "bar8" -> "bar2" ; +"bar7" [label="7: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 13]\n " shape="invhouse"] - 7 -> 5 ; -6 [label="6: + \n " ] + "bar7" -> "bar9" ; +"bar6" [label="6: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 13]\n " shape="invhouse"] - 6 -> 7 ; -5 [label="5: Exit bar \n " color=yellow style=filled] + "bar6" -> "bar8" ; +"bar5" [label="5: Call _fun_identity \n n$0=*&x:int [line 13]\n n$1=_fun_identity(n$0:int ) [line 13]\n " shape="box"] -4 [label="4: Start bar\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] + "bar5" -> "bar6" ; + "bar5" -> "bar7" ; +"bar4" [label="4: between_join_and_exit \n " shape="box"] - 4 -> 8 ; -3 [label="3: Return Stmt \n n$0=*&x:int [line 10]\n *&return:int =n$0 [line 10]\n " shape="box"] + "bar4" -> "bar2" ; +"bar3" [label="3: + \n " ] - 3 -> 2 ; -2 [label="2: Exit identity \n " color=yellow style=filled] + "bar3" -> "bar4" ; +"bar2" [label="2: Exit bar \n " color=yellow style=filled] -1 [label="1: Start identity\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"bar1" [label="1: Start bar\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "bar1" -> "bar5" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/member_access.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/member_access.c.dot index 2988f3213..dd0349b71 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/member_access.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/member_access.c.dot @@ -1,99 +1,99 @@ /* @generated */ digraph iCFG { -24 [label="24: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 22]\n *&z:int =n$3 [line 22]\n " shape="box"] +"access_field_in_ife_branch8" [label="8: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 22]\n *&z:int =n$3 [line 22]\n " shape="box"] - 24 -> 18 ; -23 [label="23: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 22]\n " shape="box"] + "access_field_in_ife_branch8" -> "access_field_in_ife_branch2" ; +"access_field_in_ife_branch7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 22]\n " shape="box"] - 23 -> 19 ; -22 [label="22: ConditinalStmt Branch \n n$1=_fun_ret_ptr(4:int ) [line 22]\n n$2=*n$1.field:int [line 22]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$2 [line 22]\n " shape="box"] + "access_field_in_ife_branch7" -> "access_field_in_ife_branch3" ; +"access_field_in_ife_branch6" [label="6: ConditinalStmt Branch \n n$1=_fun_ret_ptr(4:int ) [line 22]\n n$2=*n$1.field:int [line 22]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =n$2 [line 22]\n " shape="box"] - 22 -> 19 ; -21 [label="21: Prune (false branch) \n PRUNE((1 == 0), false); [line 22]\n " shape="invhouse"] + "access_field_in_ife_branch6" -> "access_field_in_ife_branch3" ; +"access_field_in_ife_branch5" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 22]\n " shape="invhouse"] - 21 -> 23 ; -20 [label="20: Prune (true branch) \n PRUNE((1 != 0), true); [line 22]\n " shape="invhouse"] + "access_field_in_ife_branch5" -> "access_field_in_ife_branch7" ; +"access_field_in_ife_branch4" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 22]\n " shape="invhouse"] - 20 -> 22 ; -19 [label="19: + \n " ] + "access_field_in_ife_branch4" -> "access_field_in_ife_branch6" ; +"access_field_in_ife_branch3" [label="3: + \n " ] - 19 -> 24 ; -18 [label="18: Exit access_field_in_ife_branch \n " color=yellow style=filled] + "access_field_in_ife_branch3" -> "access_field_in_ife_branch8" ; +"access_field_in_ife_branch2" [label="2: Exit access_field_in_ife_branch \n " color=yellow style=filled] -17 [label="17: Start access_field_in_ife_branch\nFormals: \nLocals: z:int 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&z,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 22]\n " color=yellow style=filled] +"access_field_in_ife_branch1" [label="1: Start access_field_in_ife_branch\nFormals: \nLocals: z:int 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&z,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 22]\n " color=yellow style=filled] - 17 -> 20 ; - 17 -> 21 ; -16 [label="16: DeclStmt \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 20]\n n$2=_fun_ret_ptr(n$1:int ) [line 20]\n n$3=*n$2.field:int [line 20]\n *&z:int =n$3 [line 20]\n " shape="box"] + "access_field_in_ife_branch1" -> "access_field_in_ife_branch4" ; + "access_field_in_ife_branch1" -> "access_field_in_ife_branch5" ; +"call_ife_then_access_field8" [label="8: DeclStmt \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 20]\n n$2=_fun_ret_ptr(n$1:int ) [line 20]\n n$3=*n$2.field:int [line 20]\n *&z:int =n$3 [line 20]\n " shape="box"] - 16 -> 10 ; -15 [label="15: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =3 [line 20]\n " shape="box"] + "call_ife_then_access_field8" -> "call_ife_then_access_field2" ; +"call_ife_then_access_field7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =3 [line 20]\n " shape="box"] - 15 -> 11 ; -14 [label="14: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =2 [line 20]\n " shape="box"] + "call_ife_then_access_field7" -> "call_ife_then_access_field3" ; +"call_ife_then_access_field6" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =2 [line 20]\n " shape="box"] - 14 -> 11 ; -13 [label="13: Prune (false branch) \n PRUNE((1 == 0), false); [line 20]\n " shape="invhouse"] + "call_ife_then_access_field6" -> "call_ife_then_access_field3" ; +"call_ife_then_access_field5" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 20]\n " shape="invhouse"] - 13 -> 15 ; -12 [label="12: Prune (true branch) \n PRUNE((1 != 0), true); [line 20]\n " shape="invhouse"] + "call_ife_then_access_field5" -> "call_ife_then_access_field7" ; +"call_ife_then_access_field4" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 20]\n " shape="invhouse"] - 12 -> 14 ; -11 [label="11: + \n " ] + "call_ife_then_access_field4" -> "call_ife_then_access_field6" ; +"call_ife_then_access_field3" [label="3: + \n " ] - 11 -> 16 ; -10 [label="10: Exit call_ife_then_access_field \n " color=yellow style=filled] + "call_ife_then_access_field3" -> "call_ife_then_access_field8" ; +"call_ife_then_access_field2" [label="2: Exit call_ife_then_access_field \n " color=yellow style=filled] -9 [label="9: Start call_ife_then_access_field\nFormals: \nLocals: z:int 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&z,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 20]\n " color=yellow style=filled] +"call_ife_then_access_field1" [label="1: Start call_ife_then_access_field\nFormals: \nLocals: z:int 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&z,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 20]\n " color=yellow style=filled] - 9 -> 12 ; - 9 -> 13 ; -8 [label="8: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s * [line 17]\n n$4=*n$3.field:int [line 17]\n *&z:int =n$4 [line 17]\n " shape="box"] + "call_ife_then_access_field1" -> "call_ife_then_access_field4" ; + "call_ife_then_access_field1" -> "call_ife_then_access_field5" ; +"ife_then_access_field8" [label="8: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s * [line 17]\n n$4=*n$3.field:int [line 17]\n *&z:int =n$4 [line 17]\n " shape="box"] - 8 -> 2 ; -7 [label="7: ConditinalStmt Branch \n n$2=*&q:struct s * [line 17]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s *=n$2 [line 17]\n " shape="box"] + "ife_then_access_field8" -> "ife_then_access_field2" ; +"ife_then_access_field7" [label="7: ConditinalStmt Branch \n n$2=*&q:struct s * [line 17]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s *=n$2 [line 17]\n " shape="box"] - 7 -> 3 ; -6 [label="6: ConditinalStmt Branch \n n$1=*&p:struct s * [line 17]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s *=n$1 [line 17]\n " shape="box"] + "ife_then_access_field7" -> "ife_then_access_field3" ; +"ife_then_access_field6" [label="6: ConditinalStmt Branch \n n$1=*&p:struct s * [line 17]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s *=n$1 [line 17]\n " shape="box"] - 6 -> 3 ; -5 [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 17]\n " shape="invhouse"] + "ife_then_access_field6" -> "ife_then_access_field3" ; +"ife_then_access_field5" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 17]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 17]\n " shape="invhouse"] + "ife_then_access_field5" -> "ife_then_access_field7" ; +"ife_then_access_field4" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 17]\n " shape="invhouse"] - 4 -> 6 ; -3 [label="3: + \n " ] + "ife_then_access_field4" -> "ife_then_access_field6" ; +"ife_then_access_field3" [label="3: + \n " ] - 3 -> 8 ; -2 [label="2: Exit ife_then_access_field \n " color=yellow style=filled] + "ife_then_access_field3" -> "ife_then_access_field8" ; +"ife_then_access_field2" [label="2: Exit ife_then_access_field \n " color=yellow style=filled] -1 [label="1: Start ife_then_access_field\nFormals: p:struct s * q:struct s *\nLocals: z:int 0$?%__sil_tmpSIL_temp_conditional___n$0:struct s * \n DECLARE_LOCALS(&return,&z,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 16]\n " color=yellow style=filled] +"ife_then_access_field1" [label="1: Start ife_then_access_field\nFormals: p:struct s * q:struct s *\nLocals: z:int 0$?%__sil_tmpSIL_temp_conditional___n$0:struct s * \n DECLARE_LOCALS(&return,&z,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 16]\n " color=yellow style=filled] - 1 -> 4 ; - 1 -> 5 ; + "ife_then_access_field1" -> "ife_then_access_field4" ; + "ife_then_access_field1" -> "ife_then_access_field5" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/preincrement.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/preincrement.c.dot index 555f33b84..324b7d5e8 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/preincrement.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/preincrement.c.dot @@ -1,110 +1,110 @@ /* @generated */ digraph iCFG { -26 [label="26: BinaryOperatorStmt: AddAssign \n n$16=*&p:struct s * [line 15]\n n$17=*n$16.x:int [line 15]\n *n$16.x:int =(n$17 + 1) [line 15]\n " shape="box"] +"preincrement26" [label="26: BinaryOperatorStmt: AddAssign \n n$16=*&p:struct s * [line 15]\n n$17=*n$16.x:int [line 15]\n *n$16.x:int =(n$17 + 1) [line 15]\n " shape="box"] - 26 -> 21 ; - 26 -> 22 ; -25 [label="25: BinaryOperatorStmt: AddAssign \n n$14=*&0$?%__sil_tmpSIL_temp_conditional___n$11:struct s * [line 16]\n n$15=*n$14.x:int [line 16]\n *n$14.x:int =(n$15 + 1) [line 16]\n " shape="box"] + "preincrement26" -> "preincrement21" ; + "preincrement26" -> "preincrement22" ; +"preincrement25" [label="25: BinaryOperatorStmt: AddAssign \n n$14=*&0$?%__sil_tmpSIL_temp_conditional___n$11:struct s * [line 16]\n n$15=*n$14.x:int [line 16]\n *n$14.x:int =(n$15 + 1) [line 16]\n " shape="box"] - 25 -> 15 ; - 25 -> 16 ; -24 [label="24: ConditinalStmt Branch \n n$13=*&p:struct s * [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$11:struct s *=n$13 [line 16]\n " shape="box"] + "preincrement25" -> "preincrement15" ; + "preincrement25" -> "preincrement16" ; +"preincrement24" [label="24: ConditinalStmt Branch \n n$13=*&p:struct s * [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$11:struct s *=n$13 [line 16]\n " shape="box"] - 24 -> 20 ; -23 [label="23: ConditinalStmt Branch \n n$12=*&p:struct s * [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$11:struct s *=n$12 [line 16]\n " shape="box"] + "preincrement24" -> "preincrement20" ; +"preincrement23" [label="23: ConditinalStmt Branch \n n$12=*&p:struct s * [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$11:struct s *=n$12 [line 16]\n " shape="box"] - 23 -> 20 ; -22 [label="22: Prune (false branch) \n PRUNE((1 == 0), false); [line 16]\n " shape="invhouse"] + "preincrement23" -> "preincrement20" ; +"preincrement22" [label="22: Prune (false branch) \n PRUNE((1 == 0), false); [line 16]\n " shape="invhouse"] - 22 -> 24 ; -21 [label="21: Prune (true branch) \n PRUNE((1 != 0), true); [line 16]\n " shape="invhouse"] + "preincrement22" -> "preincrement24" ; +"preincrement21" [label="21: Prune (true branch) \n PRUNE((1 != 0), true); [line 16]\n " shape="invhouse"] - 21 -> 23 ; -20 [label="20: + \n " ] + "preincrement21" -> "preincrement23" ; +"preincrement20" [label="20: + \n " ] - 20 -> 25 ; -19 [label="19: BinaryOperatorStmt: AddAssign \n n$7=*&p:struct s * [line 17]\n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$8:int [line 17]\n n$10=*n$7.x:int [line 17]\n *n$7.x:int =(n$10 + n$9) [line 17]\n " shape="box"] + "preincrement20" -> "preincrement25" ; +"preincrement19" [label="19: BinaryOperatorStmt: AddAssign \n n$7=*&p:struct s * [line 17]\n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$8:int [line 17]\n n$10=*n$7.x:int [line 17]\n *n$7.x:int =(n$10 + n$9) [line 17]\n " shape="box"] - 19 -> 4 ; - 19 -> 5 ; -18 [label="18: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$8:int =7 [line 17]\n " shape="box"] + "preincrement19" -> "preincrement4" ; + "preincrement19" -> "preincrement5" ; +"preincrement18" [label="18: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$8:int =7 [line 17]\n " shape="box"] - 18 -> 14 ; -17 [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$8:int =3 [line 17]\n " shape="box"] + "preincrement18" -> "preincrement14" ; +"preincrement17" [label="17: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$8:int =3 [line 17]\n " shape="box"] - 17 -> 14 ; -16 [label="16: Prune (false branch) \n PRUNE((1 == 0), false); [line 17]\n " shape="invhouse"] + "preincrement17" -> "preincrement14" ; +"preincrement16" [label="16: Prune (false branch) \n PRUNE((1 == 0), false); [line 17]\n " shape="invhouse"] - 16 -> 18 ; -15 [label="15: Prune (true branch) \n PRUNE((1 != 0), true); [line 17]\n " shape="invhouse"] + "preincrement16" -> "preincrement18" ; +"preincrement15" [label="15: Prune (true branch) \n PRUNE((1 != 0), true); [line 17]\n " shape="invhouse"] - 15 -> 17 ; -14 [label="14: + \n " ] + "preincrement15" -> "preincrement17" ; +"preincrement14" [label="14: + \n " ] - 14 -> 19 ; -13 [label="13: BinaryOperatorStmt: AddAssign \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s * [line 18]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 18]\n n$6=*n$3.x:int [line 18]\n *n$3.x:int =(n$6 + n$5) [line 18]\n " shape="box"] + "preincrement14" -> "preincrement19" ; +"preincrement13" [label="13: BinaryOperatorStmt: AddAssign \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s * [line 18]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 18]\n n$6=*n$3.x:int [line 18]\n *n$3.x:int =(n$6 + n$5) [line 18]\n " shape="box"] - 13 -> 2 ; -12 [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =7 [line 18]\n " shape="box"] + "preincrement13" -> "preincrement2" ; +"preincrement12" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =7 [line 18]\n " shape="box"] - 12 -> 8 ; -11 [label="11: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 18]\n " shape="box"] + "preincrement12" -> "preincrement8" ; +"preincrement11" [label="11: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =3 [line 18]\n " shape="box"] - 11 -> 8 ; -10 [label="10: Prune (false branch) \n PRUNE((1 == 0), false); [line 18]\n " shape="invhouse"] + "preincrement11" -> "preincrement8" ; +"preincrement10" [label="10: Prune (false branch) \n PRUNE((1 == 0), false); [line 18]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: Prune (true branch) \n PRUNE((1 != 0), true); [line 18]\n " shape="invhouse"] + "preincrement10" -> "preincrement12" ; +"preincrement9" [label="9: Prune (true branch) \n PRUNE((1 != 0), true); [line 18]\n " shape="invhouse"] - 9 -> 11 ; -8 [label="8: + \n " ] + "preincrement9" -> "preincrement11" ; +"preincrement8" [label="8: + \n " ] - 8 -> 13 ; -7 [label="7: ConditinalStmt Branch \n n$2=*&p:struct s * [line 18]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s *=n$2 [line 18]\n " shape="box"] + "preincrement8" -> "preincrement13" ; +"preincrement7" [label="7: ConditinalStmt Branch \n n$2=*&p:struct s * [line 18]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s *=n$2 [line 18]\n " shape="box"] - 7 -> 3 ; -6 [label="6: ConditinalStmt Branch \n n$1=*&p:struct s * [line 18]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s *=n$1 [line 18]\n " shape="box"] + "preincrement7" -> "preincrement3" ; +"preincrement6" [label="6: ConditinalStmt Branch \n n$1=*&p:struct s * [line 18]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:struct s *=n$1 [line 18]\n " shape="box"] - 6 -> 3 ; -5 [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 18]\n " shape="invhouse"] + "preincrement6" -> "preincrement3" ; +"preincrement5" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 18]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 18]\n " shape="invhouse"] + "preincrement5" -> "preincrement7" ; +"preincrement4" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 18]\n " shape="invhouse"] - 4 -> 6 ; -3 [label="3: + \n " ] + "preincrement4" -> "preincrement6" ; +"preincrement3" [label="3: + \n " ] - 3 -> 9 ; - 3 -> 10 ; -2 [label="2: Exit preincrement \n " color=yellow style=filled] + "preincrement3" -> "preincrement9" ; + "preincrement3" -> "preincrement10" ; +"preincrement2" [label="2: Exit preincrement \n " color=yellow style=filled] -1 [label="1: Start preincrement\nFormals: p:struct s *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:struct s * 0$?%__sil_tmpSIL_temp_conditional___n$4:int 0$?%__sil_tmpSIL_temp_conditional___n$8:int 0$?%__sil_tmpSIL_temp_conditional___n$11:struct s * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$4,&0$?%__sil_tmpSIL_temp_conditional___n$8,&0$?%__sil_tmpSIL_temp_conditional___n$11); [line 14]\n " color=yellow style=filled] +"preincrement1" [label="1: Start preincrement\nFormals: p:struct s *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:struct s * 0$?%__sil_tmpSIL_temp_conditional___n$4:int 0$?%__sil_tmpSIL_temp_conditional___n$8:int 0$?%__sil_tmpSIL_temp_conditional___n$11:struct s * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&0$?%__sil_tmpSIL_temp_conditional___n$4,&0$?%__sil_tmpSIL_temp_conditional___n$8,&0$?%__sil_tmpSIL_temp_conditional___n$11); [line 14]\n " color=yellow style=filled] - 1 -> 26 ; + "preincrement1" -> "preincrement26" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/conditional_operator/unary_operator.c.dot b/infer/tests/codetoanalyze/c/frontend/conditional_operator/unary_operator.c.dot index 0b5e013f8..f51e37c28 100644 --- a/infer/tests/codetoanalyze/c/frontend/conditional_operator/unary_operator.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/conditional_operator/unary_operator.c.dot @@ -1,85 +1,85 @@ /* @generated */ digraph iCFG { -20 [label="20: BinaryOperatorStmt: Assign \n n$13=*&0$?%__sil_tmpSIL_temp_conditional___n$10:int * [line 12]\n n$14=*n$13:int [line 12]\n *&x:int =n$14 [line 12]\n " shape="box"] +"dereference_ifthenelse20" [label="20: BinaryOperatorStmt: Assign \n n$13=*&0$?%__sil_tmpSIL_temp_conditional___n$10:int * [line 12]\n n$14=*n$13:int [line 12]\n *&x:int =n$14 [line 12]\n " shape="box"] - 20 -> 10 ; - 20 -> 11 ; -19 [label="19: ConditinalStmt Branch \n n$12=*&p:int * [line 12]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:int *=n$12 [line 12]\n " shape="box"] + "dereference_ifthenelse20" -> "dereference_ifthenelse10" ; + "dereference_ifthenelse20" -> "dereference_ifthenelse11" ; +"dereference_ifthenelse19" [label="19: ConditinalStmt Branch \n n$12=*&p:int * [line 12]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:int *=n$12 [line 12]\n " shape="box"] - 19 -> 15 ; -18 [label="18: ConditinalStmt Branch \n n$11=*&p:int * [line 12]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:int *=n$11 [line 12]\n " shape="box"] + "dereference_ifthenelse19" -> "dereference_ifthenelse15" ; +"dereference_ifthenelse18" [label="18: ConditinalStmt Branch \n n$11=*&p:int * [line 12]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:int *=n$11 [line 12]\n " shape="box"] - 18 -> 15 ; -17 [label="17: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] + "dereference_ifthenelse18" -> "dereference_ifthenelse15" ; +"dereference_ifthenelse17" [label="17: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] - 17 -> 19 ; -16 [label="16: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] + "dereference_ifthenelse17" -> "dereference_ifthenelse19" ; +"dereference_ifthenelse16" [label="16: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] - 16 -> 18 ; -15 [label="15: + \n " ] + "dereference_ifthenelse16" -> "dereference_ifthenelse18" ; +"dereference_ifthenelse15" [label="15: + \n " ] - 15 -> 20 ; -14 [label="14: DeclStmt \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$5:int * [line 14]\n n$9=*n$8:int [line 14]\n *&y:int =n$9 [line 14]\n " shape="box"] + "dereference_ifthenelse15" -> "dereference_ifthenelse20" ; +"dereference_ifthenelse14" [label="14: DeclStmt \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$5:int * [line 14]\n n$9=*n$8:int [line 14]\n *&y:int =n$9 [line 14]\n " shape="box"] - 14 -> 4 ; - 14 -> 5 ; -13 [label="13: ConditinalStmt Branch \n n$7=*&p:int * [line 14]\n *&0$?%__sil_tmpSIL_temp_conditional___n$5:int *=n$7 [line 14]\n " shape="box"] + "dereference_ifthenelse14" -> "dereference_ifthenelse4" ; + "dereference_ifthenelse14" -> "dereference_ifthenelse5" ; +"dereference_ifthenelse13" [label="13: ConditinalStmt Branch \n n$7=*&p:int * [line 14]\n *&0$?%__sil_tmpSIL_temp_conditional___n$5:int *=n$7 [line 14]\n " shape="box"] - 13 -> 9 ; -12 [label="12: ConditinalStmt Branch \n n$6=*&p:int * [line 14]\n *&0$?%__sil_tmpSIL_temp_conditional___n$5:int *=n$6 [line 14]\n " shape="box"] + "dereference_ifthenelse13" -> "dereference_ifthenelse9" ; +"dereference_ifthenelse12" [label="12: ConditinalStmt Branch \n n$6=*&p:int * [line 14]\n *&0$?%__sil_tmpSIL_temp_conditional___n$5:int *=n$6 [line 14]\n " shape="box"] - 12 -> 9 ; -11 [label="11: Prune (false branch) \n PRUNE((1 == 0), false); [line 14]\n " shape="invhouse"] + "dereference_ifthenelse12" -> "dereference_ifthenelse9" ; +"dereference_ifthenelse11" [label="11: Prune (false branch) \n PRUNE((1 == 0), false); [line 14]\n " shape="invhouse"] - 11 -> 13 ; -10 [label="10: Prune (true branch) \n PRUNE((1 != 0), true); [line 14]\n " shape="invhouse"] + "dereference_ifthenelse11" -> "dereference_ifthenelse13" ; +"dereference_ifthenelse10" [label="10: Prune (true branch) \n PRUNE((1 != 0), true); [line 14]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: + \n " ] + "dereference_ifthenelse10" -> "dereference_ifthenelse12" ; +"dereference_ifthenelse9" [label="9: + \n " ] - 9 -> 14 ; -8 [label="8: UnaryOperator \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int * [line 16]\n " shape="box"] + "dereference_ifthenelse9" -> "dereference_ifthenelse14" ; +"dereference_ifthenelse8" [label="8: UnaryOperator \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int * [line 16]\n " shape="box"] - 8 -> 2 ; -7 [label="7: ConditinalStmt Branch \n n$2=*&p:int * [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int *=n$2 [line 16]\n " shape="box"] + "dereference_ifthenelse8" -> "dereference_ifthenelse2" ; +"dereference_ifthenelse7" [label="7: ConditinalStmt Branch \n n$2=*&p:int * [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int *=n$2 [line 16]\n " shape="box"] - 7 -> 3 ; -6 [label="6: ConditinalStmt Branch \n n$1=*&p:int * [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int *=n$1 [line 16]\n " shape="box"] + "dereference_ifthenelse7" -> "dereference_ifthenelse3" ; +"dereference_ifthenelse6" [label="6: ConditinalStmt Branch \n n$1=*&p:int * [line 16]\n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int *=n$1 [line 16]\n " shape="box"] - 6 -> 3 ; -5 [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 16]\n " shape="invhouse"] + "dereference_ifthenelse6" -> "dereference_ifthenelse3" ; +"dereference_ifthenelse5" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 16]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 16]\n " shape="invhouse"] + "dereference_ifthenelse5" -> "dereference_ifthenelse7" ; +"dereference_ifthenelse4" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 16]\n " shape="invhouse"] - 4 -> 6 ; -3 [label="3: + \n " ] + "dereference_ifthenelse4" -> "dereference_ifthenelse6" ; +"dereference_ifthenelse3" [label="3: + \n " ] - 3 -> 8 ; -2 [label="2: Exit dereference_ifthenelse \n " color=yellow style=filled] + "dereference_ifthenelse3" -> "dereference_ifthenelse8" ; +"dereference_ifthenelse2" [label="2: Exit dereference_ifthenelse \n " color=yellow style=filled] -1 [label="1: Start dereference_ifthenelse\nFormals: p:int *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int * y:int 0$?%__sil_tmpSIL_temp_conditional___n$5:int * 0$?%__sil_tmpSIL_temp_conditional___n$10:int * x:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&y,&0$?%__sil_tmpSIL_temp_conditional___n$5,&0$?%__sil_tmpSIL_temp_conditional___n$10,&x); [line 10]\n " color=yellow style=filled] +"dereference_ifthenelse1" [label="1: Start dereference_ifthenelse\nFormals: p:int *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int * y:int 0$?%__sil_tmpSIL_temp_conditional___n$5:int * 0$?%__sil_tmpSIL_temp_conditional___n$10:int * x:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&y,&0$?%__sil_tmpSIL_temp_conditional___n$5,&0$?%__sil_tmpSIL_temp_conditional___n$10,&x); [line 10]\n " color=yellow style=filled] - 1 -> 16 ; - 1 -> 17 ; + "dereference_ifthenelse1" -> "dereference_ifthenelse16" ; + "dereference_ifthenelse1" -> "dereference_ifthenelse17" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/enumeration/enum.c.dot b/infer/tests/codetoanalyze/c/frontend/enumeration/enum.c.dot index d7cf8327d..aca4f8db7 100644 --- a/infer/tests/codetoanalyze/c/frontend/enumeration/enum.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/enumeration/enum.c.dot @@ -1,34 +1,34 @@ /* @generated */ digraph iCFG { -8 [label="8: BinaryOperatorStmt: Assign \n *&today:int =0 [line 22]\n " shape="box"] +"main8" [label="8: BinaryOperatorStmt: Assign \n *&today:int =0 [line 22]\n " shape="box"] - 8 -> 7 ; -7 [label="7: BinaryOperatorStmt: Assign \n *&today:int =1 [line 23]\n " shape="box"] + "main8" -> "main7" ; +"main7" [label="7: BinaryOperatorStmt: Assign \n *&today:int =1 [line 23]\n " shape="box"] - 7 -> 6 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&today:int [line 24]\n *&today:int =(n$0 + 4) [line 24]\n " shape="box"] + "main7" -> "main6" ; +"main6" [label="6: BinaryOperatorStmt: Assign \n n$0=*&today:int [line 24]\n *&today:int =(n$0 + 4) [line 24]\n " shape="box"] - 6 -> 5 ; -5 [label="5: BinaryOperatorStmt: Assign \n *&today:int =(2 + 1) [line 25]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n *&today:int =(2 + 1) [line 25]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n *&i:int =(2 + (2 - 0)) [line 26]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: DeclStmt \n *&i:int =(2 + (2 - 0)) [line 26]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 27]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 27]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: i:int today:int \n DECLARE_LOCALS(&return,&i,&today); [line 20]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: i:int today:int \n DECLARE_LOCALS(&return,&i,&today); [line 20]\n " color=yellow style=filled] - 1 -> 8 ; + "main1" -> "main8" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/enumeration/enum_bitmask.c.dot b/infer/tests/codetoanalyze/c/frontend/enumeration/enum_bitmask.c.dot index 4b7853c0f..b9dd4080e 100644 --- a/infer/tests/codetoanalyze/c/frontend/enumeration/enum_bitmask.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/enumeration/enum_bitmask.c.dot @@ -1,18 +1,18 @@ /* @generated */ digraph iCFG { -4 [label="4: DeclStmt \n *&option1:int =(1 << 0) [line 16]\n " shape="box"] +"main4" [label="4: DeclStmt \n *&option1:int =(1 << 0) [line 16]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n *&option2:int =(1 << 1) [line 17]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: DeclStmt \n *&option2:int =(1 << 1) [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: option2:int option1:int \n DECLARE_LOCALS(&return,&option2,&option1); [line 15]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: option2:int option1:int \n DECLARE_LOCALS(&return,&option2,&option1); [line 15]\n " color=yellow style=filled] - 1 -> 4 ; + "main1" -> "main4" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/enumeration/other_enum.c.dot b/infer/tests/codetoanalyze/c/frontend/enumeration/other_enum.c.dot index 7909422e5..89907c1ab 100644 --- a/infer/tests/codetoanalyze/c/frontend/enumeration/other_enum.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/enumeration/other_enum.c.dot @@ -1,82 +1,82 @@ /* @generated */ digraph iCFG { -20 [label="20: DeclStmt \n *&foo_g:int =(2 + 10) [line 23]\n " shape="box"] +"other_enum_test11" [label="11: DeclStmt \n *&foo_g:int =(2 + 10) [line 23]\n " shape="box"] - 20 -> 19 ; -19 [label="19: DeclStmt \n *&foo_a:int =0 [line 24]\n " shape="box"] + "other_enum_test11" -> "other_enum_test10" ; +"other_enum_test10" [label="10: DeclStmt \n *&foo_a:int =0 [line 24]\n " shape="box"] - 19 -> 14 ; -18 [label="18: Return Stmt \n *&return:int =0 [line 28]\n " shape="box"] + "other_enum_test10" -> "other_enum_test5" ; +"other_enum_test9" [label="9: Return Stmt \n *&return:int =0 [line 28]\n " shape="box"] - 18 -> 11 ; -17 [label="17: Return Stmt \n n$1=*&foo_g:int [line 26]\n n$2=*&foo_a:int [line 26]\n *&return:int =(n$1 / n$2) [line 26]\n " shape="box"] + "other_enum_test9" -> "other_enum_test2" ; +"other_enum_test8" [label="8: Return Stmt \n n$1=*&foo_g:int [line 26]\n n$2=*&foo_a:int [line 26]\n *&return:int =(n$1 / n$2) [line 26]\n " shape="box"] - 17 -> 11 ; -16 [label="16: Prune (false branch) \n PRUNE(((n$0 == 12) == 0), false); [line 25]\n " shape="invhouse"] + "other_enum_test8" -> "other_enum_test2" ; +"other_enum_test7" [label="7: Prune (false branch) \n PRUNE(((n$0 == 12) == 0), false); [line 25]\n " shape="invhouse"] - 16 -> 18 ; -15 [label="15: Prune (true branch) \n PRUNE(((n$0 == 12) != 0), true); [line 25]\n " shape="invhouse"] + "other_enum_test7" -> "other_enum_test9" ; +"other_enum_test6" [label="6: Prune (true branch) \n PRUNE(((n$0 == 12) != 0), true); [line 25]\n " shape="invhouse"] - 15 -> 17 ; -14 [label="14: BinaryOperatorStmt: EQ \n n$0=*&foo_g:int [line 25]\n " shape="box"] + "other_enum_test6" -> "other_enum_test8" ; +"other_enum_test5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&foo_g:int [line 25]\n " shape="box"] - 14 -> 15 ; - 14 -> 16 ; -13 [label="13: between_join_and_exit \n " shape="box"] + "other_enum_test5" -> "other_enum_test6" ; + "other_enum_test5" -> "other_enum_test7" ; +"other_enum_test4" [label="4: between_join_and_exit \n " shape="box"] - 13 -> 11 ; -12 [label="12: + \n " ] + "other_enum_test4" -> "other_enum_test2" ; +"other_enum_test3" [label="3: + \n " ] - 12 -> 13 ; -11 [label="11: Exit other_enum_test \n " color=yellow style=filled] + "other_enum_test3" -> "other_enum_test4" ; +"other_enum_test2" [label="2: Exit other_enum_test \n " color=yellow style=filled] -10 [label="10: Start other_enum_test\nFormals: \nLocals: foo_a:int foo_g:int \n DECLARE_LOCALS(&return,&foo_a,&foo_g); [line 22]\n " color=yellow style=filled] +"other_enum_test1" [label="1: Start other_enum_test\nFormals: \nLocals: foo_a:int foo_g:int \n DECLARE_LOCALS(&return,&foo_a,&foo_g); [line 22]\n " color=yellow style=filled] - 10 -> 20 ; -9 [label="9: DeclStmt \n *&foo_a:int =0 [line 13]\n " shape="box"] + "other_enum_test1" -> "other_enum_test11" ; +"other_enum_main9" [label="9: DeclStmt \n *&foo_a:int =0 [line 13]\n " shape="box"] - 9 -> 8 ; -8 [label="8: DeclStmt \n *&foo_b:int =1 [line 14]\n " shape="box"] + "other_enum_main9" -> "other_enum_main8" ; +"other_enum_main8" [label="8: DeclStmt \n *&foo_b:int =1 [line 14]\n " shape="box"] - 8 -> 7 ; -7 [label="7: DeclStmt \n *&foo_c:int =10 [line 15]\n " shape="box"] + "other_enum_main8" -> "other_enum_main7" ; +"other_enum_main7" [label="7: DeclStmt \n *&foo_c:int =10 [line 15]\n " shape="box"] - 7 -> 6 ; -6 [label="6: DeclStmt \n *&foo_d:int =11 [line 16]\n " shape="box"] + "other_enum_main7" -> "other_enum_main6" ; +"other_enum_main6" [label="6: DeclStmt \n *&foo_d:int =11 [line 16]\n " shape="box"] - 6 -> 5 ; -5 [label="5: DeclStmt \n *&foo_e:int =1 [line 17]\n " shape="box"] + "other_enum_main6" -> "other_enum_main5" ; +"other_enum_main5" [label="5: DeclStmt \n *&foo_e:int =1 [line 17]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n *&foo_f:int =2 [line 18]\n " shape="box"] + "other_enum_main5" -> "other_enum_main4" ; +"other_enum_main4" [label="4: DeclStmt \n *&foo_f:int =2 [line 18]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n *&foo_g:int =(2 + 10) [line 19]\n " shape="box"] + "other_enum_main4" -> "other_enum_main3" ; +"other_enum_main3" [label="3: DeclStmt \n *&foo_g:int =(2 + 10) [line 19]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit other_enum_main \n " color=yellow style=filled] + "other_enum_main3" -> "other_enum_main2" ; +"other_enum_main2" [label="2: Exit other_enum_main \n " color=yellow style=filled] -1 [label="1: Start other_enum_main\nFormals: \nLocals: foo_g:int foo_f:int foo_e:int foo_d:int foo_c:int foo_b:int foo_a:int \n DECLARE_LOCALS(&return,&foo_g,&foo_f,&foo_e,&foo_d,&foo_c,&foo_b,&foo_a); [line 12]\n " color=yellow style=filled] +"other_enum_main1" [label="1: Start other_enum_main\nFormals: \nLocals: foo_g:int foo_f:int foo_e:int foo_d:int foo_c:int foo_b:int foo_a:int \n DECLARE_LOCALS(&return,&foo_g,&foo_f,&foo_e,&foo_d,&foo_c,&foo_b,&foo_a); [line 12]\n " color=yellow style=filled] - 1 -> 9 ; + "other_enum_main1" -> "other_enum_main9" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/gotostmt/goto_ex.c.dot b/infer/tests/codetoanalyze/c/frontend/gotostmt/goto_ex.c.dot index ca78c135a..728ff338e 100644 --- a/infer/tests/codetoanalyze/c/frontend/gotostmt/goto_ex.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/gotostmt/goto_ex.c.dot @@ -1,1037 +1,1037 @@ /* @generated */ digraph iCFG { -252 [label="252: DeclStmt \n *&i:int =0 [line 170]\n " shape="box"] +"getValue3" [label="3: Return Stmt \n *&return:int =2 [line 12]\n " shape="box"] - 252 -> 251 ; -251 [label="251: DeclStmt \n *&j:int =0 [line 170]\n " shape="box"] + "getValue3" -> "getValue2" ; +"getValue2" [label="2: Exit getValue \n " color=yellow style=filled] - 251 -> 250 ; -250 [label="250: DeclStmt \n *&k:int =0 [line 170]\n " shape="box"] +"getValue1" [label="1: Start getValue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 250 -> 248 ; - 250 -> 249 ; -249 [label="249: Prune (false branch) \n n$10=*&q:int [line 171]\n PRUNE((n$10 == 0), false); [line 171]\n " shape="invhouse"] + "getValue1" -> "getValue3" ; +"g012" [label="12: DeclStmt \n *&a:int =0 [line 15]\n " shape="box"] - 249 -> 247 ; -248 [label="248: Prune (true branch) \n n$10=*&q:int [line 171]\n PRUNE((n$10 != 0), true); [line 171]\n " shape="invhouse"] + "g012" -> "g09" ; +"g011" [label="11: Prune (false branch) \n PRUNE(((n$0 > 1) == 0), false); [line 16]\n " shape="invhouse"] - 248 -> 245 ; -247 [label="247: + \n " ] + "g011" -> "g08" ; +"g010" [label="10: Prune (true branch) \n PRUNE(((n$0 > 1) != 0), true); [line 16]\n " shape="invhouse"] - 247 -> 228 ; -246 [label="246: DeclStmt \n n$7=*&i:int [line 176]\n n$8=*&j:int [line 176]\n n$9=*&k:int [line 176]\n *&v:int =((n$7 + n$8) + n$9) [line 176]\n " shape="box"] + "g010" -> "g06" ; +"g09" [label="9: BinaryOperatorStmt: GT \n n$0=_fun_getValue() [line 16]\n " shape="box"] - 246 -> 241 ; -245 [label="245: Skip GotoLabel_print \n " color="gray"] + "g09" -> "g010" ; + "g09" -> "g011" ; +"g08" [label="8: + \n " ] - 245 -> 244 ; -244 [label="244: Call _fun_printf \n n$6=_fun_printf(\"wow\\n\":char *) [line 179]\n " shape="box"] + "g08" -> "g07" ; +"g07" [label="7: Skip GotoLabel_stepB \n " color="gray"] - 244 -> 240 ; -243 [label="243: Prune (false branch) \n PRUNE(((n$5 >= 15) == 0), false); [line 177]\n " shape="invhouse"] + "g07" -> "g06" ; +"g06" [label="6: Skip GotoLabel_stepC \n " color="gray"] - 243 -> 240 ; -242 [label="242: Prune (true branch) \n PRUNE(((n$5 >= 15) != 0), true); [line 177]\n " shape="invhouse"] + "g06" -> "g05" ; +"g05" [label="5: Skip GotoLabel_stepD \n " color="gray"] - 242 -> 245 ; -241 [label="241: BinaryOperatorStmt: GE \n n$5=*&v:int [line 177]\n " shape="box"] + "g05" -> "g04" ; +"g04" [label="4: BinaryOperatorStmt: Assign \n *&a:int =1 [line 22]\n " shape="box"] - 241 -> 242 ; - 241 -> 243 ; -240 [label="240: + \n " ] + "g04" -> "g03" ; +"g03" [label="3: Return Stmt \n *&return:int =1 [line 23]\n " shape="box"] - 240 -> 236 ; -239 [label="239: Prune (false branch) \n PRUNE(((n$4 < 10) == 0), false); [line 175]\n " shape="invhouse"] + "g03" -> "g02" ; +"g02" [label="2: Exit g0 \n " color=yellow style=filled] - 239 -> 232 ; -238 [label="238: Prune (true branch) \n PRUNE(((n$4 < 10) != 0), true); [line 175]\n " shape="invhouse"] +"g01" [label="1: Start g0\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 14]\n " color=yellow style=filled] - 238 -> 246 ; -237 [label="237: BinaryOperatorStmt: LT \n n$4=*&k:int [line 175]\n " shape="box"] + "g01" -> "g012" ; +"g234" [label="34: DeclStmt \n *&a:int =0 [line 38]\n " shape="box"] - 237 -> 238 ; - 237 -> 239 ; -236 [label="236: + \n " ] + "g234" -> "g214" ; +"g233" [label="33: BinaryOperatorStmt: Assign \n *&a:int =1 [line 40]\n " shape="box"] - 236 -> 237 ; -235 [label="235: Prune (false branch) \n PRUNE(((n$3 < 10) == 0), false); [line 174]\n " shape="invhouse"] + "g233" -> "g226" ; +"g232" [label="32: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 42]\n PRUNE((n$6 == 0), false); [line 42]\n " shape="invhouse"] - 235 -> 228 ; -234 [label="234: Prune (true branch) \n PRUNE(((n$3 < 10) != 0), true); [line 174]\n " shape="invhouse"] + "g232" -> "g224" ; +"g231" [label="31: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 42]\n PRUNE((n$6 != 0), true); [line 42]\n " shape="invhouse"] - 234 -> 236 ; -233 [label="233: BinaryOperatorStmt: LT \n n$3=*&j:int [line 174]\n " shape="box"] + "g231" -> "g25" ; +"g230" [label="30: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =1 [line 42]\n " shape="box"] - 233 -> 234 ; - 233 -> 235 ; -232 [label="232: + \n " ] + "g230" -> "g225" ; +"g229" [label="29: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =0 [line 42]\n " shape="box"] - 232 -> 233 ; -231 [label="231: Prune (false branch) \n PRUNE(((n$2 < 10) == 0), false); [line 173]\n " shape="invhouse"] + "g229" -> "g225" ; +"g228" [label="28: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 42]\n " shape="invhouse"] - 231 -> 227 ; -230 [label="230: Prune (true branch) \n PRUNE(((n$2 < 10) != 0), true); [line 173]\n " shape="invhouse"] + "g228" -> "g230" ; +"g227" [label="27: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 42]\n " shape="invhouse"] - 230 -> 232 ; -229 [label="229: BinaryOperatorStmt: LT \n n$2=*&i:int [line 173]\n " shape="box"] + "g227" -> "g229" ; +"g226" [label="26: Call _fun_getValue \n n$5=_fun_getValue() [line 42]\n " shape="box"] - 229 -> 230 ; - 229 -> 231 ; -228 [label="228: + \n " ] + "g226" -> "g227" ; + "g226" -> "g228" ; +"g225" [label="25: + \n " ] - 228 -> 229 ; -227 [label="227: Skip GotoLabel_out \n " color="gray"] + "g225" -> "g231" ; + "g225" -> "g232" ; +"g224" [label="24: + \n " ] - 227 -> 226 ; -226 [label="226: Call _fun_printf \n n$1=_fun_printf(\"out!\\n\":char *) [line 186]\n " shape="box"] + "g224" -> "g217" ; +"g223" [label="23: Prune (false branch) \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 44]\n PRUNE((n$3 == 0), false); [line 44]\n " shape="invhouse"] - 226 -> 225 ; -225 [label="225: Skip GotoLabel_terminate \n " color="gray"] + "g223" -> "g215" ; +"g222" [label="22: Prune (true branch) \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 44]\n PRUNE((n$3 != 0), true); [line 44]\n " shape="invhouse"] - 225 -> 224 ; -224 [label="224: Call _fun_printf \n n$0=_fun_printf(\"terminating!\\n\":char *) [line 188]\n " shape="box"] + "g222" -> "g28" ; +"g221" [label="21: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 44]\n " shape="box"] - 224 -> 223 ; -223 [label="223: Return Stmt \n *&return:int =2 [line 189]\n " shape="box"] + "g221" -> "g216" ; +"g220" [label="20: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =0 [line 44]\n " shape="box"] - 223 -> 222 ; -222 [label="222: Exit g8 \n " color=yellow style=filled] + "g220" -> "g216" ; +"g219" [label="19: Prune (false branch) \n PRUNE((n$2 == 0), false); [line 44]\n " shape="invhouse"] -221 [label="221: Start g8\nFormals: q:int \nLocals: v:int k:int j:int i:int \n DECLARE_LOCALS(&return,&v,&k,&j,&i); [line 169]\n " color=yellow style=filled] + "g219" -> "g221" ; +"g218" [label="18: Prune (true branch) \n PRUNE((n$2 != 0), true); [line 44]\n " shape="invhouse"] - 221 -> 252 ; -220 [label="220: DeclStmt \n *&i:int =0 [line 147]\n " shape="box"] + "g218" -> "g220" ; +"g217" [label="17: Call _fun_getValue \n n$2=_fun_getValue() [line 44]\n " shape="box"] - 220 -> 219 ; -219 [label="219: DeclStmt \n *&j:int =0 [line 147]\n " shape="box"] + "g217" -> "g218" ; + "g217" -> "g219" ; +"g216" [label="16: + \n " ] - 219 -> 218 ; -218 [label="218: DeclStmt \n *&k:int =0 [line 147]\n " shape="box"] + "g216" -> "g222" ; + "g216" -> "g223" ; +"g215" [label="15: + \n " ] - 218 -> 200 ; -217 [label="217: DeclStmt \n n$7=*&i:int [line 151]\n n$8=*&j:int [line 151]\n n$9=*&k:int [line 151]\n *&v:int =((n$7 + n$8) + n$9) [line 151]\n " shape="box"] + "g215" -> "g211" ; +"g214" [label="14: Skip GotoLabel_stepB \n " color="gray"] - 217 -> 213 ; -216 [label="216: Call _fun_printf \n n$6=_fun_printf(\"wow\\n\":char *) [line 155]\n " shape="box"] + "g214" -> "g233" ; +"g213" [label="13: Prune (false branch) \n PRUNE(((n$0 > 1) == 0), false); [line 46]\n " shape="invhouse"] - 216 -> 196 ; -215 [label="215: Prune (false branch) \n PRUNE(((n$5 >= 15) == 0), false); [line 152]\n " shape="invhouse"] + "g213" -> "g210" ; +"g212" [label="12: Prune (true branch) \n PRUNE(((n$0 > 1) != 0), true); [line 46]\n " shape="invhouse"] - 215 -> 212 ; -214 [label="214: Prune (true branch) \n PRUNE(((n$5 >= 15) != 0), true); [line 152]\n " shape="invhouse"] + "g212" -> "g214" ; +"g211" [label="11: BinaryOperatorStmt: GT \n n$0=_fun_getValue() [line 46]\n " shape="box"] - 214 -> 199 ; -213 [label="213: BinaryOperatorStmt: GE \n n$5=*&v:int [line 152]\n " shape="box"] + "g211" -> "g212" ; + "g211" -> "g213" ; +"g210" [label="10: + \n " ] - 213 -> 214 ; - 213 -> 215 ; -212 [label="212: + \n " ] + "g210" -> "g29" ; +"g29" [label="9: Return Stmt \n *&return:int =0 [line 48]\n " shape="box"] - 212 -> 208 ; -211 [label="211: Prune (false branch) \n PRUNE(((n$4 < 10) == 0), false); [line 150]\n " shape="invhouse"] + "g29" -> "g22" ; +"g28" [label="8: Skip GotoLabel_stepA \n " color="gray"] - 211 -> 204 ; -210 [label="210: Prune (true branch) \n PRUNE(((n$4 < 10) != 0), true); [line 150]\n " shape="invhouse"] + "g28" -> "g27" ; +"g27" [label="7: BinaryOperatorStmt: Assign \n *&a:int =2 [line 51]\n " shape="box"] - 210 -> 217 ; -209 [label="209: BinaryOperatorStmt: LT \n n$4=*&k:int [line 150]\n " shape="box"] + "g27" -> "g26" ; +"g26" [label="6: Return Stmt \n *&return:int =2 [line 52]\n " shape="box"] - 209 -> 210 ; - 209 -> 211 ; -208 [label="208: + \n " ] + "g26" -> "g22" ; +"g25" [label="5: Skip GotoLabel_exit_step \n " color="gray"] - 208 -> 209 ; -207 [label="207: Prune (false branch) \n PRUNE(((n$3 < 10) == 0), false); [line 149]\n " shape="invhouse"] + "g25" -> "g24" ; +"g24" [label="4: BinaryOperatorStmt: Assign \n *&a:int =3 [line 55]\n " shape="box"] - 207 -> 200 ; -206 [label="206: Prune (true branch) \n PRUNE(((n$3 < 10) != 0), true); [line 149]\n " shape="invhouse"] + "g24" -> "g23" ; +"g23" [label="3: Return Stmt \n *&return:int =1 [line 56]\n " shape="box"] - 206 -> 208 ; -205 [label="205: BinaryOperatorStmt: LT \n n$3=*&j:int [line 149]\n " shape="box"] + "g23" -> "g22" ; +"g22" [label="2: Exit g2 \n " color=yellow style=filled] - 205 -> 206 ; - 205 -> 207 ; -204 [label="204: + \n " ] +"g21" [label="1: Start g2\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$1:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int a:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$1,&0$?%__sil_tmpSIL_temp_conditional___n$4,&a); [line 37]\n " color=yellow style=filled] - 204 -> 205 ; -203 [label="203: Prune (false branch) \n PRUNE(((n$2 < 10) == 0), false); [line 148]\n " shape="invhouse"] + "g21" -> "g234" ; +"g334" [label="34: Call _fun_printf \n n$10=_fun_printf(\"B\\n\":char *) [line 61]\n " shape="box"] - 203 -> 199 ; -202 [label="202: Prune (true branch) \n PRUNE(((n$2 < 10) != 0), true); [line 148]\n " shape="invhouse"] + "g334" -> "g327" ; +"g333" [label="33: Prune (false branch) \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 63]\n PRUNE((n$9 == 0), false); [line 63]\n " shape="invhouse"] - 202 -> 204 ; -201 [label="201: BinaryOperatorStmt: LT \n n$2=*&i:int [line 148]\n " shape="box"] + "g333" -> "g325" ; +"g332" [label="32: Prune (true branch) \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 63]\n PRUNE((n$9 != 0), true); [line 63]\n " shape="invhouse"] - 201 -> 202 ; - 201 -> 203 ; -200 [label="200: + \n " ] + "g332" -> "g35" ; +"g331" [label="31: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =1 [line 63]\n " shape="box"] - 200 -> 201 ; -199 [label="199: Skip GotoLabel_out \n " color="gray"] + "g331" -> "g326" ; +"g330" [label="30: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =0 [line 63]\n " shape="box"] - 199 -> 198 ; -198 [label="198: Call _fun_printf \n n$1=_fun_printf(\"out!\\n\":char *) [line 162]\n " shape="box"] + "g330" -> "g326" ; +"g329" [label="29: Prune (false branch) \n PRUNE((n$8 == 0), false); [line 63]\n " shape="invhouse"] - 198 -> 197 ; -197 [label="197: Skip GotoLabel_print \n " color="gray"] + "g329" -> "g331" ; +"g328" [label="28: Prune (true branch) \n PRUNE((n$8 != 0), true); [line 63]\n " shape="invhouse"] - 197 -> 216 ; -196 [label="196: Skip GotoLabel_terminate \n " color="gray"] + "g328" -> "g330" ; +"g327" [label="27: Call _fun_getValue \n n$8=_fun_getValue() [line 63]\n " shape="box"] - 196 -> 195 ; -195 [label="195: Call _fun_printf \n n$0=_fun_printf(\"terminating!\\n\":char *) [line 165]\n " shape="box"] + "g327" -> "g328" ; + "g327" -> "g329" ; +"g326" [label="26: + \n " ] - 195 -> 194 ; -194 [label="194: Return Stmt \n *&return:int =2 [line 166]\n " shape="box"] + "g326" -> "g332" ; + "g326" -> "g333" ; +"g325" [label="25: + \n " ] - 194 -> 193 ; -193 [label="193: Exit g7 \n " color=yellow style=filled] + "g325" -> "g318" ; +"g324" [label="24: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 65]\n PRUNE((n$6 == 0), false); [line 65]\n " shape="invhouse"] -192 [label="192: Start g7\nFormals: \nLocals: v:int k:int j:int i:int \n DECLARE_LOCALS(&return,&v,&k,&j,&i); [line 146]\n " color=yellow style=filled] + "g324" -> "g316" ; +"g323" [label="23: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 65]\n PRUNE((n$6 != 0), true); [line 65]\n " shape="invhouse"] - 192 -> 220 ; -191 [label="191: Call _fun_printf \n n$9=_fun_printf(\"B\\n\":char *) [line 126]\n " shape="box"] + "g323" -> "g38" ; +"g322" [label="22: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =1 [line 65]\n " shape="box"] - 191 -> 184 ; -190 [label="190: Prune (false branch) \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 128]\n PRUNE((n$8 == 0), false); [line 128]\n " shape="invhouse"] + "g322" -> "g317" ; +"g321" [label="21: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =0 [line 65]\n " shape="box"] - 190 -> 182 ; -189 [label="189: Prune (true branch) \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 128]\n PRUNE((n$8 != 0), true); [line 128]\n " shape="invhouse"] + "g321" -> "g317" ; +"g320" [label="20: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 65]\n " shape="invhouse"] - 189 -> 164 ; -188 [label="188: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =1 [line 128]\n " shape="box"] + "g320" -> "g322" ; +"g319" [label="19: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 65]\n " shape="invhouse"] - 188 -> 183 ; -187 [label="187: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =0 [line 128]\n " shape="box"] + "g319" -> "g321" ; +"g318" [label="18: Call _fun_getValue \n n$5=_fun_getValue() [line 65]\n " shape="box"] - 187 -> 183 ; -186 [label="186: Prune (false branch) \n PRUNE((n$7 == 0), false); [line 128]\n " shape="invhouse"] + "g318" -> "g319" ; + "g318" -> "g320" ; +"g317" [label="17: + \n " ] - 186 -> 188 ; -185 [label="185: Prune (true branch) \n PRUNE((n$7 != 0), true); [line 128]\n " shape="invhouse"] + "g317" -> "g323" ; + "g317" -> "g324" ; +"g316" [label="16: + \n " ] - 185 -> 187 ; -184 [label="184: Call _fun_getValue \n n$7=_fun_getValue() [line 128]\n " shape="box"] + "g316" -> "g312" ; +"g315" [label="15: Skip GotoLabel_stepB \n " color="gray"] - 184 -> 185 ; - 184 -> 186 ; -183 [label="183: + \n " ] + "g315" -> "g334" ; +"g314" [label="14: Prune (false branch) \n PRUNE(((n$3 > 1) == 0), false); [line 67]\n " shape="invhouse"] - 183 -> 189 ; - 183 -> 190 ; -182 [label="182: + \n " ] + "g314" -> "g311" ; +"g313" [label="13: Prune (true branch) \n PRUNE(((n$3 > 1) != 0), true); [line 67]\n " shape="invhouse"] - 182 -> 175 ; -181 [label="181: Prune (false branch) \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 130]\n PRUNE((n$5 == 0), false); [line 130]\n " shape="invhouse"] + "g313" -> "g315" ; +"g312" [label="12: BinaryOperatorStmt: GT \n n$3=_fun_getValue() [line 67]\n " shape="box"] - 181 -> 173 ; -180 [label="180: Prune (true branch) \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 130]\n PRUNE((n$5 != 0), true); [line 130]\n " shape="invhouse"] + "g312" -> "g313" ; + "g312" -> "g314" ; +"g311" [label="11: + \n " ] - 180 -> 162 ; -179 [label="179: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 130]\n " shape="box"] + "g311" -> "g310" ; +"g310" [label="10: Call _fun_printf \n n$2=_fun_printf(\"g3\\n\":char *) [line 69]\n " shape="box"] - 179 -> 174 ; -178 [label="178: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 130]\n " shape="box"] + "g310" -> "g39" ; +"g39" [label="9: Return Stmt \n *&return:int =0 [line 70]\n " shape="box"] - 178 -> 174 ; -177 [label="177: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 130]\n " shape="invhouse"] + "g39" -> "g32" ; +"g38" [label="8: Skip GotoLabel_stepA \n " color="gray"] - 177 -> 179 ; -176 [label="176: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 130]\n " shape="invhouse"] + "g38" -> "g37" ; +"g37" [label="7: DeclStmt \n *&a:int =2 [line 73]\n " shape="box"] - 176 -> 178 ; -175 [label="175: Call _fun_getValue \n n$4=_fun_getValue() [line 130]\n " shape="box"] + "g37" -> "g36" ; +"g36" [label="6: Call _fun_printf \n n$1=_fun_printf(\"A\\n\":char *) [line 74]\n " shape="box"] - 175 -> 176 ; - 175 -> 177 ; -174 [label="174: + \n " ] + "g36" -> "g35" ; +"g35" [label="5: Skip GotoLabel_exit_step \n " color="gray"] - 174 -> 180 ; - 174 -> 181 ; -173 [label="173: + \n " ] + "g35" -> "g34" ; +"g34" [label="4: Call _fun_printf \n n$0=_fun_printf(\"exit\\n\":char *) [line 77]\n " shape="box"] - 173 -> 169 ; -172 [label="172: Skip GotoLabel_stepB \n " color="gray"] + "g34" -> "g33" ; +"g33" [label="3: Return Stmt \n *&return:int =1 [line 78]\n " shape="box"] - 172 -> 191 ; -171 [label="171: Prune (false branch) \n PRUNE(((n$2 > 1) == 0), false); [line 132]\n " shape="invhouse"] + "g33" -> "g32" ; +"g32" [label="2: Exit g3 \n " color=yellow style=filled] - 171 -> 168 ; -170 [label="170: Prune (true branch) \n PRUNE(((n$2 > 1) != 0), true); [line 132]\n " shape="invhouse"] +"g31" [label="1: Start g3\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int 0$?%__sil_tmpSIL_temp_conditional___n$7:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$4,&0$?%__sil_tmpSIL_temp_conditional___n$7); [line 59]\n " color=yellow style=filled] - 170 -> 172 ; -169 [label="169: BinaryOperatorStmt: GT \n n$2=_fun_getValue() [line 132]\n " shape="box"] + "g31" -> "g315" ; +"g111" [label="11: DeclStmt \n *&a:int =0 [line 27]\n " shape="box"] - 169 -> 170 ; - 169 -> 171 ; -168 [label="168: + \n " ] + "g111" -> "g18" ; +"g110" [label="10: Prune (false branch) \n PRUNE(((n$0 > 1) == 0), false); [line 28]\n " shape="invhouse"] - 168 -> 164 ; -167 [label="167: DeclStmt \n *&a:int =2 [line 137]\n " shape="box"] + "g110" -> "g17" ; +"g19" [label="9: Prune (true branch) \n PRUNE(((n$0 > 1) != 0), true); [line 28]\n " shape="invhouse"] - 167 -> 166 ; -166 [label="166: Call _fun_printf \n n$1=_fun_printf(\"A\\n\":char *) [line 138]\n " shape="box"] + "g19" -> "g15" ; +"g18" [label="8: BinaryOperatorStmt: GT \n n$0=_fun_getValue() [line 28]\n " shape="box"] - 166 -> 165 ; -165 [label="165: Return Stmt \n *&return:int =1 [line 140]\n " shape="box"] + "g18" -> "g19" ; + "g18" -> "g110" ; +"g17" [label="7: + \n " ] - 165 -> 161 ; -164 [label="164: Skip GotoLabel_exit_step \n " color="gray"] + "g17" -> "g16" ; +"g16" [label="6: Return Stmt \n *&return:int =0 [line 30]\n " shape="box"] - 164 -> 163 ; -163 [label="163: Call _fun_printf \n n$0=_fun_printf(\"exit\\n\":char *) [line 142]\n " shape="box"] + "g16" -> "g12" ; +"g15" [label="5: Skip GotoLabel_stepB \n " color="gray"] - 163 -> 162 ; -162 [label="162: Skip GotoLabel_stepA \n " color="gray"] + "g15" -> "g14" ; +"g14" [label="4: BinaryOperatorStmt: Assign \n *&a:int =1 [line 33]\n " shape="box"] - 162 -> 167 ; -161 [label="161: Exit g6 \n " color=yellow style=filled] + "g14" -> "g13" ; +"g13" [label="3: Return Stmt \n *&return:int =1 [line 34]\n " shape="box"] -160 [label="160: Start g6\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int 0$?%__sil_tmpSIL_temp_conditional___n$6:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$3,&0$?%__sil_tmpSIL_temp_conditional___n$6); [line 124]\n " color=yellow style=filled] + "g13" -> "g12" ; +"g12" [label="2: Exit g1 \n " color=yellow style=filled] - 160 -> 172 ; -159 [label="159: Call _fun_printf \n n$9=_fun_printf(\"B\\n\":char *) [line 104]\n " shape="box"] +"g11" [label="1: Start g1\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 26]\n " color=yellow style=filled] - 159 -> 152 ; -158 [label="158: Prune (false branch) \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 106]\n PRUNE((n$8 == 0), false); [line 106]\n " shape="invhouse"] + "g11" -> "g111" ; +"g632" [label="32: Call _fun_printf \n n$9=_fun_printf(\"B\\n\":char *) [line 126]\n " shape="box"] - 158 -> 150 ; -157 [label="157: Prune (true branch) \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 106]\n PRUNE((n$8 != 0), true); [line 106]\n " shape="invhouse"] + "g632" -> "g625" ; +"g631" [label="31: Prune (false branch) \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 128]\n PRUNE((n$8 == 0), false); [line 128]\n " shape="invhouse"] - 157 -> 132 ; -156 [label="156: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =1 [line 106]\n " shape="box"] + "g631" -> "g623" ; +"g630" [label="30: Prune (true branch) \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 128]\n PRUNE((n$8 != 0), true); [line 128]\n " shape="invhouse"] - 156 -> 151 ; -155 [label="155: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =0 [line 106]\n " shape="box"] + "g630" -> "g65" ; +"g629" [label="29: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =1 [line 128]\n " shape="box"] - 155 -> 151 ; -154 [label="154: Prune (false branch) \n PRUNE((n$7 == 0), false); [line 106]\n " shape="invhouse"] + "g629" -> "g624" ; +"g628" [label="28: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =0 [line 128]\n " shape="box"] - 154 -> 156 ; -153 [label="153: Prune (true branch) \n PRUNE((n$7 != 0), true); [line 106]\n " shape="invhouse"] + "g628" -> "g624" ; +"g627" [label="27: Prune (false branch) \n PRUNE((n$7 == 0), false); [line 128]\n " shape="invhouse"] - 153 -> 155 ; -152 [label="152: Call _fun_getValue \n n$7=_fun_getValue() [line 106]\n " shape="box"] + "g627" -> "g629" ; +"g626" [label="26: Prune (true branch) \n PRUNE((n$7 != 0), true); [line 128]\n " shape="invhouse"] - 152 -> 153 ; - 152 -> 154 ; -151 [label="151: + \n " ] + "g626" -> "g628" ; +"g625" [label="25: Call _fun_getValue \n n$7=_fun_getValue() [line 128]\n " shape="box"] - 151 -> 157 ; - 151 -> 158 ; -150 [label="150: + \n " ] + "g625" -> "g626" ; + "g625" -> "g627" ; +"g624" [label="24: + \n " ] - 150 -> 143 ; -149 [label="149: Prune (false branch) \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 108]\n PRUNE((n$5 == 0), false); [line 108]\n " shape="invhouse"] + "g624" -> "g630" ; + "g624" -> "g631" ; +"g623" [label="23: + \n " ] - 149 -> 141 ; -148 [label="148: Prune (true branch) \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 108]\n PRUNE((n$5 != 0), true); [line 108]\n " shape="invhouse"] + "g623" -> "g616" ; +"g622" [label="22: Prune (false branch) \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 130]\n PRUNE((n$5 == 0), false); [line 130]\n " shape="invhouse"] - 148 -> 130 ; -147 [label="147: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 108]\n " shape="box"] + "g622" -> "g614" ; +"g621" [label="21: Prune (true branch) \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 130]\n PRUNE((n$5 != 0), true); [line 130]\n " shape="invhouse"] - 147 -> 142 ; -146 [label="146: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 108]\n " shape="box"] + "g621" -> "g63" ; +"g620" [label="20: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 130]\n " shape="box"] - 146 -> 142 ; -145 [label="145: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 108]\n " shape="invhouse"] + "g620" -> "g615" ; +"g619" [label="19: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 130]\n " shape="box"] - 145 -> 147 ; -144 [label="144: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 108]\n " shape="invhouse"] + "g619" -> "g615" ; +"g618" [label="18: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 130]\n " shape="invhouse"] - 144 -> 146 ; -143 [label="143: Call _fun_getValue \n n$4=_fun_getValue() [line 108]\n " shape="box"] + "g618" -> "g620" ; +"g617" [label="17: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 130]\n " shape="invhouse"] - 143 -> 144 ; - 143 -> 145 ; -142 [label="142: + \n " ] + "g617" -> "g619" ; +"g616" [label="16: Call _fun_getValue \n n$4=_fun_getValue() [line 130]\n " shape="box"] - 142 -> 148 ; - 142 -> 149 ; -141 [label="141: + \n " ] + "g616" -> "g617" ; + "g616" -> "g618" ; +"g615" [label="15: + \n " ] - 141 -> 137 ; -140 [label="140: Skip GotoLabel_stepB \n " color="gray"] + "g615" -> "g621" ; + "g615" -> "g622" ; +"g614" [label="14: + \n " ] - 140 -> 159 ; -139 [label="139: Prune (false branch) \n PRUNE(((n$2 > 1) == 0), false); [line 110]\n " shape="invhouse"] + "g614" -> "g610" ; +"g613" [label="13: Skip GotoLabel_stepB \n " color="gray"] - 139 -> 136 ; -138 [label="138: Prune (true branch) \n PRUNE(((n$2 > 1) != 0), true); [line 110]\n " shape="invhouse"] + "g613" -> "g632" ; +"g612" [label="12: Prune (false branch) \n PRUNE(((n$2 > 1) == 0), false); [line 132]\n " shape="invhouse"] - 138 -> 140 ; -137 [label="137: BinaryOperatorStmt: GT \n n$2=_fun_getValue() [line 110]\n " shape="box"] + "g612" -> "g69" ; +"g611" [label="11: Prune (true branch) \n PRUNE(((n$2 > 1) != 0), true); [line 132]\n " shape="invhouse"] - 137 -> 138 ; - 137 -> 139 ; -136 [label="136: + \n " ] + "g611" -> "g613" ; +"g610" [label="10: BinaryOperatorStmt: GT \n n$2=_fun_getValue() [line 132]\n " shape="box"] - 136 -> 132 ; -135 [label="135: DeclStmt \n *&a:int =2 [line 115]\n " shape="box"] + "g610" -> "g611" ; + "g610" -> "g612" ; +"g69" [label="9: + \n " ] - 135 -> 134 ; -134 [label="134: Call _fun_printf \n n$1=_fun_printf(\"A\\n\":char *) [line 116]\n " shape="box"] + "g69" -> "g65" ; +"g68" [label="8: DeclStmt \n *&a:int =2 [line 137]\n " shape="box"] - 134 -> 133 ; -133 [label="133: Return Stmt \n *&return:int =1 [line 117]\n " shape="box"] + "g68" -> "g67" ; +"g67" [label="7: Call _fun_printf \n n$1=_fun_printf(\"A\\n\":char *) [line 138]\n " shape="box"] - 133 -> 129 ; -132 [label="132: Skip GotoLabel_exit_step \n " color="gray"] + "g67" -> "g66" ; +"g66" [label="6: Return Stmt \n *&return:int =1 [line 140]\n " shape="box"] - 132 -> 131 ; -131 [label="131: Call _fun_printf \n n$0=_fun_printf(\"exit\\n\":char *) [line 120]\n " shape="box"] + "g66" -> "g62" ; +"g65" [label="5: Skip GotoLabel_exit_step \n " color="gray"] - 131 -> 130 ; -130 [label="130: Skip GotoLabel_stepA \n " color="gray"] + "g65" -> "g64" ; +"g64" [label="4: Call _fun_printf \n n$0=_fun_printf(\"exit\\n\":char *) [line 142]\n " shape="box"] - 130 -> 135 ; -129 [label="129: Exit g5 \n " color=yellow style=filled] + "g64" -> "g63" ; +"g63" [label="3: Skip GotoLabel_stepA \n " color="gray"] -128 [label="128: Start g5\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int 0$?%__sil_tmpSIL_temp_conditional___n$6:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$3,&0$?%__sil_tmpSIL_temp_conditional___n$6); [line 102]\n " color=yellow style=filled] + "g63" -> "g68" ; +"g62" [label="2: Exit g6 \n " color=yellow style=filled] - 128 -> 140 ; -127 [label="127: Call _fun_printf \n n$10=_fun_printf(\"B\\n\":char *) [line 83]\n " shape="box"] +"g61" [label="1: Start g6\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int 0$?%__sil_tmpSIL_temp_conditional___n$6:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$3,&0$?%__sil_tmpSIL_temp_conditional___n$6); [line 124]\n " color=yellow style=filled] - 127 -> 120 ; -126 [label="126: Prune (false branch) \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 85]\n PRUNE((n$9 == 0), false); [line 85]\n " shape="invhouse"] + "g61" -> "g613" ; +"g532" [label="32: Call _fun_printf \n n$9=_fun_printf(\"B\\n\":char *) [line 104]\n " shape="box"] - 126 -> 118 ; -125 [label="125: Prune (true branch) \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 85]\n PRUNE((n$9 != 0), true); [line 85]\n " shape="invhouse"] + "g532" -> "g525" ; +"g531" [label="31: Prune (false branch) \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 106]\n PRUNE((n$8 == 0), false); [line 106]\n " shape="invhouse"] - 125 -> 99 ; -124 [label="124: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =1 [line 85]\n " shape="box"] + "g531" -> "g523" ; +"g530" [label="30: Prune (true branch) \n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 106]\n PRUNE((n$8 != 0), true); [line 106]\n " shape="invhouse"] - 124 -> 119 ; -123 [label="123: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =0 [line 85]\n " shape="box"] + "g530" -> "g55" ; +"g529" [label="29: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =1 [line 106]\n " shape="box"] - 123 -> 119 ; -122 [label="122: Prune (false branch) \n PRUNE((n$8 == 0), false); [line 85]\n " shape="invhouse"] + "g529" -> "g524" ; +"g528" [label="28: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =0 [line 106]\n " shape="box"] - 122 -> 124 ; -121 [label="121: Prune (true branch) \n PRUNE((n$8 != 0), true); [line 85]\n " shape="invhouse"] + "g528" -> "g524" ; +"g527" [label="27: Prune (false branch) \n PRUNE((n$7 == 0), false); [line 106]\n " shape="invhouse"] - 121 -> 123 ; -120 [label="120: Call _fun_getValue \n n$8=_fun_getValue() [line 85]\n " shape="box"] + "g527" -> "g529" ; +"g526" [label="26: Prune (true branch) \n PRUNE((n$7 != 0), true); [line 106]\n " shape="invhouse"] - 120 -> 121 ; - 120 -> 122 ; -119 [label="119: + \n " ] + "g526" -> "g528" ; +"g525" [label="25: Call _fun_getValue \n n$7=_fun_getValue() [line 106]\n " shape="box"] - 119 -> 125 ; - 119 -> 126 ; -118 [label="118: + \n " ] + "g525" -> "g526" ; + "g525" -> "g527" ; +"g524" [label="24: + \n " ] - 118 -> 111 ; -117 [label="117: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 87]\n PRUNE((n$6 == 0), false); [line 87]\n " shape="invhouse"] + "g524" -> "g530" ; + "g524" -> "g531" ; +"g523" [label="23: + \n " ] - 117 -> 109 ; -116 [label="116: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 87]\n PRUNE((n$6 != 0), true); [line 87]\n " shape="invhouse"] + "g523" -> "g516" ; +"g522" [label="22: Prune (false branch) \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 108]\n PRUNE((n$5 == 0), false); [line 108]\n " shape="invhouse"] - 116 -> 102 ; -115 [label="115: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =1 [line 87]\n " shape="box"] + "g522" -> "g514" ; +"g521" [label="21: Prune (true branch) \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 108]\n PRUNE((n$5 != 0), true); [line 108]\n " shape="invhouse"] - 115 -> 110 ; -114 [label="114: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =0 [line 87]\n " shape="box"] + "g521" -> "g53" ; +"g520" [label="20: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 108]\n " shape="box"] - 114 -> 110 ; -113 [label="113: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 87]\n " shape="invhouse"] + "g520" -> "g515" ; +"g519" [label="19: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =0 [line 108]\n " shape="box"] - 113 -> 115 ; -112 [label="112: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 87]\n " shape="invhouse"] + "g519" -> "g515" ; +"g518" [label="18: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 108]\n " shape="invhouse"] - 112 -> 114 ; -111 [label="111: Call _fun_getValue \n n$5=_fun_getValue() [line 87]\n " shape="box"] + "g518" -> "g520" ; +"g517" [label="17: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 108]\n " shape="invhouse"] - 111 -> 112 ; - 111 -> 113 ; -110 [label="110: + \n " ] + "g517" -> "g519" ; +"g516" [label="16: Call _fun_getValue \n n$4=_fun_getValue() [line 108]\n " shape="box"] - 110 -> 116 ; - 110 -> 117 ; -109 [label="109: + \n " ] + "g516" -> "g517" ; + "g516" -> "g518" ; +"g515" [label="15: + \n " ] - 109 -> 105 ; -108 [label="108: Skip GotoLabel_stepB \n " color="gray"] + "g515" -> "g521" ; + "g515" -> "g522" ; +"g514" [label="14: + \n " ] - 108 -> 127 ; -107 [label="107: Prune (false branch) \n PRUNE(((n$3 > 1) == 0), false); [line 89]\n " shape="invhouse"] + "g514" -> "g510" ; +"g513" [label="13: Skip GotoLabel_stepB \n " color="gray"] - 107 -> 104 ; -106 [label="106: Prune (true branch) \n PRUNE(((n$3 > 1) != 0), true); [line 89]\n " shape="invhouse"] + "g513" -> "g532" ; +"g512" [label="12: Prune (false branch) \n PRUNE(((n$2 > 1) == 0), false); [line 110]\n " shape="invhouse"] - 106 -> 108 ; -105 [label="105: BinaryOperatorStmt: GT \n n$3=_fun_getValue() [line 89]\n " shape="box"] + "g512" -> "g59" ; +"g511" [label="11: Prune (true branch) \n PRUNE(((n$2 > 1) != 0), true); [line 110]\n " shape="invhouse"] - 105 -> 106 ; - 105 -> 107 ; -104 [label="104: + \n " ] + "g511" -> "g513" ; +"g510" [label="10: BinaryOperatorStmt: GT \n n$2=_fun_getValue() [line 110]\n " shape="box"] - 104 -> 103 ; -103 [label="103: Call _fun_printf \n n$2=_fun_printf(\"g4\\n\":char *) [line 91]\n " shape="box"] + "g510" -> "g511" ; + "g510" -> "g512" ; +"g59" [label="9: + \n " ] - 103 -> 102 ; -102 [label="102: Skip GotoLabel_stepA \n " color="gray"] + "g59" -> "g55" ; +"g58" [label="8: DeclStmt \n *&a:int =2 [line 115]\n " shape="box"] - 102 -> 101 ; -101 [label="101: DeclStmt \n *&a:int =2 [line 94]\n " shape="box"] + "g58" -> "g57" ; +"g57" [label="7: Call _fun_printf \n n$1=_fun_printf(\"A\\n\":char *) [line 116]\n " shape="box"] - 101 -> 100 ; -100 [label="100: Call _fun_printf \n n$1=_fun_printf(\"A\\n\":char *) [line 95]\n " shape="box"] + "g57" -> "g56" ; +"g56" [label="6: Return Stmt \n *&return:int =1 [line 117]\n " shape="box"] - 100 -> 99 ; -99 [label="99: Skip GotoLabel_exit_step \n " color="gray"] + "g56" -> "g52" ; +"g55" [label="5: Skip GotoLabel_exit_step \n " color="gray"] - 99 -> 98 ; -98 [label="98: Call _fun_printf \n n$0=_fun_printf(\"exit\\n\":char *) [line 98]\n " shape="box"] + "g55" -> "g54" ; +"g54" [label="4: Call _fun_printf \n n$0=_fun_printf(\"exit\\n\":char *) [line 120]\n " shape="box"] - 98 -> 97 ; -97 [label="97: Return Stmt \n *&return:int =1 [line 99]\n " shape="box"] + "g54" -> "g53" ; +"g53" [label="3: Skip GotoLabel_stepA \n " color="gray"] - 97 -> 96 ; -96 [label="96: Exit g4 \n " color=yellow style=filled] + "g53" -> "g58" ; +"g52" [label="2: Exit g5 \n " color=yellow style=filled] -95 [label="95: Start g4\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int 0$?%__sil_tmpSIL_temp_conditional___n$7:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$4,&0$?%__sil_tmpSIL_temp_conditional___n$7); [line 81]\n " color=yellow style=filled] +"g51" [label="1: Start g5\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int 0$?%__sil_tmpSIL_temp_conditional___n$6:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$3,&0$?%__sil_tmpSIL_temp_conditional___n$6); [line 102]\n " color=yellow style=filled] - 95 -> 108 ; -94 [label="94: Call _fun_printf \n n$10=_fun_printf(\"B\\n\":char *) [line 61]\n " shape="box"] + "g51" -> "g513" ; +"g433" [label="33: Call _fun_printf \n n$10=_fun_printf(\"B\\n\":char *) [line 83]\n " shape="box"] - 94 -> 87 ; -93 [label="93: Prune (false branch) \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 63]\n PRUNE((n$9 == 0), false); [line 63]\n " shape="invhouse"] + "g433" -> "g426" ; +"g432" [label="32: Prune (false branch) \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 85]\n PRUNE((n$9 == 0), false); [line 85]\n " shape="invhouse"] - 93 -> 85 ; -92 [label="92: Prune (true branch) \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 63]\n PRUNE((n$9 != 0), true); [line 63]\n " shape="invhouse"] + "g432" -> "g424" ; +"g431" [label="31: Prune (true branch) \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$7:int [line 85]\n PRUNE((n$9 != 0), true); [line 85]\n " shape="invhouse"] - 92 -> 65 ; -91 [label="91: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =1 [line 63]\n " shape="box"] + "g431" -> "g45" ; +"g430" [label="30: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =1 [line 85]\n " shape="box"] - 91 -> 86 ; -90 [label="90: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =0 [line 63]\n " shape="box"] + "g430" -> "g425" ; +"g429" [label="29: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$7:int =0 [line 85]\n " shape="box"] - 90 -> 86 ; -89 [label="89: Prune (false branch) \n PRUNE((n$8 == 0), false); [line 63]\n " shape="invhouse"] + "g429" -> "g425" ; +"g428" [label="28: Prune (false branch) \n PRUNE((n$8 == 0), false); [line 85]\n " shape="invhouse"] - 89 -> 91 ; -88 [label="88: Prune (true branch) \n PRUNE((n$8 != 0), true); [line 63]\n " shape="invhouse"] + "g428" -> "g430" ; +"g427" [label="27: Prune (true branch) \n PRUNE((n$8 != 0), true); [line 85]\n " shape="invhouse"] - 88 -> 90 ; -87 [label="87: Call _fun_getValue \n n$8=_fun_getValue() [line 63]\n " shape="box"] + "g427" -> "g429" ; +"g426" [label="26: Call _fun_getValue \n n$8=_fun_getValue() [line 85]\n " shape="box"] - 87 -> 88 ; - 87 -> 89 ; -86 [label="86: + \n " ] + "g426" -> "g427" ; + "g426" -> "g428" ; +"g425" [label="25: + \n " ] - 86 -> 92 ; - 86 -> 93 ; -85 [label="85: + \n " ] + "g425" -> "g431" ; + "g425" -> "g432" ; +"g424" [label="24: + \n " ] - 85 -> 78 ; -84 [label="84: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 65]\n PRUNE((n$6 == 0), false); [line 65]\n " shape="invhouse"] + "g424" -> "g417" ; +"g423" [label="23: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 87]\n PRUNE((n$6 == 0), false); [line 87]\n " shape="invhouse"] - 84 -> 76 ; -83 [label="83: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 65]\n PRUNE((n$6 != 0), true); [line 65]\n " shape="invhouse"] + "g423" -> "g415" ; +"g422" [label="22: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 87]\n PRUNE((n$6 != 0), true); [line 87]\n " shape="invhouse"] - 83 -> 68 ; -82 [label="82: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =1 [line 65]\n " shape="box"] + "g422" -> "g48" ; +"g421" [label="21: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =1 [line 87]\n " shape="box"] - 82 -> 77 ; -81 [label="81: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =0 [line 65]\n " shape="box"] + "g421" -> "g416" ; +"g420" [label="20: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =0 [line 87]\n " shape="box"] - 81 -> 77 ; -80 [label="80: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 65]\n " shape="invhouse"] + "g420" -> "g416" ; +"g419" [label="19: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 87]\n " shape="invhouse"] - 80 -> 82 ; -79 [label="79: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 65]\n " shape="invhouse"] + "g419" -> "g421" ; +"g418" [label="18: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 87]\n " shape="invhouse"] - 79 -> 81 ; -78 [label="78: Call _fun_getValue \n n$5=_fun_getValue() [line 65]\n " shape="box"] + "g418" -> "g420" ; +"g417" [label="17: Call _fun_getValue \n n$5=_fun_getValue() [line 87]\n " shape="box"] - 78 -> 79 ; - 78 -> 80 ; -77 [label="77: + \n " ] + "g417" -> "g418" ; + "g417" -> "g419" ; +"g416" [label="16: + \n " ] - 77 -> 83 ; - 77 -> 84 ; -76 [label="76: + \n " ] + "g416" -> "g422" ; + "g416" -> "g423" ; +"g415" [label="15: + \n " ] - 76 -> 72 ; -75 [label="75: Skip GotoLabel_stepB \n " color="gray"] + "g415" -> "g411" ; +"g414" [label="14: Skip GotoLabel_stepB \n " color="gray"] - 75 -> 94 ; -74 [label="74: Prune (false branch) \n PRUNE(((n$3 > 1) == 0), false); [line 67]\n " shape="invhouse"] + "g414" -> "g433" ; +"g413" [label="13: Prune (false branch) \n PRUNE(((n$3 > 1) == 0), false); [line 89]\n " shape="invhouse"] - 74 -> 71 ; -73 [label="73: Prune (true branch) \n PRUNE(((n$3 > 1) != 0), true); [line 67]\n " shape="invhouse"] + "g413" -> "g410" ; +"g412" [label="12: Prune (true branch) \n PRUNE(((n$3 > 1) != 0), true); [line 89]\n " shape="invhouse"] - 73 -> 75 ; -72 [label="72: BinaryOperatorStmt: GT \n n$3=_fun_getValue() [line 67]\n " shape="box"] + "g412" -> "g414" ; +"g411" [label="11: BinaryOperatorStmt: GT \n n$3=_fun_getValue() [line 89]\n " shape="box"] - 72 -> 73 ; - 72 -> 74 ; -71 [label="71: + \n " ] + "g411" -> "g412" ; + "g411" -> "g413" ; +"g410" [label="10: + \n " ] - 71 -> 70 ; -70 [label="70: Call _fun_printf \n n$2=_fun_printf(\"g3\\n\":char *) [line 69]\n " shape="box"] + "g410" -> "g49" ; +"g49" [label="9: Call _fun_printf \n n$2=_fun_printf(\"g4\\n\":char *) [line 91]\n " shape="box"] - 70 -> 69 ; -69 [label="69: Return Stmt \n *&return:int =0 [line 70]\n " shape="box"] + "g49" -> "g48" ; +"g48" [label="8: Skip GotoLabel_stepA \n " color="gray"] - 69 -> 62 ; -68 [label="68: Skip GotoLabel_stepA \n " color="gray"] + "g48" -> "g47" ; +"g47" [label="7: DeclStmt \n *&a:int =2 [line 94]\n " shape="box"] - 68 -> 67 ; -67 [label="67: DeclStmt \n *&a:int =2 [line 73]\n " shape="box"] + "g47" -> "g46" ; +"g46" [label="6: Call _fun_printf \n n$1=_fun_printf(\"A\\n\":char *) [line 95]\n " shape="box"] - 67 -> 66 ; -66 [label="66: Call _fun_printf \n n$1=_fun_printf(\"A\\n\":char *) [line 74]\n " shape="box"] + "g46" -> "g45" ; +"g45" [label="5: Skip GotoLabel_exit_step \n " color="gray"] - 66 -> 65 ; -65 [label="65: Skip GotoLabel_exit_step \n " color="gray"] + "g45" -> "g44" ; +"g44" [label="4: Call _fun_printf \n n$0=_fun_printf(\"exit\\n\":char *) [line 98]\n " shape="box"] - 65 -> 64 ; -64 [label="64: Call _fun_printf \n n$0=_fun_printf(\"exit\\n\":char *) [line 77]\n " shape="box"] + "g44" -> "g43" ; +"g43" [label="3: Return Stmt \n *&return:int =1 [line 99]\n " shape="box"] - 64 -> 63 ; -63 [label="63: Return Stmt \n *&return:int =1 [line 78]\n " shape="box"] + "g43" -> "g42" ; +"g42" [label="2: Exit g4 \n " color=yellow style=filled] - 63 -> 62 ; -62 [label="62: Exit g3 \n " color=yellow style=filled] +"g41" [label="1: Start g4\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int 0$?%__sil_tmpSIL_temp_conditional___n$7:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$4,&0$?%__sil_tmpSIL_temp_conditional___n$7); [line 81]\n " color=yellow style=filled] -61 [label="61: Start g3\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int 0$?%__sil_tmpSIL_temp_conditional___n$7:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$4,&0$?%__sil_tmpSIL_temp_conditional___n$7); [line 59]\n " color=yellow style=filled] + "g41" -> "g414" ; +"g729" [label="29: DeclStmt \n *&i:int =0 [line 147]\n " shape="box"] - 61 -> 75 ; -60 [label="60: DeclStmt \n *&a:int =0 [line 38]\n " shape="box"] + "g729" -> "g728" ; +"g728" [label="28: DeclStmt \n *&j:int =0 [line 147]\n " shape="box"] - 60 -> 40 ; -59 [label="59: BinaryOperatorStmt: Assign \n *&a:int =1 [line 40]\n " shape="box"] + "g728" -> "g727" ; +"g727" [label="27: DeclStmt \n *&k:int =0 [line 147]\n " shape="box"] - 59 -> 52 ; -58 [label="58: Prune (false branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 42]\n PRUNE((n$6 == 0), false); [line 42]\n " shape="invhouse"] + "g727" -> "g79" ; +"g726" [label="26: DeclStmt \n n$7=*&i:int [line 151]\n n$8=*&j:int [line 151]\n n$9=*&k:int [line 151]\n *&v:int =((n$7 + n$8) + n$9) [line 151]\n " shape="box"] - 58 -> 50 ; -57 [label="57: Prune (true branch) \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$4:int [line 42]\n PRUNE((n$6 != 0), true); [line 42]\n " shape="invhouse"] + "g726" -> "g722" ; +"g725" [label="25: Call _fun_printf \n n$6=_fun_printf(\"wow\\n\":char *) [line 155]\n " shape="box"] - 57 -> 31 ; -56 [label="56: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =1 [line 42]\n " shape="box"] + "g725" -> "g75" ; +"g724" [label="24: Prune (false branch) \n PRUNE(((n$5 >= 15) == 0), false); [line 152]\n " shape="invhouse"] - 56 -> 51 ; -55 [label="55: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$4:int =0 [line 42]\n " shape="box"] + "g724" -> "g721" ; +"g723" [label="23: Prune (true branch) \n PRUNE(((n$5 >= 15) != 0), true); [line 152]\n " shape="invhouse"] - 55 -> 51 ; -54 [label="54: Prune (false branch) \n PRUNE((n$5 == 0), false); [line 42]\n " shape="invhouse"] + "g723" -> "g78" ; +"g722" [label="22: BinaryOperatorStmt: GE \n n$5=*&v:int [line 152]\n " shape="box"] - 54 -> 56 ; -53 [label="53: Prune (true branch) \n PRUNE((n$5 != 0), true); [line 42]\n " shape="invhouse"] + "g722" -> "g723" ; + "g722" -> "g724" ; +"g721" [label="21: + \n " ] - 53 -> 55 ; -52 [label="52: Call _fun_getValue \n n$5=_fun_getValue() [line 42]\n " shape="box"] + "g721" -> "g717" ; +"g720" [label="20: Prune (false branch) \n PRUNE(((n$4 < 10) == 0), false); [line 150]\n " shape="invhouse"] - 52 -> 53 ; - 52 -> 54 ; -51 [label="51: + \n " ] + "g720" -> "g713" ; +"g719" [label="19: Prune (true branch) \n PRUNE(((n$4 < 10) != 0), true); [line 150]\n " shape="invhouse"] - 51 -> 57 ; - 51 -> 58 ; -50 [label="50: + \n " ] + "g719" -> "g726" ; +"g718" [label="18: BinaryOperatorStmt: LT \n n$4=*&k:int [line 150]\n " shape="box"] - 50 -> 43 ; -49 [label="49: Prune (false branch) \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 44]\n PRUNE((n$3 == 0), false); [line 44]\n " shape="invhouse"] + "g718" -> "g719" ; + "g718" -> "g720" ; +"g717" [label="17: + \n " ] - 49 -> 41 ; -48 [label="48: Prune (true branch) \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 44]\n PRUNE((n$3 != 0), true); [line 44]\n " shape="invhouse"] + "g717" -> "g718" ; +"g716" [label="16: Prune (false branch) \n PRUNE(((n$3 < 10) == 0), false); [line 149]\n " shape="invhouse"] - 48 -> 34 ; -47 [label="47: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 44]\n " shape="box"] + "g716" -> "g79" ; +"g715" [label="15: Prune (true branch) \n PRUNE(((n$3 < 10) != 0), true); [line 149]\n " shape="invhouse"] - 47 -> 42 ; -46 [label="46: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =0 [line 44]\n " shape="box"] + "g715" -> "g717" ; +"g714" [label="14: BinaryOperatorStmt: LT \n n$3=*&j:int [line 149]\n " shape="box"] - 46 -> 42 ; -45 [label="45: Prune (false branch) \n PRUNE((n$2 == 0), false); [line 44]\n " shape="invhouse"] + "g714" -> "g715" ; + "g714" -> "g716" ; +"g713" [label="13: + \n " ] - 45 -> 47 ; -44 [label="44: Prune (true branch) \n PRUNE((n$2 != 0), true); [line 44]\n " shape="invhouse"] + "g713" -> "g714" ; +"g712" [label="12: Prune (false branch) \n PRUNE(((n$2 < 10) == 0), false); [line 148]\n " shape="invhouse"] - 44 -> 46 ; -43 [label="43: Call _fun_getValue \n n$2=_fun_getValue() [line 44]\n " shape="box"] + "g712" -> "g78" ; +"g711" [label="11: Prune (true branch) \n PRUNE(((n$2 < 10) != 0), true); [line 148]\n " shape="invhouse"] - 43 -> 44 ; - 43 -> 45 ; -42 [label="42: + \n " ] + "g711" -> "g713" ; +"g710" [label="10: BinaryOperatorStmt: LT \n n$2=*&i:int [line 148]\n " shape="box"] - 42 -> 48 ; - 42 -> 49 ; -41 [label="41: + \n " ] + "g710" -> "g711" ; + "g710" -> "g712" ; +"g79" [label="9: + \n " ] - 41 -> 37 ; -40 [label="40: Skip GotoLabel_stepB \n " color="gray"] + "g79" -> "g710" ; +"g78" [label="8: Skip GotoLabel_out \n " color="gray"] - 40 -> 59 ; -39 [label="39: Prune (false branch) \n PRUNE(((n$0 > 1) == 0), false); [line 46]\n " shape="invhouse"] + "g78" -> "g77" ; +"g77" [label="7: Call _fun_printf \n n$1=_fun_printf(\"out!\\n\":char *) [line 162]\n " shape="box"] - 39 -> 36 ; -38 [label="38: Prune (true branch) \n PRUNE(((n$0 > 1) != 0), true); [line 46]\n " shape="invhouse"] + "g77" -> "g76" ; +"g76" [label="6: Skip GotoLabel_print \n " color="gray"] - 38 -> 40 ; -37 [label="37: BinaryOperatorStmt: GT \n n$0=_fun_getValue() [line 46]\n " shape="box"] + "g76" -> "g725" ; +"g75" [label="5: Skip GotoLabel_terminate \n " color="gray"] - 37 -> 38 ; - 37 -> 39 ; -36 [label="36: + \n " ] + "g75" -> "g74" ; +"g74" [label="4: Call _fun_printf \n n$0=_fun_printf(\"terminating!\\n\":char *) [line 165]\n " shape="box"] - 36 -> 35 ; -35 [label="35: Return Stmt \n *&return:int =0 [line 48]\n " shape="box"] + "g74" -> "g73" ; +"g73" [label="3: Return Stmt \n *&return:int =2 [line 166]\n " shape="box"] - 35 -> 28 ; -34 [label="34: Skip GotoLabel_stepA \n " color="gray"] + "g73" -> "g72" ; +"g72" [label="2: Exit g7 \n " color=yellow style=filled] - 34 -> 33 ; -33 [label="33: BinaryOperatorStmt: Assign \n *&a:int =2 [line 51]\n " shape="box"] +"g71" [label="1: Start g7\nFormals: \nLocals: v:int k:int j:int i:int \n DECLARE_LOCALS(&return,&v,&k,&j,&i); [line 146]\n " color=yellow style=filled] - 33 -> 32 ; -32 [label="32: Return Stmt \n *&return:int =2 [line 52]\n " shape="box"] + "g71" -> "g729" ; +"g832" [label="32: DeclStmt \n *&i:int =0 [line 170]\n " shape="box"] - 32 -> 28 ; -31 [label="31: Skip GotoLabel_exit_step \n " color="gray"] + "g832" -> "g831" ; +"g831" [label="31: DeclStmt \n *&j:int =0 [line 170]\n " shape="box"] - 31 -> 30 ; -30 [label="30: BinaryOperatorStmt: Assign \n *&a:int =3 [line 55]\n " shape="box"] + "g831" -> "g830" ; +"g830" [label="30: DeclStmt \n *&k:int =0 [line 170]\n " shape="box"] - 30 -> 29 ; -29 [label="29: Return Stmt \n *&return:int =1 [line 56]\n " shape="box"] + "g830" -> "g828" ; + "g830" -> "g829" ; +"g829" [label="29: Prune (false branch) \n n$10=*&q:int [line 171]\n PRUNE((n$10 == 0), false); [line 171]\n " shape="invhouse"] - 29 -> 28 ; -28 [label="28: Exit g2 \n " color=yellow style=filled] + "g829" -> "g827" ; +"g828" [label="28: Prune (true branch) \n n$10=*&q:int [line 171]\n PRUNE((n$10 != 0), true); [line 171]\n " shape="invhouse"] -27 [label="27: Start g2\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$1:int 0$?%__sil_tmpSIL_temp_conditional___n$4:int a:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$1,&0$?%__sil_tmpSIL_temp_conditional___n$4,&a); [line 37]\n " color=yellow style=filled] + "g828" -> "g825" ; +"g827" [label="27: + \n " ] - 27 -> 60 ; -26 [label="26: DeclStmt \n *&a:int =0 [line 27]\n " shape="box"] + "g827" -> "g88" ; +"g826" [label="26: DeclStmt \n n$7=*&i:int [line 176]\n n$8=*&j:int [line 176]\n n$9=*&k:int [line 176]\n *&v:int =((n$7 + n$8) + n$9) [line 176]\n " shape="box"] - 26 -> 23 ; -25 [label="25: Prune (false branch) \n PRUNE(((n$0 > 1) == 0), false); [line 28]\n " shape="invhouse"] + "g826" -> "g821" ; +"g825" [label="25: Skip GotoLabel_print \n " color="gray"] - 25 -> 22 ; -24 [label="24: Prune (true branch) \n PRUNE(((n$0 > 1) != 0), true); [line 28]\n " shape="invhouse"] + "g825" -> "g824" ; +"g824" [label="24: Call _fun_printf \n n$6=_fun_printf(\"wow\\n\":char *) [line 179]\n " shape="box"] - 24 -> 20 ; -23 [label="23: BinaryOperatorStmt: GT \n n$0=_fun_getValue() [line 28]\n " shape="box"] + "g824" -> "g820" ; +"g823" [label="23: Prune (false branch) \n PRUNE(((n$5 >= 15) == 0), false); [line 177]\n " shape="invhouse"] - 23 -> 24 ; - 23 -> 25 ; -22 [label="22: + \n " ] + "g823" -> "g820" ; +"g822" [label="22: Prune (true branch) \n PRUNE(((n$5 >= 15) != 0), true); [line 177]\n " shape="invhouse"] - 22 -> 21 ; -21 [label="21: Return Stmt \n *&return:int =0 [line 30]\n " shape="box"] + "g822" -> "g825" ; +"g821" [label="21: BinaryOperatorStmt: GE \n n$5=*&v:int [line 177]\n " shape="box"] - 21 -> 17 ; -20 [label="20: Skip GotoLabel_stepB \n " color="gray"] + "g821" -> "g822" ; + "g821" -> "g823" ; +"g820" [label="20: + \n " ] - 20 -> 19 ; -19 [label="19: BinaryOperatorStmt: Assign \n *&a:int =1 [line 33]\n " shape="box"] + "g820" -> "g816" ; +"g819" [label="19: Prune (false branch) \n PRUNE(((n$4 < 10) == 0), false); [line 175]\n " shape="invhouse"] - 19 -> 18 ; -18 [label="18: Return Stmt \n *&return:int =1 [line 34]\n " shape="box"] + "g819" -> "g812" ; +"g818" [label="18: Prune (true branch) \n PRUNE(((n$4 < 10) != 0), true); [line 175]\n " shape="invhouse"] - 18 -> 17 ; -17 [label="17: Exit g1 \n " color=yellow style=filled] + "g818" -> "g826" ; +"g817" [label="17: BinaryOperatorStmt: LT \n n$4=*&k:int [line 175]\n " shape="box"] -16 [label="16: Start g1\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 26]\n " color=yellow style=filled] + "g817" -> "g818" ; + "g817" -> "g819" ; +"g816" [label="16: + \n " ] - 16 -> 26 ; -15 [label="15: DeclStmt \n *&a:int =0 [line 15]\n " shape="box"] + "g816" -> "g817" ; +"g815" [label="15: Prune (false branch) \n PRUNE(((n$3 < 10) == 0), false); [line 174]\n " shape="invhouse"] - 15 -> 12 ; -14 [label="14: Prune (false branch) \n PRUNE(((n$0 > 1) == 0), false); [line 16]\n " shape="invhouse"] + "g815" -> "g88" ; +"g814" [label="14: Prune (true branch) \n PRUNE(((n$3 < 10) != 0), true); [line 174]\n " shape="invhouse"] - 14 -> 11 ; -13 [label="13: Prune (true branch) \n PRUNE(((n$0 > 1) != 0), true); [line 16]\n " shape="invhouse"] + "g814" -> "g816" ; +"g813" [label="13: BinaryOperatorStmt: LT \n n$3=*&j:int [line 174]\n " shape="box"] - 13 -> 9 ; -12 [label="12: BinaryOperatorStmt: GT \n n$0=_fun_getValue() [line 16]\n " shape="box"] + "g813" -> "g814" ; + "g813" -> "g815" ; +"g812" [label="12: + \n " ] - 12 -> 13 ; - 12 -> 14 ; -11 [label="11: + \n " ] + "g812" -> "g813" ; +"g811" [label="11: Prune (false branch) \n PRUNE(((n$2 < 10) == 0), false); [line 173]\n " shape="invhouse"] - 11 -> 10 ; -10 [label="10: Skip GotoLabel_stepB \n " color="gray"] + "g811" -> "g87" ; +"g810" [label="10: Prune (true branch) \n PRUNE(((n$2 < 10) != 0), true); [line 173]\n " shape="invhouse"] - 10 -> 9 ; -9 [label="9: Skip GotoLabel_stepC \n " color="gray"] + "g810" -> "g812" ; +"g89" [label="9: BinaryOperatorStmt: LT \n n$2=*&i:int [line 173]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Skip GotoLabel_stepD \n " color="gray"] + "g89" -> "g810" ; + "g89" -> "g811" ; +"g88" [label="8: + \n " ] - 8 -> 7 ; -7 [label="7: BinaryOperatorStmt: Assign \n *&a:int =1 [line 22]\n " shape="box"] + "g88" -> "g89" ; +"g87" [label="7: Skip GotoLabel_out \n " color="gray"] - 7 -> 6 ; -6 [label="6: Return Stmt \n *&return:int =1 [line 23]\n " shape="box"] + "g87" -> "g86" ; +"g86" [label="6: Call _fun_printf \n n$1=_fun_printf(\"out!\\n\":char *) [line 186]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit g0 \n " color=yellow style=filled] + "g86" -> "g85" ; +"g85" [label="5: Skip GotoLabel_terminate \n " color="gray"] -4 [label="4: Start g0\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 14]\n " color=yellow style=filled] + "g85" -> "g84" ; +"g84" [label="4: Call _fun_printf \n n$0=_fun_printf(\"terminating!\\n\":char *) [line 188]\n " shape="box"] - 4 -> 15 ; -3 [label="3: Return Stmt \n *&return:int =2 [line 12]\n " shape="box"] + "g84" -> "g83" ; +"g83" [label="3: Return Stmt \n *&return:int =2 [line 189]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit getValue \n " color=yellow style=filled] + "g83" -> "g82" ; +"g82" [label="2: Exit g8 \n " color=yellow style=filled] -1 [label="1: Start getValue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"g81" [label="1: Start g8\nFormals: q:int \nLocals: v:int k:int j:int i:int \n DECLARE_LOCALS(&return,&v,&k,&j,&i); [line 169]\n " color=yellow style=filled] - 1 -> 3 ; + "g81" -> "g832" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/initialization/array_initlistexpr.c.dot b/infer/tests/codetoanalyze/c/frontend/initialization/array_initlistexpr.c.dot index 4c742d23b..7798c4b6d 100644 --- a/infer/tests/codetoanalyze/c/frontend/initialization/array_initlistexpr.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/initialization/array_initlistexpr.c.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: DeclStmt \n n$0=*&z:int [line 12]\n *&a[0][0]:int =(n$0 + 1) [line 12]\n *&a[0][1]:int =2 [line 12]\n *&a[0][2]:int =3 [line 12]\n *&a[1][0]:int =5 [line 12]\n *&a[1][1]:int =6 [line 12]\n *&a[1][2]:int =7 [line 12]\n " shape="box"] +"main3" [label="3: DeclStmt \n n$0=*&z:int [line 12]\n *&a[0][0]:int =(n$0 + 1) [line 12]\n *&a[0][1]:int =2 [line 12]\n *&a[0][2]:int =3 [line 12]\n *&a[1][0]:int =5 [line 12]\n *&a[1][1]:int =6 [line 12]\n *&a[1][2]:int =7 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: a:int [2][3] z:int \n DECLARE_LOCALS(&return,&a,&z); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: a:int [2][3] z:int \n DECLARE_LOCALS(&return,&a,&z); [line 10]\n " color=yellow style=filled] - 1 -> 3 ; + "main1" -> "main3" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/initialization/compound_literal.c.dot b/infer/tests/codetoanalyze/c/frontend/initialization/compound_literal.c.dot index 7b5c4670a..f8d619ede 100644 --- a/infer/tests/codetoanalyze/c/frontend/initialization/compound_literal.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/initialization/compound_literal.c.dot @@ -1,29 +1,29 @@ /* @generated */ digraph iCFG { -7 [label="7: DeclStmt \n *&p.x:int =32 [line 18]\n *&p.y:int =52 [line 18]\n n$1=*&p:struct point [line 18]\n " shape="box"] +"init_with_compound_literal4" [label="4: DeclStmt \n *&p.x:int =32 [line 18]\n *&p.y:int =52 [line 18]\n n$1=*&p:struct point [line 18]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&p.x:int [line 19]\n *&return:int =(1 / (n$0 - 32)) [line 19]\n " shape="box"] + "init_with_compound_literal4" -> "init_with_compound_literal3" ; +"init_with_compound_literal3" [label="3: Return Stmt \n n$0=*&p.x:int [line 19]\n *&return:int =(1 / (n$0 - 32)) [line 19]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit init_with_compound_literal \n " color=yellow style=filled] + "init_with_compound_literal3" -> "init_with_compound_literal2" ; +"init_with_compound_literal2" [label="2: Exit init_with_compound_literal \n " color=yellow style=filled] -4 [label="4: Start init_with_compound_literal\nFormals: \nLocals: p:struct point \n DECLARE_LOCALS(&return,&p); [line 17]\n " color=yellow style=filled] +"init_with_compound_literal1" [label="1: Start init_with_compound_literal\nFormals: \nLocals: p:struct point \n DECLARE_LOCALS(&return,&p); [line 17]\n " color=yellow style=filled] - 4 -> 7 ; -3 [label="3: Return Stmt \n *&0$?%__sil_tmpSIL_compound_literal__n$0.x:int =52 [line 15]\n *&0$?%__sil_tmpSIL_compound_literal__n$0.y:int =32 [line 15]\n n$1=*&0$?%__sil_tmpSIL_compound_literal__n$0.x:int [line 15]\n *&return:int =n$1 [line 15]\n " shape="box"] + "init_with_compound_literal1" -> "init_with_compound_literal4" ; +"compound_literal_expr3" [label="3: Return Stmt \n *&0$?%__sil_tmpSIL_compound_literal__n$0.x:int =52 [line 15]\n *&0$?%__sil_tmpSIL_compound_literal__n$0.y:int =32 [line 15]\n n$1=*&0$?%__sil_tmpSIL_compound_literal__n$0.x:int [line 15]\n *&return:int =n$1 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit compound_literal_expr \n " color=yellow style=filled] + "compound_literal_expr3" -> "compound_literal_expr2" ; +"compound_literal_expr2" [label="2: Exit compound_literal_expr \n " color=yellow style=filled] -1 [label="1: Start compound_literal_expr\nFormals: \nLocals: 0$?%__sil_tmpSIL_compound_literal__n$0:struct point \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_compound_literal__n$0); [line 15]\n " color=yellow style=filled] +"compound_literal_expr1" [label="1: Start compound_literal_expr\nFormals: \nLocals: 0$?%__sil_tmpSIL_compound_literal__n$0:struct point \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_compound_literal__n$0); [line 15]\n " color=yellow style=filled] - 1 -> 3 ; + "compound_literal_expr1" -> "compound_literal_expr3" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/initialization/struct_initlistexpr.c.dot b/infer/tests/codetoanalyze/c/frontend/initialization/struct_initlistexpr.c.dot index 209c47f32..e029054c8 100644 --- a/infer/tests/codetoanalyze/c/frontend/initialization/struct_initlistexpr.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/initialization/struct_initlistexpr.c.dot @@ -1,70 +1,70 @@ /* @generated */ digraph iCFG { -18 [label="18: BinaryOperatorStmt: Assign \n *&imageDrawRect.origin.x.a:int =0 [line 58]\n *&imageDrawRect.origin.x.b:int =0 [line 58]\n *&imageDrawRect.origin.y:int =0 [line 58]\n *&imageDrawRect.z:int =0 [line 58]\n *&imageDrawRect.size:int =5 [line 58]\n n$1=*&imageDrawRect:struct rect [line 58]\n " shape="box"] +"implicit_expr_set_correctly4" [label="4: BinaryOperatorStmt: Assign \n *&imageDrawRect.origin.x.a:int =0 [line 58]\n *&imageDrawRect.origin.x.b:int =0 [line 58]\n *&imageDrawRect.origin.y:int =0 [line 58]\n *&imageDrawRect.z:int =0 [line 58]\n *&imageDrawRect.size:int =5 [line 58]\n n$1=*&imageDrawRect:struct rect [line 58]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Return Stmt \n n$0=*&imageDrawRect.origin.x.a:int [line 59]\n *&return:int =(1 / n$0) [line 59]\n " shape="box"] + "implicit_expr_set_correctly4" -> "implicit_expr_set_correctly3" ; +"implicit_expr_set_correctly3" [label="3: Return Stmt \n n$0=*&imageDrawRect.origin.x.a:int [line 59]\n *&return:int =(1 / n$0) [line 59]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Exit implicit_expr_set_correctly \n " color=yellow style=filled] + "implicit_expr_set_correctly3" -> "implicit_expr_set_correctly2" ; +"implicit_expr_set_correctly2" [label="2: Exit implicit_expr_set_correctly \n " color=yellow style=filled] -15 [label="15: Start implicit_expr_set_correctly\nFormals: \nLocals: imageDrawRect:struct rect \n DECLARE_LOCALS(&return,&imageDrawRect); [line 56]\n " color=yellow style=filled] +"implicit_expr_set_correctly1" [label="1: Start implicit_expr_set_correctly\nFormals: \nLocals: imageDrawRect:struct rect \n DECLARE_LOCALS(&return,&imageDrawRect); [line 56]\n " color=yellow style=filled] - 15 -> 18 ; -14 [label="14: DeclStmt \n *&e.ssn:int =12 [line 35]\n *&e.salary:float =3000.500000 [line 35]\n *&e.doj.date:int =12 [line 35]\n *&e.doj.month:int =12 [line 35]\n *&e.doj.year:int =2010 [line 35]\n " shape="box"] + "implicit_expr_set_correctly1" -> "implicit_expr_set_correctly4" ; +"main3" [label="3: DeclStmt \n n$0=_fun_foo() [line 17]\n *&p.x:int =1 [line 17]\n *&p.y:int =(n$0 + 3) [line 17]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Return Stmt \n n$0=*&e.ssn:int [line 36]\n *&return:int =(1 / (n$0 - 12)) [line 36]\n " shape="box"] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit field_set_correctly \n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: p:struct Point \n DECLARE_LOCALS(&return,&p); [line 17]\n " color=yellow style=filled] -11 [label="11: Start field_set_correctly\nFormals: \nLocals: e:struct Employee \n DECLARE_LOCALS(&return,&e); [line 34]\n " color=yellow style=filled] + "main1" -> "main3" ; +"foo3" [label="3: Return Stmt \n *&return:int =5 [line 15]\n " shape="box"] - 11 -> 14 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$2=*&p:struct Point * [line 20]\n *n$2.x:int =4 [line 20]\n *n$2.y:int =5 [line 20]\n n$3=*n$2:struct Point [line 20]\n " shape="box"] + "foo3" -> "foo2" ; +"foo2" [label="2: Exit foo \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Return Stmt \n n$0=*&p:struct Point * [line 21]\n n$1=*n$0.x:int [line 21]\n *&return:int =(1 / (n$1 - 4)) [line 21]\n " shape="box"] +"foo1" [label="1: Start foo\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit point_coords_set_correctly \n " color=yellow style=filled] + "foo1" -> "foo3" ; +"point_coords_set_correctly4" [label="4: BinaryOperatorStmt: Assign \n n$2=*&p:struct Point * [line 20]\n *n$2.x:int =4 [line 20]\n *n$2.y:int =5 [line 20]\n n$3=*n$2:struct Point [line 20]\n " shape="box"] -7 [label="7: Start point_coords_set_correctly\nFormals: p:struct Point *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] + "point_coords_set_correctly4" -> "point_coords_set_correctly3" ; +"point_coords_set_correctly3" [label="3: Return Stmt \n n$0=*&p:struct Point * [line 21]\n n$1=*n$0.x:int [line 21]\n *&return:int =(1 / (n$1 - 4)) [line 21]\n " shape="box"] - 7 -> 10 ; -6 [label="6: DeclStmt \n n$0=_fun_foo() [line 17]\n *&p.x:int =1 [line 17]\n *&p.y:int =(n$0 + 3) [line 17]\n " shape="box"] + "point_coords_set_correctly3" -> "point_coords_set_correctly2" ; +"point_coords_set_correctly2" [label="2: Exit point_coords_set_correctly \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit main \n " color=yellow style=filled] +"point_coords_set_correctly1" [label="1: Start point_coords_set_correctly\nFormals: p:struct Point *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] -4 [label="4: Start main\nFormals: \nLocals: p:struct Point \n DECLARE_LOCALS(&return,&p); [line 17]\n " color=yellow style=filled] + "point_coords_set_correctly1" -> "point_coords_set_correctly4" ; +"field_set_correctly4" [label="4: DeclStmt \n *&e.ssn:int =12 [line 35]\n *&e.salary:float =3000.500000 [line 35]\n *&e.doj.date:int =12 [line 35]\n *&e.doj.month:int =12 [line 35]\n *&e.doj.year:int =2010 [line 35]\n " shape="box"] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =5 [line 15]\n " shape="box"] + "field_set_correctly4" -> "field_set_correctly3" ; +"field_set_correctly3" [label="3: Return Stmt \n n$0=*&e.ssn:int [line 36]\n *&return:int =(1 / (n$0 - 12)) [line 36]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit foo \n " color=yellow style=filled] + "field_set_correctly3" -> "field_set_correctly2" ; +"field_set_correctly2" [label="2: Exit field_set_correctly \n " color=yellow style=filled] -1 [label="1: Start foo\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"field_set_correctly1" [label="1: Start field_set_correctly\nFormals: \nLocals: e:struct Employee \n DECLARE_LOCALS(&return,&e); [line 34]\n " color=yellow style=filled] - 1 -> 3 ; + "field_set_correctly1" -> "field_set_correctly4" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/do_while.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/do_while.c.dot index e82676408..2207ce4c7 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/do_while.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/do_while.c.dot @@ -1,43 +1,43 @@ /* @generated */ digraph iCFG { -10 [label="10: DeclStmt \n *&a:int =10 [line 11]\n " shape="box"] +"main10" [label="10: DeclStmt \n *&a:int =10 [line 11]\n " shape="box"] - 10 -> 9 ; -9 [label="9: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] + "main10" -> "main9" ; +"main9" [label="9: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] - 9 -> 4 ; -8 [label="8: BinaryOperatorStmt: Assign \n *&a:int =1 [line 14]\n " shape="box"] + "main9" -> "main4" ; +"main8" [label="8: BinaryOperatorStmt: Assign \n *&a:int =1 [line 14]\n " shape="box"] - 8 -> 5 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 < 20) == 0), false); [line 15]\n " shape="invhouse"] + "main8" -> "main5" ; +"main7" [label="7: Prune (false branch) \n PRUNE(((n$0 < 20) == 0), false); [line 15]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 < 20) != 0), true); [line 15]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE(((n$0 < 20) != 0), true); [line 15]\n " shape="invhouse"] - 6 -> 4 ; -5 [label="5: BinaryOperatorStmt: LT \n n$0=*&b:int [line 15]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: BinaryOperatorStmt: LT \n n$0=*&b:int [line 15]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "main5" -> "main6" ; + "main5" -> "main7" ; +"main4" [label="4: + \n " ] - 4 -> 8 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] + "main4" -> "main8" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int a:int \n DECLARE_LOCALS(&return,&b,&a); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int a:int \n DECLARE_LOCALS(&return,&b,&a); [line 10]\n " color=yellow style=filled] - 1 -> 10 ; + "main1" -> "main10" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/do_while_condition_side_effects.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/do_while_condition_side_effects.c.dot index 2facb4f97..b61c35c9a 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/do_while_condition_side_effects.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/do_while_condition_side_effects.c.dot @@ -1,43 +1,43 @@ /* @generated */ digraph iCFG { -10 [label="10: DeclStmt \n *&a:int =10 [line 11]\n " shape="box"] +"main10" [label="10: DeclStmt \n *&a:int =10 [line 11]\n " shape="box"] - 10 -> 9 ; -9 [label="9: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] + "main10" -> "main9" ; +"main9" [label="9: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] - 9 -> 4 ; -8 [label="8: BinaryOperatorStmt: Assign \n *&a:int =1 [line 14]\n " shape="box"] + "main9" -> "main4" ; +"main8" [label="8: BinaryOperatorStmt: Assign \n *&a:int =1 [line 14]\n " shape="box"] - 8 -> 5 ; -7 [label="7: Prune (false branch) \n PRUNE((n$0 == 0), false); [line 15]\n " shape="invhouse"] + "main8" -> "main5" ; +"main7" [label="7: Prune (false branch) \n PRUNE((n$0 == 0), false); [line 15]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE((n$0 != 0), true); [line 15]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE((n$0 != 0), true); [line 15]\n " shape="invhouse"] - 6 -> 4 ; -5 [label="5: BinaryOperatorStmt: Assign \n *&b:int =40 [line 15]\n n$0=*&b:int [line 15]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n *&b:int =40 [line 15]\n n$0=*&b:int [line 15]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "main5" -> "main6" ; + "main5" -> "main7" ; +"main4" [label="4: + \n " ] - 4 -> 8 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] + "main4" -> "main8" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int a:int \n DECLARE_LOCALS(&return,&b,&a); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int a:int \n DECLARE_LOCALS(&return,&b,&a); [line 10]\n " color=yellow style=filled] - 1 -> 10 ; + "main1" -> "main10" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/do_while_nested.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/do_while_nested.c.dot index fd13980a7..cfaa452b6 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/do_while_nested.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/do_while_nested.c.dot @@ -1,64 +1,64 @@ /* @generated */ digraph iCFG { -15 [label="15: DeclStmt \n *&a:int =10 [line 11]\n " shape="box"] +"main15" [label="15: DeclStmt \n *&a:int =10 [line 11]\n " shape="box"] - 15 -> 14 ; -14 [label="14: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] + "main15" -> "main14" ; +"main14" [label="14: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] - 14 -> 4 ; -13 [label="13: BinaryOperatorStmt: Assign \n *&a:int =1 [line 14]\n " shape="box"] + "main14" -> "main4" ; +"main13" [label="13: BinaryOperatorStmt: Assign \n *&a:int =1 [line 14]\n " shape="box"] - 13 -> 8 ; -12 [label="12: BinaryOperatorStmt: Assign \n *&a:int =2 [line 16]\n " shape="box"] + "main13" -> "main8" ; +"main12" [label="12: BinaryOperatorStmt: Assign \n *&a:int =2 [line 16]\n " shape="box"] - 12 -> 9 ; -11 [label="11: Prune (false branch) \n PRUNE(((n$1 < 30) == 0), false); [line 17]\n " shape="invhouse"] + "main12" -> "main9" ; +"main11" [label="11: Prune (false branch) \n PRUNE(((n$1 < 30) == 0), false); [line 17]\n " shape="invhouse"] - 11 -> 5 ; -10 [label="10: Prune (true branch) \n PRUNE(((n$1 < 30) != 0), true); [line 17]\n " shape="invhouse"] + "main11" -> "main5" ; +"main10" [label="10: Prune (true branch) \n PRUNE(((n$1 < 30) != 0), true); [line 17]\n " shape="invhouse"] - 10 -> 8 ; -9 [label="9: BinaryOperatorStmt: LT \n n$1=*&b:int [line 17]\n " shape="box"] + "main10" -> "main8" ; +"main9" [label="9: BinaryOperatorStmt: LT \n n$1=*&b:int [line 17]\n " shape="box"] - 9 -> 10 ; - 9 -> 11 ; -8 [label="8: + \n " ] + "main9" -> "main10" ; + "main9" -> "main11" ; +"main8" [label="8: + \n " ] - 8 -> 12 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 < 20) == 0), false); [line 18]\n " shape="invhouse"] + "main8" -> "main12" ; +"main7" [label="7: Prune (false branch) \n PRUNE(((n$0 < 20) == 0), false); [line 18]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 < 20) != 0), true); [line 18]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE(((n$0 < 20) != 0), true); [line 18]\n " shape="invhouse"] - 6 -> 4 ; -5 [label="5: BinaryOperatorStmt: LT \n n$0=*&b:int [line 18]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: BinaryOperatorStmt: LT \n n$0=*&b:int [line 18]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "main5" -> "main6" ; + "main5" -> "main7" ; +"main4" [label="4: + \n " ] - 4 -> 13 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 20]\n " shape="box"] + "main4" -> "main13" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 20]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int a:int \n DECLARE_LOCALS(&return,&b,&a); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int a:int \n DECLARE_LOCALS(&return,&b,&a); [line 10]\n " color=yellow style=filled] - 1 -> 15 ; + "main1" -> "main15" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/for_condition_side_effects.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/for_condition_side_effects.c.dot index 5357c6437..96e189ef1 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/for_condition_side_effects.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/for_condition_side_effects.c.dot @@ -1,51 +1,51 @@ /* @generated */ digraph iCFG { -12 [label="12: DeclStmt \n *&j:int =0 [line 11]\n " shape="box"] +"main12" [label="12: DeclStmt \n *&j:int =0 [line 11]\n " shape="box"] - 12 -> 11 ; -11 [label="11: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] + "main12" -> "main11" ; +"main11" [label="11: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] - 11 -> 5 ; -10 [label="10: BinaryOperatorStmt: AddAssign \n n$2=*&j:int [line 14]\n n$3=*&j:int [line 14]\n *&j:int =(n$3 + n$2) [line 14]\n " shape="box"] + "main11" -> "main5" ; +"main10" [label="10: BinaryOperatorStmt: AddAssign \n n$2=*&j:int [line 14]\n n$3=*&j:int [line 14]\n *&j:int =(n$3 + n$2) [line 14]\n " shape="box"] - 10 -> 6 ; -9 [label="9: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 13]\n " shape="invhouse"] + "main10" -> "main6" ; +"main9" [label="9: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 13]\n " shape="invhouse"] - 9 -> 3 ; -8 [label="8: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 13]\n " shape="invhouse"] + "main9" -> "main3" ; +"main8" [label="8: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 13]\n " shape="invhouse"] - 8 -> 10 ; -7 [label="7: BinaryOperatorStmt: Assign \n *&b:int =10 [line 13]\n n$1=*&b:int [line 13]\n " shape="box"] + "main8" -> "main10" ; +"main7" [label="7: BinaryOperatorStmt: Assign \n *&b:int =10 [line 13]\n n$1=*&b:int [line 13]\n " shape="box"] - 7 -> 8 ; - 7 -> 9 ; -6 [label="6: UnaryOperator \n n$0=*&i:int [line 13]\n *&i:int =(n$0 + 1) [line 13]\n " shape="box"] + "main7" -> "main8" ; + "main7" -> "main9" ; +"main6" [label="6: UnaryOperator \n n$0=*&i:int [line 13]\n *&i:int =(n$0 + 1) [line 13]\n " shape="box"] - 6 -> 4 ; -5 [label="5: DeclStmt \n *&b:int =3 [line 13]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: DeclStmt \n *&b:int =3 [line 13]\n " shape="box"] - 5 -> 4 ; -4 [label="4: + \n " ] + "main5" -> "main4" ; +"main4" [label="4: + \n " ] - 4 -> 7 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] + "main4" -> "main7" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int i:int j:int \n DECLARE_LOCALS(&return,&b,&i,&j); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int i:int j:int \n DECLARE_LOCALS(&return,&b,&i,&j); [line 10]\n " color=yellow style=filled] - 1 -> 12 ; + "main1" -> "main12" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/for_nested.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/for_nested.c.dot index fc4a8bd95..4fa6ae02d 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/for_nested.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/for_nested.c.dot @@ -1,72 +1,72 @@ /* @generated */ digraph iCFG { -17 [label="17: DeclStmt \n *&k:int =0 [line 11]\n " shape="box"] +"main17" [label="17: DeclStmt \n *&k:int =0 [line 11]\n " shape="box"] - 17 -> 5 ; -16 [label="16: BinaryOperatorStmt: Assign \n n$5=*&k:int [line 14]\n n$6=*&i:int [line 14]\n *&k:int =(n$5 + n$6) [line 14]\n " shape="box"] + "main17" -> "main5" ; +"main16" [label="16: BinaryOperatorStmt: Assign \n n$5=*&k:int [line 14]\n n$6=*&i:int [line 14]\n *&k:int =(n$5 + n$6) [line 14]\n " shape="box"] - 16 -> 12 ; -15 [label="15: Prune (false branch) \n PRUNE(((n$4 < 10) == 0), false); [line 13]\n " shape="invhouse"] + "main16" -> "main12" ; +"main15" [label="15: Prune (false branch) \n PRUNE(((n$4 < 10) == 0), false); [line 13]\n " shape="invhouse"] - 15 -> 6 ; -14 [label="14: Prune (true branch) \n PRUNE(((n$4 < 10) != 0), true); [line 13]\n " shape="invhouse"] + "main15" -> "main6" ; +"main14" [label="14: Prune (true branch) \n PRUNE(((n$4 < 10) != 0), true); [line 13]\n " shape="invhouse"] - 14 -> 16 ; -13 [label="13: BinaryOperatorStmt: LT \n n$4=*&j:int [line 13]\n " shape="box"] + "main14" -> "main16" ; +"main13" [label="13: BinaryOperatorStmt: LT \n n$4=*&j:int [line 13]\n " shape="box"] - 13 -> 14 ; - 13 -> 15 ; -12 [label="12: UnaryOperator \n n$3=*&j:int [line 13]\n *&j:int =(n$3 + 1) [line 13]\n " shape="box"] + "main13" -> "main14" ; + "main13" -> "main15" ; +"main12" [label="12: UnaryOperator \n n$3=*&j:int [line 13]\n *&j:int =(n$3 + 1) [line 13]\n " shape="box"] - 12 -> 10 ; -11 [label="11: DeclStmt \n *&j:int =0 [line 13]\n " shape="box"] + "main12" -> "main10" ; +"main11" [label="11: DeclStmt \n *&j:int =0 [line 13]\n " shape="box"] - 11 -> 10 ; -10 [label="10: + \n " ] + "main11" -> "main10" ; +"main10" [label="10: + \n " ] - 10 -> 13 ; -9 [label="9: Prune (false branch) \n PRUNE(((n$2 < 10) == 0), false); [line 12]\n " shape="invhouse"] + "main10" -> "main13" ; +"main9" [label="9: Prune (false branch) \n PRUNE(((n$2 < 10) == 0), false); [line 12]\n " shape="invhouse"] - 9 -> 3 ; -8 [label="8: Prune (true branch) \n PRUNE(((n$2 < 10) != 0), true); [line 12]\n " shape="invhouse"] + "main9" -> "main3" ; +"main8" [label="8: Prune (true branch) \n PRUNE(((n$2 < 10) != 0), true); [line 12]\n " shape="invhouse"] - 8 -> 11 ; -7 [label="7: BinaryOperatorStmt: LT \n n$2=*&i:int [line 12]\n " shape="box"] + "main8" -> "main11" ; +"main7" [label="7: BinaryOperatorStmt: LT \n n$2=*&i:int [line 12]\n " shape="box"] - 7 -> 8 ; - 7 -> 9 ; -6 [label="6: UnaryOperator \n n$1=*&i:int [line 12]\n *&i:int =(n$1 + 1) [line 12]\n " shape="box"] + "main7" -> "main8" ; + "main7" -> "main9" ; +"main6" [label="6: UnaryOperator \n n$1=*&i:int [line 12]\n *&i:int =(n$1 + 1) [line 12]\n " shape="box"] - 6 -> 4 ; -5 [label="5: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] - 5 -> 4 ; -4 [label="4: + \n " ] + "main5" -> "main4" ; +"main4" [label="4: + \n " ] - 4 -> 7 ; -3 [label="3: Return Stmt \n n$0=*&k:int [line 17]\n *&return:int =n$0 [line 17]\n " shape="box"] + "main4" -> "main7" ; +"main3" [label="3: Return Stmt \n n$0=*&k:int [line 17]\n *&return:int =n$0 [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: i:int j:int k:int \n DECLARE_LOCALS(&return,&i,&j,&k); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: i:int j:int k:int \n DECLARE_LOCALS(&return,&i,&j,&k); [line 10]\n " color=yellow style=filled] - 1 -> 17 ; + "main1" -> "main17" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition.c.dot index 0428b028b..9ed92f725 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition.c.dot @@ -1,43 +1,43 @@ /* @generated */ digraph iCFG { -10 [label="10: DeclStmt \n *&j:int =0 [line 11]\n " shape="box"] +"main10" [label="10: DeclStmt \n *&j:int =0 [line 11]\n " shape="box"] - 10 -> 5 ; -9 [label="9: BinaryOperatorStmt: AddAssign \n n$1=*&j:int [line 13]\n n$2=*&j:int [line 13]\n *&j:int =(n$2 + n$1) [line 13]\n " shape="box"] + "main10" -> "main5" ; +"main9" [label="9: BinaryOperatorStmt: AddAssign \n n$1=*&j:int [line 13]\n n$2=*&j:int [line 13]\n *&j:int =(n$2 + n$1) [line 13]\n " shape="box"] - 9 -> 6 ; -8 [label="8: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] + "main9" -> "main6" ; +"main8" [label="8: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] - 8 -> 3 ; -7 [label="7: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] + "main8" -> "main3" ; +"main7" [label="7: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] - 7 -> 9 ; -6 [label="6: UnaryOperator \n n$0=*&b:int [line 12]\n *&b:int =(n$0 + 1) [line 12]\n " shape="box"] + "main7" -> "main9" ; +"main6" [label="6: UnaryOperator \n n$0=*&b:int [line 12]\n *&b:int =(n$0 + 1) [line 12]\n " shape="box"] - 6 -> 4 ; -5 [label="5: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] - 5 -> 4 ; -4 [label="4: + \n " ] + "main5" -> "main4" ; +"main4" [label="4: + \n " ] - 4 -> 7 ; - 4 -> 8 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] + "main4" -> "main7" ; + "main4" -> "main8" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int j:int \n DECLARE_LOCALS(&return,&b,&j); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int j:int \n DECLARE_LOCALS(&return,&b,&j); [line 10]\n " color=yellow style=filled] - 1 -> 10 ; + "main1" -> "main10" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition_incr.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition_incr.c.dot index 27dd21c07..c6b1dfae1 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition_incr.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition_incr.c.dot @@ -1,39 +1,39 @@ /* @generated */ digraph iCFG { -9 [label="9: DeclStmt \n *&j:int =0 [line 11]\n " shape="box"] +"main9" [label="9: DeclStmt \n *&j:int =0 [line 11]\n " shape="box"] - 9 -> 5 ; -8 [label="8: BinaryOperatorStmt: AddAssign \n n$0=*&j:int [line 13]\n n$1=*&j:int [line 13]\n *&j:int =(n$1 + n$0) [line 13]\n " shape="box"] + "main9" -> "main5" ; +"main8" [label="8: BinaryOperatorStmt: AddAssign \n n$0=*&j:int [line 13]\n n$1=*&j:int [line 13]\n *&j:int =(n$1 + n$0) [line 13]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] + "main8" -> "main4" ; +"main7" [label="7: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] + "main6" -> "main8" ; +"main5" [label="5: DeclStmt \n *&b:int =0 [line 12]\n " shape="box"] - 5 -> 4 ; -4 [label="4: + \n " ] + "main5" -> "main4" ; +"main4" [label="4: + \n " ] - 4 -> 6 ; - 4 -> 7 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] + "main4" -> "main6" ; + "main4" -> "main7" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int j:int \n DECLARE_LOCALS(&return,&b,&j); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int j:int \n DECLARE_LOCALS(&return,&b,&j); [line 10]\n " color=yellow style=filled] - 1 -> 9 ; + "main1" -> "main9" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition_incr_body.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition_incr_body.c.dot index afd8f9a7f..f663ae0f4 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition_incr_body.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/for_no_condition_incr_body.c.dot @@ -1,35 +1,35 @@ /* @generated */ digraph iCFG { -8 [label="8: DeclStmt \n *&d:int =0 [line 11]\n " shape="box"] +"main8" [label="8: DeclStmt \n *&d:int =0 [line 11]\n " shape="box"] - 8 -> 5 ; -7 [label="7: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] + "main8" -> "main5" ; +"main7" [label="7: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] - 6 -> 4 ; -5 [label="5: BinaryOperatorStmt: Assign \n *&d:int =0 [line 12]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n *&d:int =0 [line 12]\n " shape="box"] - 5 -> 4 ; -4 [label="4: + \n " ] + "main5" -> "main4" ; +"main4" [label="4: + \n " ] - 4 -> 6 ; - 4 -> 7 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] + "main4" -> "main6" ; + "main4" -> "main7" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: d:int \n DECLARE_LOCALS(&return,&d); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: d:int \n DECLARE_LOCALS(&return,&d); [line 10]\n " color=yellow style=filled] - 1 -> 8 ; + "main1" -> "main8" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/for_only_body.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/for_only_body.c.dot index be910b026..4c0d0b1d9 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/for_only_body.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/for_only_body.c.dot @@ -1,35 +1,35 @@ /* @generated */ digraph iCFG { -8 [label="8: DeclStmt \n *&i:int =0 [line 11]\n " shape="box"] +"main8" [label="8: DeclStmt \n *&i:int =0 [line 11]\n " shape="box"] - 8 -> 4 ; -7 [label="7: UnaryOperator \n n$0=*&i:int [line 13]\n *&i:int =(n$0 + 1) [line 13]\n " shape="box"] + "main8" -> "main4" ; +"main7" [label="7: UnaryOperator \n n$0=*&i:int [line 13]\n *&i:int =(n$0 + 1) [line 13]\n " shape="box"] - 7 -> 4 ; -6 [label="6: Prune (false branch) \n PRUNE((1 == 0), false); [line 14]\n " shape="invhouse"] + "main7" -> "main4" ; +"main6" [label="6: Prune (false branch) \n PRUNE((1 == 0), false); [line 14]\n " shape="invhouse"] - 6 -> 3 ; -5 [label="5: Prune (true branch) \n PRUNE((1 != 0), true); [line 14]\n " shape="invhouse"] + "main6" -> "main3" ; +"main5" [label="5: Prune (true branch) \n PRUNE((1 != 0), true); [line 14]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: + \n " ] + "main5" -> "main7" ; +"main4" [label="4: + \n " ] - 4 -> 5 ; - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] + "main4" -> "main5" ; + "main4" -> "main6" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 10]\n " color=yellow style=filled] - 1 -> 8 ; + "main1" -> "main8" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/for_simple.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/for_simple.c.dot index fb25413f4..2ddfddfa9 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/for_simple.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/for_simple.c.dot @@ -1,47 +1,47 @@ /* @generated */ digraph iCFG { -11 [label="11: DeclStmt \n *&j:int =0 [line 11]\n " shape="box"] +"main11" [label="11: DeclStmt \n *&j:int =0 [line 11]\n " shape="box"] - 11 -> 5 ; -10 [label="10: BinaryOperatorStmt: AddAssign \n n$2=*&j:int [line 13]\n n$3=*&j:int [line 13]\n *&j:int =(n$3 + n$2) [line 13]\n " shape="box"] + "main11" -> "main5" ; +"main10" [label="10: BinaryOperatorStmt: AddAssign \n n$2=*&j:int [line 13]\n n$3=*&j:int [line 13]\n *&j:int =(n$3 + n$2) [line 13]\n " shape="box"] - 10 -> 6 ; -9 [label="9: Prune (false branch) \n PRUNE(((n$1 < 10) == 0), false); [line 12]\n " shape="invhouse"] + "main10" -> "main6" ; +"main9" [label="9: Prune (false branch) \n PRUNE(((n$1 < 10) == 0), false); [line 12]\n " shape="invhouse"] - 9 -> 3 ; -8 [label="8: Prune (true branch) \n PRUNE(((n$1 < 10) != 0), true); [line 12]\n " shape="invhouse"] + "main9" -> "main3" ; +"main8" [label="8: Prune (true branch) \n PRUNE(((n$1 < 10) != 0), true); [line 12]\n " shape="invhouse"] - 8 -> 10 ; -7 [label="7: BinaryOperatorStmt: LT \n n$1=*&i:int [line 12]\n " shape="box"] + "main8" -> "main10" ; +"main7" [label="7: BinaryOperatorStmt: LT \n n$1=*&i:int [line 12]\n " shape="box"] - 7 -> 8 ; - 7 -> 9 ; -6 [label="6: UnaryOperator \n n$0=*&i:int [line 12]\n *&i:int =(n$0 + 1) [line 12]\n " shape="box"] + "main7" -> "main8" ; + "main7" -> "main9" ; +"main6" [label="6: UnaryOperator \n n$0=*&i:int [line 12]\n *&i:int =(n$0 + 1) [line 12]\n " shape="box"] - 6 -> 4 ; -5 [label="5: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] - 5 -> 4 ; -4 [label="4: + \n " ] + "main5" -> "main4" ; +"main4" [label="4: + \n " ] - 4 -> 7 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] + "main4" -> "main7" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: i:int j:int \n DECLARE_LOCALS(&return,&i,&j); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: i:int j:int \n DECLARE_LOCALS(&return,&i,&j); [line 10]\n " color=yellow style=filled] - 1 -> 11 ; + "main1" -> "main11" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/for_while_nested.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/for_while_nested.c.dot index 1d145906a..618a8afd5 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/for_while_nested.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/for_while_nested.c.dot @@ -1,64 +1,64 @@ /* @generated */ digraph iCFG { -15 [label="15: DeclStmt \n *&k:int =0 [line 11]\n " shape="box"] +"main15" [label="15: DeclStmt \n *&k:int =0 [line 11]\n " shape="box"] - 15 -> 5 ; -14 [label="14: UnaryOperator \n n$4=*&k:int [line 14]\n *&k:int =(n$4 + 1) [line 14]\n " shape="box"] + "main15" -> "main5" ; +"main14" [label="14: UnaryOperator \n n$4=*&k:int [line 14]\n *&k:int =(n$4 + 1) [line 14]\n " shape="box"] - 14 -> 10 ; -13 [label="13: Prune (false branch) \n PRUNE(((n$3 < 10) == 0), false); [line 13]\n " shape="invhouse"] + "main14" -> "main10" ; +"main13" [label="13: Prune (false branch) \n PRUNE(((n$3 < 10) == 0), false); [line 13]\n " shape="invhouse"] - 13 -> 6 ; -12 [label="12: Prune (true branch) \n PRUNE(((n$3 < 10) != 0), true); [line 13]\n " shape="invhouse"] + "main13" -> "main6" ; +"main12" [label="12: Prune (true branch) \n PRUNE(((n$3 < 10) != 0), true); [line 13]\n " shape="invhouse"] - 12 -> 14 ; -11 [label="11: BinaryOperatorStmt: LT \n n$3=*&k:int [line 13]\n " shape="box"] + "main12" -> "main14" ; +"main11" [label="11: BinaryOperatorStmt: LT \n n$3=*&k:int [line 13]\n " shape="box"] - 11 -> 12 ; - 11 -> 13 ; -10 [label="10: + \n " ] + "main11" -> "main12" ; + "main11" -> "main13" ; +"main10" [label="10: + \n " ] - 10 -> 11 ; -9 [label="9: Prune (false branch) \n PRUNE(((n$2 < 10) == 0), false); [line 12]\n " shape="invhouse"] + "main10" -> "main11" ; +"main9" [label="9: Prune (false branch) \n PRUNE(((n$2 < 10) == 0), false); [line 12]\n " shape="invhouse"] - 9 -> 3 ; -8 [label="8: Prune (true branch) \n PRUNE(((n$2 < 10) != 0), true); [line 12]\n " shape="invhouse"] + "main9" -> "main3" ; +"main8" [label="8: Prune (true branch) \n PRUNE(((n$2 < 10) != 0), true); [line 12]\n " shape="invhouse"] - 8 -> 10 ; -7 [label="7: BinaryOperatorStmt: LT \n n$2=*&i:int [line 12]\n " shape="box"] + "main8" -> "main10" ; +"main7" [label="7: BinaryOperatorStmt: LT \n n$2=*&i:int [line 12]\n " shape="box"] - 7 -> 8 ; - 7 -> 9 ; -6 [label="6: UnaryOperator \n n$1=*&i:int [line 12]\n *&i:int =(n$1 + 1) [line 12]\n " shape="box"] + "main7" -> "main8" ; + "main7" -> "main9" ; +"main6" [label="6: UnaryOperator \n n$1=*&i:int [line 12]\n *&i:int =(n$1 + 1) [line 12]\n " shape="box"] - 6 -> 4 ; -5 [label="5: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] + "main6" -> "main4" ; +"main5" [label="5: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] - 5 -> 4 ; -4 [label="4: + \n " ] + "main5" -> "main4" ; +"main4" [label="4: + \n " ] - 4 -> 7 ; -3 [label="3: Return Stmt \n n$0=*&k:int [line 17]\n *&return:int =n$0 [line 17]\n " shape="box"] + "main4" -> "main7" ; +"main3" [label="3: Return Stmt \n n$0=*&k:int [line 17]\n *&return:int =n$0 [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: i:int k:int \n DECLARE_LOCALS(&return,&i,&k); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: i:int k:int \n DECLARE_LOCALS(&return,&i,&k); [line 10]\n " color=yellow style=filled] - 1 -> 15 ; + "main1" -> "main15" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/while.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/while.c.dot index fcd54f8fc..4b2029638 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/while.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/while.c.dot @@ -1,39 +1,39 @@ /* @generated */ digraph iCFG { -9 [label="9: DeclStmt \n *&i:int =0 [line 11]\n " shape="box"] +"main9" [label="9: DeclStmt \n *&i:int =0 [line 11]\n " shape="box"] - 9 -> 4 ; -8 [label="8: UnaryOperator \n n$1=*&i:int [line 13]\n *&i:int =(n$1 + 1) [line 13]\n " shape="box"] + "main9" -> "main4" ; +"main8" [label="8: UnaryOperator \n n$1=*&i:int [line 13]\n *&i:int =(n$1 + 1) [line 13]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 <= 10) == 0), false); [line 12]\n " shape="invhouse"] + "main8" -> "main4" ; +"main7" [label="7: Prune (false branch) \n PRUNE(((n$0 <= 10) == 0), false); [line 12]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 <= 10) != 0), true); [line 12]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE(((n$0 <= 10) != 0), true); [line 12]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: LE \n n$0=*&i:int [line 12]\n " shape="box"] + "main6" -> "main8" ; +"main5" [label="5: BinaryOperatorStmt: LE \n n$0=*&i:int [line 12]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "main5" -> "main6" ; + "main5" -> "main7" ; +"main4" [label="4: + \n " ] - 4 -> 5 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] + "main4" -> "main5" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 10]\n " color=yellow style=filled] - 1 -> 9 ; + "main1" -> "main9" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/while_condition_side_effects.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/while_condition_side_effects.c.dot index 0df804470..d3ec0f0ae 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/while_condition_side_effects.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/while_condition_side_effects.c.dot @@ -1,39 +1,39 @@ /* @generated */ digraph iCFG { -9 [label="9: DeclStmt \n *&i:int =0 [line 11]\n " shape="box"] +"main9" [label="9: DeclStmt \n *&i:int =0 [line 11]\n " shape="box"] - 9 -> 4 ; -8 [label="8: UnaryOperator \n n$1=*&i:int [line 13]\n *&i:int =(n$1 + 1) [line 13]\n " shape="box"] + "main9" -> "main4" ; +"main8" [label="8: UnaryOperator \n n$1=*&i:int [line 13]\n *&i:int =(n$1 + 1) [line 13]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE((n$0 == 0), false); [line 12]\n " shape="invhouse"] + "main8" -> "main4" ; +"main7" [label="7: Prune (false branch) \n PRUNE((n$0 == 0), false); [line 12]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE((n$0 != 0), true); [line 12]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE((n$0 != 0), true); [line 12]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: Assign \n *&i:int =10 [line 12]\n n$0=*&i:int [line 12]\n " shape="box"] + "main6" -> "main8" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n *&i:int =10 [line 12]\n n$0=*&i:int [line 12]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "main5" -> "main6" ; + "main5" -> "main7" ; +"main4" [label="4: + \n " ] - 4 -> 5 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] + "main4" -> "main5" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 10]\n " color=yellow style=filled] - 1 -> 9 ; + "main1" -> "main9" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/while_nested.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/while_nested.c.dot index 975ef769b..40765d33c 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/while_nested.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/while_nested.c.dot @@ -1,64 +1,64 @@ /* @generated */ digraph iCFG { -15 [label="15: DeclStmt \n *&i:int =0 [line 11]\n " shape="box"] +"main15" [label="15: DeclStmt \n *&i:int =0 [line 11]\n " shape="box"] - 15 -> 14 ; -14 [label="14: DeclStmt \n *&k:int =0 [line 12]\n " shape="box"] + "main15" -> "main14" ; +"main14" [label="14: DeclStmt \n *&k:int =0 [line 12]\n " shape="box"] - 14 -> 4 ; -13 [label="13: UnaryOperator \n n$3=*&k:int [line 15]\n *&k:int =(n$3 + 1) [line 15]\n " shape="box"] + "main14" -> "main4" ; +"main13" [label="13: UnaryOperator \n n$3=*&k:int [line 15]\n *&k:int =(n$3 + 1) [line 15]\n " shape="box"] - 13 -> 9 ; -12 [label="12: Prune (false branch) \n PRUNE(((n$2 <= 5) == 0), false); [line 14]\n " shape="invhouse"] + "main13" -> "main9" ; +"main12" [label="12: Prune (false branch) \n PRUNE(((n$2 <= 5) == 0), false); [line 14]\n " shape="invhouse"] - 12 -> 8 ; -11 [label="11: Prune (true branch) \n PRUNE(((n$2 <= 5) != 0), true); [line 14]\n " shape="invhouse"] + "main12" -> "main8" ; +"main11" [label="11: Prune (true branch) \n PRUNE(((n$2 <= 5) != 0), true); [line 14]\n " shape="invhouse"] - 11 -> 13 ; -10 [label="10: BinaryOperatorStmt: LE \n n$2=*&k:int [line 14]\n " shape="box"] + "main11" -> "main13" ; +"main10" [label="10: BinaryOperatorStmt: LE \n n$2=*&k:int [line 14]\n " shape="box"] - 10 -> 11 ; - 10 -> 12 ; -9 [label="9: + \n " ] + "main10" -> "main11" ; + "main10" -> "main12" ; +"main9" [label="9: + \n " ] - 9 -> 10 ; -8 [label="8: UnaryOperator \n n$1=*&i:int [line 17]\n *&i:int =(n$1 + 1) [line 17]\n " shape="box"] + "main9" -> "main10" ; +"main8" [label="8: UnaryOperator \n n$1=*&i:int [line 17]\n *&i:int =(n$1 + 1) [line 17]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 <= 10) == 0), false); [line 13]\n " shape="invhouse"] + "main8" -> "main4" ; +"main7" [label="7: Prune (false branch) \n PRUNE(((n$0 <= 10) == 0), false); [line 13]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 <= 10) != 0), true); [line 13]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE(((n$0 <= 10) != 0), true); [line 13]\n " shape="invhouse"] - 6 -> 9 ; -5 [label="5: BinaryOperatorStmt: LE \n n$0=*&i:int [line 13]\n " shape="box"] + "main6" -> "main9" ; +"main5" [label="5: BinaryOperatorStmt: LE \n n$0=*&i:int [line 13]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "main5" -> "main6" ; + "main5" -> "main7" ; +"main4" [label="4: + \n " ] - 4 -> 5 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 19]\n " shape="box"] + "main4" -> "main5" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 19]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: k:int i:int \n DECLARE_LOCALS(&return,&k,&i); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: k:int i:int \n DECLARE_LOCALS(&return,&k,&i); [line 10]\n " color=yellow style=filled] - 1 -> 15 ; + "main1" -> "main15" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/while_no_body.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/while_no_body.c.dot index 44c379d43..226dd336d 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/while_no_body.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/while_no_body.c.dot @@ -1,27 +1,27 @@ /* @generated */ digraph iCFG { -6 [label="6: Prune (false branch) \n PRUNE((1 == 0), false); [line 11]\n " shape="invhouse"] +"main6" [label="6: Prune (false branch) \n PRUNE((1 == 0), false); [line 11]\n " shape="invhouse"] - 6 -> 3 ; -5 [label="5: Prune (true branch) \n PRUNE((1 != 0), true); [line 11]\n " shape="invhouse"] + "main6" -> "main3" ; +"main5" [label="5: Prune (true branch) \n PRUNE((1 != 0), true); [line 11]\n " shape="invhouse"] - 5 -> 4 ; -4 [label="4: + \n " ] + "main5" -> "main4" ; +"main4" [label="4: + \n " ] - 4 -> 5 ; - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 13]\n " shape="box"] + "main4" -> "main5" ; + "main4" -> "main6" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 13]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 1 -> 4 ; + "main1" -> "main4" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/loops/while_with_continue_and_break.c.dot b/infer/tests/codetoanalyze/c/frontend/loops/while_with_continue_and_break.c.dot index faaca12d7..fe8ca7a73 100644 --- a/infer/tests/codetoanalyze/c/frontend/loops/while_with_continue_and_break.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/loops/while_with_continue_and_break.c.dot @@ -1,82 +1,82 @@ /* @generated */ digraph iCFG { -19 [label="19: DeclStmt \n *&x:int =0 [line 11]\n " shape="box"] +"main19" [label="19: DeclStmt \n *&x:int =0 [line 11]\n " shape="box"] - 19 -> 4 ; -18 [label="18: BinaryOperatorStmt: AddAssign \n n$2=*&x:int [line 14]\n *&x:int =(n$2 + 1) [line 14]\n " shape="box"] + "main19" -> "main4" ; +"main18" [label="18: BinaryOperatorStmt: AddAssign \n n$2=*&x:int [line 14]\n *&x:int =(n$2 + 1) [line 14]\n " shape="box"] - 18 -> 15 ; -17 [label="17: Prune (false branch) \n PRUNE(((n$1 > 5) == 0), false); [line 15]\n " shape="invhouse"] + "main18" -> "main15" ; +"main17" [label="17: Prune (false branch) \n PRUNE(((n$1 > 5) == 0), false); [line 15]\n " shape="invhouse"] - 17 -> 14 ; -16 [label="16: Prune (true branch) \n PRUNE(((n$1 > 5) != 0), true); [line 15]\n " shape="invhouse"] + "main17" -> "main14" ; +"main16" [label="16: Prune (true branch) \n PRUNE(((n$1 > 5) != 0), true); [line 15]\n " shape="invhouse"] - 16 -> 8 ; -15 [label="15: BinaryOperatorStmt: GT \n n$1=*&x:int [line 15]\n " shape="box"] + "main16" -> "main8" ; +"main15" [label="15: BinaryOperatorStmt: GT \n n$1=*&x:int [line 15]\n " shape="box"] - 15 -> 16 ; - 15 -> 17 ; -14 [label="14: + \n " ] + "main15" -> "main16" ; + "main15" -> "main17" ; +"main14" [label="14: + \n " ] - 14 -> 11 ; -13 [label="13: Prune (false branch) \n PRUNE((2 == 0), false); [line 13]\n " shape="invhouse"] + "main14" -> "main11" ; +"main13" [label="13: Prune (false branch) \n PRUNE((2 == 0), false); [line 13]\n " shape="invhouse"] - 13 -> 8 ; -12 [label="12: Prune (true branch) \n PRUNE((2 != 0), true); [line 13]\n " shape="invhouse"] + "main13" -> "main8" ; +"main12" [label="12: Prune (true branch) \n PRUNE((2 != 0), true); [line 13]\n " shape="invhouse"] - 12 -> 18 ; -11 [label="11: + \n " ] + "main12" -> "main18" ; +"main11" [label="11: + \n " ] - 11 -> 12 ; - 11 -> 13 ; -10 [label="10: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 19]\n " shape="invhouse"] + "main11" -> "main12" ; + "main11" -> "main13" ; +"main10" [label="10: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 19]\n " shape="invhouse"] - 10 -> 7 ; -9 [label="9: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 19]\n " shape="invhouse"] + "main10" -> "main7" ; +"main9" [label="9: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 19]\n " shape="invhouse"] - 9 -> 4 ; -8 [label="8: BinaryOperatorStmt: EQ \n n$0=*&x:int [line 19]\n " shape="box"] + "main9" -> "main4" ; +"main8" [label="8: BinaryOperatorStmt: EQ \n n$0=*&x:int [line 19]\n " shape="box"] - 8 -> 9 ; - 8 -> 10 ; -7 [label="7: + \n " ] + "main8" -> "main9" ; + "main8" -> "main10" ; +"main7" [label="7: + \n " ] - 7 -> 4 ; -6 [label="6: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] + "main7" -> "main4" ; +"main6" [label="6: Prune (false branch) \n PRUNE((1 == 0), false); [line 12]\n " shape="invhouse"] - 6 -> 3 ; -5 [label="5: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] + "main6" -> "main3" ; +"main5" [label="5: Prune (true branch) \n PRUNE((1 != 0), true); [line 12]\n " shape="invhouse"] - 5 -> 11 ; -4 [label="4: + \n " ] + "main5" -> "main11" ; +"main4" [label="4: + \n " ] - 4 -> 5 ; - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 23]\n " shape="box"] + "main4" -> "main5" ; + "main4" -> "main6" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 23]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 10]\n " color=yellow style=filled] - 1 -> 19 ; + "main1" -> "main19" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_in_condition.c.dot b/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_in_condition.c.dot index cfa44b60f..e9db4455e 100644 --- a/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_in_condition.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_in_condition.c.dot @@ -1,35 +1,35 @@ /* @generated */ digraph iCFG { -8 [label="8: Return Stmt \n *&return:int =32 [line 12]\n " shape="box"] +"foo8" [label="8: Return Stmt \n *&return:int =32 [line 12]\n " shape="box"] - 8 -> 2 ; -7 [label="7: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 11]\n " shape="invhouse"] + "foo8" -> "foo2" ; +"foo7" [label="7: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 11]\n " shape="invhouse"] - 7 -> 4 ; -6 [label="6: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 11]\n " shape="invhouse"] + "foo7" -> "foo4" ; +"foo6" [label="6: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 11]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$0=*&p:int * [line 11]\n *n$0:int =0 [line 11]\n n$1=*n$0:int [line 11]\n " shape="box"] + "foo6" -> "foo8" ; +"foo5" [label="5: BinaryOperatorStmt: Assign \n n$0=*&p:int * [line 11]\n *n$0:int =0 [line 11]\n n$1=*n$0:int [line 11]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "foo5" -> "foo6" ; + "foo5" -> "foo7" ; +"foo4" [label="4: + \n " ] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =52 [line 14]\n " shape="box"] + "foo4" -> "foo3" ; +"foo3" [label="3: Return Stmt \n *&return:int =52 [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit foo \n " color=yellow style=filled] + "foo3" -> "foo2" ; +"foo2" [label="2: Exit foo \n " color=yellow style=filled] -1 [label="1: Start foo\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"foo1" [label="1: Start foo\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 1 -> 5 ; + "foo1" -> "foo5" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_in_condition.cpp.dot b/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_in_condition.cpp.dot index f30daf727..dbfd4bdfd 100644 --- a/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_in_condition.cpp.dot +++ b/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_in_condition.cpp.dot @@ -1,35 +1,35 @@ /* @generated */ digraph iCFG { -8 [label="8: Return Stmt \n *&return:int =32 [line 12]\n " shape="box"] +"foo8" [label="8: Return Stmt \n *&return:int =32 [line 12]\n " shape="box"] - 8 -> 2 ; -7 [label="7: Prune (false branch) \n n$1=*n$0:int [line 11]\n PRUNE((n$1 == 0), false); [line 11]\n " shape="invhouse"] + "foo8" -> "foo2" ; +"foo7" [label="7: Prune (false branch) \n n$1=*n$0:int [line 11]\n PRUNE((n$1 == 0), false); [line 11]\n " shape="invhouse"] - 7 -> 4 ; -6 [label="6: Prune (true branch) \n n$1=*n$0:int [line 11]\n PRUNE((n$1 != 0), true); [line 11]\n " shape="invhouse"] + "foo7" -> "foo4" ; +"foo6" [label="6: Prune (true branch) \n n$1=*n$0:int [line 11]\n PRUNE((n$1 != 0), true); [line 11]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$0=*&p:int * [line 11]\n *n$0:int =0 [line 11]\n " shape="box"] + "foo6" -> "foo8" ; +"foo5" [label="5: BinaryOperatorStmt: Assign \n n$0=*&p:int * [line 11]\n *n$0:int =0 [line 11]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "foo5" -> "foo6" ; + "foo5" -> "foo7" ; +"foo4" [label="4: + \n " ] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =52 [line 14]\n " shape="box"] + "foo4" -> "foo3" ; +"foo3" [label="3: Return Stmt \n *&return:int =52 [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit foo \n " color=yellow style=filled] + "foo3" -> "foo2" ; +"foo2" [label="2: Exit foo \n " color=yellow style=filled] -1 [label="1: Start foo\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"foo1" [label="1: Start foo\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 1 -> 5 ; + "foo1" -> "foo5" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_with_increment.c.dot b/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_with_increment.c.dot index c183c59a5..1611594b4 100644 --- a/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_with_increment.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_with_increment.c.dot @@ -1,30 +1,30 @@ /* @generated */ digraph iCFG { -7 [label="7: DeclStmt \n *&a:int =3 [line 11]\n " shape="box"] +"test7" [label="7: DeclStmt \n *&a:int =3 [line 11]\n " shape="box"] - 7 -> 6 ; -6 [label="6: DeclStmt \n n$3=*&a:int [line 12]\n *&a:int =(n$3 + 1) [line 12]\n *&b:int =(n$3 + 1) [line 12]\n " shape="box"] + "test7" -> "test6" ; +"test6" [label="6: DeclStmt \n n$3=*&a:int [line 12]\n *&a:int =(n$3 + 1) [line 12]\n *&b:int =(n$3 + 1) [line 12]\n " shape="box"] - 6 -> 5 ; -5 [label="5: DeclStmt \n n$2=*&a:int [line 13]\n *&a:int =(n$2 + 1) [line 13]\n *&c:int =n$2 [line 13]\n " shape="box"] + "test6" -> "test5" ; +"test5" [label="5: DeclStmt \n n$2=*&a:int [line 13]\n *&a:int =(n$2 + 1) [line 13]\n *&c:int =n$2 [line 13]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n n$1=*&a:int [line 14]\n *&a:int =(n$1 - 1) [line 14]\n *&d:int =(n$1 - 1) [line 14]\n " shape="box"] + "test5" -> "test4" ; +"test4" [label="4: DeclStmt \n n$1=*&a:int [line 14]\n *&a:int =(n$1 - 1) [line 14]\n *&d:int =(n$1 - 1) [line 14]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n n$0=*&a:int [line 15]\n *&a:int =(n$0 - 1) [line 15]\n *&e:int =n$0 [line 15]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: DeclStmt \n n$0=*&a:int [line 15]\n *&a:int =(n$0 - 1) [line 15]\n *&e:int =n$0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start test\nFormals: \nLocals: e:int d:int c:int b:int a:int \n DECLARE_LOCALS(&return,&e,&d,&c,&b,&a); [line 10]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: e:int d:int c:int b:int a:int \n DECLARE_LOCALS(&return,&e,&d,&c,&b,&a); [line 10]\n " color=yellow style=filled] - 1 -> 7 ; + "test1" -> "test7" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_with_increment.cpp.dot b/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_with_increment.cpp.dot index e7ab0a8dd..6671efcd7 100644 --- a/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_with_increment.cpp.dot +++ b/infer/tests/codetoanalyze/c/frontend/nestedoperators/assign_with_increment.cpp.dot @@ -1,30 +1,30 @@ /* @generated */ digraph iCFG { -7 [label="7: DeclStmt \n *&a:int =3 [line 11]\n " shape="box"] +"test7" [label="7: DeclStmt \n *&a:int =3 [line 11]\n " shape="box"] - 7 -> 6 ; -6 [label="6: DeclStmt \n n$4=*&a:int [line 12]\n *&a:int =(n$4 + 1) [line 12]\n n$5=*&a:int [line 12]\n *&b:int =n$5 [line 12]\n " shape="box"] + "test7" -> "test6" ; +"test6" [label="6: DeclStmt \n n$4=*&a:int [line 12]\n *&a:int =(n$4 + 1) [line 12]\n n$5=*&a:int [line 12]\n *&b:int =n$5 [line 12]\n " shape="box"] - 6 -> 5 ; -5 [label="5: DeclStmt \n n$3=*&a:int [line 13]\n *&a:int =(n$3 + 1) [line 13]\n *&c:int =n$3 [line 13]\n " shape="box"] + "test6" -> "test5" ; +"test5" [label="5: DeclStmt \n n$3=*&a:int [line 13]\n *&a:int =(n$3 + 1) [line 13]\n *&c:int =n$3 [line 13]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n n$1=*&a:int [line 14]\n *&a:int =(n$1 - 1) [line 14]\n n$2=*&a:int [line 14]\n *&d:int =n$2 [line 14]\n " shape="box"] + "test5" -> "test4" ; +"test4" [label="4: DeclStmt \n n$1=*&a:int [line 14]\n *&a:int =(n$1 - 1) [line 14]\n n$2=*&a:int [line 14]\n *&d:int =n$2 [line 14]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n n$0=*&a:int [line 15]\n *&a:int =(n$0 - 1) [line 15]\n *&e:int =n$0 [line 15]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: DeclStmt \n n$0=*&a:int [line 15]\n *&a:int =(n$0 - 1) [line 15]\n *&e:int =n$0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start test\nFormals: \nLocals: e:int d:int c:int b:int a:int \n DECLARE_LOCALS(&return,&e,&d,&c,&b,&a); [line 10]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: e:int d:int c:int b:int a:int \n DECLARE_LOCALS(&return,&e,&d,&c,&b,&a); [line 10]\n " color=yellow style=filled] - 1 -> 7 ; + "test1" -> "test7" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/nestedoperators/gnuexpr.c.dot b/infer/tests/codetoanalyze/c/frontend/nestedoperators/gnuexpr.c.dot index ee9c7240a..a78744c66 100644 --- a/infer/tests/codetoanalyze/c/frontend/nestedoperators/gnuexpr.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/nestedoperators/gnuexpr.c.dot @@ -1,33 +1,33 @@ /* @generated */ digraph iCFG { -8 [label="8: Return Stmt \n n$2=*&p:int * [line 22]\n n$3=*n$2:int [line 22]\n *&x:int =n$3 [line 22]\n *&y:int =1 [line 23]\n n$0=*&x:int [line 24]\n n$1=*&y:int [line 24]\n *&return:int =(n$0 + n$1) [line 21]\n " shape="box"] +"main5" [label="5: DeclStmt \n *&y:int =3 [line 11]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit test \n " color=yellow style=filled] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: Assign \n *&X:int =4 [line 14]\n n$0=*&X:int [line 15]\n *&y:int =n$0 [line 13]\n " shape="box"] -6 [label="6: Start test\nFormals: p:int *\nLocals: y:int x:int \n DECLARE_LOCALS(&return,&y,&x); [line 20]\n " color=yellow style=filled] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] - 6 -> 8 ; -5 [label="5: DeclStmt \n *&y:int =3 [line 11]\n " shape="box"] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n *&X:int =4 [line 14]\n n$0=*&X:int [line 15]\n *&y:int =n$0 [line 13]\n " shape="box"] +"main1" [label="1: Start main\nFormals: \nLocals: X:int y:int \n DECLARE_LOCALS(&return,&X,&y); [line 10]\n " color=yellow style=filled] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] + "main1" -> "main5" ; +"test3" [label="3: Return Stmt \n n$2=*&p:int * [line 22]\n n$3=*n$2:int [line 22]\n *&x:int =n$3 [line 22]\n *&y:int =1 [line 23]\n n$0=*&x:int [line 24]\n n$1=*&y:int [line 24]\n *&return:int =(n$0 + n$1) [line 21]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: X:int y:int \n DECLARE_LOCALS(&return,&X,&y); [line 10]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: p:int *\nLocals: y:int x:int \n DECLARE_LOCALS(&return,&y,&x); [line 20]\n " color=yellow style=filled] - 1 -> 5 ; + "test1" -> "test3" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/nestedoperators/nestedassignment.c.dot b/infer/tests/codetoanalyze/c/frontend/nestedoperators/nestedassignment.c.dot index ba77b7db9..b92888f7e 100644 --- a/infer/tests/codetoanalyze/c/frontend/nestedoperators/nestedassignment.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/nestedoperators/nestedassignment.c.dot @@ -1,38 +1,38 @@ /* @generated */ digraph iCFG { -9 [label="9: DeclStmt \n *&x:double =1.000000 [line 11]\n " shape="box"] +"main9" [label="9: DeclStmt \n *&x:double =1.000000 [line 11]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$11=*&s:double [line 13]\n *&x:double =n$11 [line 13]\n " shape="box"] + "main9" -> "main8" ; +"main8" [label="8: BinaryOperatorStmt: Assign \n n$11=*&s:double [line 13]\n *&x:double =n$11 [line 13]\n " shape="box"] - 8 -> 7 ; -7 [label="7: BinaryOperatorStmt: Assign \n *&x:double =3 [line 14]\n n$10=*&x:double [line 14]\n *&q:double =n$10 [line 14]\n " shape="box"] + "main8" -> "main7" ; +"main7" [label="7: BinaryOperatorStmt: Assign \n *&x:double =3 [line 14]\n n$10=*&x:double [line 14]\n *&q:double =n$10 [line 14]\n " shape="box"] - 7 -> 6 ; -6 [label="6: BinaryOperatorStmt: AddAssign \n n$9=*&x:double [line 15]\n *&x:double =(n$9 + 7) [line 15]\n " shape="box"] + "main7" -> "main6" ; +"main6" [label="6: BinaryOperatorStmt: AddAssign \n n$9=*&x:double [line 15]\n *&x:double =(n$9 + 7) [line 15]\n " shape="box"] - 6 -> 5 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$7=*&x:double [line 16]\n *&x:double =(n$7 + 1.000000) [line 16]\n n$8=*&x:double [line 16]\n *&q:double =n$8 [line 16]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n n$7=*&x:double [line 16]\n *&x:double =(n$7 + 1.000000) [line 16]\n n$8=*&x:double [line 16]\n *&q:double =n$8 [line 16]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$0=*&t:double [line 17]\n n$1=*&s:double [line 17]\n *&s:double =(n$1 + n$0) [line 17]\n n$2=*&s:double [line 17]\n n$3=*&r:double [line 17]\n *&r:double =(n$3 + n$2) [line 17]\n n$4=*&r:double [line 17]\n n$5=*&x:double [line 17]\n *&x:double =(n$5 + n$4) [line 17]\n n$6=*&x:double [line 17]\n *&q:double =n$6 [line 17]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: Assign \n n$0=*&t:double [line 17]\n n$1=*&s:double [line 17]\n *&s:double =(n$1 + n$0) [line 17]\n n$2=*&s:double [line 17]\n n$3=*&r:double [line 17]\n *&r:double =(n$3 + n$2) [line 17]\n n$4=*&r:double [line 17]\n n$5=*&x:double [line 17]\n *&x:double =(n$5 + n$4) [line 17]\n n$6=*&x:double [line 17]\n *&q:double =n$6 [line 17]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 18]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 18]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: t:double s:double r:double q:double x:double \n DECLARE_LOCALS(&return,&t,&s,&r,&q,&x); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: t:double s:double r:double q:double x:double \n DECLARE_LOCALS(&return,&t,&s,&r,&q,&x); [line 10]\n " color=yellow style=filled] - 1 -> 9 ; + "main1" -> "main9" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/nestedoperators/union.c.dot b/infer/tests/codetoanalyze/c/frontend/nestedoperators/union.c.dot index 8e2b8d606..b8d310baf 100644 --- a/infer/tests/codetoanalyze/c/frontend/nestedoperators/union.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/nestedoperators/union.c.dot @@ -1,30 +1,30 @@ /* @generated */ digraph iCFG { -7 [label="7: BinaryOperatorStmt: Assign \n n$3=*&#GB$x:struct anonymous_struct_nestedoperators_union.c:12:1 * [line 32]\n *n$3.a:int =1 [line 32]\n " shape="box"] +"main7" [label="7: BinaryOperatorStmt: Assign \n n$3=*&#GB$x:struct anonymous_struct_nestedoperators_union.c:12:1 * [line 32]\n *n$3.a:int =1 [line 32]\n " shape="box"] - 7 -> 6 ; -6 [label="6: BinaryOperatorStmt: Assign \n *&#GB$y.f:int =7 [line 33]\n " shape="box"] + "main7" -> "main6" ; +"main6" [label="6: BinaryOperatorStmt: Assign \n *&#GB$y.f:int =7 [line 33]\n " shape="box"] - 6 -> 5 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$2=*&#GB$y.f:int [line 34]\n *&#GB$y.g.u:int =n$2 [line 34]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n n$2=*&#GB$y.f:int [line 34]\n *&#GB$y.g.u:int =n$2 [line 34]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$0=*&#GB$x:struct anonymous_struct_nestedoperators_union.c:12:1 * [line 36]\n n$1=*n$0.b:int [line 36]\n *&#GB$y.g.w:int =n$1 [line 36]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: Assign \n n$0=*&#GB$x:struct anonymous_struct_nestedoperators_union.c:12:1 * [line 36]\n n$1=*n$0.b:int [line 36]\n *&#GB$y.g.w:int =n$1 [line 36]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 37]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 37]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: l:int \n DECLARE_LOCALS(&return,&l); [line 29]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: l:int \n DECLARE_LOCALS(&return,&l); [line 29]\n " color=yellow style=filled] - 1 -> 7 ; + "main1" -> "main7" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/nestedoperators/union.cpp.dot b/infer/tests/codetoanalyze/c/frontend/nestedoperators/union.cpp.dot index 2296c827f..c2e863e3d 100644 --- a/infer/tests/codetoanalyze/c/frontend/nestedoperators/union.cpp.dot +++ b/infer/tests/codetoanalyze/c/frontend/nestedoperators/union.cpp.dot @@ -1,48 +1,48 @@ /* @generated */ digraph iCFG { -12 [label="12: BinaryOperatorStmt: Assign \n n$3=*&#GB$x:class anonymous_struct_nestedoperators_union.cpp:12:1 * [line 32]\n *n$3.a:int =1 [line 32]\n " shape="box"] +"main7" [label="7: BinaryOperatorStmt: Assign \n n$3=*&#GB$x:class anonymous_struct_nestedoperators_union.cpp:12:1 * [line 32]\n *n$3.a:int =1 [line 32]\n " shape="box"] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: Assign \n *&#GB$y.f:int =7 [line 33]\n " shape="box"] + "main7" -> "main6" ; +"main6" [label="6: BinaryOperatorStmt: Assign \n *&#GB$y.f:int =7 [line 33]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$2=*&#GB$y.f:int [line 34]\n *&#GB$y.g.u:int =n$2 [line 34]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n n$2=*&#GB$y.f:int [line 34]\n *&#GB$y.g.u:int =n$2 [line 34]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$0=*&#GB$x:class anonymous_struct_nestedoperators_union.cpp:12:1 * [line 36]\n n$1=*n$0.b:int [line 36]\n *&#GB$y.g.w:int =n$1 [line 36]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: Assign \n n$0=*&#GB$x:class anonymous_struct_nestedoperators_union.cpp:12:1 * [line 36]\n n$1=*n$0.b:int [line 36]\n *&#GB$y.g.w:int =n$1 [line 36]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Return Stmt \n *&return:int =0 [line 37]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 37]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -6 [label="6: Start main\nFormals: \nLocals: l:int \n DECLARE_LOCALS(&return,&l); [line 29]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: l:int \n DECLARE_LOCALS(&return,&l); [line 29]\n " color=yellow style=filled] - 6 -> 12 ; -5 [label="5: DeclStmt \n _fun_anonymous_union_nestedoperators_union.cpp:17:1_(&#GB$y:class anonymous_union_nestedoperators_union.cpp:17:1 *) [line 27]\n " shape="box"] + "main1" -> "main7" ; +"anonymous_union_nestedoperators_union.cpp:17:1_2" [label="2: Exit anonymous_union_nestedoperators_union.cpp:17:1_ \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit __infer_globals_initializer_y \n " color=yellow style=filled] +"anonymous_union_nestedoperators_union.cpp:17:1_1" [label="1: Start anonymous_union_nestedoperators_union.cpp:17:1_\nFormals: this:class anonymous_union_nestedoperators_union.cpp:17:1 *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] -3 [label="3: Start __infer_globals_initializer_y\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "anonymous_union_nestedoperators_union.cpp:17:1_1" -> "anonymous_union_nestedoperators_union.cpp:17:1_2" ; +"__infer_globals_initializer_y3" [label="3: DeclStmt \n _fun_anonymous_union_nestedoperators_union.cpp:17:1_(&#GB$y:class anonymous_union_nestedoperators_union.cpp:17:1 *) [line 27]\n " shape="box"] - 3 -> 5 ; -2 [label="2: Exit anonymous_union_nestedoperators_union.cpp:17:1_ \n " color=yellow style=filled] + "__infer_globals_initializer_y3" -> "__infer_globals_initializer_y2" ; +"__infer_globals_initializer_y2" [label="2: Exit __infer_globals_initializer_y \n " color=yellow style=filled] -1 [label="1: Start anonymous_union_nestedoperators_union.cpp:17:1_\nFormals: this:class anonymous_union_nestedoperators_union.cpp:17:1 *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] +"__infer_globals_initializer_y1" [label="1: Start __infer_globals_initializer_y\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 1 -> 2 ; + "__infer_globals_initializer_y1" -> "__infer_globals_initializer_y3" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/offsetof_expr/offsetof_expr.c.dot b/infer/tests/codetoanalyze/c/frontend/offsetof_expr/offsetof_expr.c.dot index 53ec05717..976d1a368 100644 --- a/infer/tests/codetoanalyze/c/frontend/offsetof_expr/offsetof_expr.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/offsetof_expr/offsetof_expr.c.dot @@ -1,43 +1,43 @@ /* @generated */ digraph iCFG { -10 [label="10: DeclStmt \n *&i:int =n$1 [line 19]\n " shape="box"] +"test_offsetof_expr10" [label="10: DeclStmt \n *&i:int =n$1 [line 19]\n " shape="box"] - 10 -> 5 ; -9 [label="9: Return Stmt \n *&return:int =(4 / 0) [line 23]\n " shape="box"] + "test_offsetof_expr10" -> "test_offsetof_expr5" ; +"test_offsetof_expr9" [label="9: Return Stmt \n *&return:int =(4 / 0) [line 23]\n " shape="box"] - 9 -> 2 ; -8 [label="8: Return Stmt \n *&return:int =(9 / 0) [line 21]\n " shape="box"] + "test_offsetof_expr9" -> "test_offsetof_expr2" ; +"test_offsetof_expr8" [label="8: Return Stmt \n *&return:int =(9 / 0) [line 21]\n " shape="box"] - 8 -> 2 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 == 9) == 0), false); [line 20]\n " shape="invhouse"] + "test_offsetof_expr8" -> "test_offsetof_expr2" ; +"test_offsetof_expr7" [label="7: Prune (false branch) \n PRUNE(((n$0 == 9) == 0), false); [line 20]\n " shape="invhouse"] - 7 -> 9 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 == 9) != 0), true); [line 20]\n " shape="invhouse"] + "test_offsetof_expr7" -> "test_offsetof_expr9" ; +"test_offsetof_expr6" [label="6: Prune (true branch) \n PRUNE(((n$0 == 9) != 0), true); [line 20]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: EQ \n n$0=*&i:int [line 20]\n " shape="box"] + "test_offsetof_expr6" -> "test_offsetof_expr8" ; +"test_offsetof_expr5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&i:int [line 20]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: between_join_and_exit \n " shape="box"] + "test_offsetof_expr5" -> "test_offsetof_expr6" ; + "test_offsetof_expr5" -> "test_offsetof_expr7" ; +"test_offsetof_expr4" [label="4: between_join_and_exit \n " shape="box"] - 4 -> 2 ; -3 [label="3: + \n " ] + "test_offsetof_expr4" -> "test_offsetof_expr2" ; +"test_offsetof_expr3" [label="3: + \n " ] - 3 -> 4 ; -2 [label="2: Exit test_offsetof_expr \n " color=yellow style=filled] + "test_offsetof_expr3" -> "test_offsetof_expr4" ; +"test_offsetof_expr2" [label="2: Exit test_offsetof_expr \n " color=yellow style=filled] -1 [label="1: Start test_offsetof_expr\nFormals: \nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 18]\n " color=yellow style=filled] +"test_offsetof_expr1" [label="1: Start test_offsetof_expr\nFormals: \nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 18]\n " color=yellow style=filled] - 1 -> 10 ; + "test_offsetof_expr1" -> "test_offsetof_expr10" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/switchstmt/switch.c.dot b/infer/tests/codetoanalyze/c/frontend/switchstmt/switch.c.dot index 9b2fa957c..eddc8a2c7 100644 --- a/infer/tests/codetoanalyze/c/frontend/switchstmt/switch.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/switchstmt/switch.c.dot @@ -1,806 +1,806 @@ /* @generated */ digraph iCFG { -195 [label="195: DeclStmt \n *&value:int =0 [line 192]\n " shape="box"] +"getValue3" [label="3: Return Stmt \n *&return:int =1 [line 137]\n " shape="box"] - 195 -> 186 ; -194 [label="194: Prune (false branch) \n PRUNE(((n$3 == 0) == 0), false); [line 194]\n " shape="invhouse"] + "getValue3" -> "getValue2" ; +"getValue2" [label="2: Exit getValue \n " color=yellow style=filled] - 194 -> 184 ; -193 [label="193: Prune (true branch) \n PRUNE(((n$3 == 0) != 0), true); [line 194]\n " shape="invhouse"] +"getValue1" [label="1: Start getValue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 137]\n " color=yellow style=filled] - 193 -> 192 ; -192 [label="192: Call _fun_printf \n n$4=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 195]\n " shape="box"] + "getValue1" -> "getValue3" ; +"m95" [label="5: DeclStmt \n *&value:int =0 [line 180]\n " shape="box"] - 192 -> 184 ; -191 [label="191: Switch_stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 193]\n *&value:int =n$2 [line 193]\n n$3=*&value:int [line 193]\n " shape="box"] + "m95" -> "m94" ; +"m94" [label="4: Switch_stmt \n n$0=*&value:int [line 181]\n " shape="box"] - 191 -> 193 ; - 191 -> 194 ; -190 [label="190: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =9 [line 193]\n " shape="box"] + "m94" -> "m93" ; +"m93" [label="3: Return Stmt \n *&return:int =0 [line 182]\n " shape="box"] - 190 -> 185 ; -189 [label="189: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =7 [line 193]\n " shape="box"] + "m93" -> "m92" ; +"m92" [label="2: Exit m9 \n " color=yellow style=filled] - 189 -> 185 ; -188 [label="188: Prune (false branch) \n PRUNE(((n$1 == 0) == 0), false); [line 193]\n " shape="invhouse"] +"m91" [label="1: Start m9\nFormals: \nLocals: value:int \n DECLARE_LOCALS(&return,&value); [line 179]\n " color=yellow style=filled] - 188 -> 190 ; -187 [label="187: Prune (true branch) \n PRUNE(((n$1 == 0) != 0), true); [line 193]\n " shape="invhouse"] + "m91" -> "m95" ; +"m829" [label="29: DeclStmt \n *&value:int =0 [line 158]\n " shape="box"] - 187 -> 189 ; -186 [label="186: BinaryOperatorStmt: EQ \n n$1=*&value:int [line 193]\n " shape="box"] + "m829" -> "m84" ; +"m828" [label="28: Prune (false branch) \n PRUNE(((n$3 == 0) == 0), false); [line 161]\n " shape="invhouse"] - 186 -> 187 ; - 186 -> 188 ; -185 [label="185: + \n " ] + "m828" -> "m823" ; + "m828" -> "m824" ; +"m827" [label="27: Prune (true branch) \n PRUNE(((n$3 == 0) != 0), true); [line 161]\n " shape="invhouse"] - 185 -> 191 ; -184 [label="184: Return Stmt \n *&return:int =0 [line 197]\n " shape="box"] + "m827" -> "m826" ; +"m826" [label="26: Call _fun_printf \n n$5=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 162]\n " shape="box"] - 184 -> 183 ; -183 [label="183: Exit m11 \n " color=yellow style=filled] + "m826" -> "m825" ; +"m825" [label="25: Return Stmt \n *&return:int =0 [line 163]\n " shape="box"] -182 [label="182: Start m11\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int value:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&value); [line 191]\n " color=yellow style=filled] + "m825" -> "m82" ; +"m824" [label="24: Prune (false branch) \n PRUNE(((n$3 == 1) == 0), false); [line 164]\n " shape="invhouse"] - 182 -> 195 ; -181 [label="181: DeclStmt \n *&value:int =0 [line 186]\n " shape="box"] + "m824" -> "m818" ; + "m824" -> "m819" ; +"m823" [label="23: Prune (true branch) \n PRUNE(((n$3 == 1) != 0), true); [line 164]\n " shape="invhouse"] - 181 -> 180 ; -180 [label="180: Switch_stmt \n *&value:int =7 [line 187]\n n$0=*&value:int [line 187]\n " shape="box"] + "m823" -> "m822" ; +"m822" [label="22: DeclStmt \n *&something:int =1 [line 165]\n " shape="box"] - 180 -> 179 ; -179 [label="179: Return Stmt \n *&return:int =0 [line 188]\n " shape="box"] + "m822" -> "m821" ; +"m821" [label="21: UnaryOperator \n n$4=*&something:int [line 166]\n *&something:int =(n$4 + 1) [line 166]\n " shape="box"] - 179 -> 178 ; -178 [label="178: Exit m10 \n " color=yellow style=filled] + "m821" -> "m84" ; +"m820" [label="20: DeclStmt \n *&z:int =9 [line 169]\n " shape="box"] -177 [label="177: Start m10\nFormals: \nLocals: value:int \n DECLARE_LOCALS(&return,&value); [line 185]\n " color=yellow style=filled] + "m820" -> "m88" ; +"m819" [label="19: Prune (false branch) \n PRUNE(((n$3 == 2) == 0), false); [line 170]\n " shape="invhouse"] - 177 -> 181 ; -176 [label="176: DeclStmt \n *&value:int =0 [line 180]\n " shape="box"] + "m819" -> "m816" ; + "m819" -> "m817" ; +"m818" [label="18: Prune (true branch) \n PRUNE(((n$3 == 2) != 0), true); [line 170]\n " shape="invhouse"] - 176 -> 175 ; -175 [label="175: Switch_stmt \n n$0=*&value:int [line 181]\n " shape="box"] + "m818" -> "m88" ; +"m817" [label="17: Prune (false branch) \n PRUNE(((n$3 == 3) == 0), false); [line 171]\n " shape="invhouse"] - 175 -> 174 ; -174 [label="174: Return Stmt \n *&return:int =0 [line 182]\n " shape="box"] + "m817" -> "m88" ; +"m816" [label="16: Prune (true branch) \n PRUNE(((n$3 == 3) != 0), true); [line 171]\n " shape="invhouse"] - 174 -> 173 ; -173 [label="173: Exit m9 \n " color=yellow style=filled] + "m816" -> "m88" ; +"m815" [label="15: Switch_stmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 160]\n " shape="box"] -172 [label="172: Start m9\nFormals: \nLocals: value:int \n DECLARE_LOCALS(&return,&value); [line 179]\n " color=yellow style=filled] + "m815" -> "m827" ; + "m815" -> "m828" ; +"m814" [label="14: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =2 [line 160]\n " shape="box"] - 172 -> 176 ; -171 [label="171: DeclStmt \n *&value:int =0 [line 158]\n " shape="box"] + "m814" -> "m89" ; +"m813" [label="13: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 160]\n " shape="box"] - 171 -> 146 ; -170 [label="170: Prune (false branch) \n PRUNE(((n$3 == 0) == 0), false); [line 161]\n " shape="invhouse"] + "m813" -> "m89" ; +"m812" [label="12: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 160]\n " shape="invhouse"] - 170 -> 165 ; - 170 -> 166 ; -169 [label="169: Prune (true branch) \n PRUNE(((n$3 == 0) != 0), true); [line 161]\n " shape="invhouse"] + "m812" -> "m814" ; +"m811" [label="11: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 160]\n " shape="invhouse"] - 169 -> 168 ; -168 [label="168: Call _fun_printf \n n$5=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 162]\n " shape="box"] + "m811" -> "m813" ; +"m810" [label="10: BinaryOperatorStmt: EQ \n n$2=_fun_getValue() [line 160]\n " shape="box"] - 168 -> 167 ; -167 [label="167: Return Stmt \n *&return:int =0 [line 163]\n " shape="box"] + "m810" -> "m811" ; + "m810" -> "m812" ; +"m89" [label="9: + \n " ] - 167 -> 144 ; -166 [label="166: Prune (false branch) \n PRUNE(((n$3 == 1) == 0), false); [line 164]\n " shape="invhouse"] + "m89" -> "m815" ; +"m88" [label="8: DeclStmt \n *&a:int =0 [line 174]\n " shape="box"] - 166 -> 160 ; - 166 -> 161 ; -165 [label="165: Prune (true branch) \n PRUNE(((n$3 == 1) != 0), true); [line 164]\n " shape="invhouse"] + "m88" -> "m84" ; +"m87" [label="7: Prune (false branch) \n PRUNE(((n$0 < 10) == 0), false); [line 159]\n " shape="invhouse"] - 165 -> 164 ; -164 [label="164: DeclStmt \n *&something:int =1 [line 165]\n " shape="box"] + "m87" -> "m83" ; +"m86" [label="6: Prune (true branch) \n PRUNE(((n$0 < 10) != 0), true); [line 159]\n " shape="invhouse"] - 164 -> 163 ; -163 [label="163: UnaryOperator \n n$4=*&something:int [line 166]\n *&something:int =(n$4 + 1) [line 166]\n " shape="box"] + "m86" -> "m810" ; +"m85" [label="5: BinaryOperatorStmt: LT \n n$0=*&value:int [line 159]\n " shape="box"] - 163 -> 146 ; -162 [label="162: DeclStmt \n *&z:int =9 [line 169]\n " shape="box"] + "m85" -> "m86" ; + "m85" -> "m87" ; +"m84" [label="4: + \n " ] - 162 -> 150 ; -161 [label="161: Prune (false branch) \n PRUNE(((n$3 == 2) == 0), false); [line 170]\n " shape="invhouse"] + "m84" -> "m85" ; +"m83" [label="3: Return Stmt \n *&return:int =0 [line 176]\n " shape="box"] - 161 -> 158 ; - 161 -> 159 ; -160 [label="160: Prune (true branch) \n PRUNE(((n$3 == 2) != 0), true); [line 170]\n " shape="invhouse"] + "m83" -> "m82" ; +"m82" [label="2: Exit m8 \n " color=yellow style=filled] - 160 -> 150 ; -159 [label="159: Prune (false branch) \n PRUNE(((n$3 == 3) == 0), false); [line 171]\n " shape="invhouse"] +"m81" [label="1: Start m8\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int z:int something:int value:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$1,&z,&something,&value); [line 157]\n " color=yellow style=filled] - 159 -> 150 ; -158 [label="158: Prune (true branch) \n PRUNE(((n$3 == 3) != 0), true); [line 171]\n " shape="invhouse"] + "m81" -> "m829" ; +"m623" [label="23: DeclStmt \n *&value:int =0 [line 120]\n " shape="box"] - 158 -> 150 ; -157 [label="157: Switch_stmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 160]\n " shape="box"] + "m623" -> "m65" ; +"m622" [label="22: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 122]\n " shape="invhouse"] - 157 -> 169 ; - 157 -> 170 ; -156 [label="156: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =2 [line 160]\n " shape="box"] + "m622" -> "m618" ; + "m622" -> "m619" ; +"m621" [label="21: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 122]\n " shape="invhouse"] - 156 -> 151 ; -155 [label="155: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 160]\n " shape="box"] + "m621" -> "m620" ; +"m620" [label="20: Call _fun_printf \n n$4=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 123]\n " shape="box"] - 155 -> 151 ; -154 [label="154: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 160]\n " shape="invhouse"] + "m620" -> "m63" ; +"m619" [label="19: Prune (false branch) \n PRUNE(((n$2 == 1) == 0), false); [line 125]\n " shape="invhouse"] - 154 -> 156 ; -153 [label="153: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 160]\n " shape="invhouse"] + "m619" -> "m613" ; + "m619" -> "m614" ; +"m618" [label="18: Prune (true branch) \n PRUNE(((n$2 == 1) != 0), true); [line 125]\n " shape="invhouse"] - 153 -> 155 ; -152 [label="152: BinaryOperatorStmt: EQ \n n$2=_fun_getValue() [line 160]\n " shape="box"] + "m618" -> "m617" ; +"m617" [label="17: DeclStmt \n *&something:int =1 [line 126]\n " shape="box"] - 152 -> 153 ; - 152 -> 154 ; -151 [label="151: + \n " ] + "m617" -> "m616" ; +"m616" [label="16: UnaryOperator \n n$3=*&something:int [line 127]\n *&something:int =(n$3 + 1) [line 127]\n " shape="box"] - 151 -> 157 ; -150 [label="150: DeclStmt \n *&a:int =0 [line 174]\n " shape="box"] + "m616" -> "m63" ; +"m615" [label="15: DeclStmt \n *&z:int =9 [line 129]\n " shape="box"] - 150 -> 146 ; -149 [label="149: Prune (false branch) \n PRUNE(((n$0 < 10) == 0), false); [line 159]\n " shape="invhouse"] + "m615" -> "m63" ; +"m614" [label="14: Prune (false branch) \n PRUNE(((n$2 == 2) == 0), false); [line 130]\n " shape="invhouse"] - 149 -> 145 ; -148 [label="148: Prune (true branch) \n PRUNE(((n$0 < 10) != 0), true); [line 159]\n " shape="invhouse"] + "m614" -> "m611" ; + "m614" -> "m612" ; +"m613" [label="13: Prune (true branch) \n PRUNE(((n$2 == 2) != 0), true); [line 130]\n " shape="invhouse"] - 148 -> 152 ; -147 [label="147: BinaryOperatorStmt: LT \n n$0=*&value:int [line 159]\n " shape="box"] + "m613" -> "m63" ; +"m612" [label="12: Prune (false branch) \n PRUNE(((n$2 == 3) == 0), false); [line 131]\n " shape="invhouse"] - 147 -> 148 ; - 147 -> 149 ; -146 [label="146: + \n " ] + "m612" -> "m63" ; +"m611" [label="11: Prune (true branch) \n PRUNE(((n$2 == 3) != 0), true); [line 131]\n " shape="invhouse"] - 146 -> 147 ; -145 [label="145: Return Stmt \n *&return:int =0 [line 176]\n " shape="box"] + "m611" -> "m63" ; +"m610" [label="10: Switch_stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 121]\n " shape="box"] - 145 -> 144 ; -144 [label="144: Exit m8 \n " color=yellow style=filled] + "m610" -> "m621" ; + "m610" -> "m622" ; +"m69" [label="9: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 121]\n " shape="box"] -143 [label="143: Start m8\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int z:int something:int value:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$1,&z,&something,&value); [line 157]\n " color=yellow style=filled] + "m69" -> "m64" ; +"m68" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 121]\n " shape="box"] - 143 -> 171 ; -142 [label="142: DeclStmt \n *&value:int =0 [line 140]\n " shape="box"] + "m68" -> "m64" ; +"m67" [label="7: Prune (false branch) \n PRUNE(((n$1 > 0) == 0), false); [line 121]\n " shape="invhouse"] - 142 -> 129 ; -141 [label="141: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 142]\n " shape="invhouse"] + "m67" -> "m69" ; +"m66" [label="6: Prune (true branch) \n PRUNE(((n$1 > 0) != 0), true); [line 121]\n " shape="invhouse"] - 141 -> 137 ; - 141 -> 138 ; -140 [label="140: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 142]\n " shape="invhouse"] + "m66" -> "m68" ; +"m65" [label="5: BinaryOperatorStmt: GT \n n$1=*&value:int [line 121]\n " shape="box"] - 140 -> 139 ; -139 [label="139: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 143]\n " shape="box"] + "m65" -> "m66" ; + "m65" -> "m67" ; +"m64" [label="4: + \n " ] - 139 -> 128 ; -138 [label="138: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 145]\n " shape="invhouse"] + "m64" -> "m610" ; +"m63" [label="3: Return Stmt \n *&return:int =0 [line 134]\n " shape="box"] - 138 -> 132 ; - 138 -> 133 ; -137 [label="137: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 145]\n " shape="invhouse"] + "m63" -> "m62" ; +"m62" [label="2: Exit m6 \n " color=yellow style=filled] - 137 -> 136 ; -136 [label="136: DeclStmt \n *&something:int =1 [line 146]\n " shape="box"] +"m61" [label="1: Start m6\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int z:int something:int value:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&z,&something,&value); [line 119]\n " color=yellow style=filled] - 136 -> 135 ; -135 [label="135: UnaryOperator \n n$1=*&something:int [line 147]\n *&something:int =(n$1 + 1) [line 147]\n " shape="box"] + "m61" -> "m623" ; +"m1114" [label="14: DeclStmt \n *&value:int =0 [line 192]\n " shape="box"] - 135 -> 128 ; -134 [label="134: DeclStmt \n *&z:int =9 [line 149]\n " shape="box"] + "m1114" -> "m115" ; +"m1113" [label="13: Prune (false branch) \n PRUNE(((n$3 == 0) == 0), false); [line 194]\n " shape="invhouse"] - 134 -> 128 ; -133 [label="133: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 150]\n " shape="invhouse"] + "m1113" -> "m113" ; +"m1112" [label="12: Prune (true branch) \n PRUNE(((n$3 == 0) != 0), true); [line 194]\n " shape="invhouse"] - 133 -> 130 ; - 133 -> 131 ; -132 [label="132: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 150]\n " shape="invhouse"] + "m1112" -> "m1111" ; +"m1111" [label="11: Call _fun_printf \n n$4=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 195]\n " shape="box"] - 132 -> 128 ; -131 [label="131: Prune (false branch) \n PRUNE(((n$0 == 3) == 0), false); [line 151]\n " shape="invhouse"] + "m1111" -> "m113" ; +"m1110" [label="10: Switch_stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 193]\n *&value:int =n$2 [line 193]\n n$3=*&value:int [line 193]\n " shape="box"] - 131 -> 128 ; -130 [label="130: Prune (true branch) \n PRUNE(((n$0 == 3) != 0), true); [line 151]\n " shape="invhouse"] + "m1110" -> "m1112" ; + "m1110" -> "m1113" ; +"m119" [label="9: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =9 [line 193]\n " shape="box"] - 130 -> 128 ; -129 [label="129: Switch_stmt \n n$0=_fun_getValue() [line 141]\n " shape="box"] + "m119" -> "m114" ; +"m118" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =7 [line 193]\n " shape="box"] - 129 -> 140 ; - 129 -> 141 ; -128 [label="128: Return Stmt \n *&return:int =0 [line 154]\n " shape="box"] + "m118" -> "m114" ; +"m117" [label="7: Prune (false branch) \n PRUNE(((n$1 == 0) == 0), false); [line 193]\n " shape="invhouse"] - 128 -> 127 ; -127 [label="127: Exit m7 \n " color=yellow style=filled] + "m117" -> "m119" ; +"m116" [label="6: Prune (true branch) \n PRUNE(((n$1 == 0) != 0), true); [line 193]\n " shape="invhouse"] -126 [label="126: Start m7\nFormals: \nLocals: z:int something:int value:int \n DECLARE_LOCALS(&return,&z,&something,&value); [line 139]\n " color=yellow style=filled] + "m116" -> "m118" ; +"m115" [label="5: BinaryOperatorStmt: EQ \n n$1=*&value:int [line 193]\n " shape="box"] - 126 -> 142 ; -125 [label="125: Return Stmt \n *&return:int =1 [line 137]\n " shape="box"] + "m115" -> "m116" ; + "m115" -> "m117" ; +"m114" [label="4: + \n " ] - 125 -> 124 ; -124 [label="124: Exit getValue \n " color=yellow style=filled] + "m114" -> "m1110" ; +"m113" [label="3: Return Stmt \n *&return:int =0 [line 197]\n " shape="box"] -123 [label="123: Start getValue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 137]\n " color=yellow style=filled] + "m113" -> "m112" ; +"m112" [label="2: Exit m11 \n " color=yellow style=filled] - 123 -> 125 ; -122 [label="122: DeclStmt \n *&value:int =0 [line 120]\n " shape="box"] +"m111" [label="1: Start m11\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int value:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&value); [line 191]\n " color=yellow style=filled] - 122 -> 104 ; -121 [label="121: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 122]\n " shape="invhouse"] + "m111" -> "m1114" ; +"m123" [label="23: DeclStmt \n *&value:int =0 [line 13]\n " shape="box"] - 121 -> 117 ; - 121 -> 118 ; -120 [label="120: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 122]\n " shape="invhouse"] + "m123" -> "m14" ; +"m122" [label="22: DeclStmt \n *&x:int =1 [line 16]\n " shape="box"] - 120 -> 119 ; -119 [label="119: Call _fun_printf \n n$4=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 123]\n " shape="box"] + "m122" -> "m121" ; +"m121" [label="21: Call _fun_printf \n n$7=_fun_printf(\"(out)HELLO WORLD!\":char *) [line 17]\n " shape="box"] - 119 -> 102 ; -118 [label="118: Prune (false branch) \n PRUNE(((n$2 == 1) == 0), false); [line 125]\n " shape="invhouse"] + "m121" -> "m120" ; +"m120" [label="20: BinaryOperatorStmt: Assign \n n$6=*&value:int [line 18]\n *&x:int =(n$6 + 1) [line 18]\n " shape="box"] - 118 -> 112 ; - 118 -> 113 ; -117 [label="117: Prune (true branch) \n PRUNE(((n$2 == 1) != 0), true); [line 125]\n " shape="invhouse"] + "m120" -> "m117" ; +"m119" [label="19: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 19]\n " shape="invhouse"] - 117 -> 116 ; -116 [label="116: DeclStmt \n *&something:int =1 [line 126]\n " shape="box"] + "m119" -> "m115" ; + "m119" -> "m116" ; +"m118" [label="18: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 19]\n " shape="invhouse"] - 116 -> 115 ; -115 [label="115: UnaryOperator \n n$3=*&something:int [line 127]\n *&something:int =(n$3 + 1) [line 127]\n " shape="box"] + "m118" -> "m117" ; +"m117" [label="17: Call _fun_printf \n n$5=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 20]\n " shape="box"] - 115 -> 102 ; -114 [label="114: DeclStmt \n *&z:int =9 [line 129]\n " shape="box"] + "m117" -> "m18" ; +"m116" [label="16: Prune (false branch) \n PRUNE(((n$2 == 1) == 0), false); [line 22]\n " shape="invhouse"] - 114 -> 102 ; -113 [label="113: Prune (false branch) \n PRUNE(((n$2 == 2) == 0), false); [line 130]\n " shape="invhouse"] + "m116" -> "m112" ; + "m116" -> "m113" ; +"m115" [label="15: Prune (true branch) \n PRUNE(((n$2 == 1) != 0), true); [line 22]\n " shape="invhouse"] - 113 -> 110 ; - 113 -> 111 ; -112 [label="112: Prune (true branch) \n PRUNE(((n$2 == 2) != 0), true); [line 130]\n " shape="invhouse"] + "m115" -> "m114" ; +"m114" [label="14: Call _fun_printf \n n$4=_fun_printf(\"(1)HELLO WORLD!\":char *) [line 23]\n " shape="box"] - 112 -> 102 ; -111 [label="111: Prune (false branch) \n PRUNE(((n$2 == 3) == 0), false); [line 131]\n " shape="invhouse"] + "m114" -> "m14" ; +"m113" [label="13: Prune (false branch) \n PRUNE(((n$2 == 2) == 0), false); [line 25]\n " shape="invhouse"] - 111 -> 102 ; -110 [label="110: Prune (true branch) \n PRUNE(((n$2 == 3) != 0), true); [line 131]\n " shape="invhouse"] + "m113" -> "m110" ; +"m112" [label="12: Prune (true branch) \n PRUNE(((n$2 == 2) != 0), true); [line 25]\n " shape="invhouse"] - 110 -> 102 ; -109 [label="109: Switch_stmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 121]\n " shape="box"] + "m112" -> "m111" ; +"m111" [label="11: Call _fun_printf \n n$3=_fun_printf(\"(2/def)HELLO WORLD!\":char *) [line 27]\n " shape="box"] - 109 -> 120 ; - 109 -> 121 ; -108 [label="108: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =0 [line 121]\n " shape="box"] + "m111" -> "m14" ; +"m110" [label="10: DefaultStmt_placeholder \n " shape="box"] - 108 -> 103 ; -107 [label="107: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =1 [line 121]\n " shape="box"] + "m110" -> "m111" ; +"m19" [label="9: Switch_stmt \n n$2=*&value:int [line 15]\n " shape="box"] - 107 -> 103 ; -106 [label="106: Prune (false branch) \n PRUNE(((n$1 > 0) == 0), false); [line 121]\n " shape="invhouse"] + "m19" -> "m118" ; + "m19" -> "m119" ; +"m18" [label="8: Call _fun_printf \n n$1=_fun_printf(\"(after_switch)HELLO WORLD!\":char *) [line 30]\n " shape="box"] - 106 -> 108 ; -105 [label="105: Prune (true branch) \n PRUNE(((n$1 > 0) != 0), true); [line 121]\n " shape="invhouse"] + "m18" -> "m14" ; +"m17" [label="7: Prune (false branch) \n PRUNE(((n$0 < 10) == 0), false); [line 14]\n " shape="invhouse"] - 105 -> 107 ; -104 [label="104: BinaryOperatorStmt: GT \n n$1=*&value:int [line 121]\n " shape="box"] + "m17" -> "m13" ; +"m16" [label="6: Prune (true branch) \n PRUNE(((n$0 < 10) != 0), true); [line 14]\n " shape="invhouse"] - 104 -> 105 ; - 104 -> 106 ; -103 [label="103: + \n " ] + "m16" -> "m19" ; +"m15" [label="5: BinaryOperatorStmt: LT \n n$0=*&value:int [line 14]\n " shape="box"] - 103 -> 109 ; -102 [label="102: Return Stmt \n *&return:int =0 [line 134]\n " shape="box"] + "m15" -> "m16" ; + "m15" -> "m17" ; +"m14" [label="4: + \n " ] - 102 -> 101 ; -101 [label="101: Exit m6 \n " color=yellow style=filled] + "m14" -> "m15" ; +"m13" [label="3: Return Stmt \n *&return:int =0 [line 32]\n " shape="box"] -100 [label="100: Start m6\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int z:int something:int value:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0,&z,&something,&value); [line 119]\n " color=yellow style=filled] + "m13" -> "m12" ; +"m12" [label="2: Exit m1 \n " color=yellow style=filled] - 100 -> 122 ; -99 [label="99: DeclStmt \n *&value:int =0 [line 104]\n " shape="box"] +"m11" [label="1: Start m1\nFormals: \nLocals: x:int value:int \n DECLARE_LOCALS(&return,&x,&value); [line 12]\n " color=yellow style=filled] - 99 -> 88 ; -98 [label="98: DeclStmt \n *&x:int =1 [line 107]\n " shape="box"] + "m11" -> "m123" ; +"m105" [label="5: DeclStmt \n *&value:int =0 [line 186]\n " shape="box"] - 98 -> 97 ; -97 [label="97: Call _fun_printf \n n$4=_fun_printf(\"(out)HELLO WORLD!\":char *) [line 108]\n " shape="box"] + "m105" -> "m104" ; +"m104" [label="4: Switch_stmt \n *&value:int =7 [line 187]\n n$0=*&value:int [line 187]\n " shape="box"] - 97 -> 96 ; -96 [label="96: BinaryOperatorStmt: Assign \n n$3=*&value:int [line 109]\n *&x:int =(n$3 + 1) [line 109]\n " shape="box"] + "m104" -> "m103" ; +"m103" [label="3: Return Stmt \n *&return:int =0 [line 188]\n " shape="box"] - 96 -> 88 ; -95 [label="95: Prune (false branch) \n PRUNE(((n$1 == 0) == 0), false); [line 111]\n " shape="invhouse"] + "m103" -> "m102" ; +"m102" [label="2: Exit m10 \n " color=yellow style=filled] - 95 -> 88 ; -94 [label="94: Prune (true branch) \n PRUNE(((n$1 == 0) != 0), true); [line 111]\n " shape="invhouse"] +"m101" [label="1: Start m10\nFormals: \nLocals: value:int \n DECLARE_LOCALS(&return,&value); [line 185]\n " color=yellow style=filled] - 94 -> 93 ; -93 [label="93: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 112]\n " shape="box"] + "m101" -> "m105" ; +"m717" [label="17: DeclStmt \n *&value:int =0 [line 140]\n " shape="box"] - 93 -> 88 ; -92 [label="92: Switch_stmt \n n$1=*&value:int [line 106]\n " shape="box"] + "m717" -> "m74" ; +"m716" [label="16: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 142]\n " shape="invhouse"] - 92 -> 94 ; - 92 -> 95 ; -91 [label="91: Prune (false branch) \n PRUNE(((n$0 < 10) == 0), false); [line 105]\n " shape="invhouse"] + "m716" -> "m712" ; + "m716" -> "m713" ; +"m715" [label="15: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 142]\n " shape="invhouse"] - 91 -> 87 ; -90 [label="90: Prune (true branch) \n PRUNE(((n$0 < 10) != 0), true); [line 105]\n " shape="invhouse"] + "m715" -> "m714" ; +"m714" [label="14: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 143]\n " shape="box"] - 90 -> 92 ; -89 [label="89: BinaryOperatorStmt: LT \n n$0=*&value:int [line 105]\n " shape="box"] + "m714" -> "m73" ; +"m713" [label="13: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 145]\n " shape="invhouse"] - 89 -> 90 ; - 89 -> 91 ; -88 [label="88: + \n " ] + "m713" -> "m77" ; + "m713" -> "m78" ; +"m712" [label="12: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 145]\n " shape="invhouse"] - 88 -> 89 ; -87 [label="87: Return Stmt \n *&return:int =0 [line 116]\n " shape="box"] + "m712" -> "m711" ; +"m711" [label="11: DeclStmt \n *&something:int =1 [line 146]\n " shape="box"] - 87 -> 86 ; -86 [label="86: Exit m5 \n " color=yellow style=filled] + "m711" -> "m710" ; +"m710" [label="10: UnaryOperator \n n$1=*&something:int [line 147]\n *&something:int =(n$1 + 1) [line 147]\n " shape="box"] -85 [label="85: Start m5\nFormals: \nLocals: x:int value:int \n DECLARE_LOCALS(&return,&x,&value); [line 103]\n " color=yellow style=filled] + "m710" -> "m73" ; +"m79" [label="9: DeclStmt \n *&z:int =9 [line 149]\n " shape="box"] - 85 -> 99 ; -84 [label="84: DeclStmt \n *&value:int =0 [line 79]\n " shape="box"] + "m79" -> "m73" ; +"m78" [label="8: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 150]\n " shape="invhouse"] - 84 -> 66 ; -83 [label="83: DeclStmt \n *&x:int =1 [line 81]\n " shape="box"] + "m78" -> "m75" ; + "m78" -> "m76" ; +"m77" [label="7: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 150]\n " shape="invhouse"] - 83 -> 82 ; -82 [label="82: Call _fun_printf \n n$4=_fun_printf(\"(out)HELLO WORLD!\":char *) [line 82]\n " shape="box"] + "m77" -> "m73" ; +"m76" [label="6: Prune (false branch) \n PRUNE(((n$0 == 3) == 0), false); [line 151]\n " shape="invhouse"] - 82 -> 81 ; -81 [label="81: BinaryOperatorStmt: Assign \n n$3=*&value:int [line 83]\n *&x:int =(n$3 + 1) [line 83]\n " shape="box"] + "m76" -> "m73" ; +"m75" [label="5: Prune (true branch) \n PRUNE(((n$0 == 3) != 0), true); [line 151]\n " shape="invhouse"] - 81 -> 78 ; -80 [label="80: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 84]\n " shape="invhouse"] + "m75" -> "m73" ; +"m74" [label="4: Switch_stmt \n n$0=_fun_getValue() [line 141]\n " shape="box"] - 80 -> 75 ; - 80 -> 76 ; -79 [label="79: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 84]\n " shape="invhouse"] + "m74" -> "m715" ; + "m74" -> "m716" ; +"m73" [label="3: Return Stmt \n *&return:int =0 [line 154]\n " shape="box"] - 79 -> 78 ; -78 [label="78: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 85]\n " shape="box"] + "m73" -> "m72" ; +"m72" [label="2: Exit m7 \n " color=yellow style=filled] - 78 -> 65 ; -77 [label="77: DeclStmt \n *&z:int =9 [line 87]\n " shape="box"] +"m71" [label="1: Start m7\nFormals: \nLocals: z:int something:int value:int \n DECLARE_LOCALS(&return,&z,&something,&value); [line 139]\n " color=yellow style=filled] - 77 -> 74 ; -76 [label="76: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 90]\n " shape="invhouse"] + "m71" -> "m717" ; +"m422" [label="22: DeclStmt \n *&value:int =0 [line 79]\n " shape="box"] - 76 -> 70 ; - 76 -> 71 ; -75 [label="75: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 90]\n " shape="invhouse"] + "m422" -> "m44" ; +"m421" [label="21: DeclStmt \n *&x:int =1 [line 81]\n " shape="box"] - 75 -> 74 ; -74 [label="74: DeclStmt \n *&something:int =1 [line 91]\n " shape="box"] + "m421" -> "m420" ; +"m420" [label="20: Call _fun_printf \n n$4=_fun_printf(\"(out)HELLO WORLD!\":char *) [line 82]\n " shape="box"] - 74 -> 73 ; -73 [label="73: UnaryOperator \n n$1=*&something:int [line 92]\n *&something:int =(n$1 + 1) [line 92]\n " shape="box"] + "m420" -> "m419" ; +"m419" [label="19: BinaryOperatorStmt: Assign \n n$3=*&value:int [line 83]\n *&x:int =(n$3 + 1) [line 83]\n " shape="box"] - 73 -> 72 ; -72 [label="72: BinaryOperatorStmt: Assign \n *&z:int =42 [line 94]\n " shape="box"] + "m419" -> "m416" ; +"m418" [label="18: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 84]\n " shape="invhouse"] - 72 -> 65 ; -71 [label="71: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 96]\n " shape="invhouse"] + "m418" -> "m413" ; + "m418" -> "m414" ; +"m417" [label="17: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 84]\n " shape="invhouse"] - 71 -> 68 ; - 71 -> 69 ; -70 [label="70: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 96]\n " shape="invhouse"] + "m417" -> "m416" ; +"m416" [label="16: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 85]\n " shape="box"] - 70 -> 65 ; -69 [label="69: Prune (false branch) \n PRUNE(((n$0 == 3) == 0), false); [line 97]\n " shape="invhouse"] + "m416" -> "m43" ; +"m415" [label="15: DeclStmt \n *&z:int =9 [line 87]\n " shape="box"] - 69 -> 67 ; -68 [label="68: Prune (true branch) \n PRUNE(((n$0 == 3) != 0), true); [line 97]\n " shape="invhouse"] + "m415" -> "m412" ; +"m414" [label="14: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 90]\n " shape="invhouse"] - 68 -> 65 ; -67 [label="67: DefaultStmt_placeholder \n " shape="box"] + "m414" -> "m48" ; + "m414" -> "m49" ; +"m413" [label="13: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 90]\n " shape="invhouse"] - 67 -> 74 ; -66 [label="66: Switch_stmt \n n$0=*&value:int [line 80]\n " shape="box"] + "m413" -> "m412" ; +"m412" [label="12: DeclStmt \n *&something:int =1 [line 91]\n " shape="box"] - 66 -> 79 ; - 66 -> 80 ; -65 [label="65: Return Stmt \n *&return:int =0 [line 100]\n " shape="box"] + "m412" -> "m411" ; +"m411" [label="11: UnaryOperator \n n$1=*&something:int [line 92]\n *&something:int =(n$1 + 1) [line 92]\n " shape="box"] - 65 -> 64 ; -64 [label="64: Exit m4 \n " color=yellow style=filled] + "m411" -> "m410" ; +"m410" [label="10: BinaryOperatorStmt: Assign \n *&z:int =42 [line 94]\n " shape="box"] -63 [label="63: Start m4\nFormals: \nLocals: something:int z:int x:int value:int \n DECLARE_LOCALS(&return,&something,&z,&x,&value); [line 78]\n " color=yellow style=filled] + "m410" -> "m43" ; +"m49" [label="9: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 96]\n " shape="invhouse"] - 63 -> 84 ; -62 [label="62: DeclStmt \n *&value:int =0 [line 61]\n " shape="box"] + "m49" -> "m46" ; + "m49" -> "m47" ; +"m48" [label="8: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 96]\n " shape="invhouse"] - 62 -> 49 ; -61 [label="61: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 63]\n " shape="invhouse"] + "m48" -> "m43" ; +"m47" [label="7: Prune (false branch) \n PRUNE(((n$0 == 3) == 0), false); [line 97]\n " shape="invhouse"] - 61 -> 57 ; - 61 -> 58 ; -60 [label="60: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 63]\n " shape="invhouse"] + "m47" -> "m45" ; +"m46" [label="6: Prune (true branch) \n PRUNE(((n$0 == 3) != 0), true); [line 97]\n " shape="invhouse"] - 60 -> 59 ; -59 [label="59: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 64]\n " shape="box"] + "m46" -> "m43" ; +"m45" [label="5: DefaultStmt_placeholder \n " shape="box"] - 59 -> 48 ; -58 [label="58: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 66]\n " shape="invhouse"] + "m45" -> "m412" ; +"m44" [label="4: Switch_stmt \n n$0=*&value:int [line 80]\n " shape="box"] - 58 -> 52 ; - 58 -> 53 ; -57 [label="57: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 66]\n " shape="invhouse"] + "m44" -> "m417" ; + "m44" -> "m418" ; +"m43" [label="3: Return Stmt \n *&return:int =0 [line 100]\n " shape="box"] - 57 -> 56 ; -56 [label="56: DeclStmt \n *&something:int =1 [line 67]\n " shape="box"] + "m43" -> "m42" ; +"m42" [label="2: Exit m4 \n " color=yellow style=filled] - 56 -> 55 ; -55 [label="55: UnaryOperator \n n$1=*&something:int [line 68]\n *&something:int =(n$1 + 1) [line 68]\n " shape="box"] +"m41" [label="1: Start m4\nFormals: \nLocals: something:int z:int x:int value:int \n DECLARE_LOCALS(&return,&something,&z,&x,&value); [line 78]\n " color=yellow style=filled] - 55 -> 48 ; -54 [label="54: DeclStmt \n *&z:int =9 [line 70]\n " shape="box"] + "m41" -> "m422" ; +"m317" [label="17: DeclStmt \n *&value:int =0 [line 61]\n " shape="box"] - 54 -> 48 ; -53 [label="53: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 71]\n " shape="invhouse"] + "m317" -> "m34" ; +"m316" [label="16: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 63]\n " shape="invhouse"] - 53 -> 50 ; - 53 -> 51 ; -52 [label="52: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 71]\n " shape="invhouse"] + "m316" -> "m312" ; + "m316" -> "m313" ; +"m315" [label="15: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 63]\n " shape="invhouse"] - 52 -> 48 ; -51 [label="51: Prune (false branch) \n PRUNE(((n$0 == 3) == 0), false); [line 72]\n " shape="invhouse"] + "m315" -> "m314" ; +"m314" [label="14: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 64]\n " shape="box"] - 51 -> 48 ; -50 [label="50: Prune (true branch) \n PRUNE(((n$0 == 3) != 0), true); [line 72]\n " shape="invhouse"] + "m314" -> "m33" ; +"m313" [label="13: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 66]\n " shape="invhouse"] - 50 -> 48 ; -49 [label="49: Switch_stmt \n n$0=*&value:int [line 62]\n " shape="box"] + "m313" -> "m37" ; + "m313" -> "m38" ; +"m312" [label="12: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 66]\n " shape="invhouse"] - 49 -> 60 ; - 49 -> 61 ; -48 [label="48: Return Stmt \n *&return:int =0 [line 75]\n " shape="box"] + "m312" -> "m311" ; +"m311" [label="11: DeclStmt \n *&something:int =1 [line 67]\n " shape="box"] - 48 -> 47 ; -47 [label="47: Exit m3 \n " color=yellow style=filled] + "m311" -> "m310" ; +"m310" [label="10: UnaryOperator \n n$1=*&something:int [line 68]\n *&something:int =(n$1 + 1) [line 68]\n " shape="box"] -46 [label="46: Start m3\nFormals: \nLocals: z:int something:int value:int \n DECLARE_LOCALS(&return,&z,&something,&value); [line 60]\n " color=yellow style=filled] + "m310" -> "m33" ; +"m39" [label="9: DeclStmt \n *&z:int =9 [line 70]\n " shape="box"] - 46 -> 62 ; -45 [label="45: DeclStmt \n *&value:int =0 [line 36]\n " shape="box"] + "m39" -> "m33" ; +"m38" [label="8: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 71]\n " shape="invhouse"] - 45 -> 27 ; -44 [label="44: DeclStmt \n *&x:int =1 [line 38]\n " shape="box"] + "m38" -> "m35" ; + "m38" -> "m36" ; +"m37" [label="7: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 71]\n " shape="invhouse"] - 44 -> 43 ; -43 [label="43: Call _fun_printf \n n$4=_fun_printf(\"(out)HELLO WORLD!\":char *) [line 39]\n " shape="box"] + "m37" -> "m33" ; +"m36" [label="6: Prune (false branch) \n PRUNE(((n$0 == 3) == 0), false); [line 72]\n " shape="invhouse"] - 43 -> 42 ; -42 [label="42: BinaryOperatorStmt: Assign \n n$3=*&value:int [line 40]\n *&x:int =(n$3 + 1) [line 40]\n " shape="box"] + "m36" -> "m33" ; +"m35" [label="5: Prune (true branch) \n PRUNE(((n$0 == 3) != 0), true); [line 72]\n " shape="invhouse"] - 42 -> 39 ; -41 [label="41: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 41]\n " shape="invhouse"] + "m35" -> "m33" ; +"m34" [label="4: Switch_stmt \n n$0=*&value:int [line 62]\n " shape="box"] - 41 -> 36 ; - 41 -> 37 ; -40 [label="40: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 41]\n " shape="invhouse"] + "m34" -> "m315" ; + "m34" -> "m316" ; +"m33" [label="3: Return Stmt \n *&return:int =0 [line 75]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 42]\n " shape="box"] + "m33" -> "m32" ; +"m32" [label="2: Exit m3 \n " color=yellow style=filled] - 39 -> 26 ; -38 [label="38: DeclStmt \n *&z:int =9 [line 44]\n " shape="box"] +"m31" [label="1: Start m3\nFormals: \nLocals: z:int something:int value:int \n DECLARE_LOCALS(&return,&z,&something,&value); [line 60]\n " color=yellow style=filled] - 38 -> 35 ; -37 [label="37: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 47]\n " shape="invhouse"] + "m31" -> "m317" ; +"m222" [label="22: DeclStmt \n *&value:int =0 [line 36]\n " shape="box"] - 37 -> 31 ; - 37 -> 32 ; -36 [label="36: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 47]\n " shape="invhouse"] + "m222" -> "m24" ; +"m221" [label="21: DeclStmt \n *&x:int =1 [line 38]\n " shape="box"] - 36 -> 35 ; -35 [label="35: DeclStmt \n *&something:int =1 [line 48]\n " shape="box"] + "m221" -> "m220" ; +"m220" [label="20: Call _fun_printf \n n$4=_fun_printf(\"(out)HELLO WORLD!\":char *) [line 39]\n " shape="box"] - 35 -> 34 ; -34 [label="34: UnaryOperator \n n$1=*&something:int [line 49]\n *&something:int =(n$1 + 1) [line 49]\n " shape="box"] + "m220" -> "m219" ; +"m219" [label="19: BinaryOperatorStmt: Assign \n n$3=*&value:int [line 40]\n *&x:int =(n$3 + 1) [line 40]\n " shape="box"] - 34 -> 33 ; -33 [label="33: BinaryOperatorStmt: Assign \n *&z:int =42 [line 51]\n " shape="box"] + "m219" -> "m216" ; +"m218" [label="18: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 41]\n " shape="invhouse"] - 33 -> 26 ; -32 [label="32: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 53]\n " shape="invhouse"] + "m218" -> "m213" ; + "m218" -> "m214" ; +"m217" [label="17: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 41]\n " shape="invhouse"] - 32 -> 29 ; - 32 -> 30 ; -31 [label="31: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 53]\n " shape="invhouse"] + "m217" -> "m216" ; +"m216" [label="16: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 42]\n " shape="box"] - 31 -> 26 ; -30 [label="30: Prune (false branch) \n PRUNE(((n$0 == 3) == 0), false); [line 54]\n " shape="invhouse"] + "m216" -> "m23" ; +"m215" [label="15: DeclStmt \n *&z:int =9 [line 44]\n " shape="box"] - 30 -> 28 ; -29 [label="29: Prune (true branch) \n PRUNE(((n$0 == 3) != 0), true); [line 54]\n " shape="invhouse"] + "m215" -> "m212" ; +"m214" [label="14: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 47]\n " shape="invhouse"] - 29 -> 26 ; -28 [label="28: DefaultStmt_placeholder \n " shape="box"] + "m214" -> "m28" ; + "m214" -> "m29" ; +"m213" [label="13: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 47]\n " shape="invhouse"] - 28 -> 35 ; -27 [label="27: Switch_stmt \n n$0=*&value:int [line 37]\n " shape="box"] + "m213" -> "m212" ; +"m212" [label="12: DeclStmt \n *&something:int =1 [line 48]\n " shape="box"] - 27 -> 40 ; - 27 -> 41 ; -26 [label="26: Return Stmt \n *&return:int =0 [line 57]\n " shape="box"] + "m212" -> "m211" ; +"m211" [label="11: UnaryOperator \n n$1=*&something:int [line 49]\n *&something:int =(n$1 + 1) [line 49]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Exit m2 \n " color=yellow style=filled] + "m211" -> "m210" ; +"m210" [label="10: BinaryOperatorStmt: Assign \n *&z:int =42 [line 51]\n " shape="box"] -24 [label="24: Start m2\nFormals: \nLocals: something:int z:int x:int value:int \n DECLARE_LOCALS(&return,&something,&z,&x,&value); [line 35]\n " color=yellow style=filled] + "m210" -> "m23" ; +"m29" [label="9: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 53]\n " shape="invhouse"] - 24 -> 45 ; -23 [label="23: DeclStmt \n *&value:int =0 [line 13]\n " shape="box"] + "m29" -> "m26" ; + "m29" -> "m27" ; +"m28" [label="8: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 53]\n " shape="invhouse"] - 23 -> 4 ; -22 [label="22: DeclStmt \n *&x:int =1 [line 16]\n " shape="box"] + "m28" -> "m23" ; +"m27" [label="7: Prune (false branch) \n PRUNE(((n$0 == 3) == 0), false); [line 54]\n " shape="invhouse"] - 22 -> 21 ; -21 [label="21: Call _fun_printf \n n$7=_fun_printf(\"(out)HELLO WORLD!\":char *) [line 17]\n " shape="box"] + "m27" -> "m25" ; +"m26" [label="6: Prune (true branch) \n PRUNE(((n$0 == 3) != 0), true); [line 54]\n " shape="invhouse"] - 21 -> 20 ; -20 [label="20: BinaryOperatorStmt: Assign \n n$6=*&value:int [line 18]\n *&x:int =(n$6 + 1) [line 18]\n " shape="box"] + "m26" -> "m23" ; +"m25" [label="5: DefaultStmt_placeholder \n " shape="box"] - 20 -> 17 ; -19 [label="19: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 19]\n " shape="invhouse"] + "m25" -> "m212" ; +"m24" [label="4: Switch_stmt \n n$0=*&value:int [line 37]\n " shape="box"] - 19 -> 15 ; - 19 -> 16 ; -18 [label="18: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 19]\n " shape="invhouse"] + "m24" -> "m217" ; + "m24" -> "m218" ; +"m23" [label="3: Return Stmt \n *&return:int =0 [line 57]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Call _fun_printf \n n$5=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 20]\n " shape="box"] + "m23" -> "m22" ; +"m22" [label="2: Exit m2 \n " color=yellow style=filled] - 17 -> 8 ; -16 [label="16: Prune (false branch) \n PRUNE(((n$2 == 1) == 0), false); [line 22]\n " shape="invhouse"] +"m21" [label="1: Start m2\nFormals: \nLocals: something:int z:int x:int value:int \n DECLARE_LOCALS(&return,&something,&z,&x,&value); [line 35]\n " color=yellow style=filled] - 16 -> 12 ; - 16 -> 13 ; -15 [label="15: Prune (true branch) \n PRUNE(((n$2 == 1) != 0), true); [line 22]\n " shape="invhouse"] + "m21" -> "m222" ; +"m515" [label="15: DeclStmt \n *&value:int =0 [line 104]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Call _fun_printf \n n$4=_fun_printf(\"(1)HELLO WORLD!\":char *) [line 23]\n " shape="box"] + "m515" -> "m54" ; +"m514" [label="14: DeclStmt \n *&x:int =1 [line 107]\n " shape="box"] - 14 -> 4 ; -13 [label="13: Prune (false branch) \n PRUNE(((n$2 == 2) == 0), false); [line 25]\n " shape="invhouse"] + "m514" -> "m513" ; +"m513" [label="13: Call _fun_printf \n n$4=_fun_printf(\"(out)HELLO WORLD!\":char *) [line 108]\n " shape="box"] - 13 -> 10 ; -12 [label="12: Prune (true branch) \n PRUNE(((n$2 == 2) != 0), true); [line 25]\n " shape="invhouse"] + "m513" -> "m512" ; +"m512" [label="12: BinaryOperatorStmt: Assign \n n$3=*&value:int [line 109]\n *&x:int =(n$3 + 1) [line 109]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Call _fun_printf \n n$3=_fun_printf(\"(2/def)HELLO WORLD!\":char *) [line 27]\n " shape="box"] + "m512" -> "m54" ; +"m511" [label="11: Prune (false branch) \n PRUNE(((n$1 == 0) == 0), false); [line 111]\n " shape="invhouse"] - 11 -> 4 ; -10 [label="10: DefaultStmt_placeholder \n " shape="box"] + "m511" -> "m54" ; +"m510" [label="10: Prune (true branch) \n PRUNE(((n$1 == 0) != 0), true); [line 111]\n " shape="invhouse"] - 10 -> 11 ; -9 [label="9: Switch_stmt \n n$2=*&value:int [line 15]\n " shape="box"] + "m510" -> "m59" ; +"m59" [label="9: Call _fun_printf \n n$2=_fun_printf(\"(0)HELLO WORLD!\":char *) [line 112]\n " shape="box"] - 9 -> 18 ; - 9 -> 19 ; -8 [label="8: Call _fun_printf \n n$1=_fun_printf(\"(after_switch)HELLO WORLD!\":char *) [line 30]\n " shape="box"] + "m59" -> "m54" ; +"m58" [label="8: Switch_stmt \n n$1=*&value:int [line 106]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 < 10) == 0), false); [line 14]\n " shape="invhouse"] + "m58" -> "m510" ; + "m58" -> "m511" ; +"m57" [label="7: Prune (false branch) \n PRUNE(((n$0 < 10) == 0), false); [line 105]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 < 10) != 0), true); [line 14]\n " shape="invhouse"] + "m57" -> "m53" ; +"m56" [label="6: Prune (true branch) \n PRUNE(((n$0 < 10) != 0), true); [line 105]\n " shape="invhouse"] - 6 -> 9 ; -5 [label="5: BinaryOperatorStmt: LT \n n$0=*&value:int [line 14]\n " shape="box"] + "m56" -> "m58" ; +"m55" [label="5: BinaryOperatorStmt: LT \n n$0=*&value:int [line 105]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "m55" -> "m56" ; + "m55" -> "m57" ; +"m54" [label="4: + \n " ] - 4 -> 5 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 32]\n " shape="box"] + "m54" -> "m55" ; +"m53" [label="3: Return Stmt \n *&return:int =0 [line 116]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit m1 \n " color=yellow style=filled] + "m53" -> "m52" ; +"m52" [label="2: Exit m5 \n " color=yellow style=filled] -1 [label="1: Start m1\nFormals: \nLocals: x:int value:int \n DECLARE_LOCALS(&return,&x,&value); [line 12]\n " color=yellow style=filled] +"m51" [label="1: Start m5\nFormals: \nLocals: x:int value:int \n DECLARE_LOCALS(&return,&x,&value); [line 103]\n " color=yellow style=filled] - 1 -> 23 ; + "m51" -> "m515" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/types/struct.c.dot b/infer/tests/codetoanalyze/c/frontend/types/struct.c.dot index e970b3672..384dc3c76 100644 --- a/infer/tests/codetoanalyze/c/frontend/types/struct.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/types/struct.c.dot @@ -1,18 +1,18 @@ /* @generated */ digraph iCFG { -4 [label="4: BinaryOperatorStmt: Assign \n *&x.a:int =10 [line 17]\n " shape="box"] +"test4" [label="4: BinaryOperatorStmt: Assign \n *&x.a:int =10 [line 17]\n " shape="box"] - 4 -> 3 ; -3 [label="3: BinaryOperatorStmt: Assign \n *&x.b:int =20 [line 18]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: BinaryOperatorStmt: Assign \n *&x.b:int =20 [line 18]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start test\nFormals: \nLocals: x:struct X \n DECLARE_LOCALS(&return,&x); [line 15]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: x:struct X \n DECLARE_LOCALS(&return,&x); [line 15]\n " color=yellow style=filled] - 1 -> 4 ; + "test1" -> "test4" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/unusual_exps/generic_exp.c.dot b/infer/tests/codetoanalyze/c/frontend/unusual_exps/generic_exp.c.dot index adc50c31e..4ad30a06b 100644 --- a/infer/tests/codetoanalyze/c/frontend/unusual_exps/generic_exp.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/unusual_exps/generic_exp.c.dot @@ -1,18 +1,18 @@ /* @generated */ digraph iCFG { -4 [label="4: DeclStmt \n *&x:void =_t$1 [line 15]\n " shape="box"] +"test_typename4" [label="4: DeclStmt \n *&x:void =_t$1 [line 15]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n *&z:void =_t$0 [line 16]\n " shape="box"] + "test_typename4" -> "test_typename3" ; +"test_typename3" [label="3: DeclStmt \n *&z:void =_t$0 [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit test_typename \n " color=yellow style=filled] + "test_typename3" -> "test_typename2" ; +"test_typename2" [label="2: Exit test_typename \n " color=yellow style=filled] -1 [label="1: Start test_typename\nFormals: \nLocals: z:int x:int y:int s:char \n DECLARE_LOCALS(&return,&z,&x,&y,&s); [line 12]\n " color=yellow style=filled] +"test_typename1" [label="1: Start test_typename\nFormals: \nLocals: z:int x:int y:int s:char \n DECLARE_LOCALS(&return,&z,&x,&y,&s); [line 12]\n " color=yellow style=filled] - 1 -> 4 ; + "test_typename1" -> "test_typename4" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/unusual_stmts/asm.c.dot b/infer/tests/codetoanalyze/c/frontend/unusual_stmts/asm.c.dot index fd9fea03a..a83df686e 100644 --- a/infer/tests/codetoanalyze/c/frontend/unusual_stmts/asm.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/unusual_stmts/asm.c.dot @@ -1,37 +1,37 @@ /* @generated */ digraph iCFG { -9 [label="9: DeclStmt \n *&src:int =1 [line 20]\n " shape="box"] +"main5" [label="5: DeclStmt \n *&src:int =1 [line 20]\n " shape="box"] - 9 -> 8 ; -8 [label="8: GCCAsmStmt \n n$0=*&src:int [line 27]\n _fun___infer_skip_gcc_asm_stmt(&dst:int &,n$0:int ) [line 23]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: GCCAsmStmt \n n$0=*&src:int [line 27]\n _fun___infer_skip_gcc_asm_stmt(&dst:int &,n$0:int ) [line 23]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Return Stmt \n *&return:int =0 [line 28]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 28]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -5 [label="5: Start main\nFormals: \nLocals: dst:int src:int \n DECLARE_LOCALS(&return,&dst,&src); [line 19]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: dst:int src:int \n DECLARE_LOCALS(&return,&dst,&src); [line 19]\n " color=yellow style=filled] - 5 -> 9 ; -4 [label="4: GCCAsmStmt \n _fun___infer_skip_gcc_asm_stmt(&x:int &,&y:int &,&z:int &,&h:int &,0:int ) [line 15]\n " shape="box"] + "main1" -> "main5" ; +"test4" [label="4: GCCAsmStmt \n _fun___infer_skip_gcc_asm_stmt(&x:int &,&y:int &,&z:int &,&h:int &,0:int ) [line 15]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start test\nFormals: \nLocals: h:int z:int y:int x:int \n DECLARE_LOCALS(&return,&h,&z,&y,&x); [line 10]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: h:int z:int y:int x:int \n DECLARE_LOCALS(&return,&h,&z,&y,&x); [line 10]\n " color=yellow style=filled] - 1 -> 4 ; + "test1" -> "test4" ; } diff --git a/infer/tests/codetoanalyze/c/frontend/vaarg_expr/vaarg_expr.c.dot b/infer/tests/codetoanalyze/c/frontend/vaarg_expr/vaarg_expr.c.dot index 0fb075f6a..c5ac61ca3 100644 --- a/infer/tests/codetoanalyze/c/frontend/vaarg_expr/vaarg_expr.c.dot +++ b/infer/tests/codetoanalyze/c/frontend/vaarg_expr/vaarg_expr.c.dot @@ -1,51 +1,51 @@ /* @generated */ digraph iCFG { -12 [label="12: Call _fun___builtin_va_start \n _fun___builtin_va_start(&valist:void *,&x:int &) [line 14]\n " shape="box"] +"vaarg_foo12" [label="12: Call _fun___builtin_va_start \n _fun___builtin_va_start(&valist:void *,&x:int &) [line 14]\n " shape="box"] - 12 -> 11 ; -11 [label="11: DeclStmt \n *&i:int =n$2 [line 15]\n " shape="box"] + "vaarg_foo12" -> "vaarg_foo11" ; +"vaarg_foo11" [label="11: DeclStmt \n *&i:int =n$2 [line 15]\n " shape="box"] - 11 -> 6 ; -10 [label="10: BinaryOperatorStmt: Assign \n *&val:int =(4 / 0) [line 20]\n " shape="box"] + "vaarg_foo11" -> "vaarg_foo6" ; +"vaarg_foo10" [label="10: BinaryOperatorStmt: Assign \n *&val:int =(4 / 0) [line 20]\n " shape="box"] - 10 -> 5 ; -9 [label="9: BinaryOperatorStmt: Assign \n *&val:int =(9 / 0) [line 18]\n " shape="box"] + "vaarg_foo10" -> "vaarg_foo5" ; +"vaarg_foo9" [label="9: BinaryOperatorStmt: Assign \n *&val:int =(9 / 0) [line 18]\n " shape="box"] - 9 -> 5 ; -8 [label="8: Prune (false branch) \n PRUNE(((n$1 == 9) == 0), false); [line 17]\n " shape="invhouse"] + "vaarg_foo9" -> "vaarg_foo5" ; +"vaarg_foo8" [label="8: Prune (false branch) \n PRUNE(((n$1 == 9) == 0), false); [line 17]\n " shape="invhouse"] - 8 -> 10 ; -7 [label="7: Prune (true branch) \n PRUNE(((n$1 == 9) != 0), true); [line 17]\n " shape="invhouse"] + "vaarg_foo8" -> "vaarg_foo10" ; +"vaarg_foo7" [label="7: Prune (true branch) \n PRUNE(((n$1 == 9) != 0), true); [line 17]\n " shape="invhouse"] - 7 -> 9 ; -6 [label="6: BinaryOperatorStmt: EQ \n n$1=*&i:int [line 17]\n " shape="box"] + "vaarg_foo7" -> "vaarg_foo9" ; +"vaarg_foo6" [label="6: BinaryOperatorStmt: EQ \n n$1=*&i:int [line 17]\n " shape="box"] - 6 -> 7 ; - 6 -> 8 ; -5 [label="5: + \n " ] + "vaarg_foo6" -> "vaarg_foo7" ; + "vaarg_foo6" -> "vaarg_foo8" ; +"vaarg_foo5" [label="5: + \n " ] - 5 -> 4 ; -4 [label="4: Call _fun___builtin_va_end \n _fun___builtin_va_end(&valist:void *) [line 22]\n " shape="box"] + "vaarg_foo5" -> "vaarg_foo4" ; +"vaarg_foo4" [label="4: Call _fun___builtin_va_end \n _fun___builtin_va_end(&valist:void *) [line 22]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&val:int [line 23]\n *&return:int =n$0 [line 23]\n " shape="box"] + "vaarg_foo4" -> "vaarg_foo3" ; +"vaarg_foo3" [label="3: Return Stmt \n n$0=*&val:int [line 23]\n *&return:int =n$0 [line 23]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit vaarg_foo \n " color=yellow style=filled] + "vaarg_foo3" -> "vaarg_foo2" ; +"vaarg_foo2" [label="2: Exit vaarg_foo \n " color=yellow style=filled] -1 [label="1: Start vaarg_foo\nFormals: x:int \nLocals: val:int i:int valist:void [1] \n DECLARE_LOCALS(&return,&val,&i,&valist); [line 12]\n " color=yellow style=filled] +"vaarg_foo1" [label="1: Start vaarg_foo\nFormals: x:int \nLocals: val:int i:int valist:void [1] \n DECLARE_LOCALS(&return,&val,&i,&valist); [line 12]\n " color=yellow style=filled] - 1 -> 12 ; + "vaarg_foo1" -> "vaarg_foo12" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/attributes/clang_fallthrough.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/attributes/clang_fallthrough.cpp.dot index a9661a909..2fbc92266 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/attributes/clang_fallthrough.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/attributes/clang_fallthrough.cpp.dot @@ -1,84 +1,84 @@ /* @generated */ digraph iCFG { -20 [label="20: Return Stmt \n n$0=_fun_switch_with_fallthrough(66:int ) [line 27]\n *&return:int =(1 / (n$0 - 3)) [line 27]\n " shape="box"] +"h3" [label="3: Return Stmt \n *&return:int =3 [line 10]\n " shape="box"] - 20 -> 19 ; -19 [label="19: Exit test_fallthrough \n " color=yellow style=filled] + "h3" -> "h2" ; +"h2" [label="2: Exit h \n " color=yellow style=filled] -18 [label="18: Start test_fallthrough\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] +"h1" [label="1: Start h\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 18 -> 20 ; -17 [label="17: DeclStmt \n *&res:int =5 [line 13]\n " shape="box"] + "h1" -> "h3" ; +"switch_with_fallthrough14" [label="14: DeclStmt \n *&res:int =5 [line 13]\n " shape="box"] - 17 -> 7 ; -16 [label="16: Prune (false branch) \n PRUNE(((n$1 == 22) == 0), false); [line 15]\n " shape="invhouse"] + "switch_with_fallthrough14" -> "switch_with_fallthrough4" ; +"switch_with_fallthrough13" [label="13: Prune (false branch) \n PRUNE(((n$1 == 22) == 0), false); [line 15]\n " shape="invhouse"] - 16 -> 13 ; - 16 -> 14 ; -15 [label="15: Prune (true branch) \n PRUNE(((n$1 == 22) != 0), true); [line 15]\n " shape="invhouse"] + "switch_with_fallthrough13" -> "switch_with_fallthrough10" ; + "switch_with_fallthrough13" -> "switch_with_fallthrough11" ; +"switch_with_fallthrough12" [label="12: Prune (true branch) \n PRUNE(((n$1 == 22) != 0), true); [line 15]\n " shape="invhouse"] - 15 -> 8 ; -14 [label="14: Prune (false branch) \n PRUNE(((n$1 == 33) == 0), false); [line 16]\n " shape="invhouse"] + "switch_with_fallthrough12" -> "switch_with_fallthrough5" ; +"switch_with_fallthrough11" [label="11: Prune (false branch) \n PRUNE(((n$1 == 33) == 0), false); [line 16]\n " shape="invhouse"] - 14 -> 11 ; - 14 -> 12 ; -13 [label="13: Prune (true branch) \n PRUNE(((n$1 == 33) != 0), true); [line 16]\n " shape="invhouse"] + "switch_with_fallthrough11" -> "switch_with_fallthrough8" ; + "switch_with_fallthrough11" -> "switch_with_fallthrough9" ; +"switch_with_fallthrough10" [label="10: Prune (true branch) \n PRUNE(((n$1 == 33) != 0), true); [line 16]\n " shape="invhouse"] - 13 -> 8 ; -12 [label="12: Prune (false branch) \n PRUNE(((n$1 == 66) == 0), false); [line 18]\n " shape="invhouse"] + "switch_with_fallthrough10" -> "switch_with_fallthrough5" ; +"switch_with_fallthrough9" [label="9: Prune (false branch) \n PRUNE(((n$1 == 66) == 0), false); [line 18]\n " shape="invhouse"] - 12 -> 9 ; - 12 -> 10 ; -11 [label="11: Prune (true branch) \n PRUNE(((n$1 == 66) != 0), true); [line 18]\n " shape="invhouse"] + "switch_with_fallthrough9" -> "switch_with_fallthrough6" ; + "switch_with_fallthrough9" -> "switch_with_fallthrough7" ; +"switch_with_fallthrough8" [label="8: Prune (true branch) \n PRUNE(((n$1 == 66) != 0), true); [line 18]\n " shape="invhouse"] - 11 -> 8 ; -10 [label="10: Prune (false branch) \n PRUNE(((n$1 == 77) == 0), false); [line 20]\n " shape="invhouse"] + "switch_with_fallthrough8" -> "switch_with_fallthrough5" ; +"switch_with_fallthrough7" [label="7: Prune (false branch) \n PRUNE(((n$1 == 77) == 0), false); [line 20]\n " shape="invhouse"] - 10 -> 6 ; -9 [label="9: Prune (true branch) \n PRUNE(((n$1 == 77) != 0), true); [line 20]\n " shape="invhouse"] + "switch_with_fallthrough7" -> "switch_with_fallthrough3" ; +"switch_with_fallthrough6" [label="6: Prune (true branch) \n PRUNE(((n$1 == 77) != 0), true); [line 20]\n " shape="invhouse"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$2=_fun_h() [line 21]\n *&res:int =n$2 [line 21]\n " shape="box"] + "switch_with_fallthrough6" -> "switch_with_fallthrough5" ; +"switch_with_fallthrough5" [label="5: BinaryOperatorStmt: Assign \n n$2=_fun_h() [line 21]\n *&res:int =n$2 [line 21]\n " shape="box"] - 8 -> 6 ; -7 [label="7: Switch_stmt \n n$1=*&n:int [line 14]\n " shape="box"] + "switch_with_fallthrough5" -> "switch_with_fallthrough3" ; +"switch_with_fallthrough4" [label="4: Switch_stmt \n n$1=*&n:int [line 14]\n " shape="box"] - 7 -> 15 ; - 7 -> 16 ; -6 [label="6: Return Stmt \n n$0=*&res:int [line 24]\n *&return:int =n$0 [line 24]\n " shape="box"] + "switch_with_fallthrough4" -> "switch_with_fallthrough12" ; + "switch_with_fallthrough4" -> "switch_with_fallthrough13" ; +"switch_with_fallthrough3" [label="3: Return Stmt \n n$0=*&res:int [line 24]\n *&return:int =n$0 [line 24]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit switch_with_fallthrough \n " color=yellow style=filled] + "switch_with_fallthrough3" -> "switch_with_fallthrough2" ; +"switch_with_fallthrough2" [label="2: Exit switch_with_fallthrough \n " color=yellow style=filled] -4 [label="4: Start switch_with_fallthrough\nFormals: n:int \nLocals: res:int \n DECLARE_LOCALS(&return,&res); [line 12]\n " color=yellow style=filled] +"switch_with_fallthrough1" [label="1: Start switch_with_fallthrough\nFormals: n:int \nLocals: res:int \n DECLARE_LOCALS(&return,&res); [line 12]\n " color=yellow style=filled] - 4 -> 17 ; -3 [label="3: Return Stmt \n *&return:int =3 [line 10]\n " shape="box"] + "switch_with_fallthrough1" -> "switch_with_fallthrough14" ; +"test_fallthrough3" [label="3: Return Stmt \n n$0=_fun_switch_with_fallthrough(66:int ) [line 27]\n *&return:int =(1 / (n$0 - 3)) [line 27]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit h \n " color=yellow style=filled] + "test_fallthrough3" -> "test_fallthrough2" ; +"test_fallthrough2" [label="2: Exit test_fallthrough \n " color=yellow style=filled] -1 [label="1: Start h\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"test_fallthrough1" [label="1: Start test_fallthrough\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 1 -> 3 ; + "test_fallthrough1" -> "test_fallthrough3" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/builtin/new.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/builtin/new.cpp.dot index f07808311..b81c6a1bb 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/builtin/new.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/builtin/new.cpp.dot @@ -1,26 +1,26 @@ /* @generated */ digraph iCFG { -6 [label="6: DeclStmt \n *&x:int =2 [line 11]\n " shape="box"] +"test6" [label="6: DeclStmt \n *&x:int =2 [line 11]\n " shape="box"] - 6 -> 5 ; -5 [label="5: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 12]\n *&i:int *=n$2 [line 12]\n " shape="box"] + "test6" -> "test5" ; +"test5" [label="5: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 12]\n *&i:int *=n$2 [line 12]\n " shape="box"] - 5 -> 4 ; -4 [label="4: CXXNewExpr \n n$1=_fun___new(sizeof(int ):unsigned long ) [line 13]\n " shape="box"] + "test5" -> "test4" ; +"test4" [label="4: CXXNewExpr \n n$1=_fun___new(sizeof(int ):unsigned long ) [line 13]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Call delete \n n$0=*&i:int * [line 14]\n _fun___delete(n$0:int *) [line 14]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: Call delete \n n$0=*&i:int * [line 14]\n _fun___delete(n$0:int *) [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start test\nFormals: \nLocals: i:int * x:int \n DECLARE_LOCALS(&return,&i,&x); [line 10]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: i:int * x:int \n DECLARE_LOCALS(&return,&i,&x); [line 10]\n " color=yellow style=filled] - 1 -> 6 ; + "test1" -> "test6" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/destructors/call_destructor.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/destructors/call_destructor.cpp.dot index 6248b61ea..0a599af43 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/destructors/call_destructor.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/destructors/call_destructor.cpp.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: Call _fun_Person_~Person \n n$0=*&p:class Person * [line 15]\n _=*n$0:class Person [line 15]\n _fun_Person_~Person(n$0:class Person *) [line 15]\n " shape="box"] +"f3" [label="3: Call _fun_Person_~Person \n n$0=*&p:class Person * [line 15]\n _=*n$0:class Person [line 15]\n _fun_Person_~Person(n$0:class Person *) [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit f \n " color=yellow style=filled] + "f3" -> "f2" ; +"f2" [label="2: Exit f \n " color=yellow style=filled] -1 [label="1: Start f\nFormals: p:class Person *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"f1" [label="1: Start f\nFormals: p:class Person *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 1 -> 3 ; + "f1" -> "f3" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/destructors/call_on_delete.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/destructors/call_on_delete.cpp.dot index 509e2f37b..0dcbe5d9f 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/destructors/call_on_delete.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/destructors/call_on_delete.cpp.dot @@ -1,32 +1,32 @@ /* @generated */ digraph iCFG { -8 [label="8: Call delete \n n$0=*&x:int * [line 16]\n _fun___delete(n$0:int *) [line 16]\n " shape="box"] +"deleteInt3" [label="3: Call delete \n n$0=*&x:int * [line 16]\n _fun___delete(n$0:int *) [line 16]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit deleteInt \n " color=yellow style=filled] + "deleteInt3" -> "deleteInt2" ; +"deleteInt2" [label="2: Exit deleteInt \n " color=yellow style=filled] -6 [label="6: Start deleteInt\nFormals: x:int *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"deleteInt1" [label="1: Start deleteInt\nFormals: x:int *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: Call delete \n n$0=*&x:class X * [line 14]\n _fun___delete(n$0:class X *) [line 14]\n " shape="box"] + "deleteInt1" -> "deleteInt3" ; +"X_~X2" [label="2: Exit X_~X \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit deleteX \n " color=yellow style=filled] +"X_~X1" [label="1: Start X_~X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] -3 [label="3: Start deleteX\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] + "X_~X1" -> "X_~X2" ; +"deleteX3" [label="3: Call delete \n n$0=*&x:class X * [line 14]\n _fun___delete(n$0:class X *) [line 14]\n " shape="box"] - 3 -> 5 ; -2 [label="2: Exit X_~X \n " color=yellow style=filled] + "deleteX3" -> "deleteX2" ; +"deleteX2" [label="2: Exit deleteX \n " color=yellow style=filled] -1 [label="1: Start X_~X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"deleteX1" [label="1: Start deleteX\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 1 -> 2 ; + "deleteX1" -> "deleteX3" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/destructors/pseudo_destructor_expr.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/destructors/pseudo_destructor_expr.cpp.dot index d6628341c..098526084 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/destructors/pseudo_destructor_expr.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/destructors/pseudo_destructor_expr.cpp.dot @@ -1,52 +1,52 @@ /* @generated */ digraph iCFG { -13 [label="13: DeclStmt \n *&t:int *=0 [line 24]\n " shape="box"] +"test4" [label="4: DeclStmt \n *&t:int *=0 [line 24]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Call _fun_destroy \n n$0=_fun_destroy(&t:int **) [line 25]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: Call _fun_destroy \n n$0=_fun_destroy(&t:int **) [line 25]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -10 [label="10: Start test\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 23]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 23]\n " color=yellow style=filled] - 10 -> 13 ; -9 [label="9: Call _fun___infer_skip_function \n _fun___infer_skip_function() [line 19]\n " shape="box"] + "test1" -> "test4" ; +"f5" [label="5: DeclStmt \n n$1=*&p:int * [line 12]\n n$2=*n$1:int [line 12]\n *&x:int =n$2 [line 12]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Return Stmt \n *&return:int =0 [line 20]\n " shape="box"] + "f5" -> "f4" ; +"f4" [label="4: Call _fun___infer_skip_function \n _fun___infer_skip_function() [line 13]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit destroy \n " color=yellow style=filled] + "f4" -> "f3" ; +"f3" [label="3: Return Stmt \n n$0=*&x:int [line 14]\n *&return:int =n$0 [line 14]\n " shape="box"] -6 [label="6: Start destroy\nFormals: ptr:int **\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] + "f3" -> "f2" ; +"f2" [label="2: Exit f \n " color=yellow style=filled] - 6 -> 9 ; -5 [label="5: DeclStmt \n n$1=*&p:int * [line 12]\n n$2=*n$1:int [line 12]\n *&x:int =n$2 [line 12]\n " shape="box"] +"f1" [label="1: Start f\nFormals: p:int *\nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 11]\n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Call _fun___infer_skip_function \n _fun___infer_skip_function() [line 13]\n " shape="box"] + "f1" -> "f5" ; +"destroy4" [label="4: Call _fun___infer_skip_function \n _fun___infer_skip_function() [line 19]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&x:int [line 14]\n *&return:int =n$0 [line 14]\n " shape="box"] + "destroy4" -> "destroy3" ; +"destroy3" [label="3: Return Stmt \n *&return:int =0 [line 20]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit f \n " color=yellow style=filled] + "destroy3" -> "destroy2" ; +"destroy2" [label="2: Exit destroy \n " color=yellow style=filled] -1 [label="1: Start f\nFormals: p:int *\nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 11]\n " color=yellow style=filled] +"destroy1" [label="1: Start destroy\nFormals: ptr:int **\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 1 -> 5 ; + "destroy1" -> "destroy4" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/destructors/simple_decl.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/destructors/simple_decl.cpp.dot index 169755e13..ce02eefaf 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/destructors/simple_decl.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/destructors/simple_decl.cpp.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&this:class B * [line 20]\n *n$0.f:int =1 [line 20]\n " shape="box"] +"B_~B3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class B * [line 20]\n *n$0.f:int =1 [line 20]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit B_~B \n " color=yellow style=filled] + "B_~B3" -> "B_~B2" ; +"B_~B2" [label="2: Exit B_~B \n " color=yellow style=filled] -4 [label="4: Start B_~B\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +"B_~B1" [label="1: Start B_~B\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class A * [line 12]\n *n$0.f:int =0 [line 12]\n " shape="box"] + "B_~B1" -> "B_~B3" ; +"A_~A3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class A * [line 12]\n *n$0.f:int =0 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_~A \n " color=yellow style=filled] + "A_~A3" -> "A_~A2" ; +"A_~A2" [label="2: Exit A_~A \n " color=yellow style=filled] -1 [label="1: Start A_~A\nFormals: this:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"A_~A1" [label="1: Start A_~A\nFormals: this:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "A_~A1" -> "A_~A3" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/globals/global_const1.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/globals/global_const1.cpp.dot index 901c60a19..8a55d588e 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/globals/global_const1.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/globals/global_const1.cpp.dot @@ -1,65 +1,65 @@ /* @generated */ digraph iCFG { -17 [label="17: DeclStmt \n *&#GB$v:int =2 [line 20]\n n$1=*&#GB$v:int [line 20]\n *&local:int =n$1 [line 20]\n " shape="box"] +"__infer_globals_initializer_global3" [label="3: DeclStmt \n _fun_X_X(&#GB$global:class X *) [line 13]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Return Stmt \n *&#GB$v:int =2 [line 21]\n n$0=*&#GB$v:int [line 21]\n *&return:int =n$0 [line 21]\n " shape="box"] + "__infer_globals_initializer_global3" -> "__infer_globals_initializer_global2" ; +"__infer_globals_initializer_global2" [label="2: Exit __infer_globals_initializer_global \n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Exit test2 \n " color=yellow style=filled] +"__infer_globals_initializer_global1" [label="1: Start __infer_globals_initializer_global\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] -14 [label="14: Start test2\nFormals: \nLocals: local:int \n DECLARE_LOCALS(&return,&local); [line 19]\n " color=yellow style=filled] + "__infer_globals_initializer_global1" -> "__infer_globals_initializer_global3" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] - 14 -> 17 ; -13 [label="13: DeclStmt \n *&#GB$v:int =2 [line 17]\n " shape="box"] +"X_X1" [label="1: Start X_X\nFormals: this:class X * __param_0:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit __infer_globals_initializer_v \n " color=yellow style=filled] + "X_X1" -> "X_X2" ; +"test3" [label="3: Return Stmt \n n$0=*&__return_param:class X * [line 15]\n _fun_X_X(&#GB$global:class X *) [line 13]\n _fun_X_X(n$0:class X *,&#GB$global:class X &) [line 15]\n " shape="box"] -11 [label="11: Start __infer_globals_initializer_v\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] - 11 -> 13 ; -10 [label="10: Return Stmt \n n$0=*&__return_param:class X * [line 15]\n _fun_X_X(&#GB$global:class X *) [line 13]\n _fun_X_X(n$0:class X *,&#GB$global:class X &) [line 15]\n " shape="box"] +"test1" [label="1: Start test\nFormals: __return_param:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Exit test \n " color=yellow style=filled] + "test1" -> "test3" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] -8 [label="8: Start test\nFormals: __return_param:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"X_X1" [label="1: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 8 -> 10 ; -7 [label="7: DeclStmt \n _fun_X_X(&#GB$global:class X *) [line 13]\n " shape="box"] + "X_X1" -> "X_X2" ; +"__infer_globals_initializer_v3" [label="3: DeclStmt \n *&#GB$v:int =2 [line 17]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit __infer_globals_initializer_global \n " color=yellow style=filled] + "__infer_globals_initializer_v3" -> "__infer_globals_initializer_v2" ; +"__infer_globals_initializer_v2" [label="2: Exit __infer_globals_initializer_v \n " color=yellow style=filled] -5 [label="5: Start __infer_globals_initializer_global\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"__infer_globals_initializer_v1" [label="1: Start __infer_globals_initializer_v\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 5 -> 7 ; -4 [label="4: Exit X_X \n " color=yellow style=filled] + "__infer_globals_initializer_v1" -> "__infer_globals_initializer_v3" ; +"test24" [label="4: DeclStmt \n *&#GB$v:int =2 [line 20]\n n$1=*&#GB$v:int [line 20]\n *&local:int =n$1 [line 20]\n " shape="box"] -3 [label="3: Start X_X\nFormals: this:class X * __param_0:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] + "test24" -> "test23" ; +"test23" [label="3: Return Stmt \n *&#GB$v:int =2 [line 21]\n n$0=*&#GB$v:int [line 21]\n *&return:int =n$0 [line 21]\n " shape="box"] - 3 -> 4 ; -2 [label="2: Exit X_X \n " color=yellow style=filled] + "test23" -> "test22" ; +"test22" [label="2: Exit test2 \n " color=yellow style=filled] -1 [label="1: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"test21" [label="1: Start test2\nFormals: \nLocals: local:int \n DECLARE_LOCALS(&return,&local); [line 19]\n " color=yellow style=filled] - 1 -> 2 ; + "test21" -> "test24" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/globals/global_const2.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/globals/global_const2.cpp.dot index bb0c393e3..23d2b7345 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/globals/global_const2.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/globals/global_const2.cpp.dot @@ -1,67 +1,67 @@ /* @generated */ digraph iCFG { -16 [label="16: Return Stmt \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 10]\n *&#GB$global:int =n$1 [line 11]\n n$2=*&#GB$global:int [line 11]\n *&return:int =n$2 [line 11]\n " shape="box"] +"__infer_globals_initializer_global8" [label="8: DeclStmt \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 10]\n *&#GB$global:int =n$1 [line 10]\n " shape="box"] - 16 -> 10 ; -15 [label="15: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =3 [line 10]\n " shape="box"] + "__infer_globals_initializer_global8" -> "__infer_globals_initializer_global2" ; +"__infer_globals_initializer_global7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =3 [line 10]\n " shape="box"] - 15 -> 11 ; -14 [label="14: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =2 [line 10]\n " shape="box"] + "__infer_globals_initializer_global7" -> "__infer_globals_initializer_global3" ; +"__infer_globals_initializer_global6" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =2 [line 10]\n " shape="box"] - 14 -> 11 ; -13 [label="13: Prune (false branch) \n PRUNE((1 == 0), false); [line 10]\n " shape="invhouse"] + "__infer_globals_initializer_global6" -> "__infer_globals_initializer_global3" ; +"__infer_globals_initializer_global5" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 10]\n " shape="invhouse"] - 13 -> 15 ; -12 [label="12: Prune (true branch) \n PRUNE((1 != 0), true); [line 10]\n " shape="invhouse"] + "__infer_globals_initializer_global5" -> "__infer_globals_initializer_global7" ; +"__infer_globals_initializer_global4" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 10]\n " shape="invhouse"] - 12 -> 14 ; -11 [label="11: + \n " ] + "__infer_globals_initializer_global4" -> "__infer_globals_initializer_global6" ; +"__infer_globals_initializer_global3" [label="3: + \n " ] - 11 -> 16 ; -10 [label="10: Exit test \n " color=yellow style=filled] + "__infer_globals_initializer_global3" -> "__infer_globals_initializer_global8" ; +"__infer_globals_initializer_global2" [label="2: Exit __infer_globals_initializer_global \n " color=yellow style=filled] -9 [label="9: Start test\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 11]\n " color=yellow style=filled] +"__infer_globals_initializer_global1" [label="1: Start __infer_globals_initializer_global\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 10]\n " color=yellow style=filled] - 9 -> 12 ; - 9 -> 13 ; -8 [label="8: DeclStmt \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 10]\n *&#GB$global:int =n$1 [line 10]\n " shape="box"] + "__infer_globals_initializer_global1" -> "__infer_globals_initializer_global4" ; + "__infer_globals_initializer_global1" -> "__infer_globals_initializer_global5" ; +"test8" [label="8: Return Stmt \n n$1=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 10]\n *&#GB$global:int =n$1 [line 11]\n n$2=*&#GB$global:int [line 11]\n *&return:int =n$2 [line 11]\n " shape="box"] - 8 -> 2 ; -7 [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =3 [line 10]\n " shape="box"] + "test8" -> "test2" ; +"test7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =3 [line 10]\n " shape="box"] - 7 -> 3 ; -6 [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =2 [line 10]\n " shape="box"] + "test7" -> "test3" ; +"test6" [label="6: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =2 [line 10]\n " shape="box"] - 6 -> 3 ; -5 [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 10]\n " shape="invhouse"] + "test6" -> "test3" ; +"test5" [label="5: Prune (false branch) \n PRUNE((1 == 0), false); [line 10]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 10]\n " shape="invhouse"] + "test5" -> "test7" ; +"test4" [label="4: Prune (true branch) \n PRUNE((1 != 0), true); [line 10]\n " shape="invhouse"] - 4 -> 6 ; -3 [label="3: + \n " ] + "test4" -> "test6" ; +"test3" [label="3: + \n " ] - 3 -> 8 ; -2 [label="2: Exit __infer_globals_initializer_global \n " color=yellow style=filled] + "test3" -> "test8" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start __infer_globals_initializer_global\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 10]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 11]\n " color=yellow style=filled] - 1 -> 4 ; - 1 -> 5 ; + "test1" -> "test4" ; + "test1" -> "test5" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/globals/initializer.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/globals/initializer.cpp.dot index c8b563f2c..a13ebe6ec 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/globals/initializer.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/globals/initializer.cpp.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: DeclStmt \n n$0=*&#GB$x:int [line 15]\n n$1=*&#GB$z:int [line 15]\n *&#GB$y:int =((n$0 + n$1) + 1) [line 15]\n " shape="box"] +"__infer_globals_initializer_x3" [label="3: DeclStmt \n n$0=_fun_foo() [line 14]\n *&#GB$x:int =(n$0 + 5) [line 14]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit __infer_globals_initializer_y \n " color=yellow style=filled] + "__infer_globals_initializer_x3" -> "__infer_globals_initializer_x2" ; +"__infer_globals_initializer_x2" [label="2: Exit __infer_globals_initializer_x \n " color=yellow style=filled] -4 [label="4: Start __infer_globals_initializer_y\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"__infer_globals_initializer_x1" [label="1: Start __infer_globals_initializer_x\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: DeclStmt \n n$0=_fun_foo() [line 14]\n *&#GB$x:int =(n$0 + 5) [line 14]\n " shape="box"] + "__infer_globals_initializer_x1" -> "__infer_globals_initializer_x3" ; +"__infer_globals_initializer_y3" [label="3: DeclStmt \n n$0=*&#GB$x:int [line 15]\n n$1=*&#GB$z:int [line 15]\n *&#GB$y:int =((n$0 + n$1) + 1) [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit __infer_globals_initializer_x \n " color=yellow style=filled] + "__infer_globals_initializer_y3" -> "__infer_globals_initializer_y2" ; +"__infer_globals_initializer_y2" [label="2: Exit __infer_globals_initializer_y \n " color=yellow style=filled] -1 [label="1: Start __infer_globals_initializer_x\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"__infer_globals_initializer_y1" [label="1: Start __infer_globals_initializer_y\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 1 -> 3 ; + "__infer_globals_initializer_y1" -> "__infer_globals_initializer_y3" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/include_header/include_only.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/include_header/include_only.cpp.dot index b533a9060..e3b5a66a1 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/include_header/include_only.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/include_header/include_only.cpp.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: Return Stmt \n *&return:int =(1 / 0) [line 19]\n " shape="box"] +"div0_fun3" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 19]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit div0_fun \n " color=yellow style=filled] + "div0_fun3" -> "div0_fun2" ; +"div0_fun2" [label="2: Exit div0_fun \n " color=yellow style=filled] -4 [label="4: Start div0_fun\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"div0_fun1" [label="1: Start div0_fun\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =(1 / 0) [line 11]\n " shape="box"] + "div0_fun1" -> "div0_fun3" ; +"A_div03" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 11]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_div0 \n " color=yellow style=filled] + "A_div03" -> "A_div02" ; +"A_div02" [label="2: Exit A_div0 \n " color=yellow style=filled] -1 [label="1: Start A_div0\nFormals: this:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"A_div01" [label="1: Start A_div0\nFormals: this:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 1 -> 3 ; + "A_div01" -> "A_div03" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/include_header/include_templ.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/include_header/include_templ.cpp.dot index 8c1c9a9f9..46e1d0d39 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/include_header/include_templ.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/include_header/include_templ.cpp.dot @@ -1,135 +1,135 @@ /* @generated */ digraph iCFG { -36 [label="36: Call _fun_div0_templ \n n$0=_fun_div0_templ() [line 25]\n " shape="box"] +"div0_templ3" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 23]\n " shape="box"] - 36 -> 35 ; -35 [label="35: Exit div0_templ_A \n " color=yellow style=filled] + "div0_templ3" -> "div0_templ2" ; +"div0_templ2" [label="2: Exit div0_templ \n " color=yellow style=filled] -34 [label="34: Start div0_templ_A\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] +"div0_templ1" [label="1: Start div0_templ\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] - 34 -> 36 ; -33 [label="33: Call _fun_div0_templ \n n$0=_fun_div0_templ() [line 23]\n " shape="box"] + "div0_templ1" -> "div0_templ3" ; +"div0_fun3" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 19]\n " shape="box"] - 33 -> 32 ; -32 [label="32: Exit div0_templ_int \n " color=yellow style=filled] + "div0_fun3" -> "div0_fun2" ; +"div0_fun2" [label="2: Exit div0_fun \n " color=yellow style=filled] -31 [label="31: Start div0_templ_int\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] +"div0_fun1" [label="1: Start div0_fun\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 31 -> 33 ; -30 [label="30: DeclStmt \n _fun_B_B(&b:class B *) [line 19]\n " shape="box"] + "div0_fun1" -> "div0_fun3" ; +"B_B2" [label="2: Exit B_B \n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: Call _fun_B_div0 \n _=*&b:class B [line 20]\n n$1=_fun_B_div0(&b:class B &) [line 20]\n " shape="box"] +"B_B1" [label="1: Start B_B\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 29 -> 28 ; -28 [label="28: Exit div0_B_A \n " color=yellow style=filled] + "B_B1" -> "B_B2" ; +"div0_templ_A3" [label="3: Call _fun_div0_templ \n n$0=_fun_div0_templ() [line 25]\n " shape="box"] -27 [label="27: Start div0_B_A\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 18]\n " color=yellow style=filled] + "div0_templ_A3" -> "div0_templ_A2" ; +"div0_templ_A2" [label="2: Exit div0_templ_A \n " color=yellow style=filled] - 27 -> 30 ; -26 [label="26: DeclStmt \n _fun_B_B(&b:class B *) [line 14]\n " shape="box"] +"div0_templ_A1" [label="1: Start div0_templ_A\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: Call _fun_B_div0 \n _=*&b:class B [line 15]\n n$1=_fun_B_div0(&b:class B &) [line 15]\n " shape="box"] + "div0_templ_A1" -> "div0_templ_A3" ; +"B_div03" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 16]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit div0_B_int \n " color=yellow style=filled] + "B_div03" -> "B_div02" ; +"B_div02" [label="2: Exit B_div0 \n " color=yellow style=filled] -23 [label="23: Start div0_B_int\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 13]\n " color=yellow style=filled] +"B_div01" [label="1: Start B_div0\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 23 -> 26 ; -22 [label="22: Return Stmt \n *&return:int =(1 / 0) [line 23]\n " shape="box"] + "B_div01" -> "B_div03" ; +"div0_templ_int3" [label="3: Call _fun_div0_templ \n n$0=_fun_div0_templ() [line 23]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Exit div0_templ \n " color=yellow style=filled] + "div0_templ_int3" -> "div0_templ_int2" ; +"div0_templ_int2" [label="2: Exit div0_templ_int \n " color=yellow style=filled] -20 [label="20: Start div0_templ\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] +"div0_templ_int1" [label="1: Start div0_templ_int\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 20 -> 22 ; -19 [label="19: Return Stmt \n *&return:int =(1 / 0) [line 23]\n " shape="box"] + "div0_templ_int1" -> "div0_templ_int3" ; +"A_div03" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 11]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit div0_templ \n " color=yellow style=filled] + "A_div03" -> "A_div02" ; +"A_div02" [label="2: Exit A_div0 \n " color=yellow style=filled] -17 [label="17: Start div0_templ\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] +"A_div01" [label="1: Start A_div0\nFormals: this:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 17 -> 19 ; -16 [label="16: Return Stmt \n *&return:int =(1 / 0) [line 19]\n " shape="box"] + "A_div01" -> "A_div03" ; +"div0_B_A4" [label="4: DeclStmt \n _fun_B_B(&b:class B *) [line 19]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Exit div0_fun \n " color=yellow style=filled] + "div0_B_A4" -> "div0_B_A3" ; +"div0_B_A3" [label="3: Call _fun_B_div0 \n _=*&b:class B [line 20]\n n$1=_fun_B_div0(&b:class B &) [line 20]\n " shape="box"] -14 [label="14: Start div0_fun\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] + "div0_B_A3" -> "div0_B_A2" ; +"div0_B_A2" [label="2: Exit div0_B_A \n " color=yellow style=filled] - 14 -> 16 ; -13 [label="13: Exit B_B \n " color=yellow style=filled] +"div0_B_A1" [label="1: Start div0_B_A\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 18]\n " color=yellow style=filled] -12 [label="12: Start B_B\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] + "div0_B_A1" -> "div0_B_A4" ; +"div0_B_int4" [label="4: DeclStmt \n _fun_B_B(&b:class B *) [line 14]\n " shape="box"] - 12 -> 13 ; -11 [label="11: Return Stmt \n *&return:int =(1 / 0) [line 16]\n " shape="box"] + "div0_B_int4" -> "div0_B_int3" ; +"div0_B_int3" [label="3: Call _fun_B_div0 \n _=*&b:class B [line 15]\n n$1=_fun_B_div0(&b:class B &) [line 15]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit B_div0 \n " color=yellow style=filled] + "div0_B_int3" -> "div0_B_int2" ; +"div0_B_int2" [label="2: Exit div0_B_int \n " color=yellow style=filled] -9 [label="9: Start B_div0\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"div0_B_int1" [label="1: Start div0_B_int\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 13]\n " color=yellow style=filled] - 9 -> 11 ; -8 [label="8: Exit B_B \n " color=yellow style=filled] + "div0_B_int1" -> "div0_B_int4" ; +"B_B2" [label="2: Exit B_B \n " color=yellow style=filled] -7 [label="7: Start B_B\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"B_B1" [label="1: Start B_B\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 7 -> 8 ; -6 [label="6: Return Stmt \n *&return:int =(1 / 0) [line 16]\n " shape="box"] + "B_B1" -> "B_B2" ; +"div0_templ3" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 23]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit B_div0 \n " color=yellow style=filled] + "div0_templ3" -> "div0_templ2" ; +"div0_templ2" [label="2: Exit div0_templ \n " color=yellow style=filled] -4 [label="4: Start B_div0\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"div0_templ1" [label="1: Start div0_templ\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =(1 / 0) [line 11]\n " shape="box"] + "div0_templ1" -> "div0_templ3" ; +"B_div03" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_div0 \n " color=yellow style=filled] + "B_div03" -> "B_div02" ; +"B_div02" [label="2: Exit B_div0 \n " color=yellow style=filled] -1 [label="1: Start A_div0\nFormals: this:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"B_div01" [label="1: Start B_div0\nFormals: this:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 1 -> 3 ; + "B_div01" -> "B_div03" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/keywords/self_parameter.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/keywords/self_parameter.cpp.dot index 880fb9549..79d94d66e 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/keywords/self_parameter.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/keywords/self_parameter.cpp.dot @@ -1,36 +1,36 @@ /* @generated */ digraph iCFG { -9 [label="9: Return Stmt \n n$0=*&a:class A * [line 17]\n _=*n$0:class A [line 17]\n n$2=_fun_A_meth_with_self(n$0:class A *,1:int ,2:int ) [line 17]\n n$3=_fun_fun_with_self(10:int ) [line 17]\n *&return:int =(n$2 + n$3) [line 17]\n " shape="box"] +"test3" [label="3: Return Stmt \n n$0=*&a:class A * [line 17]\n _=*n$0:class A [line 17]\n n$2=_fun_A_meth_with_self(n$0:class A *,1:int ,2:int ) [line 17]\n n$3=_fun_fun_with_self(10:int ) [line 17]\n *&return:int =(n$2 + n$3) [line 17]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -7 [label="7: Start test\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Return Stmt \n n$0=*&self:int [line 15]\n *&return:int =n$0 [line 15]\n " shape="box"] + "test1" -> "test3" ; +"A_meth_with_self3" [label="3: Return Stmt \n n$0=*&self:int [line 12]\n n$1=*&b:int [line 12]\n *&return:int =(n$0 + n$1) [line 12]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit fun_with_self \n " color=yellow style=filled] + "A_meth_with_self3" -> "A_meth_with_self2" ; +"A_meth_with_self2" [label="2: Exit A_meth_with_self \n " color=yellow style=filled] -4 [label="4: Start fun_with_self\nFormals: self:int \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"A_meth_with_self1" [label="1: Start A_meth_with_self\nFormals: this:class A * self:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&self:int [line 12]\n n$1=*&b:int [line 12]\n *&return:int =(n$0 + n$1) [line 12]\n " shape="box"] + "A_meth_with_self1" -> "A_meth_with_self3" ; +"fun_with_self3" [label="3: Return Stmt \n n$0=*&self:int [line 15]\n *&return:int =n$0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_meth_with_self \n " color=yellow style=filled] + "fun_with_self3" -> "fun_with_self2" ; +"fun_with_self2" [label="2: Exit fun_with_self \n " color=yellow style=filled] -1 [label="1: Start A_meth_with_self\nFormals: this:class A * self:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"fun_with_self1" [label="1: Start fun_with_self\nFormals: self:int \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 1 -> 3 ; + "fun_with_self1" -> "fun_with_self3" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/literals/nullptr.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/literals/nullptr.cpp.dot index 1b7f8032d..7f56f55da 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/literals/nullptr.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/literals/nullptr.cpp.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: Return Stmt \n *&return:int *=null [line 10]\n " shape="box"] +"getPtr3" [label="3: Return Stmt \n *&return:int *=null [line 10]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit getPtr \n " color=yellow style=filled] + "getPtr3" -> "getPtr2" ; +"getPtr2" [label="2: Exit getPtr \n " color=yellow style=filled] -1 [label="1: Start getPtr\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"getPtr1" [label="1: Start getPtr\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 1 -> 3 ; + "getPtr1" -> "getPtr3" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/literals/scalar_value_init.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/literals/scalar_value_init.cpp.dot index 2aac5d472..7464a3e5a 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/literals/scalar_value_init.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/literals/scalar_value_init.cpp.dot @@ -1,89 +1,89 @@ /* @generated */ digraph iCFG { -23 [label="23: DeclStmt \n n$3=_fun_get() [line 18]\n *&i:int =n$3 [line 18]\n " shape="box"] +"get3" [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] - 23 -> 22 ; -22 [label="22: DeclStmt \n n$2=_fun_get() [line 19]\n *&f:float =n$2 [line 19]\n " shape="box"] + "get3" -> "get2" ; +"get2" [label="2: Exit get \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: DeclStmt \n n$1=_fun_get() [line 20]\n *&fp:float *=n$1 [line 20]\n " shape="box"] +"get1" [label="1: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Call _fun_get \n _fun_get() [line 21]\n " shape="box"] + "get1" -> "get3" ; +"test8" [label="8: DeclStmt \n n$3=_fun_get() [line 18]\n *&i:int =n$3 [line 18]\n " shape="box"] - 20 -> 19 ; -19 [label="19: DeclStmt \n n$0=_fun_get() [line 22]\n *&x:int =n$0 [line 22]\n " shape="box"] + "test8" -> "test7" ; +"test7" [label="7: DeclStmt \n n$2=_fun_get() [line 19]\n *&f:float =n$2 [line 19]\n " shape="box"] - 19 -> 18 ; -18 [label="18: DeclStmt \n *&f2:float =0.000000 [line 23]\n " shape="box"] + "test7" -> "test6" ; +"test6" [label="6: DeclStmt \n n$1=_fun_get() [line 20]\n *&fp:float *=n$1 [line 20]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit test \n " color=yellow style=filled] + "test6" -> "test5" ; +"test5" [label="5: Call _fun_get \n _fun_get() [line 21]\n " shape="box"] -16 [label="16: Start test\nFormals: \nLocals: f2:float x:int fp:float * f:float i:int \n DECLARE_LOCALS(&return,&f2,&x,&fp,&f,&i); [line 17]\n " color=yellow style=filled] + "test5" -> "test4" ; +"test4" [label="4: DeclStmt \n n$0=_fun_get() [line 22]\n *&x:int =n$0 [line 22]\n " shape="box"] - 16 -> 23 ; -15 [label="15: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: DeclStmt \n *&f2:float =0.000000 [line 23]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit get \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -13 [label="13: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: f2:float x:int fp:float * f:float i:int \n DECLARE_LOCALS(&return,&f2,&x,&fp,&f,&i); [line 17]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Return Stmt \n *&return:void =-1 [line 14]\n " shape="box"] + "test1" -> "test8" ; +"get3" [label="3: Return Stmt \n *&return:void =-1 [line 14]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit get \n " color=yellow style=filled] + "get3" -> "get2" ; +"get2" [label="2: Exit get \n " color=yellow style=filled] -10 [label="10: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"get1" [label="1: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Return Stmt \n *&return:float *=null [line 14]\n " shape="box"] + "get1" -> "get3" ; +"get3" [label="3: Return Stmt \n *&return:float =0.000000 [line 14]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit get \n " color=yellow style=filled] + "get3" -> "get2" ; +"get2" [label="2: Exit get \n " color=yellow style=filled] -7 [label="7: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"get1" [label="1: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Return Stmt \n *&return:float =0.000000 [line 14]\n " shape="box"] + "get1" -> "get3" ; +"get3" [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit get \n " color=yellow style=filled] + "get3" -> "get2" ; +"get2" [label="2: Exit get \n " color=yellow style=filled] -4 [label="4: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"get1" [label="1: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] + "get1" -> "get3" ; +"get3" [label="3: Return Stmt \n *&return:float *=null [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit get \n " color=yellow style=filled] + "get3" -> "get2" ; +"get2" [label="2: Exit get \n " color=yellow style=filled] -1 [label="1: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"get1" [label="1: Start get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 1 -> 3 ; + "get1" -> "get3" ; } diff --git a/infer/tests/codetoanalyze/cpp/frontend/loops/foreach1.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/loops/foreach1.cpp.dot index 5a786142e..6290c1be9 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/loops/foreach1.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/loops/foreach1.cpp.dot @@ -1,166 +1,166 @@ /* @generated */ digraph iCFG { -43 [label="43: DeclStmt \n _fun_vec_vec(&vector:class vec *,10:int ) [line 36]\n " shape="box"] +"vec_vec6" [label="6: Constructor Init \n n$4=*&this:class vec * [line 24]\n _fun_iterator_iterator(n$4.begin_:class iterator *) [line 24]\n " shape="box"] - 43 -> 42 ; -42 [label="42: DeclStmt \n *&__range:class vec &=&vector [line 37]\n " shape="box"] + "vec_vec6" -> "vec_vec5" ; +"vec_vec5" [label="5: Constructor Init \n n$3=*&this:class vec * [line 24]\n _fun_iterator_iterator(n$3.end_:class iterator *) [line 24]\n " shape="box"] - 42 -> 35 ; -41 [label="41: DeclStmt \n n$15=_fun_iterator_operator*(&__begin:class iterator &) [line 37]\n *&value:int =n$15 [line 37]\n " shape="box"] + "vec_vec5" -> "vec_vec4" ; +"vec_vec4" [label="4: BinaryOperatorStmt: Assign \n n$2=*&this:class vec * [line 25]\n *n$2.begin_.val:int =0 [line 25]\n " shape="box"] - 41 -> 40 ; -40 [label="40: DeclStmt \n n$13=*&value:int [line 38]\n n$14=*&value:int [line 38]\n *&temp:int =((n$13 * n$14) + 10) [line 38]\n " shape="box"] + "vec_vec4" -> "vec_vec3" ; +"vec_vec3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class vec * [line 26]\n n$1=*&size:int [line 26]\n *n$0.end_.val:int =n$1 [line 26]\n " shape="box"] - 40 -> 36 ; -39 [label="39: Prune (false branch) \n PRUNE((n$12 == 0), false); [line 37]\n " shape="invhouse"] + "vec_vec3" -> "vec_vec2" ; +"vec_vec2" [label="2: Exit vec_vec \n " color=yellow style=filled] - 39 -> 32 ; -38 [label="38: Prune (true branch) \n PRUNE((n$12 != 0), true); [line 37]\n " shape="invhouse"] +"vec_vec1" [label="1: Start vec_vec\nFormals: this:class vec * size:int \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 38 -> 41 ; -37 [label="37: Call _fun_operator!= \n _fun_iterator_iterator(&0$?%__sil_tmp__temp_construct_n$10:class iterator *,&__begin:class iterator &) [line 37]\n _fun_iterator_iterator(&0$?%__sil_tmp__temp_construct_n$11:class iterator *,&__end:class iterator &) [line 37]\n n$12=_fun_operator!=(&0$?%__sil_tmp__temp_construct_n$10:class iterator ,&0$?%__sil_tmp__temp_construct_n$11:class iterator ) [line 37]\n " shape="box"] + "vec_vec1" -> "vec_vec6" ; +"test13" [label="13: DeclStmt \n _fun_vec_vec(&vector:class vec *,10:int ) [line 36]\n " shape="box"] - 37 -> 38 ; - 37 -> 39 ; -36 [label="36: Call _fun_iterator_operator++ \n _fun_iterator_operator++(&__begin:class iterator &,&0$?%__sil_tmp__temp_return_n$9:class iterator *) [line 37]\n " shape="box"] + "test13" -> "test12" ; +"test12" [label="12: DeclStmt \n *&__range:class vec &=&vector [line 37]\n " shape="box"] - 36 -> 33 ; -35 [label="35: DeclStmt \n n$5=*&__range:class vec & [line 37]\n _=*n$5:class vec [line 37]\n _fun_vec_begin(n$5:class vec &,&0$?%__sil_tmpSIL_materialize_temp__n$4:class iterator *) [line 37]\n _fun_iterator_iterator(&__begin:class iterator *,&0$?%__sil_tmpSIL_materialize_temp__n$4:class iterator &) [line 37]\n " shape="box"] + "test12" -> "test5" ; +"test11" [label="11: DeclStmt \n n$15=_fun_iterator_operator*(&__begin:class iterator &) [line 37]\n *&value:int =n$15 [line 37]\n " shape="box"] - 35 -> 34 ; -34 [label="34: DeclStmt \n n$1=*&__range:class vec & [line 37]\n _=*n$1:class vec [line 37]\n _fun_vec_end(n$1:class vec &,&0$?%__sil_tmpSIL_materialize_temp__n$0:class iterator *) [line 37]\n _fun_iterator_iterator(&__end:class iterator *,&0$?%__sil_tmpSIL_materialize_temp__n$0:class iterator &) [line 37]\n " shape="box"] + "test11" -> "test10" ; +"test10" [label="10: DeclStmt \n n$13=*&value:int [line 38]\n n$14=*&value:int [line 38]\n *&temp:int =((n$13 * n$14) + 10) [line 38]\n " shape="box"] - 34 -> 33 ; -33 [label="33: + \n " ] + "test10" -> "test6" ; +"test9" [label="9: Prune (false branch) \n PRUNE((n$12 == 0), false); [line 37]\n " shape="invhouse"] - 33 -> 37 ; -32 [label="32: Exit test \n " color=yellow style=filled] + "test9" -> "test2" ; +"test8" [label="8: Prune (true branch) \n PRUNE((n$12 != 0), true); [line 37]\n " shape="invhouse"] -31 [label="31: Start test\nFormals: \nLocals: __end:class iterator 0$?%__sil_tmpSIL_materialize_temp__n$0:class iterator __begin:class iterator 0$?%__sil_tmpSIL_materialize_temp__n$4:class iterator 0$?%__sil_tmp__temp_return_n$9:class iterator 0$?%__sil_tmp__temp_construct_n$10:class iterator 0$?%__sil_tmp__temp_construct_n$11:class iterator temp:int value:int __range:class vec & vector:class vec \n DECLARE_LOCALS(&return,&__end,&0$?%__sil_tmpSIL_materialize_temp__n$0,&__begin,&0$?%__sil_tmpSIL_materialize_temp__n$4,&0$?%__sil_tmp__temp_return_n$9,&0$?%__sil_tmp__temp_construct_n$10,&0$?%__sil_tmp__temp_construct_n$11,&temp,&value,&__range,&vector); [line 35]\n " color=yellow style=filled] + "test8" -> "test11" ; +"test7" [label="7: Call _fun_operator!= \n _fun_iterator_iterator(&0$?%__sil_tmp__temp_construct_n$10:class iterator *,&__begin:class iterator &) [line 37]\n _fun_iterator_iterator(&0$?%__sil_tmp__temp_construct_n$11:class iterator *,&__end:class iterator &) [line 37]\n n$12=_fun_operator!=(&0$?%__sil_tmp__temp_construct_n$10:class iterator ,&0$?%__sil_tmp__temp_construct_n$11:class iterator ) [line 37]\n " shape="box"] - 31 -> 43 ; -30 [label="30: Return Stmt \n n$0=*&__return_param:class iterator * [line 29]\n n$1=*&this:class vec * [line 29]\n _fun_iterator_iterator(n$0:class iterator *,n$1.end_:class iterator &) [line 29]\n " shape="box"] + "test7" -> "test8" ; + "test7" -> "test9" ; +"test6" [label="6: Call _fun_iterator_operator++ \n _fun_iterator_operator++(&__begin:class iterator &,&0$?%__sil_tmp__temp_return_n$9:class iterator *) [line 37]\n " shape="box"] - 30 -> 29 ; -29 [label="29: Exit vec_end \n " color=yellow style=filled] + "test6" -> "test3" ; +"test5" [label="5: DeclStmt \n n$5=*&__range:class vec & [line 37]\n _=*n$5:class vec [line 37]\n _fun_vec_begin(n$5:class vec &,&0$?%__sil_tmpSIL_materialize_temp__n$4:class iterator *) [line 37]\n _fun_iterator_iterator(&__begin:class iterator *,&0$?%__sil_tmpSIL_materialize_temp__n$4:class iterator &) [line 37]\n " shape="box"] -28 [label="28: Start vec_end\nFormals: this:class vec * __return_param:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] + "test5" -> "test4" ; +"test4" [label="4: DeclStmt \n n$1=*&__range:class vec & [line 37]\n _=*n$1:class vec [line 37]\n _fun_vec_end(n$1:class vec &,&0$?%__sil_tmpSIL_materialize_temp__n$0:class iterator *) [line 37]\n _fun_iterator_iterator(&__end:class iterator *,&0$?%__sil_tmpSIL_materialize_temp__n$0:class iterator &) [line 37]\n " shape="box"] - 28 -> 30 ; -27 [label="27: Return Stmt \n n$0=*&__return_param:class iterator * [line 28]\n n$1=*&this:class vec * [line 28]\n _fun_iterator_iterator(n$0:class iterator *,n$1.begin_:class iterator &) [line 28]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: + \n " ] - 27 -> 26 ; -26 [label="26: Exit vec_begin \n " color=yellow style=filled] + "test3" -> "test7" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -25 [label="25: Start vec_begin\nFormals: this:class vec * __return_param:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: __end:class iterator 0$?%__sil_tmpSIL_materialize_temp__n$0:class iterator __begin:class iterator 0$?%__sil_tmpSIL_materialize_temp__n$4:class iterator 0$?%__sil_tmp__temp_return_n$9:class iterator 0$?%__sil_tmp__temp_construct_n$10:class iterator 0$?%__sil_tmp__temp_construct_n$11:class iterator temp:int value:int __range:class vec & vector:class vec \n DECLARE_LOCALS(&return,&__end,&0$?%__sil_tmpSIL_materialize_temp__n$0,&__begin,&0$?%__sil_tmpSIL_materialize_temp__n$4,&0$?%__sil_tmp__temp_return_n$9,&0$?%__sil_tmp__temp_construct_n$10,&0$?%__sil_tmp__temp_construct_n$11,&temp,&value,&__range,&vector); [line 35]\n " color=yellow style=filled] - 25 -> 27 ; -24 [label="24: Constructor Init \n n$4=*&this:class vec * [line 24]\n _fun_iterator_iterator(n$4.begin_:class iterator *) [line 24]\n " shape="box"] + "test1" -> "test13" ; +"iterator_iterator2" [label="2: Exit iterator_iterator \n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Constructor Init \n n$3=*&this:class vec * [line 24]\n _fun_iterator_iterator(n$3.end_:class iterator *) [line 24]\n " shape="box"] +"iterator_iterator1" [label="1: Start iterator_iterator\nFormals: this:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 23 -> 22 ; -22 [label="22: BinaryOperatorStmt: Assign \n n$2=*&this:class vec * [line 25]\n *n$2.begin_.val:int =0 [line 25]\n " shape="box"] + "iterator_iterator1" -> "iterator_iterator2" ; +"vec_end3" [label="3: Return Stmt \n n$0=*&__return_param:class iterator * [line 29]\n n$1=*&this:class vec * [line 29]\n _fun_iterator_iterator(n$0:class iterator *,n$1.end_:class iterator &) [line 29]\n " shape="box"] - 22 -> 21 ; -21 [label="21: BinaryOperatorStmt: Assign \n n$0=*&this:class vec * [line 26]\n n$1=*&size:int [line 26]\n *n$0.end_.val:int =n$1 [line 26]\n " shape="box"] + "vec_end3" -> "vec_end2" ; +"vec_end2" [label="2: Exit vec_end \n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit vec_vec \n " color=yellow style=filled] +"vec_end1" [label="1: Start vec_end\nFormals: this:class vec * __return_param:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] -19 [label="19: Start vec_vec\nFormals: this:class vec * size:int \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] + "vec_end1" -> "vec_end3" ; +"iterator_operator++4" [label="4: BinaryOperatorStmt: AddAssign \n n$2=*&this:class iterator * [line 14]\n n$3=*n$2.val:int [line 14]\n *n$2.val:int =(n$3 + 1) [line 14]\n " shape="box"] - 19 -> 24 ; -18 [label="18: Return Stmt \n n$0=*&i1:class iterator & [line 21]\n n$1=*n$0.val:int [line 21]\n n$2=*&i2:class iterator & [line 21]\n n$3=*n$2.val:int [line 21]\n *&return:_Bool =(n$1 != n$3) [line 21]\n " shape="box"] + "iterator_operator++4" -> "iterator_operator++3" ; +"iterator_operator++3" [label="3: Return Stmt \n n$0=*&__return_param:class iterator * [line 15]\n n$1=*&this:class iterator * [line 15]\n _fun_iterator_iterator(n$0:class iterator *,n$1:class iterator &) [line 15]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit operator!= \n " color=yellow style=filled] + "iterator_operator++3" -> "iterator_operator++2" ; +"iterator_operator++2" [label="2: Exit iterator_operator++ \n " color=yellow style=filled] -16 [label="16: Start operator!=\nFormals: i1:class iterator & i2:class iterator &\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] +"iterator_operator++1" [label="1: Start iterator_operator++\nFormals: this:class iterator * __return_param:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 16 -> 18 ; -15 [label="15: Constructor Init \n n$0=*&this:class iterator * [line 11]\n n$1=*&__param_0:class iterator & [line 11]\n n$2=*n$1.val:int [line 11]\n *n$0.val:int =n$2 [line 11]\n " shape="box"] + "iterator_operator++1" -> "iterator_operator++4" ; +"iterator_iterator3" [label="3: Constructor Init \n n$0=*&this:class iterator * [line 11]\n n$1=*&__param_0:class iterator & [line 11]\n n$2=*n$1.val:int [line 11]\n *n$0.val:int =n$2 [line 11]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit iterator_iterator \n " color=yellow style=filled] + "iterator_iterator3" -> "iterator_iterator2" ; +"iterator_iterator2" [label="2: Exit iterator_iterator \n " color=yellow style=filled] -13 [label="13: Start iterator_iterator\nFormals: this:class iterator * __param_0:class iterator &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"iterator_iterator1" [label="1: Start iterator_iterator\nFormals: this:class iterator * __param_0:class iterator &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Exit iterator_iterator \n " color=yellow style=filled] + "iterator_iterator1" -> "iterator_iterator3" ; +"vec_begin3" [label="3: Return Stmt \n n$0=*&__return_param:class iterator * [line 28]\n n$1=*&this:class vec * [line 28]\n _fun_iterator_iterator(n$0:class iterator *,n$1.begin_:class iterator &) [line 28]\n " shape="box"] -11 [label="11: Start iterator_iterator\nFormals: this:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] + "vec_begin3" -> "vec_begin2" ; +"vec_begin2" [label="2: Exit vec_begin \n " color=yellow style=filled] - 11 -> 12 ; -10 [label="10: Return Stmt \n n$0=*&this:class iterator * [line 18]\n n$1=*n$0.val:int [line 18]\n *&return:int =n$1 [line 18]\n " shape="box"] +"vec_begin1" [label="1: Start vec_begin\nFormals: this:class vec * __return_param:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Exit iterator_operator* \n " color=yellow style=filled] + "vec_begin1" -> "vec_begin3" ; +"operator!=3" [label="3: Return Stmt \n n$0=*&i1:class iterator & [line 21]\n n$1=*n$0.val:int [line 21]\n n$2=*&i2:class iterator & [line 21]\n n$3=*n$2.val:int [line 21]\n *&return:_Bool =(n$1 != n$3) [line 21]\n " shape="box"] -8 [label="8: Start iterator_operator*\nFormals: this:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "operator!=3" -> "operator!=2" ; +"operator!=2" [label="2: Exit operator!= \n " color=yellow style=filled] - 8 -> 10 ; -7 [label="7: BinaryOperatorStmt: AddAssign \n n$2=*&this:class iterator * [line 14]\n n$3=*n$2.val:int [line 14]\n *n$2.val:int =(n$3 + 1) [line 14]\n " shape="box"] +"operator!=1" [label="1: Start operator!=\nFormals: i1:class iterator & i2:class iterator &\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&__return_param:class iterator * [line 15]\n n$1=*&this:class iterator * [line 15]\n _fun_iterator_iterator(n$0:class iterator *,n$1:class iterator &) [line 15]\n " shape="box"] + "operator!=1" -> "operator!=3" ; +"iterator_iterator3" [label="3: Constructor Init \n n$0=*&this:class iterator * [line 11]\n n$1=*&__param_0:class iterator & [line 11]\n n$2=*n$1.val:int [line 11]\n *n$0.val:int =n$2 [line 11]\n " shape="box"] - 6 -> 2 ; -5 [label="5: Constructor Init \n n$0=*&this:class iterator * [line 11]\n n$1=*&__param_0:class iterator & [line 11]\n n$2=*n$1.val:int [line 11]\n *n$0.val:int =n$2 [line 11]\n " shape="box"] + "iterator_iterator3" -> "iterator_iterator2" ; +"iterator_iterator2" [label="2: Exit iterator_iterator \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit iterator_iterator \n " color=yellow style=filled] +"iterator_iterator1" [label="1: Start iterator_iterator\nFormals: this:class iterator * __param_0:class iterator &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] -3 [label="3: Start iterator_iterator\nFormals: this:class iterator * __param_0:class iterator &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] + "iterator_iterator1" -> "iterator_iterator3" ; +"iterator_operator*3" [label="3: Return Stmt \n n$0=*&this:class iterator * [line 18]\n n$1=*n$0.val:int [line 18]\n *&return:int =n$1 [line 18]\n " shape="box"] - 3 -> 5 ; -2 [label="2: Exit iterator_operator++ \n " color=yellow style=filled] + "iterator_operator*3" -> "iterator_operator*2" ; +"iterator_operator*2" [label="2: Exit iterator_operator* \n " color=yellow style=filled] -1 [label="1: Start iterator_operator++\nFormals: this:class iterator * __return_param:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"iterator_operator*1" [label="1: Start iterator_operator*\nFormals: this:class iterator *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 1 -> 7 ; + "iterator_operator*1" -> "iterator_operator*3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/attributes/deprecated_hack.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/attributes/deprecated_hack.cpp.dot index 87b2b87a1..212f19a8a 100644 --- a/infer/tests/codetoanalyze/cpp/shared/attributes/deprecated_hack.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/attributes/deprecated_hack.cpp.dot @@ -1,358 +1,358 @@ /* @generated */ digraph iCFG { -95 [label="95: DeclStmt \n *&a:int =0 [line 140]\n " shape="box"] +"TranslateAsPtr_operator*2" [label="2: Exit TranslateAsPtr_operator* \n " color=yellow style=filled] - 95 -> 94 ; -94 [label="94: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 141]\n n$4=*&t:int * [line 141]\n " shape="box"] +"TranslateAsPtr_operator*1" [label="1: Start TranslateAsPtr_operator*\nFormals: this:int **\nLocals: \n DECLARE_LOCALS(&return); [line 81]\n " color=yellow style=filled] - 94 -> 93 ; -93 [label="93: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 142]\n _fun_TranslateAsPtr_setPtr(&t:int *&,&a:int *) [line 142]\n " shape="box"] + "TranslateAsPtr_operator*1" -> "TranslateAsPtr_operator*2" ; +"TranslateAsPtr_setPtr3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:int ** [line 86]\n n$1=*&v:int * [line 86]\n *n$0:void *=n$1 [line 86]\n " shape="box"] - 93 -> 92 ; -92 [label="92: Return Stmt \n _=*&t:int * [line 143]\n n$1=*&t:int *& [line 143]\n n$2=*n$1:int * [line 143]\n *&return:int =n$2 [line 143]\n " shape="box"] + "TranslateAsPtr_setPtr3" -> "TranslateAsPtr_setPtr2" ; +"TranslateAsPtr_setPtr2" [label="2: Exit TranslateAsPtr_setPtr \n " color=yellow style=filled] - 92 -> 91 ; -91 [label="91: Exit getRef_ok_deref \n " color=yellow style=filled] +"TranslateAsPtr_setPtr1" [label="1: Start TranslateAsPtr_setPtr\nFormals: this:int ** v:int *\nLocals: \n DECLARE_LOCALS(&return); [line 86]\n " color=yellow style=filled] -90 [label="90: Start getRef_ok_deref\nFormals: \nLocals: t:int * a:int \n DECLARE_LOCALS(&return,&t,&a); [line 139]\n " color=yellow style=filled] + "TranslateAsPtr_setPtr1" -> "TranslateAsPtr_setPtr3" ; +"getPtr_null_deref25" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 96]\n n$4=*&t:int * [line 96]\n " shape="box"] - 90 -> 95 ; -89 [label="89: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 134]\n n$4=*&t:int * [line 134]\n " shape="box"] + "getPtr_null_deref25" -> "getPtr_null_deref24" ; +"getPtr_null_deref24" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 97]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 97]\n " shape="box"] - 89 -> 88 ; -88 [label="88: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 135]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 135]\n " shape="box"] + "getPtr_null_deref24" -> "getPtr_null_deref23" ; +"getPtr_null_deref23" [label="3: Return Stmt \n _=*&t:int * [line 98]\n n$1=*&t:int *& [line 98]\n n$2=*n$1:int [line 98]\n *&return:int =n$2 [line 98]\n " shape="box"] - 88 -> 87 ; -87 [label="87: Return Stmt \n _=*&t:int * [line 136]\n n$1=*&t:int *& [line 136]\n n$2=*n$1:int * [line 136]\n *&return:int =n$2 [line 136]\n " shape="box"] + "getPtr_null_deref23" -> "getPtr_null_deref22" ; +"getPtr_null_deref22" [label="2: Exit getPtr_null_deref2 \n " color=yellow style=filled] - 87 -> 86 ; -86 [label="86: Exit getRef_null_deref2 \n " color=yellow style=filled] +"getPtr_null_deref21" [label="1: Start getPtr_null_deref2\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 95]\n " color=yellow style=filled] -85 [label="85: Start getRef_null_deref2\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 133]\n " color=yellow style=filled] + "getPtr_null_deref21" -> "getPtr_null_deref25" ; +"getRef_null_deref25" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 134]\n n$4=*&t:int * [line 134]\n " shape="box"] - 85 -> 89 ; -84 [label="84: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 128]\n n$4=*&t:int * [line 128]\n " shape="box"] + "getRef_null_deref25" -> "getRef_null_deref24" ; +"getRef_null_deref24" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 135]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 135]\n " shape="box"] - 84 -> 83 ; -83 [label="83: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 129]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 129]\n " shape="box"] + "getRef_null_deref24" -> "getRef_null_deref23" ; +"getRef_null_deref23" [label="3: Return Stmt \n _=*&t:int * [line 136]\n n$1=*&t:int *& [line 136]\n n$2=*n$1:int * [line 136]\n *&return:int =n$2 [line 136]\n " shape="box"] - 83 -> 82 ; -82 [label="82: Return Stmt \n _=*&t:int * [line 130]\n n$1=*&t:int *& [line 130]\n n$2=*n$1:int * [line 130]\n *&return:int =n$2 [line 130]\n " shape="box"] + "getRef_null_deref23" -> "getRef_null_deref22" ; +"getRef_null_deref22" [label="2: Exit getRef_null_deref2 \n " color=yellow style=filled] - 82 -> 81 ; -81 [label="81: Exit getRef_null_deref1 \n " color=yellow style=filled] +"getRef_null_deref21" [label="1: Start getRef_null_deref2\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 133]\n " color=yellow style=filled] -80 [label="80: Start getRef_null_deref1\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 127]\n " color=yellow style=filled] + "getRef_null_deref21" -> "getRef_null_deref25" ; +"operator_star_ok_deref5" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 122]\n n$4=*&t:int * [line 122]\n " shape="box"] - 80 -> 84 ; -79 [label="79: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 122]\n n$4=*&t:int * [line 122]\n " shape="box"] + "operator_star_ok_deref5" -> "operator_star_ok_deref4" ; +"operator_star_ok_deref4" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 123]\n _fun_TranslateAsPtr_setPtr(&t:int *&,&a:int *) [line 123]\n " shape="box"] - 79 -> 78 ; -78 [label="78: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 123]\n _fun_TranslateAsPtr_setPtr(&t:int *&,&a:int *) [line 123]\n " shape="box"] + "operator_star_ok_deref4" -> "operator_star_ok_deref3" ; +"operator_star_ok_deref3" [label="3: Return Stmt \n _=*&t:int * [line 124]\n n$1=*&t:int *& [line 124]\n n$2=*n$1:int * [line 124]\n *&return:int =n$2 [line 124]\n " shape="box"] - 78 -> 77 ; -77 [label="77: Return Stmt \n _=*&t:int * [line 124]\n n$1=*&t:int *& [line 124]\n n$2=*n$1:int * [line 124]\n *&return:int =n$2 [line 124]\n " shape="box"] + "operator_star_ok_deref3" -> "operator_star_ok_deref2" ; +"operator_star_ok_deref2" [label="2: Exit operator_star_ok_deref \n " color=yellow style=filled] - 77 -> 76 ; -76 [label="76: Exit operator_star_ok_deref \n " color=yellow style=filled] +"operator_star_ok_deref1" [label="1: Start operator_star_ok_deref\nFormals: \nLocals: t:int * a:int \n DECLARE_LOCALS(&return,&t,&a); [line 120]\n " color=yellow style=filled] -75 [label="75: Start operator_star_ok_deref\nFormals: \nLocals: t:int * a:int \n DECLARE_LOCALS(&return,&t,&a); [line 120]\n " color=yellow style=filled] + "operator_star_ok_deref1" -> "operator_star_ok_deref5" ; +"derefFirstArg23" [label="3: Return Stmt \n n$0=*&b:int * [line 26]\n n$1=*n$0:int [line 26]\n *&return:int =n$1 [line 26]\n " shape="box"] - 75 -> 79 ; -74 [label="74: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 115]\n n$4=*&t:int * [line 115]\n " shape="box"] + "derefFirstArg23" -> "derefFirstArg22" ; +"derefFirstArg22" [label="2: Exit derefFirstArg2 \n " color=yellow style=filled] - 74 -> 73 ; -73 [label="73: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 116]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 116]\n " shape="box"] +"derefFirstArg21" [label="1: Start derefFirstArg2\nFormals: a:int * b:int *\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] - 73 -> 72 ; -72 [label="72: Return Stmt \n _=*&t:int * [line 117]\n n$1=*&t:int *& [line 117]\n n$2=*n$1:int * [line 117]\n *&return:int =n$2 [line 117]\n " shape="box"] + "derefFirstArg21" -> "derefFirstArg23" ; +"TranslateAsPtr_getRef2" [label="2: Exit TranslateAsPtr_getRef \n " color=yellow style=filled] - 72 -> 71 ; -71 [label="71: Exit operator_star_null_deref2 \n " color=yellow style=filled] +"TranslateAsPtr_getRef1" [label="1: Start TranslateAsPtr_getRef\nFormals: this:int ** a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 83]\n " color=yellow style=filled] -70 [label="70: Start operator_star_null_deref2\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 114]\n " color=yellow style=filled] + "TranslateAsPtr_getRef1" -> "TranslateAsPtr_getRef2" ; +"TranslateAsPtr_TranslateAsPtr3" [label="3: Call _fun_TranslateAsPtr_setPtr \n n$0=*&this:int ** [line 76]\n _=*n$0:int * [line 76]\n n$2=*&t:int * [line 76]\n _fun_TranslateAsPtr_setPtr(n$0:int **,n$2:int *) [line 76]\n " shape="box"] - 70 -> 74 ; -69 [label="69: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 109]\n n$3=*&t:int * [line 109]\n " shape="box"] + "TranslateAsPtr_TranslateAsPtr3" -> "TranslateAsPtr_TranslateAsPtr2" ; +"TranslateAsPtr_TranslateAsPtr2" [label="2: Exit TranslateAsPtr_TranslateAsPtr \n " color=yellow style=filled] - 69 -> 68 ; -68 [label="68: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 110]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 110]\n " shape="box"] +"TranslateAsPtr_TranslateAsPtr1" [label="1: Start TranslateAsPtr_TranslateAsPtr\nFormals: this:int ** t:int *\nLocals: \n DECLARE_LOCALS(&return); [line 76]\n " color=yellow style=filled] - 68 -> 67 ; -67 [label="67: Return Stmt \n n$0=*&t:int *& [line 111]\n n$1=*n$0:int * [line 111]\n *&return:int =n$1 [line 111]\n " shape="box"] + "TranslateAsPtr_TranslateAsPtr1" -> "TranslateAsPtr_TranslateAsPtr3" ; +"derefFirstArg33" [label="3: Return Stmt \n n$0=*&b:int * [line 33]\n n$1=*n$0:int [line 33]\n *&return:int =n$1 [line 33]\n " shape="box"] - 67 -> 66 ; -66 [label="66: Exit operator_star_null_deref1 \n " color=yellow style=filled] + "derefFirstArg33" -> "derefFirstArg32" ; +"derefFirstArg32" [label="2: Exit derefFirstArg3 \n " color=yellow style=filled] -65 [label="65: Start operator_star_null_deref1\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 108]\n " color=yellow style=filled] +"derefFirstArg31" [label="1: Start derefFirstArg3\nFormals: a:int * b:int *\nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] - 65 -> 69 ; -64 [label="64: DeclStmt \n *&a:int =0 [line 102]\n " shape="box"] + "derefFirstArg31" -> "derefFirstArg33" ; +"operator_star_null_deref25" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 115]\n n$4=*&t:int * [line 115]\n " shape="box"] - 64 -> 63 ; -63 [label="63: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 103]\n n$4=*&t:int * [line 103]\n " shape="box"] + "operator_star_null_deref25" -> "operator_star_null_deref24" ; +"operator_star_null_deref24" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 116]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 116]\n " shape="box"] - 63 -> 62 ; -62 [label="62: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 104]\n _fun_TranslateAsPtr_setPtr(&t:int *&,&a:int *) [line 104]\n " shape="box"] + "operator_star_null_deref24" -> "operator_star_null_deref23" ; +"operator_star_null_deref23" [label="3: Return Stmt \n _=*&t:int * [line 117]\n n$1=*&t:int *& [line 117]\n n$2=*n$1:int * [line 117]\n *&return:int =n$2 [line 117]\n " shape="box"] - 62 -> 61 ; -61 [label="61: Return Stmt \n _=*&t:int * [line 105]\n n$1=*&t:int *& [line 105]\n n$2=*n$1:int [line 105]\n *&return:int =n$2 [line 105]\n " shape="box"] + "operator_star_null_deref23" -> "operator_star_null_deref22" ; +"operator_star_null_deref22" [label="2: Exit operator_star_null_deref2 \n " color=yellow style=filled] - 61 -> 60 ; -60 [label="60: Exit getPtr_ok_deref \n " color=yellow style=filled] +"operator_star_null_deref21" [label="1: Start operator_star_null_deref2\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 114]\n " color=yellow style=filled] -59 [label="59: Start getPtr_ok_deref\nFormals: \nLocals: t:int * a:int \n DECLARE_LOCALS(&return,&t,&a); [line 101]\n " color=yellow style=filled] + "operator_star_null_deref21" -> "operator_star_null_deref25" ; +"TranslateAsPtr_getPtr2" [label="2: Exit TranslateAsPtr_getPtr \n " color=yellow style=filled] - 59 -> 64 ; -58 [label="58: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 96]\n n$4=*&t:int * [line 96]\n " shape="box"] +"TranslateAsPtr_getPtr1" [label="1: Start TranslateAsPtr_getPtr\nFormals: this:int **\nLocals: \n DECLARE_LOCALS(&return); [line 78]\n " color=yellow style=filled] - 58 -> 57 ; -57 [label="57: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 97]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 97]\n " shape="box"] + "TranslateAsPtr_getPtr1" -> "TranslateAsPtr_getPtr2" ; +"derefFirstArg3_null_deref4" [label="4: DeclStmt \n *&a:int =0 [line 63]\n " shape="box"] - 57 -> 56 ; -56 [label="56: Return Stmt \n _=*&t:int * [line 98]\n n$1=*&t:int *& [line 98]\n n$2=*n$1:int [line 98]\n *&return:int =n$2 [line 98]\n " shape="box"] + "derefFirstArg3_null_deref4" -> "derefFirstArg3_null_deref3" ; +"derefFirstArg3_null_deref3" [label="3: Return Stmt \n n$0=_fun_derefFirstArg3(&a:int *,null:int *) [line 64]\n *&return:int =n$0 [line 64]\n " shape="box"] - 56 -> 55 ; -55 [label="55: Exit getPtr_null_deref2 \n " color=yellow style=filled] + "derefFirstArg3_null_deref3" -> "derefFirstArg3_null_deref2" ; +"derefFirstArg3_null_deref2" [label="2: Exit derefFirstArg3_null_deref \n " color=yellow style=filled] -54 [label="54: Start getPtr_null_deref2\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 95]\n " color=yellow style=filled] +"derefFirstArg3_null_deref1" [label="1: Start derefFirstArg3_null_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 62]\n " color=yellow style=filled] - 54 -> 58 ; -53 [label="53: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 90]\n n$4=*&t:int * [line 90]\n " shape="box"] + "derefFirstArg3_null_deref1" -> "derefFirstArg3_null_deref4" ; +"getRef_null_deref15" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 128]\n n$4=*&t:int * [line 128]\n " shape="box"] - 53 -> 52 ; -52 [label="52: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 91]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 91]\n " shape="box"] + "getRef_null_deref15" -> "getRef_null_deref14" ; +"getRef_null_deref14" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 129]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 129]\n " shape="box"] - 52 -> 51 ; -51 [label="51: Return Stmt \n _=*&t:int * [line 92]\n n$1=*&t:int *& [line 92]\n n$2=*n$1:int [line 92]\n *&return:int =n$2 [line 92]\n " shape="box"] + "getRef_null_deref14" -> "getRef_null_deref13" ; +"getRef_null_deref13" [label="3: Return Stmt \n _=*&t:int * [line 130]\n n$1=*&t:int *& [line 130]\n n$2=*n$1:int * [line 130]\n *&return:int =n$2 [line 130]\n " shape="box"] - 51 -> 50 ; -50 [label="50: Exit getPtr_null_deref1 \n " color=yellow style=filled] + "getRef_null_deref13" -> "getRef_null_deref12" ; +"getRef_null_deref12" [label="2: Exit getRef_null_deref1 \n " color=yellow style=filled] -49 [label="49: Start getPtr_null_deref1\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 89]\n " color=yellow style=filled] +"getRef_null_deref11" [label="1: Start getRef_null_deref1\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 127]\n " color=yellow style=filled] - 49 -> 53 ; -48 [label="48: Exit TranslateAsPtr_getRef \n " color=yellow style=filled] + "getRef_null_deref11" -> "getRef_null_deref15" ; +"derefFirstArg_null_deref4" [label="4: DeclStmt \n *&a:int =0 [line 38]\n " shape="box"] -47 [label="47: Start TranslateAsPtr_getRef\nFormals: this:int ** a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 83]\n " color=yellow style=filled] + "derefFirstArg_null_deref4" -> "derefFirstArg_null_deref3" ; +"derefFirstArg_null_deref3" [label="3: Return Stmt \n n$0=*null:int * [line 39]\n *&return:int =n$0 [line 39]\n " shape="box"] - 47 -> 48 ; -46 [label="46: Exit TranslateAsPtr_getRef \n " color=yellow style=filled] + "derefFirstArg_null_deref3" -> "derefFirstArg_null_deref2" ; +"derefFirstArg_null_deref2" [label="2: Exit derefFirstArg_null_deref \n " color=yellow style=filled] -45 [label="45: Start TranslateAsPtr_getRef\nFormals: this:int **\nLocals: \n DECLARE_LOCALS(&return); [line 82]\n " color=yellow style=filled] +"derefFirstArg_null_deref1" [label="1: Start derefFirstArg_null_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 37]\n " color=yellow style=filled] - 45 -> 46 ; -44 [label="44: Exit TranslateAsPtr_operator* \n " color=yellow style=filled] + "derefFirstArg_null_deref1" -> "derefFirstArg_null_deref4" ; +"operator_star_null_deref15" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 109]\n n$3=*&t:int * [line 109]\n " shape="box"] -43 [label="43: Start TranslateAsPtr_operator*\nFormals: this:int **\nLocals: \n DECLARE_LOCALS(&return); [line 81]\n " color=yellow style=filled] + "operator_star_null_deref15" -> "operator_star_null_deref14" ; +"operator_star_null_deref14" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 110]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 110]\n " shape="box"] - 43 -> 44 ; -42 [label="42: Exit TranslateAsPtr_getPtr \n " color=yellow style=filled] + "operator_star_null_deref14" -> "operator_star_null_deref13" ; +"operator_star_null_deref13" [label="3: Return Stmt \n n$0=*&t:int *& [line 111]\n n$1=*n$0:int * [line 111]\n *&return:int =n$1 [line 111]\n " shape="box"] -41 [label="41: Start TranslateAsPtr_getPtr\nFormals: this:int ** a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 79]\n " color=yellow style=filled] + "operator_star_null_deref13" -> "operator_star_null_deref12" ; +"operator_star_null_deref12" [label="2: Exit operator_star_null_deref1 \n " color=yellow style=filled] - 41 -> 42 ; -40 [label="40: Exit TranslateAsPtr_getPtr \n " color=yellow style=filled] +"operator_star_null_deref11" [label="1: Start operator_star_null_deref1\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 108]\n " color=yellow style=filled] -39 [label="39: Start TranslateAsPtr_getPtr\nFormals: this:int **\nLocals: \n DECLARE_LOCALS(&return); [line 78]\n " color=yellow style=filled] + "operator_star_null_deref11" -> "operator_star_null_deref15" ; +"TranslateAsPtr_getRef2" [label="2: Exit TranslateAsPtr_getRef \n " color=yellow style=filled] - 39 -> 40 ; -38 [label="38: Call _fun_TranslateAsPtr_setPtr \n n$0=*&this:int ** [line 76]\n _=*n$0:int * [line 76]\n n$2=*&t:int * [line 76]\n _fun_TranslateAsPtr_setPtr(n$0:int **,n$2:int *) [line 76]\n " shape="box"] +"TranslateAsPtr_getRef1" [label="1: Start TranslateAsPtr_getRef\nFormals: this:int **\nLocals: \n DECLARE_LOCALS(&return); [line 82]\n " color=yellow style=filled] - 38 -> 34 ; -37 [label="37: BinaryOperatorStmt: Assign \n n$0=*&this:int ** [line 86]\n n$1=*&v:int * [line 86]\n *n$0:void *=n$1 [line 86]\n " shape="box"] + "TranslateAsPtr_getRef1" -> "TranslateAsPtr_getRef2" ; +"derefFirstArg2_null_deref4" [label="4: DeclStmt \n *&a:int =0 [line 48]\n " shape="box"] - 37 -> 36 ; -36 [label="36: Exit TranslateAsPtr_setPtr \n " color=yellow style=filled] + "derefFirstArg2_null_deref4" -> "derefFirstArg2_null_deref3" ; +"derefFirstArg2_null_deref3" [label="3: Return Stmt \n n$0=*null:int * [line 49]\n *&return:int =n$0 [line 49]\n " shape="box"] -35 [label="35: Start TranslateAsPtr_setPtr\nFormals: this:int ** v:int *\nLocals: \n DECLARE_LOCALS(&return); [line 86]\n " color=yellow style=filled] + "derefFirstArg2_null_deref3" -> "derefFirstArg2_null_deref2" ; +"derefFirstArg2_null_deref2" [label="2: Exit derefFirstArg2_null_deref \n " color=yellow style=filled] - 35 -> 37 ; -34 [label="34: Exit TranslateAsPtr_TranslateAsPtr \n " color=yellow style=filled] +"derefFirstArg2_null_deref1" [label="1: Start derefFirstArg2_null_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 47]\n " color=yellow style=filled] -33 [label="33: Start TranslateAsPtr_TranslateAsPtr\nFormals: this:int ** t:int *\nLocals: \n DECLARE_LOCALS(&return); [line 76]\n " color=yellow style=filled] + "derefFirstArg2_null_deref1" -> "derefFirstArg2_null_deref4" ; +"getRef_ok_deref6" [label="6: DeclStmt \n *&a:int =0 [line 140]\n " shape="box"] - 33 -> 38 ; -32 [label="32: DeclStmt \n *&a:int =0 [line 63]\n " shape="box"] + "getRef_ok_deref6" -> "getRef_ok_deref5" ; +"getRef_ok_deref5" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 141]\n n$4=*&t:int * [line 141]\n " shape="box"] - 32 -> 31 ; -31 [label="31: Return Stmt \n n$0=_fun_derefFirstArg3(&a:int *,null:int *) [line 64]\n *&return:int =n$0 [line 64]\n " shape="box"] + "getRef_ok_deref5" -> "getRef_ok_deref4" ; +"getRef_ok_deref4" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 142]\n _fun_TranslateAsPtr_setPtr(&t:int *&,&a:int *) [line 142]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Exit derefFirstArg3_null_deref \n " color=yellow style=filled] + "getRef_ok_deref4" -> "getRef_ok_deref3" ; +"getRef_ok_deref3" [label="3: Return Stmt \n _=*&t:int * [line 143]\n n$1=*&t:int *& [line 143]\n n$2=*n$1:int * [line 143]\n *&return:int =n$2 [line 143]\n " shape="box"] -29 [label="29: Start derefFirstArg3_null_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 62]\n " color=yellow style=filled] + "getRef_ok_deref3" -> "getRef_ok_deref2" ; +"getRef_ok_deref2" [label="2: Exit getRef_ok_deref \n " color=yellow style=filled] - 29 -> 32 ; -28 [label="28: DeclStmt \n *&a:int =0 [line 58]\n " shape="box"] +"getRef_ok_deref1" [label="1: Start getRef_ok_deref\nFormals: \nLocals: t:int * a:int \n DECLARE_LOCALS(&return,&t,&a); [line 139]\n " color=yellow style=filled] - 28 -> 27 ; -27 [label="27: Return Stmt \n n$0=_fun_derefFirstArg3(null:int *,&a:int *) [line 59]\n *&return:int =n$0 [line 59]\n " shape="box"] + "getRef_ok_deref1" -> "getRef_ok_deref6" ; +"derefFirstArg_ok_deref4" [label="4: DeclStmt \n *&a:int =0 [line 43]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Exit derefFirstArg3_ok_deref \n " color=yellow style=filled] + "derefFirstArg_ok_deref4" -> "derefFirstArg_ok_deref3" ; +"derefFirstArg_ok_deref3" [label="3: Return Stmt \n n$0=*&a:int * [line 44]\n *&return:int =n$0 [line 44]\n " shape="box"] -25 [label="25: Start derefFirstArg3_ok_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 57]\n " color=yellow style=filled] + "derefFirstArg_ok_deref3" -> "derefFirstArg_ok_deref2" ; +"derefFirstArg_ok_deref2" [label="2: Exit derefFirstArg_ok_deref \n " color=yellow style=filled] - 25 -> 28 ; -24 [label="24: DeclStmt \n *&a:int =0 [line 53]\n " shape="box"] +"derefFirstArg_ok_deref1" [label="1: Start derefFirstArg_ok_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 42]\n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Return Stmt \n n$0=*&a:int * [line 54]\n *&return:int =n$0 [line 54]\n " shape="box"] + "derefFirstArg_ok_deref1" -> "derefFirstArg_ok_deref4" ; +"getPtr_null_deref15" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 90]\n n$4=*&t:int * [line 90]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Exit derefFirstArg2_ok_deref \n " color=yellow style=filled] + "getPtr_null_deref15" -> "getPtr_null_deref14" ; +"getPtr_null_deref14" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 91]\n _fun_TranslateAsPtr_setPtr(&t:int *&,null:int *) [line 91]\n " shape="box"] -21 [label="21: Start derefFirstArg2_ok_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 52]\n " color=yellow style=filled] + "getPtr_null_deref14" -> "getPtr_null_deref13" ; +"getPtr_null_deref13" [label="3: Return Stmt \n _=*&t:int * [line 92]\n n$1=*&t:int *& [line 92]\n n$2=*n$1:int [line 92]\n *&return:int =n$2 [line 92]\n " shape="box"] - 21 -> 24 ; -20 [label="20: DeclStmt \n *&a:int =0 [line 48]\n " shape="box"] + "getPtr_null_deref13" -> "getPtr_null_deref12" ; +"getPtr_null_deref12" [label="2: Exit getPtr_null_deref1 \n " color=yellow style=filled] - 20 -> 19 ; -19 [label="19: Return Stmt \n n$0=*null:int * [line 49]\n *&return:int =n$0 [line 49]\n " shape="box"] +"getPtr_null_deref11" [label="1: Start getPtr_null_deref1\nFormals: \nLocals: t:int * \n DECLARE_LOCALS(&return,&t); [line 89]\n " color=yellow style=filled] - 19 -> 18 ; -18 [label="18: Exit derefFirstArg2_null_deref \n " color=yellow style=filled] + "getPtr_null_deref11" -> "getPtr_null_deref15" ; +"derefFirstArg2_ok_deref4" [label="4: DeclStmt \n *&a:int =0 [line 53]\n " shape="box"] -17 [label="17: Start derefFirstArg2_null_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 47]\n " color=yellow style=filled] + "derefFirstArg2_ok_deref4" -> "derefFirstArg2_ok_deref3" ; +"derefFirstArg2_ok_deref3" [label="3: Return Stmt \n n$0=*&a:int * [line 54]\n *&return:int =n$0 [line 54]\n " shape="box"] - 17 -> 20 ; -16 [label="16: DeclStmt \n *&a:int =0 [line 43]\n " shape="box"] + "derefFirstArg2_ok_deref3" -> "derefFirstArg2_ok_deref2" ; +"derefFirstArg2_ok_deref2" [label="2: Exit derefFirstArg2_ok_deref \n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Return Stmt \n n$0=*&a:int * [line 44]\n *&return:int =n$0 [line 44]\n " shape="box"] +"derefFirstArg2_ok_deref1" [label="1: Start derefFirstArg2_ok_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 52]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit derefFirstArg_ok_deref \n " color=yellow style=filled] + "derefFirstArg2_ok_deref1" -> "derefFirstArg2_ok_deref4" ; +"getPtr_ok_deref6" [label="6: DeclStmt \n *&a:int =0 [line 102]\n " shape="box"] -13 [label="13: Start derefFirstArg_ok_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 42]\n " color=yellow style=filled] + "getPtr_ok_deref6" -> "getPtr_ok_deref5" ; +"getPtr_ok_deref5" [label="5: DeclStmt \n _fun_TranslateAsPtr_TranslateAsPtr(&t:int **,null:int *) [line 103]\n n$4=*&t:int * [line 103]\n " shape="box"] - 13 -> 16 ; -12 [label="12: DeclStmt \n *&a:int =0 [line 38]\n " shape="box"] + "getPtr_ok_deref5" -> "getPtr_ok_deref4" ; +"getPtr_ok_deref4" [label="4: Call _fun_TranslateAsPtr_setPtr \n _=*&t:int * [line 104]\n _fun_TranslateAsPtr_setPtr(&t:int *&,&a:int *) [line 104]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Return Stmt \n n$0=*null:int * [line 39]\n *&return:int =n$0 [line 39]\n " shape="box"] + "getPtr_ok_deref4" -> "getPtr_ok_deref3" ; +"getPtr_ok_deref3" [label="3: Return Stmt \n _=*&t:int * [line 105]\n n$1=*&t:int *& [line 105]\n n$2=*n$1:int [line 105]\n *&return:int =n$2 [line 105]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit derefFirstArg_null_deref \n " color=yellow style=filled] + "getPtr_ok_deref3" -> "getPtr_ok_deref2" ; +"getPtr_ok_deref2" [label="2: Exit getPtr_ok_deref \n " color=yellow style=filled] -9 [label="9: Start derefFirstArg_null_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 37]\n " color=yellow style=filled] +"getPtr_ok_deref1" [label="1: Start getPtr_ok_deref\nFormals: \nLocals: t:int * a:int \n DECLARE_LOCALS(&return,&t,&a); [line 101]\n " color=yellow style=filled] - 9 -> 12 ; -8 [label="8: Return Stmt \n n$0=*&b:int * [line 33]\n n$1=*n$0:int [line 33]\n *&return:int =n$1 [line 33]\n " shape="box"] + "getPtr_ok_deref1" -> "getPtr_ok_deref6" ; +"TranslateAsPtr_getPtr2" [label="2: Exit TranslateAsPtr_getPtr \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit derefFirstArg3 \n " color=yellow style=filled] +"TranslateAsPtr_getPtr1" [label="1: Start TranslateAsPtr_getPtr\nFormals: this:int ** a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 79]\n " color=yellow style=filled] -6 [label="6: Start derefFirstArg3\nFormals: a:int * b:int *\nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] + "TranslateAsPtr_getPtr1" -> "TranslateAsPtr_getPtr2" ; +"derefFirstArg3_ok_deref4" [label="4: DeclStmt \n *&a:int =0 [line 58]\n " shape="box"] - 6 -> 8 ; -5 [label="5: Return Stmt \n n$0=*&b:int * [line 26]\n n$1=*n$0:int [line 26]\n *&return:int =n$1 [line 26]\n " shape="box"] + "derefFirstArg3_ok_deref4" -> "derefFirstArg3_ok_deref3" ; +"derefFirstArg3_ok_deref3" [label="3: Return Stmt \n n$0=_fun_derefFirstArg3(null:int *,&a:int *) [line 59]\n *&return:int =n$0 [line 59]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit derefFirstArg2 \n " color=yellow style=filled] + "derefFirstArg3_ok_deref3" -> "derefFirstArg3_ok_deref2" ; +"derefFirstArg3_ok_deref2" [label="2: Exit derefFirstArg3_ok_deref \n " color=yellow style=filled] -3 [label="3: Start derefFirstArg2\nFormals: a:int * b:int *\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] +"derefFirstArg3_ok_deref1" [label="1: Start derefFirstArg3_ok_deref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 57]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit derefFirstArg \n " color=yellow style=filled] + "derefFirstArg3_ok_deref1" -> "derefFirstArg3_ok_deref4" ; +"derefFirstArg2" [label="2: Exit derefFirstArg \n " color=yellow style=filled] -1 [label="1: Start derefFirstArg\nFormals: a:int * b:int *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"derefFirstArg1" [label="1: Start derefFirstArg\nFormals: a:int * b:int *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 1 -> 2 ; + "derefFirstArg1" -> "derefFirstArg2" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/conditional/binary_conditional.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/conditional/binary_conditional.cpp.dot index a047a9a48..ddcd79c78 100644 --- a/infer/tests/codetoanalyze/cpp/shared/conditional/binary_conditional.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/conditional/binary_conditional.cpp.dot @@ -1,134 +1,134 @@ /* @generated */ digraph iCFG { -34 [label="34: DeclStmt \n _fun_binary_conditional::X_X(&a:class binary_conditional::X *) [line 28]\n " shape="box"] +"binary_conditional::X_operator_bool3" [label="3: Return Stmt \n *&return:_Bool =1 [line 13]\n " shape="box"] - 34 -> 28 ; -33 [label="33: DeclStmt \n n$7=*&0$?%__sil_tmpSIL_temp_conditional___n$1:class binary_conditional::X [line 29]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X =n$7 [line 29]\n _fun_binary_conditional::X_X(&x:class binary_conditional::X *,&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X &) [line 29]\n " shape="box"] + "binary_conditional::X_operator_bool3" -> "binary_conditional::X_operator_bool2" ; +"binary_conditional::X_operator_bool2" [label="2: Exit binary_conditional::X_operator_bool \n " color=yellow style=filled] - 33 -> 26 ; -32 [label="32: ConditinalStmt Branch \n _fun_binary_conditional::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *,&a:class binary_conditional::X &) [line 29]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 29]\n " shape="box"] +"binary_conditional::X_operator_bool1" [label="1: Start binary_conditional::X_operator_bool\nFormals: this:class binary_conditional::X *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 32 -> 27 ; -31 [label="31: ConditinalStmt Branch \n _fun_binary_conditional::getX(&0$?%__sil_tmpSIL_materialize_temp__n$5:class binary_conditional::X *) [line 29]\n _fun_binary_conditional::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *,&0$?%__sil_tmpSIL_materialize_temp__n$5:class binary_conditional::X &) [line 29]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 29]\n " shape="box"] + "binary_conditional::X_operator_bool1" -> "binary_conditional::X_operator_bool3" ; +"binary_conditional::X_X2" [label="2: Exit binary_conditional::X_X \n " color=yellow style=filled] - 31 -> 27 ; -30 [label="30: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 29]\n " shape="invhouse"] +"binary_conditional::X_X1" [label="1: Start binary_conditional::X_X\nFormals: this:class binary_conditional::X * __param_0:class binary_conditional::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 30 -> 32 ; -29 [label="29: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 29]\n " shape="invhouse"] + "binary_conditional::X_X1" -> "binary_conditional::X_X2" ; +"binary_conditional::getX4" [label="4: DeclStmt \n _fun_binary_conditional::X_X(&x:class binary_conditional::X *) [line 17]\n " shape="box"] - 29 -> 31 ; -28 [label="28: Call _fun_binary_conditional::X_operator_bool \n _fun_binary_conditional::getX(&0$?%__sil_tmp__temp_return_n$3:class binary_conditional::X *) [line 29]\n n$4=_fun_binary_conditional::X_operator_bool(&0$?%__sil_tmp__temp_return_n$3:class binary_conditional::X &) [line 29]\n " shape="box"] + "binary_conditional::getX4" -> "binary_conditional::getX3" ; +"binary_conditional::getX3" [label="3: Return Stmt \n n$0=*&__return_param:class binary_conditional::X * [line 18]\n _fun_binary_conditional::X_X(n$0:class binary_conditional::X *,&x:class binary_conditional::X &) [line 18]\n " shape="box"] - 28 -> 29 ; - 28 -> 30 ; -27 [label="27: + \n " ] + "binary_conditional::getX3" -> "binary_conditional::getX2" ; +"binary_conditional::getX2" [label="2: Exit binary_conditional::getX \n " color=yellow style=filled] - 27 -> 33 ; -26 [label="26: Exit binary_conditional::conditional \n " color=yellow style=filled] +"binary_conditional::getX1" [label="1: Start binary_conditional::getX\nFormals: __return_param:class binary_conditional::X *\nLocals: x:class binary_conditional::X \n DECLARE_LOCALS(&return,&x); [line 16]\n " color=yellow style=filled] -25 [label="25: Start binary_conditional::conditional\nFormals: \nLocals: x:class binary_conditional::X 0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X 0$?%__sil_tmpSIL_temp_conditional___n$1:class binary_conditional::X 0$?%__sil_tmp__temp_return_n$3:class binary_conditional::X 0$?%__sil_tmpSIL_materialize_temp__n$5:class binary_conditional::X a:class binary_conditional::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$0,&0$?%__sil_tmpSIL_temp_conditional___n$1,&0$?%__sil_tmp__temp_return_n$3,&0$?%__sil_tmpSIL_materialize_temp__n$5,&a); [line 27]\n " color=yellow style=filled] + "binary_conditional::getX1" -> "binary_conditional::getX4" ; +"binary_conditional::X_X2" [label="2: Exit binary_conditional::X_X \n " color=yellow style=filled] - 25 -> 34 ; -24 [label="24: DeclStmt \n _fun_binary_conditional::X_X(&a:class binary_conditional::X *) [line 23]\n " shape="box"] +"binary_conditional::X_X1" [label="1: Start binary_conditional::X_X\nFormals: this:class binary_conditional::X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 24 -> 22 ; -23 [label="23: DeclStmt \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$2:class binary_conditional::X [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X =n$5 [line 24]\n _fun_binary_conditional::X_X(&x:class binary_conditional::X *,&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X &) [line 24]\n " shape="box"] + "binary_conditional::X_X1" -> "binary_conditional::X_X2" ; +"binary_conditional::conditional10" [label="10: DeclStmt \n _fun_binary_conditional::X_X(&a:class binary_conditional::X *) [line 28]\n " shape="box"] - 23 -> 15 ; -22 [label="22: BinaryConditinalStmt Init \n _fun_binary_conditional::getX(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *) [line 24]\n " shape="box"] + "binary_conditional::conditional10" -> "binary_conditional::conditional4" ; +"binary_conditional::conditional9" [label="9: DeclStmt \n n$7=*&0$?%__sil_tmpSIL_temp_conditional___n$1:class binary_conditional::X [line 29]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X =n$7 [line 29]\n _fun_binary_conditional::X_X(&x:class binary_conditional::X *,&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X &) [line 29]\n " shape="box"] - 22 -> 17 ; -21 [label="21: ConditinalStmt Branch \n _fun_binary_conditional::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *,&a:class binary_conditional::X &) [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$2:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 24]\n " shape="box"] + "binary_conditional::conditional9" -> "binary_conditional::conditional2" ; +"binary_conditional::conditional8" [label="8: ConditinalStmt Branch \n _fun_binary_conditional::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *,&a:class binary_conditional::X &) [line 29]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 29]\n " shape="box"] - 21 -> 16 ; -20 [label="20: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_materialize_temp__n$4:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 24]\n _fun_binary_conditional::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *,&0$?%__sil_tmpSIL_materialize_temp__n$4:class binary_conditional::X &) [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$2:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 24]\n " shape="box"] + "binary_conditional::conditional8" -> "binary_conditional::conditional3" ; +"binary_conditional::conditional7" [label="7: ConditinalStmt Branch \n _fun_binary_conditional::getX(&0$?%__sil_tmpSIL_materialize_temp__n$5:class binary_conditional::X *) [line 29]\n _fun_binary_conditional::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *,&0$?%__sil_tmpSIL_materialize_temp__n$5:class binary_conditional::X &) [line 29]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 29]\n " shape="box"] - 20 -> 16 ; -19 [label="19: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 24]\n " shape="invhouse"] + "binary_conditional::conditional7" -> "binary_conditional::conditional3" ; +"binary_conditional::conditional6" [label="6: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 29]\n " shape="invhouse"] - 19 -> 21 ; -18 [label="18: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 24]\n " shape="invhouse"] + "binary_conditional::conditional6" -> "binary_conditional::conditional8" ; +"binary_conditional::conditional5" [label="5: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 29]\n " shape="invhouse"] - 18 -> 20 ; -17 [label="17: Call _fun_binary_conditional::X_operator_bool \n n$3=_fun_binary_conditional::X_operator_bool(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X &) [line 24]\n " shape="box"] + "binary_conditional::conditional5" -> "binary_conditional::conditional7" ; +"binary_conditional::conditional4" [label="4: Call _fun_binary_conditional::X_operator_bool \n _fun_binary_conditional::getX(&0$?%__sil_tmp__temp_return_n$3:class binary_conditional::X *) [line 29]\n n$4=_fun_binary_conditional::X_operator_bool(&0$?%__sil_tmp__temp_return_n$3:class binary_conditional::X &) [line 29]\n " shape="box"] - 17 -> 18 ; - 17 -> 19 ; -16 [label="16: + \n " ] + "binary_conditional::conditional4" -> "binary_conditional::conditional5" ; + "binary_conditional::conditional4" -> "binary_conditional::conditional6" ; +"binary_conditional::conditional3" [label="3: + \n " ] - 16 -> 23 ; -15 [label="15: Exit binary_conditional::binaryConditional \n " color=yellow style=filled] + "binary_conditional::conditional3" -> "binary_conditional::conditional9" ; +"binary_conditional::conditional2" [label="2: Exit binary_conditional::conditional \n " color=yellow style=filled] -14 [label="14: Start binary_conditional::binaryConditional\nFormals: \nLocals: x:class binary_conditional::X 0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X 0$?%__sil_tmpSIL_temp_conditional___n$2:class binary_conditional::X 0$?%__sil_tmpSIL_materialize_temp__n$4:class binary_conditional::X a:class binary_conditional::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_materialize_temp__n$4,&a); [line 22]\n " color=yellow style=filled] +"binary_conditional::conditional1" [label="1: Start binary_conditional::conditional\nFormals: \nLocals: x:class binary_conditional::X 0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X 0$?%__sil_tmpSIL_temp_conditional___n$1:class binary_conditional::X 0$?%__sil_tmp__temp_return_n$3:class binary_conditional::X 0$?%__sil_tmpSIL_materialize_temp__n$5:class binary_conditional::X a:class binary_conditional::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$0,&0$?%__sil_tmpSIL_temp_conditional___n$1,&0$?%__sil_tmp__temp_return_n$3,&0$?%__sil_tmpSIL_materialize_temp__n$5,&a); [line 27]\n " color=yellow style=filled] - 14 -> 24 ; -13 [label="13: DeclStmt \n _fun_binary_conditional::X_X(&x:class binary_conditional::X *) [line 17]\n " shape="box"] + "binary_conditional::conditional1" -> "binary_conditional::conditional10" ; +"binary_conditional::binaryConditional11" [label="11: DeclStmt \n _fun_binary_conditional::X_X(&a:class binary_conditional::X *) [line 23]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Return Stmt \n n$0=*&__return_param:class binary_conditional::X * [line 18]\n _fun_binary_conditional::X_X(n$0:class binary_conditional::X *,&x:class binary_conditional::X &) [line 18]\n " shape="box"] + "binary_conditional::binaryConditional11" -> "binary_conditional::binaryConditional9" ; +"binary_conditional::binaryConditional10" [label="10: DeclStmt \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$2:class binary_conditional::X [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X =n$5 [line 24]\n _fun_binary_conditional::X_X(&x:class binary_conditional::X *,&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X &) [line 24]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit binary_conditional::getX \n " color=yellow style=filled] + "binary_conditional::binaryConditional10" -> "binary_conditional::binaryConditional2" ; +"binary_conditional::binaryConditional9" [label="9: BinaryConditinalStmt Init \n _fun_binary_conditional::getX(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *) [line 24]\n " shape="box"] -10 [label="10: Start binary_conditional::getX\nFormals: __return_param:class binary_conditional::X *\nLocals: x:class binary_conditional::X \n DECLARE_LOCALS(&return,&x); [line 16]\n " color=yellow style=filled] + "binary_conditional::binaryConditional9" -> "binary_conditional::binaryConditional4" ; +"binary_conditional::binaryConditional8" [label="8: ConditinalStmt Branch \n _fun_binary_conditional::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *,&a:class binary_conditional::X &) [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$2:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 24]\n " shape="box"] - 10 -> 13 ; -9 [label="9: Exit binary_conditional::X_X \n " color=yellow style=filled] + "binary_conditional::binaryConditional8" -> "binary_conditional::binaryConditional3" ; +"binary_conditional::binaryConditional7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_materialize_temp__n$4:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 24]\n _fun_binary_conditional::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X *,&0$?%__sil_tmpSIL_materialize_temp__n$4:class binary_conditional::X &) [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$2:class binary_conditional::X =&0$?%__sil_tmpSIL_materialize_temp__n$0 [line 24]\n " shape="box"] -8 [label="8: Start binary_conditional::X_X\nFormals: this:class binary_conditional::X * __param_0:class binary_conditional::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] + "binary_conditional::binaryConditional7" -> "binary_conditional::binaryConditional3" ; +"binary_conditional::binaryConditional6" [label="6: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 24]\n " shape="invhouse"] - 8 -> 9 ; -7 [label="7: Exit binary_conditional::X_X \n " color=yellow style=filled] + "binary_conditional::binaryConditional6" -> "binary_conditional::binaryConditional8" ; +"binary_conditional::binaryConditional5" [label="5: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 24]\n " shape="invhouse"] -6 [label="6: Start binary_conditional::X_X\nFormals: this:class binary_conditional::X * __param_0:class binary_conditional::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] + "binary_conditional::binaryConditional5" -> "binary_conditional::binaryConditional7" ; +"binary_conditional::binaryConditional4" [label="4: Call _fun_binary_conditional::X_operator_bool \n n$3=_fun_binary_conditional::X_operator_bool(&0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X &) [line 24]\n " shape="box"] - 6 -> 7 ; -5 [label="5: Exit binary_conditional::X_X \n " color=yellow style=filled] + "binary_conditional::binaryConditional4" -> "binary_conditional::binaryConditional5" ; + "binary_conditional::binaryConditional4" -> "binary_conditional::binaryConditional6" ; +"binary_conditional::binaryConditional3" [label="3: + \n " ] -4 [label="4: Start binary_conditional::X_X\nFormals: this:class binary_conditional::X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] + "binary_conditional::binaryConditional3" -> "binary_conditional::binaryConditional10" ; +"binary_conditional::binaryConditional2" [label="2: Exit binary_conditional::binaryConditional \n " color=yellow style=filled] - 4 -> 5 ; -3 [label="3: Return Stmt \n *&return:_Bool =1 [line 13]\n " shape="box"] +"binary_conditional::binaryConditional1" [label="1: Start binary_conditional::binaryConditional\nFormals: \nLocals: x:class binary_conditional::X 0$?%__sil_tmpSIL_materialize_temp__n$0:class binary_conditional::X 0$?%__sil_tmpSIL_temp_conditional___n$2:class binary_conditional::X 0$?%__sil_tmpSIL_materialize_temp__n$4:class binary_conditional::X a:class binary_conditional::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$0,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_materialize_temp__n$4,&a); [line 22]\n " color=yellow style=filled] - 3 -> 2 ; -2 [label="2: Exit binary_conditional::X_operator_bool \n " color=yellow style=filled] + "binary_conditional::binaryConditional1" -> "binary_conditional::binaryConditional11" ; +"binary_conditional::X_X2" [label="2: Exit binary_conditional::X_X \n " color=yellow style=filled] -1 [label="1: Start binary_conditional::X_operator_bool\nFormals: this:class binary_conditional::X *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"binary_conditional::X_X1" [label="1: Start binary_conditional::X_X\nFormals: this:class binary_conditional::X * __param_0:class binary_conditional::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "binary_conditional::X_X1" -> "binary_conditional::X_X2" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/conditional/lvalue_conditional.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/conditional/lvalue_conditional.cpp.dot index 3f0bb2957..6006cdb1b 100644 --- a/infer/tests/codetoanalyze/cpp/shared/conditional/lvalue_conditional.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/conditional/lvalue_conditional.cpp.dot @@ -1,255 +1,255 @@ /* @generated */ digraph iCFG { -65 [label="65: Return Stmt \n n$0=_fun_div_temp_lvalue(0:int ,1:int ) [line 47]\n *&return:int =n$0 [line 47]\n " shape="box"] +"div1_assign_conditional3" [label="3: Return Stmt \n n$0=_fun_assign_conditional(1:int ) [line 43]\n *&return:int =(1 / n$0) [line 43]\n " shape="box"] - 65 -> 64 ; -64 [label="64: Exit div1_temp_lvalue \n " color=yellow style=filled] + "div1_assign_conditional3" -> "div1_assign_conditional2" ; +"div1_assign_conditional2" [label="2: Exit div1_assign_conditional \n " color=yellow style=filled] -63 [label="63: Start div1_temp_lvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] +"div1_assign_conditional1" [label="1: Start div1_assign_conditional\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 43]\n " color=yellow style=filled] - 63 -> 65 ; -62 [label="62: Return Stmt \n n$0=_fun_div_temp_lvalue(1:int ,0:int ) [line 45]\n *&return:int =n$0 [line 45]\n " shape="box"] + "div1_assign_conditional1" -> "div1_assign_conditional3" ; +"choose_lvalue11" [label="11: DeclStmt \n *&v1:int =0 [line 11]\n " shape="box"] - 62 -> 61 ; -61 [label="61: Exit div0_temp_lvalue \n " color=yellow style=filled] + "choose_lvalue11" -> "choose_lvalue10" ; +"choose_lvalue10" [label="10: DeclStmt \n *&v2:int =1 [line 11]\n " shape="box"] -60 [label="60: Start div0_temp_lvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 45]\n " color=yellow style=filled] + "choose_lvalue10" -> "choose_lvalue5" ; + "choose_lvalue10" -> "choose_lvalue6" ; +"choose_lvalue9" [label="9: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int & [line 12]\n n$4=*n$3:int [line 12]\n *&v3:int =n$4 [line 12]\n " shape="box"] - 60 -> 62 ; -59 [label="59: Return Stmt \n n$0=_fun_assign_conditional(1:int ) [line 43]\n *&return:int =(1 / n$0) [line 43]\n " shape="box"] + "choose_lvalue9" -> "choose_lvalue3" ; +"choose_lvalue8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int &=&v2 [line 12]\n " shape="box"] - 59 -> 58 ; -58 [label="58: Exit div1_assign_conditional \n " color=yellow style=filled] + "choose_lvalue8" -> "choose_lvalue4" ; +"choose_lvalue7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int &=&v1 [line 12]\n " shape="box"] -57 [label="57: Start div1_assign_conditional\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 43]\n " color=yellow style=filled] + "choose_lvalue7" -> "choose_lvalue4" ; +"choose_lvalue6" [label="6: Prune (false branch) \n n$2=*&a:int [line 12]\n PRUNE((n$2 == 0), false); [line 12]\n " shape="invhouse"] - 57 -> 59 ; -56 [label="56: Return Stmt \n n$0=_fun_assign_conditional(0:int ) [line 41]\n *&return:int =(1 / n$0) [line 41]\n " shape="box"] + "choose_lvalue6" -> "choose_lvalue8" ; +"choose_lvalue5" [label="5: Prune (true branch) \n n$2=*&a:int [line 12]\n PRUNE((n$2 != 0), true); [line 12]\n " shape="invhouse"] - 56 -> 55 ; -55 [label="55: Exit div0_assign_conditional \n " color=yellow style=filled] + "choose_lvalue5" -> "choose_lvalue7" ; +"choose_lvalue4" [label="4: + \n " ] -54 [label="54: Start div0_assign_conditional\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 41]\n " color=yellow style=filled] + "choose_lvalue4" -> "choose_lvalue9" ; +"choose_lvalue3" [label="3: Return Stmt \n n$0=*&v3:int [line 13]\n *&return:int =n$0 [line 13]\n " shape="box"] - 54 -> 56 ; -53 [label="53: Return Stmt \n n$0=_fun_choose_rvalue(0:int ) [line 39]\n *&return:int =(1 / n$0) [line 39]\n " shape="box"] + "choose_lvalue3" -> "choose_lvalue2" ; +"choose_lvalue2" [label="2: Exit choose_lvalue \n " color=yellow style=filled] - 53 -> 52 ; -52 [label="52: Exit div1_choose_rvalue \n " color=yellow style=filled] +"choose_lvalue1" [label="1: Start choose_lvalue\nFormals: a:int \nLocals: v3:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int & v2:int v1:int \n DECLARE_LOCALS(&return,&v3,&0$?%__sil_tmpSIL_temp_conditional___n$1,&v2,&v1); [line 10]\n " color=yellow style=filled] -51 [label="51: Start div1_choose_rvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 39]\n " color=yellow style=filled] + "choose_lvalue1" -> "choose_lvalue11" ; +"assign_conditional11" [label="11: DeclStmt \n *&v1:int =0 [line 23]\n " shape="box"] - 51 -> 53 ; -50 [label="50: Return Stmt \n n$0=_fun_choose_rvalue(1:int ) [line 37]\n *&return:int =(1 / n$0) [line 37]\n " shape="box"] + "assign_conditional11" -> "assign_conditional10" ; +"assign_conditional10" [label="10: DeclStmt \n *&v2:int =0 [line 23]\n " shape="box"] - 50 -> 49 ; -49 [label="49: Exit div0_choose_rvalue \n " color=yellow style=filled] + "assign_conditional10" -> "assign_conditional5" ; + "assign_conditional10" -> "assign_conditional6" ; +"assign_conditional9" [label="9: BinaryOperatorStmt: Assign \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int & [line 24]\n *n$3:int =1 [line 24]\n " shape="box"] -48 [label="48: Start div0_choose_rvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 37]\n " color=yellow style=filled] + "assign_conditional9" -> "assign_conditional3" ; +"assign_conditional8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int &=&v2 [line 24]\n " shape="box"] - 48 -> 50 ; -47 [label="47: Return Stmt \n n$0=_fun_choose_lvalue(0:int ) [line 35]\n *&return:int =(1 / n$0) [line 35]\n " shape="box"] + "assign_conditional8" -> "assign_conditional4" ; +"assign_conditional7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int &=&v1 [line 24]\n " shape="box"] - 47 -> 46 ; -46 [label="46: Exit div1_choose_lvalue \n " color=yellow style=filled] + "assign_conditional7" -> "assign_conditional4" ; +"assign_conditional6" [label="6: Prune (false branch) \n n$2=*&a:int [line 24]\n PRUNE((n$2 == 0), false); [line 24]\n " shape="invhouse"] -45 [label="45: Start div1_choose_lvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] + "assign_conditional6" -> "assign_conditional8" ; +"assign_conditional5" [label="5: Prune (true branch) \n n$2=*&a:int [line 24]\n PRUNE((n$2 != 0), true); [line 24]\n " shape="invhouse"] - 45 -> 47 ; -44 [label="44: Return Stmt \n n$0=_fun_choose_lvalue(1:int ) [line 33]\n *&return:int =(1 / n$0) [line 33]\n " shape="box"] + "assign_conditional5" -> "assign_conditional7" ; +"assign_conditional4" [label="4: + \n " ] - 44 -> 43 ; -43 [label="43: Exit div0_choose_lvalue \n " color=yellow style=filled] + "assign_conditional4" -> "assign_conditional9" ; +"assign_conditional3" [label="3: Return Stmt \n n$0=*&v1:int [line 25]\n *&return:int =n$0 [line 25]\n " shape="box"] -42 [label="42: Start div0_choose_lvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 33]\n " color=yellow style=filled] + "assign_conditional3" -> "assign_conditional2" ; +"assign_conditional2" [label="2: Exit assign_conditional \n " color=yellow style=filled] - 42 -> 44 ; -41 [label="41: DeclStmt \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 29]\n *&0$?%__sil_tmpSIL_materialize_temp__n$2:int =n$6 [line 29]\n *&r:int &=&0$?%__sil_tmpSIL_materialize_temp__n$2 [line 29]\n " shape="box"] +"assign_conditional1" [label="1: Start assign_conditional\nFormals: a:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$1:int & v2:int v1:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$1,&v2,&v1); [line 22]\n " color=yellow style=filled] - 41 -> 35 ; -40 [label="40: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 29]\n " shape="box"] + "assign_conditional1" -> "assign_conditional11" ; +"div1_temp_lvalue3" [label="3: Return Stmt \n n$0=_fun_div_temp_lvalue(0:int ,1:int ) [line 47]\n *&return:int =n$0 [line 47]\n " shape="box"] - 40 -> 36 ; -39 [label="39: ConditinalStmt Branch \n n$5=*&b:int [line 29]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =n$5 [line 29]\n " shape="box"] + "div1_temp_lvalue3" -> "div1_temp_lvalue2" ; +"div1_temp_lvalue2" [label="2: Exit div1_temp_lvalue \n " color=yellow style=filled] - 39 -> 36 ; -38 [label="38: Prune (false branch) \n n$4=*&a:int [line 29]\n PRUNE((n$4 == 0), false); [line 29]\n " shape="invhouse"] +"div1_temp_lvalue1" [label="1: Start div1_temp_lvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] - 38 -> 40 ; -37 [label="37: Prune (true branch) \n n$4=*&a:int [line 29]\n PRUNE((n$4 != 0), true); [line 29]\n " shape="invhouse"] + "div1_temp_lvalue1" -> "div1_temp_lvalue3" ; +"div0_assign_conditional3" [label="3: Return Stmt \n n$0=_fun_assign_conditional(0:int ) [line 41]\n *&return:int =(1 / n$0) [line 41]\n " shape="box"] - 37 -> 39 ; -36 [label="36: + \n " ] + "div0_assign_conditional3" -> "div0_assign_conditional2" ; +"div0_assign_conditional2" [label="2: Exit div0_assign_conditional \n " color=yellow style=filled] - 36 -> 41 ; -35 [label="35: Return Stmt \n n$0=*&r:int & [line 30]\n n$1=*n$0:int [line 30]\n *&return:int =(1 / n$1) [line 30]\n " shape="box"] +"div0_assign_conditional1" [label="1: Start div0_assign_conditional\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 41]\n " color=yellow style=filled] - 35 -> 34 ; -34 [label="34: Exit div_temp_lvalue \n " color=yellow style=filled] + "div0_assign_conditional1" -> "div0_assign_conditional3" ; +"div0_choose_rvalue3" [label="3: Return Stmt \n n$0=_fun_choose_rvalue(1:int ) [line 37]\n *&return:int =(1 / n$0) [line 37]\n " shape="box"] -33 [label="33: Start div_temp_lvalue\nFormals: a:int b:int \nLocals: r:int & 0$?%__sil_tmpSIL_materialize_temp__n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int \n DECLARE_LOCALS(&return,&r,&0$?%__sil_tmpSIL_materialize_temp__n$2,&0$?%__sil_tmpSIL_temp_conditional___n$3); [line 28]\n " color=yellow style=filled] + "div0_choose_rvalue3" -> "div0_choose_rvalue2" ; +"div0_choose_rvalue2" [label="2: Exit div0_choose_rvalue \n " color=yellow style=filled] - 33 -> 37 ; - 33 -> 38 ; -32 [label="32: DeclStmt \n *&v1:int =0 [line 23]\n " shape="box"] +"div0_choose_rvalue1" [label="1: Start div0_choose_rvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 37]\n " color=yellow style=filled] - 32 -> 31 ; -31 [label="31: DeclStmt \n *&v2:int =0 [line 23]\n " shape="box"] + "div0_choose_rvalue1" -> "div0_choose_rvalue3" ; +"div1_choose_lvalue3" [label="3: Return Stmt \n n$0=_fun_choose_lvalue(0:int ) [line 35]\n *&return:int =(1 / n$0) [line 35]\n " shape="box"] - 31 -> 26 ; - 31 -> 27 ; -30 [label="30: BinaryOperatorStmt: Assign \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int & [line 24]\n *n$3:int =1 [line 24]\n " shape="box"] + "div1_choose_lvalue3" -> "div1_choose_lvalue2" ; +"div1_choose_lvalue2" [label="2: Exit div1_choose_lvalue \n " color=yellow style=filled] - 30 -> 24 ; -29 [label="29: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int &=&v2 [line 24]\n " shape="box"] +"div1_choose_lvalue1" [label="1: Start div1_choose_lvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] - 29 -> 25 ; -28 [label="28: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int &=&v1 [line 24]\n " shape="box"] + "div1_choose_lvalue1" -> "div1_choose_lvalue3" ; +"div_temp_lvalue9" [label="9: DeclStmt \n n$6=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 29]\n *&0$?%__sil_tmpSIL_materialize_temp__n$2:int =n$6 [line 29]\n *&r:int &=&0$?%__sil_tmpSIL_materialize_temp__n$2 [line 29]\n " shape="box"] - 28 -> 25 ; -27 [label="27: Prune (false branch) \n n$2=*&a:int [line 24]\n PRUNE((n$2 == 0), false); [line 24]\n " shape="invhouse"] + "div_temp_lvalue9" -> "div_temp_lvalue3" ; +"div_temp_lvalue8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =1 [line 29]\n " shape="box"] - 27 -> 29 ; -26 [label="26: Prune (true branch) \n n$2=*&a:int [line 24]\n PRUNE((n$2 != 0), true); [line 24]\n " shape="invhouse"] + "div_temp_lvalue8" -> "div_temp_lvalue4" ; +"div_temp_lvalue7" [label="7: ConditinalStmt Branch \n n$5=*&b:int [line 29]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =n$5 [line 29]\n " shape="box"] - 26 -> 28 ; -25 [label="25: + \n " ] + "div_temp_lvalue7" -> "div_temp_lvalue4" ; +"div_temp_lvalue6" [label="6: Prune (false branch) \n n$4=*&a:int [line 29]\n PRUNE((n$4 == 0), false); [line 29]\n " shape="invhouse"] - 25 -> 30 ; -24 [label="24: Return Stmt \n n$0=*&v1:int [line 25]\n *&return:int =n$0 [line 25]\n " shape="box"] + "div_temp_lvalue6" -> "div_temp_lvalue8" ; +"div_temp_lvalue5" [label="5: Prune (true branch) \n n$4=*&a:int [line 29]\n PRUNE((n$4 != 0), true); [line 29]\n " shape="invhouse"] - 24 -> 23 ; -23 [label="23: Exit assign_conditional \n " color=yellow style=filled] + "div_temp_lvalue5" -> "div_temp_lvalue7" ; +"div_temp_lvalue4" [label="4: + \n " ] -22 [label="22: Start assign_conditional\nFormals: a:int \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$1:int & v2:int v1:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$1,&v2,&v1); [line 22]\n " color=yellow style=filled] + "div_temp_lvalue4" -> "div_temp_lvalue9" ; +"div_temp_lvalue3" [label="3: Return Stmt \n n$0=*&r:int & [line 30]\n n$1=*n$0:int [line 30]\n *&return:int =(1 / n$1) [line 30]\n " shape="box"] - 22 -> 32 ; -21 [label="21: DeclStmt \n *&v1:int =0 [line 17]\n " shape="box"] + "div_temp_lvalue3" -> "div_temp_lvalue2" ; +"div_temp_lvalue2" [label="2: Exit div_temp_lvalue \n " color=yellow style=filled] - 21 -> 16 ; - 21 -> 17 ; -20 [label="20: DeclStmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 18]\n *&v3:int =n$4 [line 18]\n " shape="box"] +"div_temp_lvalue1" [label="1: Start div_temp_lvalue\nFormals: a:int b:int \nLocals: r:int & 0$?%__sil_tmpSIL_materialize_temp__n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$3:int \n DECLARE_LOCALS(&return,&r,&0$?%__sil_tmpSIL_materialize_temp__n$2,&0$?%__sil_tmpSIL_temp_conditional___n$3); [line 28]\n " color=yellow style=filled] - 20 -> 14 ; -19 [label="19: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 18]\n " shape="box"] + "div_temp_lvalue1" -> "div_temp_lvalue5" ; + "div_temp_lvalue1" -> "div_temp_lvalue6" ; +"div0_temp_lvalue3" [label="3: Return Stmt \n n$0=_fun_div_temp_lvalue(1:int ,0:int ) [line 45]\n *&return:int =n$0 [line 45]\n " shape="box"] - 19 -> 15 ; -18 [label="18: ConditinalStmt Branch \n n$3=*&v1:int [line 18]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$3 [line 18]\n " shape="box"] + "div0_temp_lvalue3" -> "div0_temp_lvalue2" ; +"div0_temp_lvalue2" [label="2: Exit div0_temp_lvalue \n " color=yellow style=filled] - 18 -> 15 ; -17 [label="17: Prune (false branch) \n n$2=*&a:int [line 18]\n PRUNE((n$2 == 0), false); [line 18]\n " shape="invhouse"] +"div0_temp_lvalue1" [label="1: Start div0_temp_lvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 45]\n " color=yellow style=filled] - 17 -> 19 ; -16 [label="16: Prune (true branch) \n n$2=*&a:int [line 18]\n PRUNE((n$2 != 0), true); [line 18]\n " shape="invhouse"] + "div0_temp_lvalue1" -> "div0_temp_lvalue3" ; +"div0_choose_lvalue3" [label="3: Return Stmt \n n$0=_fun_choose_lvalue(1:int ) [line 33]\n *&return:int =(1 / n$0) [line 33]\n " shape="box"] - 16 -> 18 ; -15 [label="15: + \n " ] + "div0_choose_lvalue3" -> "div0_choose_lvalue2" ; +"div0_choose_lvalue2" [label="2: Exit div0_choose_lvalue \n " color=yellow style=filled] - 15 -> 20 ; -14 [label="14: Return Stmt \n n$0=*&v3:int [line 19]\n *&return:int =n$0 [line 19]\n " shape="box"] +"div0_choose_lvalue1" [label="1: Start div0_choose_lvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 33]\n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Exit choose_rvalue \n " color=yellow style=filled] + "div0_choose_lvalue1" -> "div0_choose_lvalue3" ; +"div1_choose_rvalue3" [label="3: Return Stmt \n n$0=_fun_choose_rvalue(0:int ) [line 39]\n *&return:int =(1 / n$0) [line 39]\n " shape="box"] -12 [label="12: Start choose_rvalue\nFormals: a:int \nLocals: v3:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int v1:int \n DECLARE_LOCALS(&return,&v3,&0$?%__sil_tmpSIL_temp_conditional___n$1,&v1); [line 16]\n " color=yellow style=filled] + "div1_choose_rvalue3" -> "div1_choose_rvalue2" ; +"div1_choose_rvalue2" [label="2: Exit div1_choose_rvalue \n " color=yellow style=filled] - 12 -> 21 ; -11 [label="11: DeclStmt \n *&v1:int =0 [line 11]\n " shape="box"] +"div1_choose_rvalue1" [label="1: Start div1_choose_rvalue\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 39]\n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: DeclStmt \n *&v2:int =1 [line 11]\n " shape="box"] + "div1_choose_rvalue1" -> "div1_choose_rvalue3" ; +"choose_rvalue10" [label="10: DeclStmt \n *&v1:int =0 [line 17]\n " shape="box"] - 10 -> 5 ; - 10 -> 6 ; -9 [label="9: DeclStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int & [line 12]\n n$4=*n$3:int [line 12]\n *&v3:int =n$4 [line 12]\n " shape="box"] + "choose_rvalue10" -> "choose_rvalue5" ; + "choose_rvalue10" -> "choose_rvalue6" ; +"choose_rvalue9" [label="9: DeclStmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 18]\n *&v3:int =n$4 [line 18]\n " shape="box"] - 9 -> 3 ; -8 [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int &=&v2 [line 12]\n " shape="box"] + "choose_rvalue9" -> "choose_rvalue3" ; +"choose_rvalue8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 18]\n " shape="box"] - 8 -> 4 ; -7 [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int &=&v1 [line 12]\n " shape="box"] + "choose_rvalue8" -> "choose_rvalue4" ; +"choose_rvalue7" [label="7: ConditinalStmt Branch \n n$3=*&v1:int [line 18]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$3 [line 18]\n " shape="box"] - 7 -> 4 ; -6 [label="6: Prune (false branch) \n n$2=*&a:int [line 12]\n PRUNE((n$2 == 0), false); [line 12]\n " shape="invhouse"] + "choose_rvalue7" -> "choose_rvalue4" ; +"choose_rvalue6" [label="6: Prune (false branch) \n n$2=*&a:int [line 18]\n PRUNE((n$2 == 0), false); [line 18]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: Prune (true branch) \n n$2=*&a:int [line 12]\n PRUNE((n$2 != 0), true); [line 12]\n " shape="invhouse"] + "choose_rvalue6" -> "choose_rvalue8" ; +"choose_rvalue5" [label="5: Prune (true branch) \n n$2=*&a:int [line 18]\n PRUNE((n$2 != 0), true); [line 18]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: + \n " ] + "choose_rvalue5" -> "choose_rvalue7" ; +"choose_rvalue4" [label="4: + \n " ] - 4 -> 9 ; -3 [label="3: Return Stmt \n n$0=*&v3:int [line 13]\n *&return:int =n$0 [line 13]\n " shape="box"] + "choose_rvalue4" -> "choose_rvalue9" ; +"choose_rvalue3" [label="3: Return Stmt \n n$0=*&v3:int [line 19]\n *&return:int =n$0 [line 19]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit choose_lvalue \n " color=yellow style=filled] + "choose_rvalue3" -> "choose_rvalue2" ; +"choose_rvalue2" [label="2: Exit choose_rvalue \n " color=yellow style=filled] -1 [label="1: Start choose_lvalue\nFormals: a:int \nLocals: v3:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int & v2:int v1:int \n DECLARE_LOCALS(&return,&v3,&0$?%__sil_tmpSIL_temp_conditional___n$1,&v2,&v1); [line 10]\n " color=yellow style=filled] +"choose_rvalue1" [label="1: Start choose_rvalue\nFormals: a:int \nLocals: v3:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int v1:int \n DECLARE_LOCALS(&return,&v3,&0$?%__sil_tmpSIL_temp_conditional___n$1,&v1); [line 16]\n " color=yellow style=filled] - 1 -> 11 ; + "choose_rvalue1" -> "choose_rvalue10" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_array.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_array.cpp.dot index bbdbaf7a4..f80eba291 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_array.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_array.cpp.dot @@ -1,118 +1,118 @@ /* @generated */ digraph iCFG { -31 [label="31: DeclStmt \n _fun_Z_Z(&old:class Z *) [line 40]\n " shape="box"] +"Z_Z2" [label="2: Exit Z_Z \n " color=yellow style=filled] - 31 -> 30 ; -30 [label="30: DeclStmt \n _fun_Z_Z(&z[1]:class Z *,&old:class Z &) [line 41]\n " shape="box"] +"Z_Z1" [label="1: Start Z_Z\nFormals: this:class Z *\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: DeclStmt \n _fun_Z_Z(&z2:class Z *) [line 42]\n " shape="box"] + "Z_Z1" -> "Z_Z2" ; +"array_of_person4" [label="4: DeclStmt \n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person *) [line 18]\n _fun_Person_Person(&arr[0]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person &) [line 18]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$2:class Person *) [line 18]\n _fun_Person_Person(&arr[1]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$2:class Person &) [line 18]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$1:class Person *) [line 18]\n _fun_Person_Person(&arr[2]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class Person &) [line 18]\n " shape="box"] - 29 -> 28 ; -28 [label="28: Exit initialization_mixed_styles_not_handled_correctly \n " color=yellow style=filled] + "array_of_person4" -> "array_of_person3" ; +"array_of_person3" [label="3: Return Stmt \n n$0=*&arr[0].x:int [line 19]\n *&return:int =n$0 [line 19]\n " shape="box"] -27 [label="27: Start initialization_mixed_styles_not_handled_correctly\nFormals: \nLocals: z2:class Z z:class Z [2] old:class Z \n DECLARE_LOCALS(&return,&z2,&z,&old); [line 39]\n " color=yellow style=filled] + "array_of_person3" -> "array_of_person2" ; +"array_of_person2" [label="2: Exit array_of_person \n " color=yellow style=filled] - 27 -> 31 ; -26 [label="26: DeclStmt \n *&z[0].a:int =1 [line 33]\n *&z[0].b:int =2 [line 33]\n *&z[1].a:int =2 [line 33]\n *&z[1].b:int =3 [line 33]\n " shape="box"] +"array_of_person1" [label="1: Start array_of_person\nFormals: \nLocals: arr:class Person [10] 0$?%__sil_tmpSIL_materialize_temp__n$1:class Person 0$?%__sil_tmpSIL_materialize_temp__n$2:class Person 0$?%__sil_tmpSIL_materialize_temp__n$3:class Person \n DECLARE_LOCALS(&return,&arr,&0$?%__sil_tmpSIL_materialize_temp__n$1,&0$?%__sil_tmpSIL_materialize_temp__n$2,&0$?%__sil_tmpSIL_materialize_temp__n$3); [line 17]\n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: DeclStmt \n _fun_Z_Z(&z2:class Z *) [line 34]\n " shape="box"] + "array_of_person1" -> "array_of_person4" ; +"Person_Person2" [label="2: Exit Person_Person \n " color=yellow style=filled] - 25 -> 24 ; -24 [label="24: Exit initialization_c_style \n " color=yellow style=filled] +"Person_Person1" [label="1: Start Person_Person\nFormals: this:class Person *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] -23 [label="23: Start initialization_c_style\nFormals: \nLocals: z2:class Z z:class Z [2] \n DECLARE_LOCALS(&return,&z2,&z); [line 32]\n " color=yellow style=filled] + "Person_Person1" -> "Person_Person2" ; +"matrix_of_person4" [label="4: DeclStmt \n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$4:class Person *) [line 23]\n _fun_Person_Person(&arr[0][0]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$4:class Person &) [line 23]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person *) [line 23]\n _fun_Person_Person(&arr[0][1]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person &) [line 23]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$2:class Person *) [line 23]\n _fun_Person_Person(&arr[1][0]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$2:class Person &) [line 23]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$1:class Person *) [line 23]\n _fun_Person_Person(&arr[1][1]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class Person &) [line 23]\n " shape="box"] - 23 -> 26 ; -22 [label="22: Constructor Init \n n$3=*&this:class Z * [line 27]\n n$4=*&__param_0:class Z & [line 27]\n n$5=*n$4.a:int [line 27]\n *n$3.a:int =n$5 [line 27]\n " shape="box"] + "matrix_of_person4" -> "matrix_of_person3" ; +"matrix_of_person3" [label="3: Return Stmt \n n$0=*&arr[0][1].x:int [line 24]\n *&return:int =n$0 [line 24]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Constructor Init \n n$0=*&this:class Z * [line 27]\n n$1=*&__param_0:class Z & [line 27]\n n$2=*n$1.b:int [line 27]\n *n$0.b:int =n$2 [line 27]\n " shape="box"] + "matrix_of_person3" -> "matrix_of_person2" ; +"matrix_of_person2" [label="2: Exit matrix_of_person \n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit Z_Z \n " color=yellow style=filled] +"matrix_of_person1" [label="1: Start matrix_of_person\nFormals: \nLocals: arr:class Person [2][2] 0$?%__sil_tmpSIL_materialize_temp__n$1:class Person 0$?%__sil_tmpSIL_materialize_temp__n$2:class Person 0$?%__sil_tmpSIL_materialize_temp__n$3:class Person 0$?%__sil_tmpSIL_materialize_temp__n$4:class Person \n DECLARE_LOCALS(&return,&arr,&0$?%__sil_tmpSIL_materialize_temp__n$1,&0$?%__sil_tmpSIL_materialize_temp__n$2,&0$?%__sil_tmpSIL_materialize_temp__n$3,&0$?%__sil_tmpSIL_materialize_temp__n$4); [line 22]\n " color=yellow style=filled] -19 [label="19: Start Z_Z\nFormals: this:class Z * __param_0:class Z &\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] + "matrix_of_person1" -> "matrix_of_person4" ; +"Person_Person3" [label="3: Constructor Init \n n$0=*&this:class Person * [line 10]\n n$1=*&__param_0:class Person & [line 10]\n n$2=*n$1.x:int [line 10]\n *n$0.x:int =n$2 [line 10]\n " shape="box"] - 19 -> 22 ; -18 [label="18: Exit Z_Z \n " color=yellow style=filled] + "Person_Person3" -> "Person_Person2" ; +"Person_Person2" [label="2: Exit Person_Person \n " color=yellow style=filled] -17 [label="17: Start Z_Z\nFormals: this:class Z *\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] +"Person_Person1" [label="1: Start Person_Person\nFormals: this:class Person * __param_0:class Person &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 17 -> 18 ; -16 [label="16: DeclStmt \n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$4:class Person *) [line 23]\n _fun_Person_Person(&arr[0][0]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$4:class Person &) [line 23]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person *) [line 23]\n _fun_Person_Person(&arr[0][1]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person &) [line 23]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$2:class Person *) [line 23]\n _fun_Person_Person(&arr[1][0]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$2:class Person &) [line 23]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$1:class Person *) [line 23]\n _fun_Person_Person(&arr[1][1]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class Person &) [line 23]\n " shape="box"] + "Person_Person1" -> "Person_Person3" ; +"Person_Person3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class Person * [line 12]\n n$1=*&i:int [line 12]\n *n$0.x:int =n$1 [line 12]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Return Stmt \n n$0=*&arr[0][1].x:int [line 24]\n *&return:int =n$0 [line 24]\n " shape="box"] + "Person_Person3" -> "Person_Person2" ; +"Person_Person2" [label="2: Exit Person_Person \n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit matrix_of_person \n " color=yellow style=filled] +"Person_Person1" [label="1: Start Person_Person\nFormals: this:class Person * i:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] -13 [label="13: Start matrix_of_person\nFormals: \nLocals: arr:class Person [2][2] 0$?%__sil_tmpSIL_materialize_temp__n$1:class Person 0$?%__sil_tmpSIL_materialize_temp__n$2:class Person 0$?%__sil_tmpSIL_materialize_temp__n$3:class Person 0$?%__sil_tmpSIL_materialize_temp__n$4:class Person \n DECLARE_LOCALS(&return,&arr,&0$?%__sil_tmpSIL_materialize_temp__n$1,&0$?%__sil_tmpSIL_materialize_temp__n$2,&0$?%__sil_tmpSIL_materialize_temp__n$3,&0$?%__sil_tmpSIL_materialize_temp__n$4); [line 22]\n " color=yellow style=filled] + "Person_Person1" -> "Person_Person3" ; +"Z_Z4" [label="4: Constructor Init \n n$3=*&this:class Z * [line 27]\n n$4=*&__param_0:class Z & [line 27]\n n$5=*n$4.a:int [line 27]\n *n$3.a:int =n$5 [line 27]\n " shape="box"] - 13 -> 16 ; -12 [label="12: DeclStmt \n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person *) [line 18]\n _fun_Person_Person(&arr[0]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person &) [line 18]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$2:class Person *) [line 18]\n _fun_Person_Person(&arr[1]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$2:class Person &) [line 18]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$1:class Person *) [line 18]\n _fun_Person_Person(&arr[2]:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class Person &) [line 18]\n " shape="box"] + "Z_Z4" -> "Z_Z3" ; +"Z_Z3" [label="3: Constructor Init \n n$0=*&this:class Z * [line 27]\n n$1=*&__param_0:class Z & [line 27]\n n$2=*n$1.b:int [line 27]\n *n$0.b:int =n$2 [line 27]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Return Stmt \n n$0=*&arr[0].x:int [line 19]\n *&return:int =n$0 [line 19]\n " shape="box"] + "Z_Z3" -> "Z_Z2" ; +"Z_Z2" [label="2: Exit Z_Z \n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Exit array_of_person \n " color=yellow style=filled] +"Z_Z1" [label="1: Start Z_Z\nFormals: this:class Z * __param_0:class Z &\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] -9 [label="9: Start array_of_person\nFormals: \nLocals: arr:class Person [10] 0$?%__sil_tmpSIL_materialize_temp__n$1:class Person 0$?%__sil_tmpSIL_materialize_temp__n$2:class Person 0$?%__sil_tmpSIL_materialize_temp__n$3:class Person \n DECLARE_LOCALS(&return,&arr,&0$?%__sil_tmpSIL_materialize_temp__n$1,&0$?%__sil_tmpSIL_materialize_temp__n$2,&0$?%__sil_tmpSIL_materialize_temp__n$3); [line 17]\n " color=yellow style=filled] + "Z_Z1" -> "Z_Z4" ; +"initialization_c_style4" [label="4: DeclStmt \n *&z[0].a:int =1 [line 33]\n *&z[0].b:int =2 [line 33]\n *&z[1].a:int =2 [line 33]\n *&z[1].b:int =3 [line 33]\n " shape="box"] - 9 -> 12 ; -8 [label="8: Constructor Init \n n$0=*&this:class Person * [line 10]\n n$1=*&__param_0:class Person & [line 10]\n n$2=*n$1.x:int [line 10]\n *n$0.x:int =n$2 [line 10]\n " shape="box"] + "initialization_c_style4" -> "initialization_c_style3" ; +"initialization_c_style3" [label="3: DeclStmt \n _fun_Z_Z(&z2:class Z *) [line 34]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit Person_Person \n " color=yellow style=filled] + "initialization_c_style3" -> "initialization_c_style2" ; +"initialization_c_style2" [label="2: Exit initialization_c_style \n " color=yellow style=filled] -6 [label="6: Start Person_Person\nFormals: this:class Person * __param_0:class Person &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"initialization_c_style1" [label="1: Start initialization_c_style\nFormals: \nLocals: z2:class Z z:class Z [2] \n DECLARE_LOCALS(&return,&z2,&z); [line 32]\n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: Exit Person_Person \n " color=yellow style=filled] + "initialization_c_style1" -> "initialization_c_style4" ; +"initialization_mixed_styles_not_handled_correctly5" [label="5: DeclStmt \n _fun_Z_Z(&old:class Z *) [line 40]\n " shape="box"] -4 [label="4: Start Person_Person\nFormals: this:class Person *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] + "initialization_mixed_styles_not_handled_correctly5" -> "initialization_mixed_styles_not_handled_correctly4" ; +"initialization_mixed_styles_not_handled_correctly4" [label="4: DeclStmt \n _fun_Z_Z(&z[1]:class Z *,&old:class Z &) [line 41]\n " shape="box"] - 4 -> 5 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class Person * [line 12]\n n$1=*&i:int [line 12]\n *n$0.x:int =n$1 [line 12]\n " shape="box"] + "initialization_mixed_styles_not_handled_correctly4" -> "initialization_mixed_styles_not_handled_correctly3" ; +"initialization_mixed_styles_not_handled_correctly3" [label="3: DeclStmt \n _fun_Z_Z(&z2:class Z *) [line 42]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Person_Person \n " color=yellow style=filled] + "initialization_mixed_styles_not_handled_correctly3" -> "initialization_mixed_styles_not_handled_correctly2" ; +"initialization_mixed_styles_not_handled_correctly2" [label="2: Exit initialization_mixed_styles_not_handled_correctly \n " color=yellow style=filled] -1 [label="1: Start Person_Person\nFormals: this:class Person * i:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"initialization_mixed_styles_not_handled_correctly1" [label="1: Start initialization_mixed_styles_not_handled_correctly\nFormals: \nLocals: z2:class Z z:class Z [2] old:class Z \n DECLARE_LOCALS(&return,&z2,&z,&old); [line 39]\n " color=yellow style=filled] - 1 -> 3 ; + "initialization_mixed_styles_not_handled_correctly1" -> "initialization_mixed_styles_not_handled_correctly5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_default_arg.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_default_arg.cpp.dot index 47beefb02..6aaf8f6d7 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_default_arg.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_default_arg.cpp.dot @@ -1,44 +1,44 @@ /* @generated */ digraph iCFG { -11 [label="11: DeclStmt \n _fun_X_X(&x1:class X *,0:int ,0:int ) [line 21]\n " shape="box"] +"X_div3" [label="3: Return Stmt \n n$0=*&this:class X * [line 15]\n n$1=*n$0.f:int [line 15]\n *&return:int =(1 / n$1) [line 15]\n " shape="box"] - 11 -> 10 ; -10 [label="10: DeclStmt \n _fun_X_X(&x2:class X *,1:int ,0:int ) [line 22]\n " shape="box"] + "X_div3" -> "X_div2" ; +"X_div2" [label="2: Exit X_div \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: DeclStmt \n _fun_X_X(&x3:class X *,0:int ,1:int ) [line 23]\n " shape="box"] +"X_div1" [label="1: Start X_div\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit test \n " color=yellow style=filled] + "X_div1" -> "X_div3" ; +"test5" [label="5: DeclStmt \n _fun_X_X(&x1:class X *,0:int ,0:int ) [line 21]\n " shape="box"] -7 [label="7: Start test\nFormals: \nLocals: x3:class X x2:class X x1:class X \n DECLARE_LOCALS(&return,&x3,&x2,&x1); [line 20]\n " color=yellow style=filled] + "test5" -> "test4" ; +"test4" [label="4: DeclStmt \n _fun_X_X(&x2:class X *,1:int ,0:int ) [line 22]\n " shape="box"] - 7 -> 11 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&this:class X * [line 18]\n n$1=*&a:int [line 18]\n n$2=*&b:int [line 18]\n *n$0.f:int =(n$1 + n$2) [line 18]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: DeclStmt \n _fun_X_X(&x3:class X *,0:int ,1:int ) [line 23]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit X_X \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -4 [label="4: Start X_X\nFormals: this:class X * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: x3:class X x2:class X x1:class X \n DECLARE_LOCALS(&return,&x3,&x2,&x1); [line 20]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&this:class X * [line 15]\n n$1=*n$0.f:int [line 15]\n *&return:int =(1 / n$1) [line 15]\n " shape="box"] + "test1" -> "test5" ; +"X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class X * [line 18]\n n$1=*&a:int [line 18]\n n$2=*&b:int [line 18]\n *n$0.f:int =(n$1 + n$2) [line 18]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit X_div \n " color=yellow style=filled] + "X_X3" -> "X_X2" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] -1 [label="1: Start X_div\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"X_X1" [label="1: Start X_X\nFormals: this:class X * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 1 -> 3 ; + "X_X1" -> "X_X3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_init.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_init.cpp.dot index ec31a9775..d550eb999 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_init.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_init.cpp.dot @@ -1,169 +1,169 @@ /* @generated */ digraph iCFG { -44 [label="44: DeclStmt \n _fun_B_B(&b:class B *,1:int ) [line 55]\n " shape="box"] +"f_div04" [label="4: DeclStmt \n _fun_B_B(&b:class B *,0:int ) [line 33]\n " shape="box"] - 44 -> 43 ; -43 [label="43: DeclStmt \n n$4=*&b.f:int [line 56]\n *&v:int =(1 / n$4) [line 56]\n " shape="box"] + "f_div04" -> "f_div03" ; +"f_div03" [label="3: Return Stmt \n n$0=*&b.f:int [line 34]\n *&return:int =(1 / n$0) [line 34]\n " shape="box"] - 43 -> 42 ; -42 [label="42: DeclStmt \n n$3=*&b.f2:int [line 57]\n *&v2:int =(1 / n$3) [line 57]\n " shape="box"] + "f_div03" -> "f_div02" ; +"f_div02" [label="2: Exit f_div0 \n " color=yellow style=filled] - 42 -> 41 ; -41 [label="41: DeclStmt \n n$2=*&b.t.v:int [line 58]\n *&v3:int =(1 / n$2) [line 58]\n " shape="box"] +"f_div01" [label="1: Start f_div0\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 32]\n " color=yellow style=filled] - 41 -> 40 ; -40 [label="40: Return Stmt \n n$0=*&v:int [line 59]\n n$1=*&v2:int [line 59]\n *&return:int =(n$0 + n$1) [line 59]\n " shape="box"] + "f_div01" -> "f_div04" ; +"delegate_constr_f2_div05" [label="5: DeclStmt \n _fun_B_B(&b:class B *,-1:int ,0:int ) [line 49]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Exit f_f2_div1 \n " color=yellow style=filled] + "delegate_constr_f2_div05" -> "delegate_constr_f2_div04" ; +"delegate_constr_f2_div04" [label="4: DeclStmt \n n$1=*&b.f:int [line 50]\n *&v:int =(1 / n$1) [line 50]\n " shape="box"] -38 [label="38: Start f_f2_div1\nFormals: \nLocals: v3:int v2:int v:int b:class B \n DECLARE_LOCALS(&return,&v3,&v2,&v,&b); [line 54]\n " color=yellow style=filled] + "delegate_constr_f2_div04" -> "delegate_constr_f2_div03" ; +"delegate_constr_f2_div03" [label="3: Return Stmt \n n$0=*&b.f2:int [line 51]\n *&return:int =(1 / n$0) [line 51]\n " shape="box"] - 38 -> 44 ; -37 [label="37: DeclStmt \n _fun_B_B(&b:class B *,-1:int ,0:int ) [line 49]\n " shape="box"] + "delegate_constr_f2_div03" -> "delegate_constr_f2_div02" ; +"delegate_constr_f2_div02" [label="2: Exit delegate_constr_f2_div0 \n " color=yellow style=filled] - 37 -> 36 ; -36 [label="36: DeclStmt \n n$1=*&b.f:int [line 50]\n *&v:int =(1 / n$1) [line 50]\n " shape="box"] +"delegate_constr_f2_div01" [label="1: Start delegate_constr_f2_div0\nFormals: \nLocals: v:int b:class B \n DECLARE_LOCALS(&return,&v,&b); [line 48]\n " color=yellow style=filled] - 36 -> 35 ; -35 [label="35: Return Stmt \n n$0=*&b.f2:int [line 51]\n *&return:int =(1 / n$0) [line 51]\n " shape="box"] + "delegate_constr_f2_div01" -> "delegate_constr_f2_div05" ; +"B_B4" [label="4: Constructor Init \n n$2=*&this:class B * [line 24]\n n$3=*&a:int [line 24]\n n$4=*&b:int [line 24]\n _fun_B_B(n$2:class B *,(n$3 + n$4):int ) [line 24]\n " shape="box"] - 35 -> 34 ; -34 [label="34: Exit delegate_constr_f2_div0 \n " color=yellow style=filled] + "B_B4" -> "B_B3" ; +"B_B3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class B * [line 24]\n n$1=*&b:int [line 24]\n *n$0.f2:int =n$1 [line 24]\n " shape="box"] -33 [label="33: Start delegate_constr_f2_div0\nFormals: \nLocals: v:int b:class B \n DECLARE_LOCALS(&return,&v,&b); [line 48]\n " color=yellow style=filled] + "B_B3" -> "B_B2" ; +"B_B2" [label="2: Exit B_B \n " color=yellow style=filled] - 33 -> 37 ; -32 [label="32: DeclStmt \n _fun_B_B(&b:class B *,-1:int ,1:int ) [line 43]\n " shape="box"] +"B_B1" [label="1: Start B_B\nFormals: this:class B * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 32 -> 31 ; -31 [label="31: DeclStmt \n n$1=*&b.f2:int [line 44]\n *&v:int =(1 / n$1) [line 44]\n " shape="box"] + "B_B1" -> "B_B4" ; +"A_A3" [label="3: Constructor Init \n n$0=*&this:class A * [line 12]\n n$1=*&f:int [line 12]\n *n$0.f:int =n$1 [line 12]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Return Stmt \n n$0=*&b.f:int [line 45]\n *&return:int =(1 / n$0) [line 45]\n " shape="box"] + "A_A3" -> "A_A2" ; +"A_A2" [label="2: Exit A_A \n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: Exit delegate_constr_f_div0 \n " color=yellow style=filled] +"A_A1" [label="1: Start A_A\nFormals: this:class A * f:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] -28 [label="28: Start delegate_constr_f_div0\nFormals: \nLocals: v:int b:class B \n DECLARE_LOCALS(&return,&v,&b); [line 42]\n " color=yellow style=filled] + "A_A1" -> "A_A3" ; +"f_f2_div17" [label="7: DeclStmt \n _fun_B_B(&b:class B *,1:int ) [line 55]\n " shape="box"] - 28 -> 32 ; -27 [label="27: DeclStmt \n _fun_B_B(&b:class B *,0:int ) [line 38]\n " shape="box"] + "f_f2_div17" -> "f_f2_div16" ; +"f_f2_div16" [label="6: DeclStmt \n n$4=*&b.f:int [line 56]\n *&v:int =(1 / n$4) [line 56]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Return Stmt \n n$0=*&b.t.v:int [line 39]\n *&return:int =(1 / n$0) [line 39]\n " shape="box"] + "f_f2_div16" -> "f_f2_div15" ; +"f_f2_div15" [label="5: DeclStmt \n n$3=*&b.f2:int [line 57]\n *&v2:int =(1 / n$3) [line 57]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Exit t_div0 \n " color=yellow style=filled] + "f_f2_div15" -> "f_f2_div14" ; +"f_f2_div14" [label="4: DeclStmt \n n$2=*&b.t.v:int [line 58]\n *&v3:int =(1 / n$2) [line 58]\n " shape="box"] -24 [label="24: Start t_div0\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 37]\n " color=yellow style=filled] + "f_f2_div14" -> "f_f2_div13" ; +"f_f2_div13" [label="3: Return Stmt \n n$0=*&v:int [line 59]\n n$1=*&v2:int [line 59]\n *&return:int =(n$0 + n$1) [line 59]\n " shape="box"] - 24 -> 27 ; -23 [label="23: DeclStmt \n _fun_B_B(&b:class B *,0:int ) [line 33]\n " shape="box"] + "f_f2_div13" -> "f_f2_div12" ; +"f_f2_div12" [label="2: Exit f_f2_div1 \n " color=yellow style=filled] - 23 -> 22 ; -22 [label="22: Return Stmt \n n$0=*&b.f:int [line 34]\n *&return:int =(1 / n$0) [line 34]\n " shape="box"] +"f_f2_div11" [label="1: Start f_f2_div1\nFormals: \nLocals: v3:int v2:int v:int b:class B \n DECLARE_LOCALS(&return,&v3,&v2,&v,&b); [line 54]\n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Exit f_div0 \n " color=yellow style=filled] + "f_f2_div11" -> "f_f2_div17" ; +"t_div04" [label="4: DeclStmt \n _fun_B_B(&b:class B *,0:int ) [line 38]\n " shape="box"] -20 [label="20: Start f_div0\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 32]\n " color=yellow style=filled] + "t_div04" -> "t_div03" ; +"t_div03" [label="3: Return Stmt \n n$0=*&b.t.v:int [line 39]\n *&return:int =(1 / n$0) [line 39]\n " shape="box"] - 20 -> 23 ; -19 [label="19: DeclStmt \n _fun_B_B(&b:class B *,0:int ) [line 28]\n " shape="box"] + "t_div03" -> "t_div02" ; +"t_div02" [label="2: Exit t_div0 \n " color=yellow style=filled] - 19 -> 18 ; -18 [label="18: Return Stmt \n n$0=*&b.f2:int [line 29]\n *&return:int =(1 / n$0) [line 29]\n " shape="box"] +"t_div01" [label="1: Start t_div0\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 37]\n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Exit f2_div0 \n " color=yellow style=filled] + "t_div01" -> "t_div04" ; +"B::T_T3" [label="3: Constructor Init \n n$0=*&this:class B::T * [line 18]\n n$1=*&v:int [line 18]\n *n$0.v:int =n$1 [line 18]\n " shape="box"] -16 [label="16: Start f2_div0\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 27]\n " color=yellow style=filled] + "B::T_T3" -> "B::T_T2" ; +"B::T_T2" [label="2: Exit B::T_T \n " color=yellow style=filled] - 16 -> 19 ; -15 [label="15: Constructor Init \n n$2=*&this:class B * [line 24]\n n$3=*&a:int [line 24]\n n$4=*&b:int [line 24]\n _fun_B_B(n$2:class B *,(n$3 + n$4):int ) [line 24]\n " shape="box"] +"B::T_T1" [label="1: Start B::T_T\nFormals: this:class B::T * v:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: BinaryOperatorStmt: Assign \n n$0=*&this:class B * [line 24]\n n$1=*&b:int [line 24]\n *n$0.f2:int =n$1 [line 24]\n " shape="box"] + "B::T_T1" -> "B::T_T3" ; +"f2_div04" [label="4: DeclStmt \n _fun_B_B(&b:class B *,0:int ) [line 28]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit B_B \n " color=yellow style=filled] + "f2_div04" -> "f2_div03" ; +"f2_div03" [label="3: Return Stmt \n n$0=*&b.f2:int [line 29]\n *&return:int =(1 / n$0) [line 29]\n " shape="box"] -12 [label="12: Start B_B\nFormals: this:class B * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] + "f2_div03" -> "f2_div02" ; +"f2_div02" [label="2: Exit f2_div0 \n " color=yellow style=filled] - 12 -> 15 ; -11 [label="11: Constructor Init \n n$4=*&this:class B * [line 22]\n n$5=*&a:int [line 22]\n _fun_A_A(n$4:class B *,n$5:int ) [line 22]\n " shape="box"] +"f2_div01" [label="1: Start f2_div0\nFormals: \nLocals: b:class B \n DECLARE_LOCALS(&return,&b); [line 27]\n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Constructor Init \n n$2=*&this:class B * [line 22]\n n$3=*&a:int [line 22]\n *n$2.f2:int =n$3 [line 22]\n " shape="box"] + "f2_div01" -> "f2_div04" ; +"delegate_constr_f_div05" [label="5: DeclStmt \n _fun_B_B(&b:class B *,-1:int ,1:int ) [line 43]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Constructor Init \n n$0=*&this:class B * [line 22]\n n$1=*&a:int [line 22]\n _fun_B::T_T(n$0.t:class B::T *,n$1:int ) [line 22]\n " shape="box"] + "delegate_constr_f_div05" -> "delegate_constr_f_div04" ; +"delegate_constr_f_div04" [label="4: DeclStmt \n n$1=*&b.f2:int [line 44]\n *&v:int =(1 / n$1) [line 44]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit B_B \n " color=yellow style=filled] + "delegate_constr_f_div04" -> "delegate_constr_f_div03" ; +"delegate_constr_f_div03" [label="3: Return Stmt \n n$0=*&b.f:int [line 45]\n *&return:int =(1 / n$0) [line 45]\n " shape="box"] -7 [label="7: Start B_B\nFormals: this:class B * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] + "delegate_constr_f_div03" -> "delegate_constr_f_div02" ; +"delegate_constr_f_div02" [label="2: Exit delegate_constr_f_div0 \n " color=yellow style=filled] - 7 -> 11 ; -6 [label="6: Constructor Init \n n$0=*&this:class B::T * [line 18]\n n$1=*&v:int [line 18]\n *n$0.v:int =n$1 [line 18]\n " shape="box"] +"delegate_constr_f_div01" [label="1: Start delegate_constr_f_div0\nFormals: \nLocals: v:int b:class B \n DECLARE_LOCALS(&return,&v,&b); [line 42]\n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit B::T_T \n " color=yellow style=filled] + "delegate_constr_f_div01" -> "delegate_constr_f_div05" ; +"B_B5" [label="5: Constructor Init \n n$4=*&this:class B * [line 22]\n n$5=*&a:int [line 22]\n _fun_A_A(n$4:class B *,n$5:int ) [line 22]\n " shape="box"] -4 [label="4: Start B::T_T\nFormals: this:class B::T * v:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] + "B_B5" -> "B_B4" ; +"B_B4" [label="4: Constructor Init \n n$2=*&this:class B * [line 22]\n n$3=*&a:int [line 22]\n *n$2.f2:int =n$3 [line 22]\n " shape="box"] - 4 -> 6 ; -3 [label="3: Constructor Init \n n$0=*&this:class A * [line 12]\n n$1=*&f:int [line 12]\n *n$0.f:int =n$1 [line 12]\n " shape="box"] + "B_B4" -> "B_B3" ; +"B_B3" [label="3: Constructor Init \n n$0=*&this:class B * [line 22]\n n$1=*&a:int [line 22]\n _fun_B::T_T(n$0.t:class B::T *,n$1:int ) [line 22]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_A \n " color=yellow style=filled] + "B_B3" -> "B_B2" ; +"B_B2" [label="2: Exit B_B \n " color=yellow style=filled] -1 [label="1: Start A_A\nFormals: this:class A * f:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"B_B1" [label="1: Start B_B\nFormals: this:class B * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] - 1 -> 3 ; + "B_B1" -> "B_B5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_new.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_new.cpp.dot index c85245d63..d2a44e265 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_new.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_new.cpp.dot @@ -1,377 +1,377 @@ /* @generated */ digraph iCFG { -97 [label="97: DeclStmt \n n$2=_fun___new_array((sizeof(class constructor_new::Person *) * 10):unsigned long ) [line 99]\n *&tarray:class constructor_new::Person **=n$2 [line 99]\n " shape="box"] +"constructor_new::Person_Person5" [label="5: BinaryOperatorStmt: Assign \n n$4=*&this:class constructor_new::Person * [line 18]\n n$5=*&i:int [line 18]\n *n$4.x:int =n$5 [line 18]\n " shape="box"] - 97 -> 96 ; -96 [label="96: BinaryOperatorStmt: Assign \n n$0=*&tarray:class constructor_new::Person ** [line 100]\n n$1=_fun___new_array((sizeof(class constructor_new::Person ) * 10):unsigned long ) [line 100]\n _fun_constructor_new::Person_Person(n$1[0]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[1]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[2]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[3]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[4]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[5]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[6]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[7]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[8]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[9]:class constructor_new::Person *) [line 100]\n *n$0[0]:class constructor_new::Person *=n$1 [line 100]\n " shape="box"] + "constructor_new::Person_Person5" -> "constructor_new::Person_Person4" ; +"constructor_new::Person_Person4" [label="4: BinaryOperatorStmt: Assign \n n$2=*&this:class constructor_new::Person * [line 19]\n n$3=*&j:int [line 19]\n *n$2.y:int =n$3 [line 19]\n " shape="box"] - 96 -> 95 ; -95 [label="95: Exit constructor_new::matrix_of_person \n " color=yellow style=filled] + "constructor_new::Person_Person4" -> "constructor_new::Person_Person3" ; +"constructor_new::Person_Person3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_new::Person * [line 20]\n n$1=*&k:int [line 20]\n *n$0.z:int =n$1 [line 20]\n " shape="box"] -94 [label="94: Start constructor_new::matrix_of_person\nFormals: \nLocals: tarray:class constructor_new::Person ** \n DECLARE_LOCALS(&return,&tarray); [line 98]\n " color=yellow style=filled] + "constructor_new::Person_Person3" -> "constructor_new::Person_Person2" ; +"constructor_new::Person_Person2" [label="2: Exit constructor_new::Person_Person \n " color=yellow style=filled] - 94 -> 97 ; -93 [label="93: DeclStmt \n n$0=_fun___new_array((sizeof(class constructor_new::Person ) * 10):unsigned long ) [line 95]\n _fun_constructor_new::Person_Person(n$0[0]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[1]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[2]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[3]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[4]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[5]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[6]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[7]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[8]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[9]:class constructor_new::Person *) [line 95]\n *&tarray:class constructor_new::Person *=n$0 [line 95]\n " shape="box"] +"constructor_new::Person_Person1" [label="1: Start constructor_new::Person_Person\nFormals: this:class constructor_new::Person * i:int j:int k:int \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 93 -> 92 ; -92 [label="92: Exit constructor_new::array_of_person_with_constant_size \n " color=yellow style=filled] + "constructor_new::Person_Person1" -> "constructor_new::Person_Person5" ; +"constructor_new::int_init_number4" [label="4: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 40]\n *n$2:int =5 [line 40]\n *&x1:int *=n$2 [line 40]\n " shape="box"] -91 [label="91: Start constructor_new::array_of_person_with_constant_size\nFormals: \nLocals: tarray:class constructor_new::Person * \n DECLARE_LOCALS(&return,&tarray); [line 95]\n " color=yellow style=filled] + "constructor_new::int_init_number4" -> "constructor_new::int_init_number3" ; +"constructor_new::int_init_number3" [label="3: Return Stmt \n n$0=*&x1:int * [line 41]\n n$1=*n$0:int [line 41]\n *&return:int =(1 / (n$1 - 5)) [line 41]\n " shape="box"] - 91 -> 93 ; -90 [label="90: DeclStmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 91]\n n$3=_fun___new_array((sizeof(class constructor_new::Person ) * n$2):unsigned long ) [line 91]\n *&tarray:class constructor_new::Person *=n$3 [line 91]\n " shape="box"] + "constructor_new::int_init_number3" -> "constructor_new::int_init_number2" ; +"constructor_new::int_init_number2" [label="2: Exit constructor_new::int_init_number \n " color=yellow style=filled] - 90 -> 83 ; -89 [label="89: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =3 [line 91]\n " shape="box"] +"constructor_new::int_init_number1" [label="1: Start constructor_new::int_init_number\nFormals: \nLocals: x1:int * \n DECLARE_LOCALS(&return,&x1); [line 39]\n " color=yellow style=filled] - 89 -> 84 ; -88 [label="88: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =5 [line 91]\n " shape="box"] + "constructor_new::int_init_number1" -> "constructor_new::int_init_number4" ; +"constructor_new::constructor_1_arg_new_div04" [label="4: DeclStmt \n n$2=_fun___new(sizeof(class constructor_new::Person ):unsigned long ) [line 30]\n _fun_constructor_new::Person_Person(n$2:class constructor_new::Person *,5:int ) [line 30]\n *&p:class constructor_new::Person *=n$2 [line 30]\n " shape="box"] - 88 -> 84 ; -87 [label="87: Prune (false branch) \n PRUNE(((n$1 == 5) == 0), false); [line 91]\n " shape="invhouse"] + "constructor_new::constructor_1_arg_new_div04" -> "constructor_new::constructor_1_arg_new_div03" ; +"constructor_new::constructor_1_arg_new_div03" [label="3: Return Stmt \n n$0=*&p:class constructor_new::Person * [line 31]\n n$1=*n$0.x:int [line 31]\n *&return:int =(1 / (n$1 - 5)) [line 31]\n " shape="box"] - 87 -> 89 ; -86 [label="86: Prune (true branch) \n PRUNE(((n$1 == 5) != 0), true); [line 91]\n " shape="invhouse"] + "constructor_new::constructor_1_arg_new_div03" -> "constructor_new::constructor_1_arg_new_div02" ; +"constructor_new::constructor_1_arg_new_div02" [label="2: Exit constructor_new::constructor_1_arg_new_div0 \n " color=yellow style=filled] - 86 -> 88 ; -85 [label="85: BinaryOperatorStmt: EQ \n n$1=_fun_constructor_new::getValue(5:int ) [line 91]\n " shape="box"] +"constructor_new::constructor_1_arg_new_div01" [label="1: Start constructor_new::constructor_1_arg_new_div0\nFormals: \nLocals: p:class constructor_new::Person * \n DECLARE_LOCALS(&return,&p); [line 29]\n " color=yellow style=filled] - 85 -> 86 ; - 85 -> 87 ; -84 [label="84: + \n " ] + "constructor_new::constructor_1_arg_new_div01" -> "constructor_new::constructor_1_arg_new_div04" ; +"constructor_new::int_init_nodes12" [label="12: DeclStmt \n *&z:int =6 [line 65]\n " shape="box"] - 84 -> 90 ; -83 [label="83: Exit constructor_new::array_of_class_with_not_constant_size \n " color=yellow style=filled] + "constructor_new::int_init_nodes12" -> "constructor_new::int_init_nodes11" ; +"constructor_new::int_init_nodes11" [label="11: DeclStmt \n n$9=_fun___new(sizeof(int ):unsigned long ) [line 66]\n n$10=_fun_constructor_new::getValue(4:int ) [line 66]\n *n$9:int =n$10 [line 66]\n *&y:int *=n$9 [line 66]\n " shape="box"] -82 [label="82: Start constructor_new::array_of_class_with_not_constant_size\nFormals: \nLocals: tarray:class constructor_new::Person * 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&tarray,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 90]\n " color=yellow style=filled] + "constructor_new::int_init_nodes11" -> "constructor_new::int_init_nodes5" ; +"constructor_new::int_init_nodes10" [label="10: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 67]\n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 67]\n *n$2:int =n$8 [line 67]\n *&x:int *=n$2 [line 67]\n " shape="box"] - 82 -> 85 ; -81 [label="81: DeclStmt \n n$10=_fun___new_array((sizeof(int ) * 100):unsigned long ) [line 85]\n *n$10[0]:int =1 [line 85]\n *n$10[1]:int =2 [line 85]\n *n$10[2]:int =3 [line 85]\n *n$10[3]:int =4 [line 85]\n *n$10[4]:int =5 [line 85]\n *n$10[5]:int =6 [line 85]\n *n$10[6]:int =7 [line 85]\n *n$10[7]:int =8 [line 85]\n *n$10[8]:int =9 [line 85]\n *n$10[9]:int =10 [line 85]\n *&arr:int *=n$10 [line 85]\n " shape="box"] + "constructor_new::int_init_nodes10" -> "constructor_new::int_init_nodes3" ; +"constructor_new::int_init_nodes9" [label="9: ConditinalStmt Branch \n n$6=*&y:int * [line 67]\n n$7=*n$6:int [line 67]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =(1 + n$7) [line 67]\n " shape="box"] - 81 -> 80 ; -80 [label="80: Return Stmt \n n$0=*&arr:int * [line 86]\n n$1=*n$0[0]:int [line 86]\n n$2=*&arr:int * [line 86]\n n$3=*n$2[1]:int [line 86]\n n$4=*&arr:int * [line 86]\n n$5=*n$4[2]:int [line 86]\n n$6=*&arr:int * [line 86]\n n$7=*n$6[3]:int [line 86]\n n$8=*&arr:int * [line 86]\n n$9=*n$8[4]:int [line 86]\n *&return:int =(1 / (((((n$1 + n$3) + n$5) + n$7) + n$9) - 15)) [line 86]\n " shape="box"] + "constructor_new::int_init_nodes9" -> "constructor_new::int_init_nodes4" ; +"constructor_new::int_init_nodes8" [label="8: ConditinalStmt Branch \n n$5=_fun_constructor_new::getValue(1:int ) [line 67]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =n$5 [line 67]\n " shape="box"] - 80 -> 79 ; -79 [label="79: Exit constructor_new::int_array_init \n " color=yellow style=filled] + "constructor_new::int_init_nodes8" -> "constructor_new::int_init_nodes4" ; +"constructor_new::int_init_nodes7" [label="7: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 67]\n " shape="invhouse"] -78 [label="78: Start constructor_new::int_array_init\nFormals: \nLocals: arr:int * \n DECLARE_LOCALS(&return,&arr); [line 84]\n " color=yellow style=filled] + "constructor_new::int_init_nodes7" -> "constructor_new::int_init_nodes9" ; +"constructor_new::int_init_nodes6" [label="6: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 67]\n " shape="invhouse"] - 78 -> 81 ; -77 [label="77: DeclStmt \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 78]\n n$10=_fun___new_array((sizeof(int ) * n$9):unsigned long ) [line 78]\n *&x2:int *=n$10 [line 78]\n " shape="box"] + "constructor_new::int_init_nodes6" -> "constructor_new::int_init_nodes8" ; +"constructor_new::int_init_nodes5" [label="5: Call _fun_constructor_new::getValue \n n$4=_fun_constructor_new::getValue(0:int ) [line 67]\n " shape="box"] - 77 -> 70 ; -76 [label="76: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =3 [line 78]\n " shape="box"] + "constructor_new::int_init_nodes5" -> "constructor_new::int_init_nodes6" ; + "constructor_new::int_init_nodes5" -> "constructor_new::int_init_nodes7" ; +"constructor_new::int_init_nodes4" [label="4: + \n " ] - 76 -> 71 ; -75 [label="75: ConditinalStmt Branch \n n$8=_fun_constructor_new::getValue(5:int ) [line 78]\n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =n$8 [line 78]\n " shape="box"] + "constructor_new::int_init_nodes4" -> "constructor_new::int_init_nodes10" ; +"constructor_new::int_init_nodes3" [label="3: Return Stmt \n n$0=*&x:int * [line 68]\n n$1=*n$0:int [line 68]\n *&return:int =(1 / (n$1 - 5)) [line 68]\n " shape="box"] - 75 -> 71 ; -74 [label="74: Prune (false branch) \n PRUNE((n$7 == 0), false); [line 78]\n " shape="invhouse"] + "constructor_new::int_init_nodes3" -> "constructor_new::int_init_nodes2" ; +"constructor_new::int_init_nodes2" [label="2: Exit constructor_new::int_init_nodes \n " color=yellow style=filled] - 74 -> 76 ; -73 [label="73: Prune (true branch) \n PRUNE((n$7 != 0), true); [line 78]\n " shape="invhouse"] +"constructor_new::int_init_nodes1" [label="1: Start constructor_new::int_init_nodes\nFormals: \nLocals: x:int * 0$?%__sil_tmpSIL_temp_conditional___n$3:int y:int * z:int \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_temp_conditional___n$3,&y,&z); [line 64]\n " color=yellow style=filled] - 73 -> 75 ; -72 [label="72: Call _fun_constructor_new::getValue \n n$7=_fun_constructor_new::getValue(5:int ) [line 78]\n " shape="box"] + "constructor_new::int_init_nodes1" -> "constructor_new::int_init_nodes12" ; +"constructor_new::float_init_number4" [label="4: DeclStmt \n n$2=_fun___new(sizeof(float ):unsigned long ) [line 45]\n *n$2:float =5.400000 [line 45]\n *&x1:float *=n$2 [line 45]\n " shape="box"] - 72 -> 73 ; - 72 -> 74 ; -71 [label="71: + \n " ] + "constructor_new::float_init_number4" -> "constructor_new::float_init_number3" ; +"constructor_new::float_init_number3" [label="3: Return Stmt \n n$0=*&x1:float * [line 46]\n n$1=*n$0:float [line 46]\n *&return:float =(1 / (n$1 - 5.400000)) [line 46]\n " shape="box"] - 71 -> 77 ; -70 [label="70: BinaryOperatorStmt: Assign \n n$5=*&x2:int * [line 79]\n *n$5[0]:int =1 [line 79]\n " shape="box"] + "constructor_new::float_init_number3" -> "constructor_new::float_init_number2" ; +"constructor_new::float_init_number2" [label="2: Exit constructor_new::float_init_number \n " color=yellow style=filled] - 70 -> 69 ; -69 [label="69: BinaryOperatorStmt: Assign \n n$4=*&x2:int * [line 80]\n *n$4[1]:int =2 [line 80]\n " shape="box"] +"constructor_new::float_init_number1" [label="1: Start constructor_new::float_init_number\nFormals: \nLocals: x1:float * \n DECLARE_LOCALS(&return,&x1); [line 44]\n " color=yellow style=filled] - 69 -> 68 ; -68 [label="68: Return Stmt \n n$0=*&x2:int * [line 81]\n n$1=*n$0[0]:int [line 81]\n n$2=*&x2:int * [line 81]\n n$3=*n$2[1]:int [line 81]\n *&return:int =(1 / ((n$1 + n$3) - 3)) [line 81]\n " shape="box"] + "constructor_new::float_init_number1" -> "constructor_new::float_init_number4" ; +"constructor_new::int_init_empty_list4" [label="4: DeclStmt \n *&x1:int =0 [line 55]\n " shape="box"] - 68 -> 67 ; -67 [label="67: Exit constructor_new::int_array \n " color=yellow style=filled] + "constructor_new::int_init_empty_list4" -> "constructor_new::int_init_empty_list3" ; +"constructor_new::int_init_empty_list3" [label="3: Return Stmt \n n$0=*&x1:int [line 56]\n *&return:int =(1 / n$0) [line 56]\n " shape="box"] -66 [label="66: Start constructor_new::int_array\nFormals: \nLocals: x2:int * 0$?%__sil_tmpSIL_temp_conditional___n$6:int \n DECLARE_LOCALS(&return,&x2,&0$?%__sil_tmpSIL_temp_conditional___n$6); [line 77]\n " color=yellow style=filled] + "constructor_new::int_init_empty_list3" -> "constructor_new::int_init_empty_list2" ; +"constructor_new::int_init_empty_list2" [label="2: Exit constructor_new::int_init_empty_list \n " color=yellow style=filled] - 66 -> 72 ; -65 [label="65: DeclStmt \n *&z:int =6 [line 72]\n " shape="box"] +"constructor_new::int_init_empty_list1" [label="1: Start constructor_new::int_init_empty_list\nFormals: \nLocals: x1:int \n DECLARE_LOCALS(&return,&x1); [line 54]\n " color=yellow style=filled] - 65 -> 59 ; -64 [label="64: DeclStmt \n n$2=_fun___new(sizeof(class constructor_new::Person ):unsigned long ) [line 73]\n n$7=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 73]\n _fun_constructor_new::Person_Person(n$2:class constructor_new::Person *,n$7:int ) [line 73]\n *&p:class constructor_new::Person *=n$2 [line 73]\n " shape="box"] + "constructor_new::int_init_empty_list1" -> "constructor_new::int_init_empty_list4" ; +"constructor_new::Person_Person3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_new::Person * [line 14]\n *n$0.x:int =0 [line 14]\n " shape="box"] - 64 -> 57 ; -63 [label="63: ConditinalStmt Branch \n n$6=*&z:int [line 73]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =(1 + n$6) [line 73]\n " shape="box"] + "constructor_new::Person_Person3" -> "constructor_new::Person_Person2" ; +"constructor_new::Person_Person2" [label="2: Exit constructor_new::Person_Person \n " color=yellow style=filled] - 63 -> 58 ; -62 [label="62: ConditinalStmt Branch \n n$5=_fun_constructor_new::getValue(1:int ) [line 73]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =n$5 [line 73]\n " shape="box"] +"constructor_new::Person_Person1" [label="1: Start constructor_new::Person_Person\nFormals: this:class constructor_new::Person *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 62 -> 58 ; -61 [label="61: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 73]\n " shape="invhouse"] + "constructor_new::Person_Person1" -> "constructor_new::Person_Person3" ; +"constructor_new::array_of_class_with_not_constant_size9" [label="9: DeclStmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 91]\n n$3=_fun___new_array((sizeof(class constructor_new::Person ) * n$2):unsigned long ) [line 91]\n *&tarray:class constructor_new::Person *=n$3 [line 91]\n " shape="box"] - 61 -> 63 ; -60 [label="60: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 73]\n " shape="invhouse"] + "constructor_new::array_of_class_with_not_constant_size9" -> "constructor_new::array_of_class_with_not_constant_size2" ; +"constructor_new::array_of_class_with_not_constant_size8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =3 [line 91]\n " shape="box"] - 60 -> 62 ; -59 [label="59: Call _fun_constructor_new::getValue \n n$4=_fun_constructor_new::getValue(0:int ) [line 73]\n " shape="box"] + "constructor_new::array_of_class_with_not_constant_size8" -> "constructor_new::array_of_class_with_not_constant_size3" ; +"constructor_new::array_of_class_with_not_constant_size7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int =5 [line 91]\n " shape="box"] - 59 -> 60 ; - 59 -> 61 ; -58 [label="58: + \n " ] + "constructor_new::array_of_class_with_not_constant_size7" -> "constructor_new::array_of_class_with_not_constant_size3" ; +"constructor_new::array_of_class_with_not_constant_size6" [label="6: Prune (false branch) \n PRUNE(((n$1 == 5) == 0), false); [line 91]\n " shape="invhouse"] - 58 -> 64 ; -57 [label="57: Return Stmt \n n$0=*&p:class constructor_new::Person * [line 74]\n n$1=*n$0.x:int [line 74]\n *&return:int =(1 / (n$1 - 7)) [line 74]\n " shape="box"] + "constructor_new::array_of_class_with_not_constant_size6" -> "constructor_new::array_of_class_with_not_constant_size8" ; +"constructor_new::array_of_class_with_not_constant_size5" [label="5: Prune (true branch) \n PRUNE(((n$1 == 5) != 0), true); [line 91]\n " shape="invhouse"] - 57 -> 56 ; -56 [label="56: Exit constructor_new::constructor_nodes \n " color=yellow style=filled] + "constructor_new::array_of_class_with_not_constant_size5" -> "constructor_new::array_of_class_with_not_constant_size7" ; +"constructor_new::array_of_class_with_not_constant_size4" [label="4: BinaryOperatorStmt: EQ \n n$1=_fun_constructor_new::getValue(5:int ) [line 91]\n " shape="box"] -55 [label="55: Start constructor_new::constructor_nodes\nFormals: \nLocals: p:class constructor_new::Person * 0$?%__sil_tmpSIL_temp_conditional___n$3:int z:int \n DECLARE_LOCALS(&return,&p,&0$?%__sil_tmpSIL_temp_conditional___n$3,&z); [line 71]\n " color=yellow style=filled] + "constructor_new::array_of_class_with_not_constant_size4" -> "constructor_new::array_of_class_with_not_constant_size5" ; + "constructor_new::array_of_class_with_not_constant_size4" -> "constructor_new::array_of_class_with_not_constant_size6" ; +"constructor_new::array_of_class_with_not_constant_size3" [label="3: + \n " ] - 55 -> 65 ; -54 [label="54: DeclStmt \n *&z:int =6 [line 65]\n " shape="box"] + "constructor_new::array_of_class_with_not_constant_size3" -> "constructor_new::array_of_class_with_not_constant_size9" ; +"constructor_new::array_of_class_with_not_constant_size2" [label="2: Exit constructor_new::array_of_class_with_not_constant_size \n " color=yellow style=filled] - 54 -> 53 ; -53 [label="53: DeclStmt \n n$9=_fun___new(sizeof(int ):unsigned long ) [line 66]\n n$10=_fun_constructor_new::getValue(4:int ) [line 66]\n *n$9:int =n$10 [line 66]\n *&y:int *=n$9 [line 66]\n " shape="box"] +"constructor_new::array_of_class_with_not_constant_size1" [label="1: Start constructor_new::array_of_class_with_not_constant_size\nFormals: \nLocals: tarray:class constructor_new::Person * 0$?%__sil_tmpSIL_temp_conditional___n$0:int \n DECLARE_LOCALS(&return,&tarray,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 90]\n " color=yellow style=filled] - 53 -> 47 ; -52 [label="52: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 67]\n n$8=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 67]\n *n$2:int =n$8 [line 67]\n *&x:int *=n$2 [line 67]\n " shape="box"] + "constructor_new::array_of_class_with_not_constant_size1" -> "constructor_new::array_of_class_with_not_constant_size4" ; +"constructor_new::constructor_nodes11" [label="11: DeclStmt \n *&z:int =6 [line 72]\n " shape="box"] - 52 -> 45 ; -51 [label="51: ConditinalStmt Branch \n n$6=*&y:int * [line 67]\n n$7=*n$6:int [line 67]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =(1 + n$7) [line 67]\n " shape="box"] + "constructor_new::constructor_nodes11" -> "constructor_new::constructor_nodes5" ; +"constructor_new::constructor_nodes10" [label="10: DeclStmt \n n$2=_fun___new(sizeof(class constructor_new::Person ):unsigned long ) [line 73]\n n$7=*&0$?%__sil_tmpSIL_temp_conditional___n$3:int [line 73]\n _fun_constructor_new::Person_Person(n$2:class constructor_new::Person *,n$7:int ) [line 73]\n *&p:class constructor_new::Person *=n$2 [line 73]\n " shape="box"] - 51 -> 46 ; -50 [label="50: ConditinalStmt Branch \n n$5=_fun_constructor_new::getValue(1:int ) [line 67]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =n$5 [line 67]\n " shape="box"] + "constructor_new::constructor_nodes10" -> "constructor_new::constructor_nodes3" ; +"constructor_new::constructor_nodes9" [label="9: ConditinalStmt Branch \n n$6=*&z:int [line 73]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =(1 + n$6) [line 73]\n " shape="box"] - 50 -> 46 ; -49 [label="49: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 67]\n " shape="invhouse"] + "constructor_new::constructor_nodes9" -> "constructor_new::constructor_nodes4" ; +"constructor_new::constructor_nodes8" [label="8: ConditinalStmt Branch \n n$5=_fun_constructor_new::getValue(1:int ) [line 73]\n *&0$?%__sil_tmpSIL_temp_conditional___n$3:int =n$5 [line 73]\n " shape="box"] - 49 -> 51 ; -48 [label="48: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 67]\n " shape="invhouse"] + "constructor_new::constructor_nodes8" -> "constructor_new::constructor_nodes4" ; +"constructor_new::constructor_nodes7" [label="7: Prune (false branch) \n PRUNE((n$4 == 0), false); [line 73]\n " shape="invhouse"] - 48 -> 50 ; -47 [label="47: Call _fun_constructor_new::getValue \n n$4=_fun_constructor_new::getValue(0:int ) [line 67]\n " shape="box"] + "constructor_new::constructor_nodes7" -> "constructor_new::constructor_nodes9" ; +"constructor_new::constructor_nodes6" [label="6: Prune (true branch) \n PRUNE((n$4 != 0), true); [line 73]\n " shape="invhouse"] - 47 -> 48 ; - 47 -> 49 ; -46 [label="46: + \n " ] + "constructor_new::constructor_nodes6" -> "constructor_new::constructor_nodes8" ; +"constructor_new::constructor_nodes5" [label="5: Call _fun_constructor_new::getValue \n n$4=_fun_constructor_new::getValue(0:int ) [line 73]\n " shape="box"] - 46 -> 52 ; -45 [label="45: Return Stmt \n n$0=*&x:int * [line 68]\n n$1=*n$0:int [line 68]\n *&return:int =(1 / (n$1 - 5)) [line 68]\n " shape="box"] + "constructor_new::constructor_nodes5" -> "constructor_new::constructor_nodes6" ; + "constructor_new::constructor_nodes5" -> "constructor_new::constructor_nodes7" ; +"constructor_new::constructor_nodes4" [label="4: + \n " ] - 45 -> 44 ; -44 [label="44: Exit constructor_new::int_init_nodes \n " color=yellow style=filled] + "constructor_new::constructor_nodes4" -> "constructor_new::constructor_nodes10" ; +"constructor_new::constructor_nodes3" [label="3: Return Stmt \n n$0=*&p:class constructor_new::Person * [line 74]\n n$1=*n$0.x:int [line 74]\n *&return:int =(1 / (n$1 - 7)) [line 74]\n " shape="box"] -43 [label="43: Start constructor_new::int_init_nodes\nFormals: \nLocals: x:int * 0$?%__sil_tmpSIL_temp_conditional___n$3:int y:int * z:int \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_temp_conditional___n$3,&y,&z); [line 64]\n " color=yellow style=filled] + "constructor_new::constructor_nodes3" -> "constructor_new::constructor_nodes2" ; +"constructor_new::constructor_nodes2" [label="2: Exit constructor_new::constructor_nodes \n " color=yellow style=filled] - 43 -> 54 ; -42 [label="42: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 60]\n *n$2:int =0 [line 60]\n *&x1:int *=n$2 [line 60]\n " shape="box"] +"constructor_new::constructor_nodes1" [label="1: Start constructor_new::constructor_nodes\nFormals: \nLocals: p:class constructor_new::Person * 0$?%__sil_tmpSIL_temp_conditional___n$3:int z:int \n DECLARE_LOCALS(&return,&p,&0$?%__sil_tmpSIL_temp_conditional___n$3,&z); [line 71]\n " color=yellow style=filled] - 42 -> 41 ; -41 [label="41: Return Stmt \n n$0=*&x1:int * [line 61]\n n$1=*n$0:int [line 61]\n *&return:int =(1 / n$1) [line 61]\n " shape="box"] + "constructor_new::constructor_nodes1" -> "constructor_new::constructor_nodes11" ; +"constructor_new::int_init_empty_list_new4" [label="4: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 60]\n *n$2:int =0 [line 60]\n *&x1:int *=n$2 [line 60]\n " shape="box"] - 41 -> 40 ; -40 [label="40: Exit constructor_new::int_init_empty_list_new \n " color=yellow style=filled] + "constructor_new::int_init_empty_list_new4" -> "constructor_new::int_init_empty_list_new3" ; +"constructor_new::int_init_empty_list_new3" [label="3: Return Stmt \n n$0=*&x1:int * [line 61]\n n$1=*n$0:int [line 61]\n *&return:int =(1 / n$1) [line 61]\n " shape="box"] -39 [label="39: Start constructor_new::int_init_empty_list_new\nFormals: \nLocals: x1:int * \n DECLARE_LOCALS(&return,&x1); [line 59]\n " color=yellow style=filled] + "constructor_new::int_init_empty_list_new3" -> "constructor_new::int_init_empty_list_new2" ; +"constructor_new::int_init_empty_list_new2" [label="2: Exit constructor_new::int_init_empty_list_new \n " color=yellow style=filled] - 39 -> 42 ; -38 [label="38: DeclStmt \n *&x1:int =0 [line 55]\n " shape="box"] +"constructor_new::int_init_empty_list_new1" [label="1: Start constructor_new::int_init_empty_list_new\nFormals: \nLocals: x1:int * \n DECLARE_LOCALS(&return,&x1); [line 59]\n " color=yellow style=filled] - 38 -> 37 ; -37 [label="37: Return Stmt \n n$0=*&x1:int [line 56]\n *&return:int =(1 / n$0) [line 56]\n " shape="box"] + "constructor_new::int_init_empty_list_new1" -> "constructor_new::int_init_empty_list_new4" ; +"constructor_new::int_init_empty4" [label="4: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 50]\n *n$2:int =0 [line 50]\n *&x1:int *=n$2 [line 50]\n " shape="box"] - 37 -> 36 ; -36 [label="36: Exit constructor_new::int_init_empty_list \n " color=yellow style=filled] + "constructor_new::int_init_empty4" -> "constructor_new::int_init_empty3" ; +"constructor_new::int_init_empty3" [label="3: Return Stmt \n n$0=*&x1:int * [line 51]\n n$1=*n$0:int [line 51]\n *&return:int =(1 / n$1) [line 51]\n " shape="box"] -35 [label="35: Start constructor_new::int_init_empty_list\nFormals: \nLocals: x1:int \n DECLARE_LOCALS(&return,&x1); [line 54]\n " color=yellow style=filled] + "constructor_new::int_init_empty3" -> "constructor_new::int_init_empty2" ; +"constructor_new::int_init_empty2" [label="2: Exit constructor_new::int_init_empty \n " color=yellow style=filled] - 35 -> 38 ; -34 [label="34: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 50]\n *n$2:int =0 [line 50]\n *&x1:int *=n$2 [line 50]\n " shape="box"] +"constructor_new::int_init_empty1" [label="1: Start constructor_new::int_init_empty\nFormals: \nLocals: x1:int * \n DECLARE_LOCALS(&return,&x1); [line 49]\n " color=yellow style=filled] - 34 -> 33 ; -33 [label="33: Return Stmt \n n$0=*&x1:int * [line 51]\n n$1=*n$0:int [line 51]\n *&return:int =(1 / n$1) [line 51]\n " shape="box"] + "constructor_new::int_init_empty1" -> "constructor_new::int_init_empty4" ; +"constructor_new::getValue3" [label="3: Return Stmt \n n$0=*&x:int [line 27]\n *&return:int =n$0 [line 27]\n " shape="box"] - 33 -> 32 ; -32 [label="32: Exit constructor_new::int_init_empty \n " color=yellow style=filled] + "constructor_new::getValue3" -> "constructor_new::getValue2" ; +"constructor_new::getValue2" [label="2: Exit constructor_new::getValue \n " color=yellow style=filled] -31 [label="31: Start constructor_new::int_init_empty\nFormals: \nLocals: x1:int * \n DECLARE_LOCALS(&return,&x1); [line 49]\n " color=yellow style=filled] +"constructor_new::getValue1" [label="1: Start constructor_new::getValue\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 31 -> 34 ; -30 [label="30: DeclStmt \n n$2=_fun___new(sizeof(float ):unsigned long ) [line 45]\n *n$2:float =5.400000 [line 45]\n *&x1:float *=n$2 [line 45]\n " shape="box"] + "constructor_new::getValue1" -> "constructor_new::getValue3" ; +"constructor_new::Person_Person3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_new::Person * [line 15]\n n$1=*&i:int [line 15]\n *n$0.x:int =n$1 [line 15]\n " shape="box"] - 30 -> 29 ; -29 [label="29: Return Stmt \n n$0=*&x1:float * [line 46]\n n$1=*n$0:float [line 46]\n *&return:float =(1 / (n$1 - 5.400000)) [line 46]\n " shape="box"] + "constructor_new::Person_Person3" -> "constructor_new::Person_Person2" ; +"constructor_new::Person_Person2" [label="2: Exit constructor_new::Person_Person \n " color=yellow style=filled] - 29 -> 28 ; -28 [label="28: Exit constructor_new::float_init_number \n " color=yellow style=filled] +"constructor_new::Person_Person1" [label="1: Start constructor_new::Person_Person\nFormals: this:class constructor_new::Person * i:int \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] -27 [label="27: Start constructor_new::float_init_number\nFormals: \nLocals: x1:float * \n DECLARE_LOCALS(&return,&x1); [line 44]\n " color=yellow style=filled] + "constructor_new::Person_Person1" -> "constructor_new::Person_Person3" ; +"constructor_new::int_array12" [label="12: DeclStmt \n n$9=*&0$?%__sil_tmpSIL_temp_conditional___n$6:int [line 78]\n n$10=_fun___new_array((sizeof(int ) * n$9):unsigned long ) [line 78]\n *&x2:int *=n$10 [line 78]\n " shape="box"] - 27 -> 30 ; -26 [label="26: DeclStmt \n n$2=_fun___new(sizeof(int ):unsigned long ) [line 40]\n *n$2:int =5 [line 40]\n *&x1:int *=n$2 [line 40]\n " shape="box"] + "constructor_new::int_array12" -> "constructor_new::int_array5" ; +"constructor_new::int_array11" [label="11: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =3 [line 78]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Return Stmt \n n$0=*&x1:int * [line 41]\n n$1=*n$0:int [line 41]\n *&return:int =(1 / (n$1 - 5)) [line 41]\n " shape="box"] + "constructor_new::int_array11" -> "constructor_new::int_array6" ; +"constructor_new::int_array10" [label="10: ConditinalStmt Branch \n n$8=_fun_constructor_new::getValue(5:int ) [line 78]\n *&0$?%__sil_tmpSIL_temp_conditional___n$6:int =n$8 [line 78]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit constructor_new::int_init_number \n " color=yellow style=filled] + "constructor_new::int_array10" -> "constructor_new::int_array6" ; +"constructor_new::int_array9" [label="9: Prune (false branch) \n PRUNE((n$7 == 0), false); [line 78]\n " shape="invhouse"] -23 [label="23: Start constructor_new::int_init_number\nFormals: \nLocals: x1:int * \n DECLARE_LOCALS(&return,&x1); [line 39]\n " color=yellow style=filled] + "constructor_new::int_array9" -> "constructor_new::int_array11" ; +"constructor_new::int_array8" [label="8: Prune (true branch) \n PRUNE((n$7 != 0), true); [line 78]\n " shape="invhouse"] - 23 -> 26 ; -22 [label="22: DeclStmt \n n$2=_fun___new(sizeof(class constructor_new::Person ):unsigned long ) [line 35]\n _fun_constructor_new::Person_Person(n$2:class constructor_new::Person *,5:int ,6:int ,7:int ) [line 35]\n *&p:class constructor_new::Person *=n$2 [line 35]\n " shape="box"] + "constructor_new::int_array8" -> "constructor_new::int_array10" ; +"constructor_new::int_array7" [label="7: Call _fun_constructor_new::getValue \n n$7=_fun_constructor_new::getValue(5:int ) [line 78]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Return Stmt \n n$0=*&p:class constructor_new::Person * [line 36]\n n$1=*n$0.z:int [line 36]\n *&return:int =(1 / (n$1 - 7)) [line 36]\n " shape="box"] + "constructor_new::int_array7" -> "constructor_new::int_array8" ; + "constructor_new::int_array7" -> "constructor_new::int_array9" ; +"constructor_new::int_array6" [label="6: + \n " ] - 21 -> 20 ; -20 [label="20: Exit constructor_new::constructor_3_args_new_div0 \n " color=yellow style=filled] + "constructor_new::int_array6" -> "constructor_new::int_array12" ; +"constructor_new::int_array5" [label="5: BinaryOperatorStmt: Assign \n n$5=*&x2:int * [line 79]\n *n$5[0]:int =1 [line 79]\n " shape="box"] -19 [label="19: Start constructor_new::constructor_3_args_new_div0\nFormals: \nLocals: p:class constructor_new::Person * \n DECLARE_LOCALS(&return,&p); [line 34]\n " color=yellow style=filled] + "constructor_new::int_array5" -> "constructor_new::int_array4" ; +"constructor_new::int_array4" [label="4: BinaryOperatorStmt: Assign \n n$4=*&x2:int * [line 80]\n *n$4[1]:int =2 [line 80]\n " shape="box"] - 19 -> 22 ; -18 [label="18: DeclStmt \n n$2=_fun___new(sizeof(class constructor_new::Person ):unsigned long ) [line 30]\n _fun_constructor_new::Person_Person(n$2:class constructor_new::Person *,5:int ) [line 30]\n *&p:class constructor_new::Person *=n$2 [line 30]\n " shape="box"] + "constructor_new::int_array4" -> "constructor_new::int_array3" ; +"constructor_new::int_array3" [label="3: Return Stmt \n n$0=*&x2:int * [line 81]\n n$1=*n$0[0]:int [line 81]\n n$2=*&x2:int * [line 81]\n n$3=*n$2[1]:int [line 81]\n *&return:int =(1 / ((n$1 + n$3) - 3)) [line 81]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Return Stmt \n n$0=*&p:class constructor_new::Person * [line 31]\n n$1=*n$0.x:int [line 31]\n *&return:int =(1 / (n$1 - 5)) [line 31]\n " shape="box"] + "constructor_new::int_array3" -> "constructor_new::int_array2" ; +"constructor_new::int_array2" [label="2: Exit constructor_new::int_array \n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Exit constructor_new::constructor_1_arg_new_div0 \n " color=yellow style=filled] +"constructor_new::int_array1" [label="1: Start constructor_new::int_array\nFormals: \nLocals: x2:int * 0$?%__sil_tmpSIL_temp_conditional___n$6:int \n DECLARE_LOCALS(&return,&x2,&0$?%__sil_tmpSIL_temp_conditional___n$6); [line 77]\n " color=yellow style=filled] -15 [label="15: Start constructor_new::constructor_1_arg_new_div0\nFormals: \nLocals: p:class constructor_new::Person * \n DECLARE_LOCALS(&return,&p); [line 29]\n " color=yellow style=filled] + "constructor_new::int_array1" -> "constructor_new::int_array7" ; +"constructor_new::matrix_of_person4" [label="4: DeclStmt \n n$2=_fun___new_array((sizeof(class constructor_new::Person *) * 10):unsigned long ) [line 99]\n *&tarray:class constructor_new::Person **=n$2 [line 99]\n " shape="box"] - 15 -> 18 ; -14 [label="14: Return Stmt \n n$0=*&x:int [line 27]\n *&return:int =n$0 [line 27]\n " shape="box"] + "constructor_new::matrix_of_person4" -> "constructor_new::matrix_of_person3" ; +"constructor_new::matrix_of_person3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&tarray:class constructor_new::Person ** [line 100]\n n$1=_fun___new_array((sizeof(class constructor_new::Person ) * 10):unsigned long ) [line 100]\n _fun_constructor_new::Person_Person(n$1[0]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[1]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[2]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[3]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[4]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[5]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[6]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[7]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[8]:class constructor_new::Person *) [line 100]\n _fun_constructor_new::Person_Person(n$1[9]:class constructor_new::Person *) [line 100]\n *n$0[0]:class constructor_new::Person *=n$1 [line 100]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit constructor_new::getValue \n " color=yellow style=filled] + "constructor_new::matrix_of_person3" -> "constructor_new::matrix_of_person2" ; +"constructor_new::matrix_of_person2" [label="2: Exit constructor_new::matrix_of_person \n " color=yellow style=filled] -12 [label="12: Start constructor_new::getValue\nFormals: x:int \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] +"constructor_new::matrix_of_person1" [label="1: Start constructor_new::matrix_of_person\nFormals: \nLocals: tarray:class constructor_new::Person ** \n DECLARE_LOCALS(&return,&tarray); [line 98]\n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$4=*&this:class constructor_new::Person * [line 18]\n n$5=*&i:int [line 18]\n *n$4.x:int =n$5 [line 18]\n " shape="box"] + "constructor_new::matrix_of_person1" -> "constructor_new::matrix_of_person4" ; +"constructor_new::array_of_person_with_constant_size3" [label="3: DeclStmt \n n$0=_fun___new_array((sizeof(class constructor_new::Person ) * 10):unsigned long ) [line 95]\n _fun_constructor_new::Person_Person(n$0[0]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[1]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[2]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[3]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[4]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[5]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[6]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[7]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[8]:class constructor_new::Person *) [line 95]\n _fun_constructor_new::Person_Person(n$0[9]:class constructor_new::Person *) [line 95]\n *&tarray:class constructor_new::Person *=n$0 [line 95]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$2=*&this:class constructor_new::Person * [line 19]\n n$3=*&j:int [line 19]\n *n$2.y:int =n$3 [line 19]\n " shape="box"] + "constructor_new::array_of_person_with_constant_size3" -> "constructor_new::array_of_person_with_constant_size2" ; +"constructor_new::array_of_person_with_constant_size2" [label="2: Exit constructor_new::array_of_person_with_constant_size \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_new::Person * [line 20]\n n$1=*&k:int [line 20]\n *n$0.z:int =n$1 [line 20]\n " shape="box"] +"constructor_new::array_of_person_with_constant_size1" [label="1: Start constructor_new::array_of_person_with_constant_size\nFormals: \nLocals: tarray:class constructor_new::Person * \n DECLARE_LOCALS(&return,&tarray); [line 95]\n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit constructor_new::Person_Person \n " color=yellow style=filled] + "constructor_new::array_of_person_with_constant_size1" -> "constructor_new::array_of_person_with_constant_size3" ; +"constructor_new::int_array_init4" [label="4: DeclStmt \n n$10=_fun___new_array((sizeof(int ) * 100):unsigned long ) [line 85]\n *n$10[0]:int =1 [line 85]\n *n$10[1]:int =2 [line 85]\n *n$10[2]:int =3 [line 85]\n *n$10[3]:int =4 [line 85]\n *n$10[4]:int =5 [line 85]\n *n$10[5]:int =6 [line 85]\n *n$10[6]:int =7 [line 85]\n *n$10[7]:int =8 [line 85]\n *n$10[8]:int =9 [line 85]\n *n$10[9]:int =10 [line 85]\n *&arr:int *=n$10 [line 85]\n " shape="box"] -7 [label="7: Start constructor_new::Person_Person\nFormals: this:class constructor_new::Person * i:int j:int k:int \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "constructor_new::int_array_init4" -> "constructor_new::int_array_init3" ; +"constructor_new::int_array_init3" [label="3: Return Stmt \n n$0=*&arr:int * [line 86]\n n$1=*n$0[0]:int [line 86]\n n$2=*&arr:int * [line 86]\n n$3=*n$2[1]:int [line 86]\n n$4=*&arr:int * [line 86]\n n$5=*n$4[2]:int [line 86]\n n$6=*&arr:int * [line 86]\n n$7=*n$6[3]:int [line 86]\n n$8=*&arr:int * [line 86]\n n$9=*n$8[4]:int [line 86]\n *&return:int =(1 / (((((n$1 + n$3) + n$5) + n$7) + n$9) - 15)) [line 86]\n " shape="box"] - 7 -> 11 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_new::Person * [line 15]\n n$1=*&i:int [line 15]\n *n$0.x:int =n$1 [line 15]\n " shape="box"] + "constructor_new::int_array_init3" -> "constructor_new::int_array_init2" ; +"constructor_new::int_array_init2" [label="2: Exit constructor_new::int_array_init \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit constructor_new::Person_Person \n " color=yellow style=filled] +"constructor_new::int_array_init1" [label="1: Start constructor_new::int_array_init\nFormals: \nLocals: arr:int * \n DECLARE_LOCALS(&return,&arr); [line 84]\n " color=yellow style=filled] -4 [label="4: Start constructor_new::Person_Person\nFormals: this:class constructor_new::Person * i:int \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] + "constructor_new::int_array_init1" -> "constructor_new::int_array_init4" ; +"constructor_new::constructor_3_args_new_div04" [label="4: DeclStmt \n n$2=_fun___new(sizeof(class constructor_new::Person ):unsigned long ) [line 35]\n _fun_constructor_new::Person_Person(n$2:class constructor_new::Person *,5:int ,6:int ,7:int ) [line 35]\n *&p:class constructor_new::Person *=n$2 [line 35]\n " shape="box"] - 4 -> 6 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_new::Person * [line 14]\n *n$0.x:int =0 [line 14]\n " shape="box"] + "constructor_new::constructor_3_args_new_div04" -> "constructor_new::constructor_3_args_new_div03" ; +"constructor_new::constructor_3_args_new_div03" [label="3: Return Stmt \n n$0=*&p:class constructor_new::Person * [line 36]\n n$1=*n$0.z:int [line 36]\n *&return:int =(1 / (n$1 - 7)) [line 36]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit constructor_new::Person_Person \n " color=yellow style=filled] + "constructor_new::constructor_3_args_new_div03" -> "constructor_new::constructor_3_args_new_div02" ; +"constructor_new::constructor_3_args_new_div02" [label="2: Exit constructor_new::constructor_3_args_new_div0 \n " color=yellow style=filled] -1 [label="1: Start constructor_new::Person_Person\nFormals: this:class constructor_new::Person *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"constructor_new::constructor_3_args_new_div01" [label="1: Start constructor_new::constructor_3_args_new_div0\nFormals: \nLocals: p:class constructor_new::Person * \n DECLARE_LOCALS(&return,&p); [line 34]\n " color=yellow style=filled] - 1 -> 3 ; + "constructor_new::constructor_3_args_new_div01" -> "constructor_new::constructor_3_args_new_div04" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_struct_init_list.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_struct_init_list.cpp.dot index c39d91dbe..86700cf05 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_struct_init_list.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_struct_init_list.cpp.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: DeclStmt \n *&0$?%__sil_tmpSIL_init_list__n$0.top:int =0 [line 17]\n *&0$?%__sil_tmpSIL_init_list__n$0.left:int =0 [line 17]\n *&0$?%__sil_tmpSIL_init_list__n$0.bottom:int =0 [line 17]\n *&0$?%__sil_tmpSIL_init_list__n$0.right:int =0 [line 17]\n _fun_Person_Person(&p:class Person *,&0$?%__sil_tmpSIL_init_list__n$0:class Insets ) [line 17]\n " shape="box"] +"test3" [label="3: DeclStmt \n *&0$?%__sil_tmpSIL_init_list__n$0.top:int =0 [line 17]\n *&0$?%__sil_tmpSIL_init_list__n$0.left:int =0 [line 17]\n *&0$?%__sil_tmpSIL_init_list__n$0.bottom:int =0 [line 17]\n *&0$?%__sil_tmpSIL_init_list__n$0.right:int =0 [line 17]\n _fun_Person_Person(&p:class Person *,&0$?%__sil_tmpSIL_init_list__n$0:class Insets ) [line 17]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -4 [label="4: Start test\nFormals: \nLocals: p:class Person 0$?%__sil_tmpSIL_init_list__n$0:class Insets \n DECLARE_LOCALS(&return,&p,&0$?%__sil_tmpSIL_init_list__n$0); [line 17]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: p:class Person 0$?%__sil_tmpSIL_init_list__n$0:class Insets \n DECLARE_LOCALS(&return,&p,&0$?%__sil_tmpSIL_init_list__n$0); [line 17]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Constructor Init \n n$0=*&this:class Person * [line 14]\n n$1=*&l:class Insets & [line 14]\n n$2=*n$1.top:int [line 14]\n *n$0.age:int =n$2 [line 14]\n " shape="box"] + "test1" -> "test3" ; +"Person_Person3" [label="3: Constructor Init \n n$0=*&this:class Person * [line 14]\n n$1=*&l:class Insets & [line 14]\n n$2=*n$1.top:int [line 14]\n *n$0.age:int =n$2 [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Person_Person \n " color=yellow style=filled] + "Person_Person3" -> "Person_Person2" ; +"Person_Person2" [label="2: Exit Person_Person \n " color=yellow style=filled] -1 [label="1: Start Person_Person\nFormals: this:class Person * l:class Insets &\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"Person_Person1" [label="1: Start Person_Person\nFormals: this:class Person * l:class Insets &\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 1 -> 3 ; + "Person_Person1" -> "Person_Person3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_with_body.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_with_body.cpp.dot index d5c0c6b2d..6076344e7 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_with_body.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/constructor_with_body.cpp.dot @@ -1,100 +1,100 @@ /* @generated */ digraph iCFG { -26 [label="26: DeclStmt \n _fun_constructor_with_body::X_X(&x:class constructor_with_body::X *,0:int ,1:int ) [line 41]\n " shape="box"] +"constructor_with_body::X_init3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_with_body::X * [line 14]\n *n$0.f:int =0 [line 14]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Call _fun_constructor_with_body::X_div \n _=*&x:class constructor_with_body::X [line 42]\n n$1=_fun_constructor_with_body::X_div(&x:class constructor_with_body::X &) [line 42]\n " shape="box"] + "constructor_with_body::X_init3" -> "constructor_with_body::X_init2" ; +"constructor_with_body::X_init2" [label="2: Exit constructor_with_body::X_init \n " color=yellow style=filled] - 25 -> 24 ; -24 [label="24: Exit constructor_with_body::test_div1 \n " color=yellow style=filled] +"constructor_with_body::X_init1" [label="1: Start constructor_with_body::X_init\nFormals: this:class constructor_with_body::X *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] -23 [label="23: Start constructor_with_body::test_div1\nFormals: \nLocals: x:class constructor_with_body::X \n DECLARE_LOCALS(&return,&x); [line 40]\n " color=yellow style=filled] + "constructor_with_body::X_init1" -> "constructor_with_body::X_init3" ; +"constructor_with_body::X_div3" [label="3: Return Stmt \n n$0=*&this:class constructor_with_body::X * [line 21]\n n$1=*n$0.f:int [line 21]\n *&return:int =(1 / n$1) [line 21]\n " shape="box"] - 23 -> 26 ; -22 [label="22: DeclStmt \n _fun_constructor_with_body::X_X(&x:class constructor_with_body::X *) [line 36]\n " shape="box"] + "constructor_with_body::X_div3" -> "constructor_with_body::X_div2" ; +"constructor_with_body::X_div2" [label="2: Exit constructor_with_body::X_div \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Call _fun_constructor_with_body::X_div \n _=*&x:class constructor_with_body::X [line 37]\n n$1=_fun_constructor_with_body::X_div(&x:class constructor_with_body::X &) [line 37]\n " shape="box"] +"constructor_with_body::X_div1" [label="1: Start constructor_with_body::X_div\nFormals: this:class constructor_with_body::X *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit constructor_with_body::test_div0_default_constructor \n " color=yellow style=filled] + "constructor_with_body::X_div1" -> "constructor_with_body::X_div3" ; +"constructor_with_body::test_div14" [label="4: DeclStmt \n _fun_constructor_with_body::X_X(&x:class constructor_with_body::X *,0:int ,1:int ) [line 41]\n " shape="box"] -19 [label="19: Start constructor_with_body::test_div0_default_constructor\nFormals: \nLocals: x:class constructor_with_body::X \n DECLARE_LOCALS(&return,&x); [line 35]\n " color=yellow style=filled] + "constructor_with_body::test_div14" -> "constructor_with_body::test_div13" ; +"constructor_with_body::test_div13" [label="3: Call _fun_constructor_with_body::X_div \n _=*&x:class constructor_with_body::X [line 42]\n n$1=_fun_constructor_with_body::X_div(&x:class constructor_with_body::X &) [line 42]\n " shape="box"] - 19 -> 22 ; -18 [label="18: DeclStmt \n _fun_constructor_with_body::X_X(&x:class constructor_with_body::X *,-2:int ,2:int ) [line 31]\n " shape="box"] + "constructor_with_body::test_div13" -> "constructor_with_body::test_div12" ; +"constructor_with_body::test_div12" [label="2: Exit constructor_with_body::test_div1 \n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Call _fun_constructor_with_body::X_div \n _=*&x:class constructor_with_body::X [line 32]\n n$1=_fun_constructor_with_body::X_div(&x:class constructor_with_body::X &) [line 32]\n " shape="box"] +"constructor_with_body::test_div11" [label="1: Start constructor_with_body::test_div1\nFormals: \nLocals: x:class constructor_with_body::X \n DECLARE_LOCALS(&return,&x); [line 40]\n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Exit constructor_with_body::test_div0 \n " color=yellow style=filled] + "constructor_with_body::test_div11" -> "constructor_with_body::test_div14" ; +"constructor_with_body::X_X5" [label="5: DeclStmt \n n$4=*&a:int [line 25]\n n$5=*&b:int [line 25]\n *&c:int =(n$4 + n$5) [line 25]\n " shape="box"] -15 [label="15: Start constructor_with_body::test_div0\nFormals: \nLocals: x:class constructor_with_body::X \n DECLARE_LOCALS(&return,&x); [line 30]\n " color=yellow style=filled] + "constructor_with_body::X_X5" -> "constructor_with_body::X_X4" ; +"constructor_with_body::X_X4" [label="4: Call _fun_constructor_with_body::X_init \n n$2=*&this:class constructor_with_body::X * [line 26]\n _=*n$2:class constructor_with_body::X [line 26]\n _fun_constructor_with_body::X_init(n$2:class constructor_with_body::X *) [line 26]\n " shape="box"] - 15 -> 18 ; -14 [label="14: DeclStmt \n n$4=*&a:int [line 25]\n n$5=*&b:int [line 25]\n *&c:int =(n$4 + n$5) [line 25]\n " shape="box"] + "constructor_with_body::X_X4" -> "constructor_with_body::X_X3" ; +"constructor_with_body::X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_with_body::X * [line 27]\n n$1=*&c:int [line 27]\n *n$0.f:int =n$1 [line 27]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Call _fun_constructor_with_body::X_init \n n$2=*&this:class constructor_with_body::X * [line 26]\n _=*n$2:class constructor_with_body::X [line 26]\n _fun_constructor_with_body::X_init(n$2:class constructor_with_body::X *) [line 26]\n " shape="box"] + "constructor_with_body::X_X3" -> "constructor_with_body::X_X2" ; +"constructor_with_body::X_X2" [label="2: Exit constructor_with_body::X_X \n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_with_body::X * [line 27]\n n$1=*&c:int [line 27]\n *n$0.f:int =n$1 [line 27]\n " shape="box"] +"constructor_with_body::X_X1" [label="1: Start constructor_with_body::X_X\nFormals: this:class constructor_with_body::X * a:int b:int \nLocals: c:int \n DECLARE_LOCALS(&return,&c); [line 24]\n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: Exit constructor_with_body::X_X \n " color=yellow style=filled] + "constructor_with_body::X_X1" -> "constructor_with_body::X_X5" ; +"constructor_with_body::X_X3" [label="3: Call _fun_constructor_with_body::X_init \n n$0=*&this:class constructor_with_body::X * [line 17]\n _=*n$0:class constructor_with_body::X [line 17]\n _fun_constructor_with_body::X_init(n$0:class constructor_with_body::X *) [line 17]\n " shape="box"] -10 [label="10: Start constructor_with_body::X_X\nFormals: this:class constructor_with_body::X * a:int b:int \nLocals: c:int \n DECLARE_LOCALS(&return,&c); [line 24]\n " color=yellow style=filled] + "constructor_with_body::X_X3" -> "constructor_with_body::X_X2" ; +"constructor_with_body::X_X2" [label="2: Exit constructor_with_body::X_X \n " color=yellow style=filled] - 10 -> 14 ; -9 [label="9: Return Stmt \n n$0=*&this:class constructor_with_body::X * [line 21]\n n$1=*n$0.f:int [line 21]\n *&return:int =(1 / n$1) [line 21]\n " shape="box"] +"constructor_with_body::X_X1" [label="1: Start constructor_with_body::X_X\nFormals: this:class constructor_with_body::X *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit constructor_with_body::X_div \n " color=yellow style=filled] + "constructor_with_body::X_X1" -> "constructor_with_body::X_X3" ; +"constructor_with_body::test_div0_default_constructor4" [label="4: DeclStmt \n _fun_constructor_with_body::X_X(&x:class constructor_with_body::X *) [line 36]\n " shape="box"] -7 [label="7: Start constructor_with_body::X_div\nFormals: this:class constructor_with_body::X *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] + "constructor_with_body::test_div0_default_constructor4" -> "constructor_with_body::test_div0_default_constructor3" ; +"constructor_with_body::test_div0_default_constructor3" [label="3: Call _fun_constructor_with_body::X_div \n _=*&x:class constructor_with_body::X [line 37]\n n$1=_fun_constructor_with_body::X_div(&x:class constructor_with_body::X &) [line 37]\n " shape="box"] - 7 -> 9 ; -6 [label="6: Call _fun_constructor_with_body::X_init \n n$0=*&this:class constructor_with_body::X * [line 17]\n _=*n$0:class constructor_with_body::X [line 17]\n _fun_constructor_with_body::X_init(n$0:class constructor_with_body::X *) [line 17]\n " shape="box"] + "constructor_with_body::test_div0_default_constructor3" -> "constructor_with_body::test_div0_default_constructor2" ; +"constructor_with_body::test_div0_default_constructor2" [label="2: Exit constructor_with_body::test_div0_default_constructor \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit constructor_with_body::X_X \n " color=yellow style=filled] +"constructor_with_body::test_div0_default_constructor1" [label="1: Start constructor_with_body::test_div0_default_constructor\nFormals: \nLocals: x:class constructor_with_body::X \n DECLARE_LOCALS(&return,&x); [line 35]\n " color=yellow style=filled] -4 [label="4: Start constructor_with_body::X_X\nFormals: this:class constructor_with_body::X *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "constructor_with_body::test_div0_default_constructor1" -> "constructor_with_body::test_div0_default_constructor4" ; +"constructor_with_body::test_div04" [label="4: DeclStmt \n _fun_constructor_with_body::X_X(&x:class constructor_with_body::X *,-2:int ,2:int ) [line 31]\n " shape="box"] - 4 -> 6 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class constructor_with_body::X * [line 14]\n *n$0.f:int =0 [line 14]\n " shape="box"] + "constructor_with_body::test_div04" -> "constructor_with_body::test_div03" ; +"constructor_with_body::test_div03" [label="3: Call _fun_constructor_with_body::X_div \n _=*&x:class constructor_with_body::X [line 32]\n n$1=_fun_constructor_with_body::X_div(&x:class constructor_with_body::X &) [line 32]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit constructor_with_body::X_init \n " color=yellow style=filled] + "constructor_with_body::test_div03" -> "constructor_with_body::test_div02" ; +"constructor_with_body::test_div02" [label="2: Exit constructor_with_body::test_div0 \n " color=yellow style=filled] -1 [label="1: Start constructor_with_body::X_init\nFormals: this:class constructor_with_body::X *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"constructor_with_body::test_div01" [label="1: Start constructor_with_body::test_div0\nFormals: \nLocals: x:class constructor_with_body::X \n DECLARE_LOCALS(&return,&x); [line 30]\n " color=yellow style=filled] - 1 -> 3 ; + "constructor_with_body::test_div01" -> "constructor_with_body::test_div04" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/copy_move_constructor.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/copy_move_constructor.cpp.dot index 2bafdf0f6..9b48c68bb 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/copy_move_constructor.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/copy_move_constructor.cpp.dot @@ -1,248 +1,248 @@ /* @generated */ digraph iCFG { -65 [label="65: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y1:class copy_move_constructor::Y *) [line 75]\n " shape="box"] +"copy_move_constructor::getX5" [label="5: DeclStmt \n _fun_copy_move_constructor::X_X(&x:class copy_move_constructor::X *) [line 30]\n " shape="box"] - 65 -> 64 ; -64 [label="64: BinaryOperatorStmt: Assign \n *&y1.f:int =1 [line 76]\n " shape="box"] + "copy_move_constructor::getX5" -> "copy_move_constructor::getX4" ; +"copy_move_constructor::getX4" [label="4: BinaryOperatorStmt: Assign \n n$1=*&f:int [line 31]\n *&x.f:int =n$1 [line 31]\n " shape="box"] - 64 -> 63 ; -63 [label="63: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y2:class copy_move_constructor::Y *,&y1:class copy_move_constructor::Y &) [line 77]\n " shape="box"] + "copy_move_constructor::getX4" -> "copy_move_constructor::getX3" ; +"copy_move_constructor::getX3" [label="3: Return Stmt \n n$0=*&__return_param:class copy_move_constructor::X * [line 32]\n _fun_copy_move_constructor::X_X(n$0:class copy_move_constructor::X *,&x:class copy_move_constructor::X &) [line 32]\n " shape="box"] - 63 -> 62 ; -62 [label="62: DeclStmt \n n$5=*&y2.f:int [line 78]\n *&d1:int =(1 / n$5) [line 78]\n " shape="box"] + "copy_move_constructor::getX3" -> "copy_move_constructor::getX2" ; +"copy_move_constructor::getX2" [label="2: Exit copy_move_constructor::getX \n " color=yellow style=filled] - 62 -> 61 ; -61 [label="61: DeclStmt \n _fun_copy_move_constructor::getY(2:int ,&0$?%__sil_tmp__temp_return_n$3:class copy_move_constructor::Y *) [line 79]\n n$4=*&0$?%__sil_tmp__temp_return_n$3.f:int [line 79]\n *&d2:int =(1 / n$4) [line 79]\n " shape="box"] +"copy_move_constructor::getX1" [label="1: Start copy_move_constructor::getX\nFormals: f:int __return_param:class copy_move_constructor::X *\nLocals: x:class copy_move_constructor::X \n DECLARE_LOCALS(&return,&x); [line 29]\n " color=yellow style=filled] - 61 -> 60 ; -60 [label="60: Return Stmt \n n$0=*&d1:int [line 80]\n n$1=*&d2:int [line 80]\n *&return:int =(n$0 + n$1) [line 80]\n " shape="box"] + "copy_move_constructor::getX1" -> "copy_move_constructor::getX5" ; +"copy_move_constructor::moveY_div03" [label="3: Return Stmt \n _fun_copy_move_constructor::getY(1:int ,&0$?%__sil_tmp__temp_return_n$1:class copy_move_constructor::Y *) [line 57]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 57]\n *&return:int =(1 / n$2) [line 57]\n " shape="box"] - 60 -> 59 ; -59 [label="59: Exit copy_move_constructor::copyY_moveY_div1 \n " color=yellow style=filled] + "copy_move_constructor::moveY_div03" -> "copy_move_constructor::moveY_div02" ; +"copy_move_constructor::moveY_div02" [label="2: Exit copy_move_constructor::moveY_div0 \n " color=yellow style=filled] -58 [label="58: Start copy_move_constructor::copyY_moveY_div1\nFormals: \nLocals: d2:int 0$?%__sil_tmp__temp_return_n$3:class copy_move_constructor::Y d1:int y2:class copy_move_constructor::Y y1:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&d2,&0$?%__sil_tmp__temp_return_n$3,&d1,&y2,&y1); [line 74]\n " color=yellow style=filled] +"copy_move_constructor::moveY_div01" [label="1: Start copy_move_constructor::moveY_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 57]\n " color=yellow style=filled] - 58 -> 65 ; -57 [label="57: DeclStmt \n _fun_copy_move_constructor::X_X(&x1:class copy_move_constructor::X *) [line 66]\n " shape="box"] + "copy_move_constructor::moveY_div01" -> "copy_move_constructor::moveY_div03" ; +"copy_move_constructor::moveX_div03" [label="3: Return Stmt \n _fun_copy_move_constructor::getX(0:int ,&0$?%__sil_tmp__temp_return_n$1:class copy_move_constructor::X *) [line 48]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 48]\n *&return:int =(1 / n$2) [line 48]\n " shape="box"] - 57 -> 56 ; -56 [label="56: BinaryOperatorStmt: Assign \n *&x1.f:int =1 [line 67]\n " shape="box"] + "copy_move_constructor::moveX_div03" -> "copy_move_constructor::moveX_div02" ; +"copy_move_constructor::moveX_div02" [label="2: Exit copy_move_constructor::moveX_div0 \n " color=yellow style=filled] - 56 -> 55 ; -55 [label="55: DeclStmt \n _fun_copy_move_constructor::X_X(&x2:class copy_move_constructor::X *,&x1:class copy_move_constructor::X &) [line 68]\n " shape="box"] +"copy_move_constructor::moveX_div01" [label="1: Start copy_move_constructor::moveX_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class copy_move_constructor::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 48]\n " color=yellow style=filled] - 55 -> 54 ; -54 [label="54: DeclStmt \n n$5=*&x2.f:int [line 69]\n *&d1:int =(1 / n$5) [line 69]\n " shape="box"] + "copy_move_constructor::moveX_div01" -> "copy_move_constructor::moveX_div03" ; +"copy_move_constructor::Y_Y2" [label="2: Exit copy_move_constructor::Y_Y \n " color=yellow style=filled] - 54 -> 53 ; -53 [label="53: DeclStmt \n _fun_copy_move_constructor::getX(1:int ,&0$?%__sil_tmp__temp_return_n$3:class copy_move_constructor::X *) [line 70]\n n$4=*&0$?%__sil_tmp__temp_return_n$3.f:int [line 70]\n *&d2:int =(1 / n$4) [line 70]\n " shape="box"] +"copy_move_constructor::Y_Y1" [label="1: Start copy_move_constructor::Y_Y\nFormals: this:class copy_move_constructor::Y *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 53 -> 52 ; -52 [label="52: Return Stmt \n n$0=*&d1:int [line 71]\n n$1=*&d2:int [line 71]\n *&return:int =(n$0 + n$1) [line 71]\n " shape="box"] + "copy_move_constructor::Y_Y1" -> "copy_move_constructor::Y_Y2" ; +"copy_move_constructor::copyX_moveX_div18" [label="8: DeclStmt \n _fun_copy_move_constructor::X_X(&x1:class copy_move_constructor::X *) [line 66]\n " shape="box"] - 52 -> 51 ; -51 [label="51: Exit copy_move_constructor::copyX_moveX_div1 \n " color=yellow style=filled] + "copy_move_constructor::copyX_moveX_div18" -> "copy_move_constructor::copyX_moveX_div17" ; +"copy_move_constructor::copyX_moveX_div17" [label="7: BinaryOperatorStmt: Assign \n *&x1.f:int =1 [line 67]\n " shape="box"] -50 [label="50: Start copy_move_constructor::copyX_moveX_div1\nFormals: \nLocals: d2:int 0$?%__sil_tmp__temp_return_n$3:class copy_move_constructor::X d1:int x2:class copy_move_constructor::X x1:class copy_move_constructor::X \n DECLARE_LOCALS(&return,&d2,&0$?%__sil_tmp__temp_return_n$3,&d1,&x2,&x1); [line 65]\n " color=yellow style=filled] + "copy_move_constructor::copyX_moveX_div17" -> "copy_move_constructor::copyX_moveX_div16" ; +"copy_move_constructor::copyX_moveX_div16" [label="6: DeclStmt \n _fun_copy_move_constructor::X_X(&x2:class copy_move_constructor::X *,&x1:class copy_move_constructor::X &) [line 68]\n " shape="box"] - 50 -> 57 ; -49 [label="49: DeclStmt \n _fun_copy_move_constructor::getY(2:int ,&0$?%__sil_tmpSIL_materialize_temp__n$1:class copy_move_constructor::Y *) [line 60]\n _fun_copy_move_constructor::Y_Y(&y1:class copy_move_constructor::Y *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class copy_move_constructor::Y &) [line 60]\n " shape="box"] + "copy_move_constructor::copyX_moveX_div16" -> "copy_move_constructor::copyX_moveX_div15" ; +"copy_move_constructor::copyX_moveX_div15" [label="5: DeclStmt \n n$5=*&x2.f:int [line 69]\n *&d1:int =(1 / n$5) [line 69]\n " shape="box"] - 49 -> 48 ; -48 [label="48: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y2:class copy_move_constructor::Y *,&y1:class copy_move_constructor::Y &) [line 61]\n " shape="box"] + "copy_move_constructor::copyX_moveX_div15" -> "copy_move_constructor::copyX_moveX_div14" ; +"copy_move_constructor::copyX_moveX_div14" [label="4: DeclStmt \n _fun_copy_move_constructor::getX(1:int ,&0$?%__sil_tmp__temp_return_n$3:class copy_move_constructor::X *) [line 70]\n n$4=*&0$?%__sil_tmp__temp_return_n$3.f:int [line 70]\n *&d2:int =(1 / n$4) [line 70]\n " shape="box"] - 48 -> 47 ; -47 [label="47: Return Stmt \n n$0=*&y2.f:int [line 62]\n *&return:int =(1 / n$0) [line 62]\n " shape="box"] + "copy_move_constructor::copyX_moveX_div14" -> "copy_move_constructor::copyX_moveX_div13" ; +"copy_move_constructor::copyX_moveX_div13" [label="3: Return Stmt \n n$0=*&d1:int [line 71]\n n$1=*&d2:int [line 71]\n *&return:int =(n$0 + n$1) [line 71]\n " shape="box"] - 47 -> 46 ; -46 [label="46: Exit copy_move_constructor::moveY_moveY_copyY_div0 \n " color=yellow style=filled] + "copy_move_constructor::copyX_moveX_div13" -> "copy_move_constructor::copyX_moveX_div12" ; +"copy_move_constructor::copyX_moveX_div12" [label="2: Exit copy_move_constructor::copyX_moveX_div1 \n " color=yellow style=filled] -45 [label="45: Start copy_move_constructor::moveY_moveY_copyY_div0\nFormals: \nLocals: y2:class copy_move_constructor::Y y1:class copy_move_constructor::Y 0$?%__sil_tmpSIL_materialize_temp__n$1:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&y2,&y1,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 59]\n " color=yellow style=filled] +"copy_move_constructor::copyX_moveX_div11" [label="1: Start copy_move_constructor::copyX_moveX_div1\nFormals: \nLocals: d2:int 0$?%__sil_tmp__temp_return_n$3:class copy_move_constructor::X d1:int x2:class copy_move_constructor::X x1:class copy_move_constructor::X \n DECLARE_LOCALS(&return,&d2,&0$?%__sil_tmp__temp_return_n$3,&d1,&x2,&x1); [line 65]\n " color=yellow style=filled] - 45 -> 49 ; -44 [label="44: Return Stmt \n _fun_copy_move_constructor::getY(1:int ,&0$?%__sil_tmp__temp_return_n$1:class copy_move_constructor::Y *) [line 57]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 57]\n *&return:int =(1 / n$2) [line 57]\n " shape="box"] + "copy_move_constructor::copyX_moveX_div11" -> "copy_move_constructor::copyX_moveX_div18" ; +"copy_move_constructor::Y_Y3" [label="3: Constructor Init \n n$0=*&this:class copy_move_constructor::Y * [line 24]\n n$1=*&y:class copy_move_constructor::Y & [line 24]\n n$2=*n$1.f:int [line 24]\n *n$0.f:int =n$2 [line 24]\n " shape="box"] - 44 -> 43 ; -43 [label="43: Exit copy_move_constructor::moveY_div0 \n " color=yellow style=filled] + "copy_move_constructor::Y_Y3" -> "copy_move_constructor::Y_Y2" ; +"copy_move_constructor::Y_Y2" [label="2: Exit copy_move_constructor::Y_Y \n " color=yellow style=filled] -42 [label="42: Start copy_move_constructor::moveY_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 57]\n " color=yellow style=filled] +"copy_move_constructor::Y_Y1" [label="1: Start copy_move_constructor::Y_Y\nFormals: this:class copy_move_constructor::Y * y:class copy_move_constructor::Y &\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 42 -> 44 ; -41 [label="41: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y1:class copy_move_constructor::Y *) [line 51]\n " shape="box"] + "copy_move_constructor::Y_Y1" -> "copy_move_constructor::Y_Y3" ; +"copy_move_constructor::getY5" [label="5: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y:class copy_move_constructor::Y *) [line 36]\n " shape="box"] - 41 -> 40 ; -40 [label="40: BinaryOperatorStmt: Assign \n *&y1.f:int =0 [line 52]\n " shape="box"] + "copy_move_constructor::getY5" -> "copy_move_constructor::getY4" ; +"copy_move_constructor::getY4" [label="4: BinaryOperatorStmt: Assign \n n$1=*&f:int [line 37]\n *&y.f:int =n$1 [line 37]\n " shape="box"] - 40 -> 39 ; -39 [label="39: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y2:class copy_move_constructor::Y *,&y1:class copy_move_constructor::Y &) [line 53]\n " shape="box"] + "copy_move_constructor::getY4" -> "copy_move_constructor::getY3" ; +"copy_move_constructor::getY3" [label="3: Return Stmt \n n$0=*&__return_param:class copy_move_constructor::Y * [line 38]\n _fun_copy_move_constructor::Y_Y(n$0:class copy_move_constructor::Y *,&y:class copy_move_constructor::Y &) [line 38]\n " shape="box"] - 39 -> 38 ; -38 [label="38: Return Stmt \n n$0=*&y2.f:int [line 54]\n *&return:int =(1 / n$0) [line 54]\n " shape="box"] + "copy_move_constructor::getY3" -> "copy_move_constructor::getY2" ; +"copy_move_constructor::getY2" [label="2: Exit copy_move_constructor::getY \n " color=yellow style=filled] - 38 -> 37 ; -37 [label="37: Exit copy_move_constructor::copyY_div0 \n " color=yellow style=filled] +"copy_move_constructor::getY1" [label="1: Start copy_move_constructor::getY\nFormals: f:int __return_param:class copy_move_constructor::Y *\nLocals: y:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&y); [line 35]\n " color=yellow style=filled] -36 [label="36: Start copy_move_constructor::copyY_div0\nFormals: \nLocals: y2:class copy_move_constructor::Y y1:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&y2,&y1); [line 50]\n " color=yellow style=filled] + "copy_move_constructor::getY1" -> "copy_move_constructor::getY5" ; +"copy_move_constructor::copyY_moveY_div18" [label="8: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y1:class copy_move_constructor::Y *) [line 75]\n " shape="box"] - 36 -> 41 ; -35 [label="35: Return Stmt \n _fun_copy_move_constructor::getX(0:int ,&0$?%__sil_tmp__temp_return_n$1:class copy_move_constructor::X *) [line 48]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 48]\n *&return:int =(1 / n$2) [line 48]\n " shape="box"] + "copy_move_constructor::copyY_moveY_div18" -> "copy_move_constructor::copyY_moveY_div17" ; +"copy_move_constructor::copyY_moveY_div17" [label="7: BinaryOperatorStmt: Assign \n *&y1.f:int =1 [line 76]\n " shape="box"] - 35 -> 34 ; -34 [label="34: Exit copy_move_constructor::moveX_div0 \n " color=yellow style=filled] + "copy_move_constructor::copyY_moveY_div17" -> "copy_move_constructor::copyY_moveY_div16" ; +"copy_move_constructor::copyY_moveY_div16" [label="6: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y2:class copy_move_constructor::Y *,&y1:class copy_move_constructor::Y &) [line 77]\n " shape="box"] -33 [label="33: Start copy_move_constructor::moveX_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class copy_move_constructor::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 48]\n " color=yellow style=filled] + "copy_move_constructor::copyY_moveY_div16" -> "copy_move_constructor::copyY_moveY_div15" ; +"copy_move_constructor::copyY_moveY_div15" [label="5: DeclStmt \n n$5=*&y2.f:int [line 78]\n *&d1:int =(1 / n$5) [line 78]\n " shape="box"] - 33 -> 35 ; -32 [label="32: DeclStmt \n _fun_copy_move_constructor::X_X(&x1:class copy_move_constructor::X *) [line 42]\n " shape="box"] + "copy_move_constructor::copyY_moveY_div15" -> "copy_move_constructor::copyY_moveY_div14" ; +"copy_move_constructor::copyY_moveY_div14" [label="4: DeclStmt \n _fun_copy_move_constructor::getY(2:int ,&0$?%__sil_tmp__temp_return_n$3:class copy_move_constructor::Y *) [line 79]\n n$4=*&0$?%__sil_tmp__temp_return_n$3.f:int [line 79]\n *&d2:int =(1 / n$4) [line 79]\n " shape="box"] - 32 -> 31 ; -31 [label="31: BinaryOperatorStmt: Assign \n *&x1.f:int =0 [line 43]\n " shape="box"] + "copy_move_constructor::copyY_moveY_div14" -> "copy_move_constructor::copyY_moveY_div13" ; +"copy_move_constructor::copyY_moveY_div13" [label="3: Return Stmt \n n$0=*&d1:int [line 80]\n n$1=*&d2:int [line 80]\n *&return:int =(n$0 + n$1) [line 80]\n " shape="box"] - 31 -> 30 ; -30 [label="30: DeclStmt \n _fun_copy_move_constructor::X_X(&x2:class copy_move_constructor::X *,&x1:class copy_move_constructor::X &) [line 44]\n " shape="box"] + "copy_move_constructor::copyY_moveY_div13" -> "copy_move_constructor::copyY_moveY_div12" ; +"copy_move_constructor::copyY_moveY_div12" [label="2: Exit copy_move_constructor::copyY_moveY_div1 \n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: Return Stmt \n n$0=*&x2.f:int [line 45]\n *&return:int =(1 / n$0) [line 45]\n " shape="box"] +"copy_move_constructor::copyY_moveY_div11" [label="1: Start copy_move_constructor::copyY_moveY_div1\nFormals: \nLocals: d2:int 0$?%__sil_tmp__temp_return_n$3:class copy_move_constructor::Y d1:int y2:class copy_move_constructor::Y y1:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&d2,&0$?%__sil_tmp__temp_return_n$3,&d1,&y2,&y1); [line 74]\n " color=yellow style=filled] - 29 -> 28 ; -28 [label="28: Exit copy_move_constructor::copyX_div0 \n " color=yellow style=filled] + "copy_move_constructor::copyY_moveY_div11" -> "copy_move_constructor::copyY_moveY_div18" ; +"copy_move_constructor::X_X3" [label="3: Constructor Init \n n$0=*&this:class copy_move_constructor::X * [line 15]\n n$1=*&__param_0:class copy_move_constructor::X & [line 15]\n n$2=*n$1.f:int [line 15]\n *n$0.f:int =n$2 [line 15]\n " shape="box"] -27 [label="27: Start copy_move_constructor::copyX_div0\nFormals: \nLocals: x2:class copy_move_constructor::X x1:class copy_move_constructor::X \n DECLARE_LOCALS(&return,&x2,&x1); [line 41]\n " color=yellow style=filled] + "copy_move_constructor::X_X3" -> "copy_move_constructor::X_X2" ; +"copy_move_constructor::X_X2" [label="2: Exit copy_move_constructor::X_X \n " color=yellow style=filled] - 27 -> 32 ; -26 [label="26: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y:class copy_move_constructor::Y *) [line 36]\n " shape="box"] +"copy_move_constructor::X_X1" [label="1: Start copy_move_constructor::X_X\nFormals: this:class copy_move_constructor::X * __param_0:class copy_move_constructor::X &\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: BinaryOperatorStmt: Assign \n n$1=*&f:int [line 37]\n *&y.f:int =n$1 [line 37]\n " shape="box"] + "copy_move_constructor::X_X1" -> "copy_move_constructor::X_X3" ; +"copy_move_constructor::Y_Y3" [label="3: Constructor Init \n n$0=*&this:class copy_move_constructor::Y * [line 26]\n n$1=*&y:class copy_move_constructor::Y & [line 26]\n n$2=*n$1.f:int [line 26]\n *n$0.f:int =(n$2 - 1) [line 26]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Return Stmt \n n$0=*&__return_param:class copy_move_constructor::Y * [line 38]\n _fun_copy_move_constructor::Y_Y(n$0:class copy_move_constructor::Y *,&y:class copy_move_constructor::Y &) [line 38]\n " shape="box"] + "copy_move_constructor::Y_Y3" -> "copy_move_constructor::Y_Y2" ; +"copy_move_constructor::Y_Y2" [label="2: Exit copy_move_constructor::Y_Y \n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Exit copy_move_constructor::getY \n " color=yellow style=filled] +"copy_move_constructor::Y_Y1" [label="1: Start copy_move_constructor::Y_Y\nFormals: this:class copy_move_constructor::Y * y:class copy_move_constructor::Y &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] -22 [label="22: Start copy_move_constructor::getY\nFormals: f:int __return_param:class copy_move_constructor::Y *\nLocals: y:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&y); [line 35]\n " color=yellow style=filled] + "copy_move_constructor::Y_Y1" -> "copy_move_constructor::Y_Y3" ; +"copy_move_constructor::X_X2" [label="2: Exit copy_move_constructor::X_X \n " color=yellow style=filled] - 22 -> 26 ; -21 [label="21: DeclStmt \n _fun_copy_move_constructor::X_X(&x:class copy_move_constructor::X *) [line 30]\n " shape="box"] +"copy_move_constructor::X_X1" [label="1: Start copy_move_constructor::X_X\nFormals: this:class copy_move_constructor::X *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: BinaryOperatorStmt: Assign \n n$1=*&f:int [line 31]\n *&x.f:int =n$1 [line 31]\n " shape="box"] + "copy_move_constructor::X_X1" -> "copy_move_constructor::X_X2" ; +"copy_move_constructor::moveY_moveY_copyY_div05" [label="5: DeclStmt \n _fun_copy_move_constructor::getY(2:int ,&0$?%__sil_tmpSIL_materialize_temp__n$1:class copy_move_constructor::Y *) [line 60]\n _fun_copy_move_constructor::Y_Y(&y1:class copy_move_constructor::Y *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class copy_move_constructor::Y &) [line 60]\n " shape="box"] - 20 -> 19 ; -19 [label="19: Return Stmt \n n$0=*&__return_param:class copy_move_constructor::X * [line 32]\n _fun_copy_move_constructor::X_X(n$0:class copy_move_constructor::X *,&x:class copy_move_constructor::X &) [line 32]\n " shape="box"] + "copy_move_constructor::moveY_moveY_copyY_div05" -> "copy_move_constructor::moveY_moveY_copyY_div04" ; +"copy_move_constructor::moveY_moveY_copyY_div04" [label="4: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y2:class copy_move_constructor::Y *,&y1:class copy_move_constructor::Y &) [line 61]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit copy_move_constructor::getX \n " color=yellow style=filled] + "copy_move_constructor::moveY_moveY_copyY_div04" -> "copy_move_constructor::moveY_moveY_copyY_div03" ; +"copy_move_constructor::moveY_moveY_copyY_div03" [label="3: Return Stmt \n n$0=*&y2.f:int [line 62]\n *&return:int =(1 / n$0) [line 62]\n " shape="box"] -17 [label="17: Start copy_move_constructor::getX\nFormals: f:int __return_param:class copy_move_constructor::X *\nLocals: x:class copy_move_constructor::X \n DECLARE_LOCALS(&return,&x); [line 29]\n " color=yellow style=filled] + "copy_move_constructor::moveY_moveY_copyY_div03" -> "copy_move_constructor::moveY_moveY_copyY_div02" ; +"copy_move_constructor::moveY_moveY_copyY_div02" [label="2: Exit copy_move_constructor::moveY_moveY_copyY_div0 \n " color=yellow style=filled] - 17 -> 21 ; -16 [label="16: Constructor Init \n n$0=*&this:class copy_move_constructor::Y * [line 26]\n n$1=*&y:class copy_move_constructor::Y & [line 26]\n n$2=*n$1.f:int [line 26]\n *n$0.f:int =(n$2 - 1) [line 26]\n " shape="box"] +"copy_move_constructor::moveY_moveY_copyY_div01" [label="1: Start copy_move_constructor::moveY_moveY_copyY_div0\nFormals: \nLocals: y2:class copy_move_constructor::Y y1:class copy_move_constructor::Y 0$?%__sil_tmpSIL_materialize_temp__n$1:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&y2,&y1,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 59]\n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Exit copy_move_constructor::Y_Y \n " color=yellow style=filled] + "copy_move_constructor::moveY_moveY_copyY_div01" -> "copy_move_constructor::moveY_moveY_copyY_div05" ; +"copy_move_constructor::copyY_div06" [label="6: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y1:class copy_move_constructor::Y *) [line 51]\n " shape="box"] -14 [label="14: Start copy_move_constructor::Y_Y\nFormals: this:class copy_move_constructor::Y * y:class copy_move_constructor::Y &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] + "copy_move_constructor::copyY_div06" -> "copy_move_constructor::copyY_div05" ; +"copy_move_constructor::copyY_div05" [label="5: BinaryOperatorStmt: Assign \n *&y1.f:int =0 [line 52]\n " shape="box"] - 14 -> 16 ; -13 [label="13: Constructor Init \n n$0=*&this:class copy_move_constructor::Y * [line 24]\n n$1=*&y:class copy_move_constructor::Y & [line 24]\n n$2=*n$1.f:int [line 24]\n *n$0.f:int =n$2 [line 24]\n " shape="box"] + "copy_move_constructor::copyY_div05" -> "copy_move_constructor::copyY_div04" ; +"copy_move_constructor::copyY_div04" [label="4: DeclStmt \n _fun_copy_move_constructor::Y_Y(&y2:class copy_move_constructor::Y *,&y1:class copy_move_constructor::Y &) [line 53]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit copy_move_constructor::Y_Y \n " color=yellow style=filled] + "copy_move_constructor::copyY_div04" -> "copy_move_constructor::copyY_div03" ; +"copy_move_constructor::copyY_div03" [label="3: Return Stmt \n n$0=*&y2.f:int [line 54]\n *&return:int =(1 / n$0) [line 54]\n " shape="box"] -11 [label="11: Start copy_move_constructor::Y_Y\nFormals: this:class copy_move_constructor::Y * y:class copy_move_constructor::Y &\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] + "copy_move_constructor::copyY_div03" -> "copy_move_constructor::copyY_div02" ; +"copy_move_constructor::copyY_div02" [label="2: Exit copy_move_constructor::copyY_div0 \n " color=yellow style=filled] - 11 -> 13 ; -10 [label="10: Exit copy_move_constructor::Y_Y \n " color=yellow style=filled] +"copy_move_constructor::copyY_div01" [label="1: Start copy_move_constructor::copyY_div0\nFormals: \nLocals: y2:class copy_move_constructor::Y y1:class copy_move_constructor::Y \n DECLARE_LOCALS(&return,&y2,&y1); [line 50]\n " color=yellow style=filled] -9 [label="9: Start copy_move_constructor::Y_Y\nFormals: this:class copy_move_constructor::Y *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] + "copy_move_constructor::copyY_div01" -> "copy_move_constructor::copyY_div06" ; +"copy_move_constructor::copyX_div06" [label="6: DeclStmt \n _fun_copy_move_constructor::X_X(&x1:class copy_move_constructor::X *) [line 42]\n " shape="box"] - 9 -> 10 ; -8 [label="8: Constructor Init \n n$0=*&this:class copy_move_constructor::X * [line 15]\n n$1=*&__param_0:class copy_move_constructor::X & [line 15]\n n$2=*n$1.f:int [line 15]\n *n$0.f:int =n$2 [line 15]\n " shape="box"] + "copy_move_constructor::copyX_div06" -> "copy_move_constructor::copyX_div05" ; +"copy_move_constructor::copyX_div05" [label="5: BinaryOperatorStmt: Assign \n *&x1.f:int =0 [line 43]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit copy_move_constructor::X_X \n " color=yellow style=filled] + "copy_move_constructor::copyX_div05" -> "copy_move_constructor::copyX_div04" ; +"copy_move_constructor::copyX_div04" [label="4: DeclStmt \n _fun_copy_move_constructor::X_X(&x2:class copy_move_constructor::X *,&x1:class copy_move_constructor::X &) [line 44]\n " shape="box"] -6 [label="6: Start copy_move_constructor::X_X\nFormals: this:class copy_move_constructor::X * __param_0:class copy_move_constructor::X &\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] + "copy_move_constructor::copyX_div04" -> "copy_move_constructor::copyX_div03" ; +"copy_move_constructor::copyX_div03" [label="3: Return Stmt \n n$0=*&x2.f:int [line 45]\n *&return:int =(1 / n$0) [line 45]\n " shape="box"] - 6 -> 8 ; -5 [label="5: Constructor Init \n n$0=*&this:class copy_move_constructor::X * [line 15]\n n$1=*&__param_0:class copy_move_constructor::X & [line 15]\n n$2=*n$1.f:int [line 15]\n *n$0.f:int =n$2 [line 15]\n " shape="box"] + "copy_move_constructor::copyX_div03" -> "copy_move_constructor::copyX_div02" ; +"copy_move_constructor::copyX_div02" [label="2: Exit copy_move_constructor::copyX_div0 \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit copy_move_constructor::X_X \n " color=yellow style=filled] +"copy_move_constructor::copyX_div01" [label="1: Start copy_move_constructor::copyX_div0\nFormals: \nLocals: x2:class copy_move_constructor::X x1:class copy_move_constructor::X \n DECLARE_LOCALS(&return,&x2,&x1); [line 41]\n " color=yellow style=filled] -3 [label="3: Start copy_move_constructor::X_X\nFormals: this:class copy_move_constructor::X * __param_0:class copy_move_constructor::X &\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] + "copy_move_constructor::copyX_div01" -> "copy_move_constructor::copyX_div06" ; +"copy_move_constructor::X_X3" [label="3: Constructor Init \n n$0=*&this:class copy_move_constructor::X * [line 15]\n n$1=*&__param_0:class copy_move_constructor::X & [line 15]\n n$2=*n$1.f:int [line 15]\n *n$0.f:int =n$2 [line 15]\n " shape="box"] - 3 -> 5 ; -2 [label="2: Exit copy_move_constructor::X_X \n " color=yellow style=filled] + "copy_move_constructor::X_X3" -> "copy_move_constructor::X_X2" ; +"copy_move_constructor::X_X2" [label="2: Exit copy_move_constructor::X_X \n " color=yellow style=filled] -1 [label="1: Start copy_move_constructor::X_X\nFormals: this:class copy_move_constructor::X *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"copy_move_constructor::X_X1" [label="1: Start copy_move_constructor::X_X\nFormals: this:class copy_move_constructor::X * __param_0:class copy_move_constructor::X &\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 1 -> 2 ; + "copy_move_constructor::X_X1" -> "copy_move_constructor::X_X3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/default_field_init.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/default_field_init.cpp.dot index c2bd60ce8..f6711fad6 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/default_field_init.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/default_field_init.cpp.dot @@ -1,71 +1,71 @@ /* @generated */ digraph iCFG { -18 [label="18: DeclStmt \n _fun_Y_Y(&y:class Y *) [line 25]\n " shape="box"] +"test3" [label="3: DeclStmt \n _fun_Y_Y(&y:class Y *) [line 25]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -16 [label="16: Start test\nFormals: \nLocals: y:class Y \n DECLARE_LOCALS(&return,&y); [line 25]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: y:class Y \n DECLARE_LOCALS(&return,&y); [line 25]\n " color=yellow style=filled] - 16 -> 18 ; -15 [label="15: Constructor Init \n n$2=*&this:class Y * [line 20]\n _fun_X_X(n$2.x1:class X *,1:int ,2:int ) [line 20]\n " shape="box"] + "test1" -> "test3" ; +"X_X5" [label="5: Constructor Init \n n$2=*&this:class X * [line 11]\n *n$2.a:int =-1 [line 11]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Constructor Init \n n$1=*&this:class Y * [line 21]\n _fun_X_X(n$1.x2:class X *) [line 21]\n " shape="box"] + "X_X5" -> "X_X4" ; +"X_X4" [label="4: Constructor Init \n n$1=*&this:class X * [line 12]\n *n$1.b:int =-2 [line 12]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Constructor Init \n n$0=*&this:class Y * [line 19]\n _fun_X_X(n$0.x3:class X *) [line 19]\n " shape="box"] + "X_X4" -> "X_X3" ; +"X_X3" [label="3: Constructor Init \n n$0=*&this:class X * [line 13]\n *n$0.c:int =0 [line 13]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit Y_Y \n " color=yellow style=filled] + "X_X3" -> "X_X2" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] -11 [label="11: Start Y_Y\nFormals: this:class Y *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"X_X1" [label="1: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 11 -> 15 ; -10 [label="10: Constructor Init \n n$2=*&this:class X * [line 16]\n n$3=*&a:int [line 16]\n n$4=*&b:int [line 16]\n *n$2.a:int =(n$3 + n$4) [line 16]\n " shape="box"] + "X_X1" -> "X_X5" ; +"Y_Y5" [label="5: Constructor Init \n n$2=*&this:class Y * [line 20]\n _fun_X_X(n$2.x1:class X *,1:int ,2:int ) [line 20]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Constructor Init \n n$1=*&this:class X * [line 12]\n *n$1.b:int =-2 [line 12]\n " shape="box"] + "Y_Y5" -> "Y_Y4" ; +"Y_Y4" [label="4: Constructor Init \n n$1=*&this:class Y * [line 21]\n _fun_X_X(n$1.x2:class X *) [line 21]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Constructor Init \n n$0=*&this:class X * [line 13]\n *n$0.c:int =0 [line 13]\n " shape="box"] + "Y_Y4" -> "Y_Y3" ; +"Y_Y3" [label="3: Constructor Init \n n$0=*&this:class Y * [line 19]\n _fun_X_X(n$0.x3:class X *) [line 19]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit X_X \n " color=yellow style=filled] + "Y_Y3" -> "Y_Y2" ; +"Y_Y2" [label="2: Exit Y_Y \n " color=yellow style=filled] -6 [label="6: Start X_X\nFormals: this:class X * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"Y_Y1" [label="1: Start Y_Y\nFormals: this:class Y *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 6 -> 10 ; -5 [label="5: Constructor Init \n n$2=*&this:class X * [line 11]\n *n$2.a:int =-1 [line 11]\n " shape="box"] + "Y_Y1" -> "Y_Y5" ; +"X_X5" [label="5: Constructor Init \n n$2=*&this:class X * [line 16]\n n$3=*&a:int [line 16]\n n$4=*&b:int [line 16]\n *n$2.a:int =(n$3 + n$4) [line 16]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Constructor Init \n n$1=*&this:class X * [line 12]\n *n$1.b:int =-2 [line 12]\n " shape="box"] + "X_X5" -> "X_X4" ; +"X_X4" [label="4: Constructor Init \n n$1=*&this:class X * [line 12]\n *n$1.b:int =-2 [line 12]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Constructor Init \n n$0=*&this:class X * [line 13]\n *n$0.c:int =0 [line 13]\n " shape="box"] + "X_X4" -> "X_X3" ; +"X_X3" [label="3: Constructor Init \n n$0=*&this:class X * [line 13]\n *n$0.c:int =0 [line 13]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit X_X \n " color=yellow style=filled] + "X_X3" -> "X_X2" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] -1 [label="1: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"X_X1" [label="1: Start X_X\nFormals: this:class X * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 1 -> 5 ; + "X_X1" -> "X_X5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/std_init_list.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/std_init_list.cpp.dot index 85fa00ec2..6b1207da2 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/std_init_list.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/std_init_list.cpp.dot @@ -1,72 +1,72 @@ /* @generated */ digraph iCFG { -18 [label="18: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0[0]:int =1 [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0[1]:int =2 [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0[2]:int =3 [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0[3]:int =4 [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0[4]:int =5 [line 24]\n n$1=_fun___infer_skip_function(&0$?%__sil_tmpSIL_materialize_temp__n$0:int [5]) [line 24]\n _fun_X_X(&x:class X *,n$1:class std::initializer_list ) [line 24]\n " shape="box"] +"main3" [label="3: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0[0]:int =1 [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0[1]:int =2 [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0[2]:int =3 [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0[3]:int =4 [line 24]\n *&0$?%__sil_tmpSIL_materialize_temp__n$0[4]:int =5 [line 24]\n n$1=_fun___infer_skip_function(&0$?%__sil_tmpSIL_materialize_temp__n$0:int [5]) [line 24]\n _fun_X_X(&x:class X *,n$1:class std::initializer_list ) [line 24]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -16 [label="16: Start main\nFormals: \nLocals: x:class X 0$?%__sil_tmpSIL_materialize_temp__n$0:int [5] \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 24]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: x:class X 0$?%__sil_tmpSIL_materialize_temp__n$0:int [5] \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 24]\n " color=yellow style=filled] - 16 -> 18 ; -15 [label="15: BinaryOperatorStmt: Assign \n n$8=*&this:class X * [line 16]\n n$9=*&this:class X * [line 16]\n n$10=*n$9.sum:int [line 16]\n n$11=*&i:int * [line 16]\n n$12=*n$11:int [line 16]\n *n$8.sum:int =(n$10 + n$12) [line 16]\n " shape="box"] + "main1" -> "main3" ; +"X_X9" [label="9: BinaryOperatorStmt: Assign \n n$8=*&this:class X * [line 16]\n n$9=*&this:class X * [line 16]\n n$10=*n$9.sum:int [line 16]\n n$11=*&i:int * [line 16]\n n$12=*n$11:int [line 16]\n *n$8.sum:int =(n$10 + n$12) [line 16]\n " shape="box"] - 15 -> 11 ; -14 [label="14: Prune (false branch) \n PRUNE(((n$4 != n$7) == 0), false); [line 15]\n " shape="invhouse"] + "X_X9" -> "X_X5" ; +"X_X8" [label="8: Prune (false branch) \n PRUNE(((n$4 != n$7) == 0), false); [line 15]\n " shape="invhouse"] - 14 -> 8 ; -13 [label="13: Prune (true branch) \n PRUNE(((n$4 != n$7) != 0), true); [line 15]\n " shape="invhouse"] + "X_X8" -> "X_X2" ; +"X_X7" [label="7: Prune (true branch) \n PRUNE(((n$4 != n$7) != 0), true); [line 15]\n " shape="invhouse"] - 13 -> 15 ; -12 [label="12: BinaryOperatorStmt: NE \n n$4=*&i:int * [line 15]\n n$5=*&list:class std::initializer_list & [line 15]\n _=*n$5:class std::initializer_list [line 15]\n n$7=_fun_std::initializer_list_end(n$5:class std::initializer_list &) [line 15]\n " shape="box"] + "X_X7" -> "X_X9" ; +"X_X6" [label="6: BinaryOperatorStmt: NE \n n$4=*&i:int * [line 15]\n n$5=*&list:class std::initializer_list & [line 15]\n _=*n$5:class std::initializer_list [line 15]\n n$7=_fun_std::initializer_list_end(n$5:class std::initializer_list &) [line 15]\n " shape="box"] - 12 -> 13 ; - 12 -> 14 ; -11 [label="11: UnaryOperator \n n$3=*&i:int * [line 15]\n *&i:int *=(n$3 + 1) [line 15]\n " shape="box"] + "X_X6" -> "X_X7" ; + "X_X6" -> "X_X8" ; +"X_X5" [label="5: UnaryOperator \n n$3=*&i:int * [line 15]\n *&i:int *=(n$3 + 1) [line 15]\n " shape="box"] - 11 -> 9 ; -10 [label="10: DeclStmt \n n$0=*&list:class std::initializer_list & [line 15]\n _=*n$0:class std::initializer_list [line 15]\n n$2=_fun_std::initializer_list_begin(n$0:class std::initializer_list &) [line 15]\n *&i:int *=n$2 [line 15]\n " shape="box"] + "X_X5" -> "X_X3" ; +"X_X4" [label="4: DeclStmt \n n$0=*&list:class std::initializer_list & [line 15]\n _=*n$0:class std::initializer_list [line 15]\n n$2=_fun_std::initializer_list_begin(n$0:class std::initializer_list &) [line 15]\n *&i:int *=n$2 [line 15]\n " shape="box"] - 10 -> 9 ; -9 [label="9: + \n " ] + "X_X4" -> "X_X3" ; +"X_X3" [label="3: + \n " ] - 9 -> 12 ; -8 [label="8: Exit X_X \n " color=yellow style=filled] + "X_X3" -> "X_X6" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] -7 [label="7: Start X_X\nFormals: this:class X * list:class std::initializer_list &\nLocals: i:int * \n DECLARE_LOCALS(&return,&i); [line 14]\n " color=yellow style=filled] +"X_X1" [label="1: Start X_X\nFormals: this:class X * list:class std::initializer_list &\nLocals: i:int * \n DECLARE_LOCALS(&return,&i); [line 14]\n " color=yellow style=filled] - 7 -> 10 ; -6 [label="6: Return Stmt \n n$0=*&this:class std::initializer_list * [line 93]\n n$1=*n$0.__begin_:int * [line 93]\n n$2=*&this:class std::initializer_list * [line 93]\n n$3=*n$2.__size_:unsigned long [line 93]\n *&return:int *=(n$1 + n$3) [line 93]\n " shape="box"] + "X_X1" -> "X_X4" ; +"std::initializer_list_end3" [label="3: Return Stmt \n n$0=*&this:class std::initializer_list * [line 93]\n n$1=*n$0.__begin_:int * [line 93]\n n$2=*&this:class std::initializer_list * [line 93]\n n$3=*n$2.__size_:unsigned long [line 93]\n *&return:int *=(n$1 + n$3) [line 93]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit std::initializer_list_end \n " color=yellow style=filled] + "std::initializer_list_end3" -> "std::initializer_list_end2" ; +"std::initializer_list_end2" [label="2: Exit std::initializer_list_end \n " color=yellow style=filled] -4 [label="4: Start std::initializer_list_end\nFormals: this:class std::initializer_list *\nLocals: \n DECLARE_LOCALS(&return); [line 91]\n " color=yellow style=filled] +"std::initializer_list_end1" [label="1: Start std::initializer_list_end\nFormals: this:class std::initializer_list *\nLocals: \n DECLARE_LOCALS(&return); [line 91]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&this:class std::initializer_list * [line 89]\n n$1=*n$0.__begin_:int * [line 89]\n *&return:int *=n$1 [line 89]\n " shape="box"] + "std::initializer_list_end1" -> "std::initializer_list_end3" ; +"std::initializer_list_begin3" [label="3: Return Stmt \n n$0=*&this:class std::initializer_list * [line 89]\n n$1=*n$0.__begin_:int * [line 89]\n *&return:int *=n$1 [line 89]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit std::initializer_list_begin \n " color=yellow style=filled] + "std::initializer_list_begin3" -> "std::initializer_list_begin2" ; +"std::initializer_list_begin2" [label="2: Exit std::initializer_list_begin \n " color=yellow style=filled] -1 [label="1: Start std::initializer_list_begin\nFormals: this:class std::initializer_list *\nLocals: \n DECLARE_LOCALS(&return); [line 87]\n " color=yellow style=filled] +"std::initializer_list_begin1" [label="1: Start std::initializer_list_begin\nFormals: this:class std::initializer_list *\nLocals: \n DECLARE_LOCALS(&return); [line 87]\n " color=yellow style=filled] - 1 -> 3 ; + "std::initializer_list_begin1" -> "std::initializer_list_begin3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/constructors/temp_object.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/constructors/temp_object.cpp.dot index db1bdc83f..0a7b7f6f0 100644 --- a/infer/tests/codetoanalyze/cpp/shared/constructors/temp_object.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/constructors/temp_object.cpp.dot @@ -1,161 +1,161 @@ /* @generated */ digraph iCFG { -43 [label="43: Return Stmt \n _fun_temp_object::getX(1:int ,0:int ,&0$?%__sil_tmp__temp_return_n$1:class temp_object::X *) [line 45]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 45]\n n$3=_fun_temp_object::div(n$2:int ) [line 45]\n *&return:int =n$3 [line 45]\n " shape="box"] +"temp_object::getX_field_div03" [label="3: Return Stmt \n _fun_temp_object::getX(0:int ,1:int ,&0$?%__sil_tmp__temp_return_n$1:class temp_object::X *) [line 39]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 39]\n n$3=_fun_temp_object::div(n$2:int ) [line 39]\n *&return:int =n$3 [line 39]\n " shape="box"] - 43 -> 42 ; -42 [label="42: Exit temp_object::getX_field_div1 \n " color=yellow style=filled] + "temp_object::getX_field_div03" -> "temp_object::getX_field_div02" ; +"temp_object::getX_field_div02" [label="2: Exit temp_object::getX_field_div0 \n " color=yellow style=filled] -41 [label="41: Start temp_object::getX_field_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 45]\n " color=yellow style=filled] +"temp_object::getX_field_div01" [label="1: Start temp_object::getX_field_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 39]\n " color=yellow style=filled] - 41 -> 43 ; -40 [label="40: Return Stmt \n _fun_temp_object::X_X(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X *,1:int ,0:int ) [line 43]\n n$1=*&0$?%__sil_tmp__temp_construct_n$0.f:int [line 43]\n n$2=_fun_temp_object::div(n$1:int ) [line 43]\n *&return:int =n$2 [line 43]\n " shape="box"] + "temp_object::getX_field_div01" -> "temp_object::getX_field_div03" ; +"temp_object::temp_field2_div03" [label="3: Return Stmt \n _fun_temp_object::X_X(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X *,0:int ) [line 35]\n n$1=*&0$?%__sil_tmp__temp_construct_n$0.f:int [line 35]\n n$2=_fun_temp_object::div(n$1:int ) [line 35]\n *&return:int =n$2 [line 35]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Exit temp_object::temp_field_div1 \n " color=yellow style=filled] + "temp_object::temp_field2_div03" -> "temp_object::temp_field2_div02" ; +"temp_object::temp_field2_div02" [label="2: Exit temp_object::temp_field2_div0 \n " color=yellow style=filled] -38 [label="38: Start temp_object::temp_field_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0); [line 43]\n " color=yellow style=filled] +"temp_object::temp_field2_div01" [label="1: Start temp_object::temp_field2_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0); [line 35]\n " color=yellow style=filled] - 38 -> 40 ; -37 [label="37: Return Stmt \n _fun_temp_object::getX(0:int ,1:int ,&0$?%__sil_tmp__temp_return_n$1:class temp_object::X *) [line 41]\n n$2=_fun_temp_object::X_div(&0$?%__sil_tmp__temp_return_n$1:class temp_object::X &) [line 41]\n *&return:int =n$2 [line 41]\n " shape="box"] + "temp_object::temp_field2_div01" -> "temp_object::temp_field2_div03" ; +"temp_object::getX3" [label="3: Return Stmt \n n$0=*&__return_param:class temp_object::X * [line 26]\n n$2=*&a:int [line 26]\n n$3=*&b:int [line 26]\n _fun_temp_object::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$1:class temp_object::X *,n$2:int ,n$3:int ) [line 26]\n _fun_temp_object::X_X(n$0:class temp_object::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class temp_object::X &) [line 26]\n " shape="box"] - 37 -> 36 ; -36 [label="36: Exit temp_object::getX_method_div0 \n " color=yellow style=filled] + "temp_object::getX3" -> "temp_object::getX2" ; +"temp_object::getX2" [label="2: Exit temp_object::getX \n " color=yellow style=filled] -35 [label="35: Start temp_object::getX_method_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 41]\n " color=yellow style=filled] +"temp_object::getX1" [label="1: Start temp_object::getX\nFormals: a:int b:int __return_param:class temp_object::X *\nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$1:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 26]\n " color=yellow style=filled] - 35 -> 37 ; -34 [label="34: Return Stmt \n _fun_temp_object::getX(0:int ,1:int ,&0$?%__sil_tmp__temp_return_n$1:class temp_object::X *) [line 39]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 39]\n n$3=_fun_temp_object::div(n$2:int ) [line 39]\n *&return:int =n$3 [line 39]\n " shape="box"] + "temp_object::getX1" -> "temp_object::getX3" ; +"temp_object::div3" [label="3: Return Stmt \n n$0=*&f:int [line 21]\n *&return:int =(1 / n$0) [line 21]\n " shape="box"] - 34 -> 33 ; -33 [label="33: Exit temp_object::getX_field_div0 \n " color=yellow style=filled] + "temp_object::div3" -> "temp_object::div2" ; +"temp_object::div2" [label="2: Exit temp_object::div \n " color=yellow style=filled] -32 [label="32: Start temp_object::getX_field_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 39]\n " color=yellow style=filled] +"temp_object::div1" [label="1: Start temp_object::div\nFormals: f:int \nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 32 -> 34 ; -31 [label="31: Return Stmt \n _fun_temp_object::X_X(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X *,0:int ,1:int ) [line 37]\n n$1=_fun_temp_object::X_div(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X &) [line 37]\n *&return:int =n$1 [line 37]\n " shape="box"] + "temp_object::div1" -> "temp_object::div3" ; +"temp_object::X_div3" [label="3: Return Stmt \n n$0=*&this:class temp_object::X * [line 18]\n n$1=*n$0.f:int [line 18]\n *&return:int =(1 / n$1) [line 18]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Exit temp_object::temp_method_div0 \n " color=yellow style=filled] + "temp_object::X_div3" -> "temp_object::X_div2" ; +"temp_object::X_div2" [label="2: Exit temp_object::X_div \n " color=yellow style=filled] -29 [label="29: Start temp_object::temp_method_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0); [line 37]\n " color=yellow style=filled] +"temp_object::X_div1" [label="1: Start temp_object::X_div\nFormals: this:class temp_object::X *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 29 -> 31 ; -28 [label="28: Return Stmt \n _fun_temp_object::X_X(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X *,0:int ) [line 35]\n n$1=*&0$?%__sil_tmp__temp_construct_n$0.f:int [line 35]\n n$2=_fun_temp_object::div(n$1:int ) [line 35]\n *&return:int =n$2 [line 35]\n " shape="box"] + "temp_object::X_div1" -> "temp_object::X_div3" ; +"temp_object::temp_field_div03" [label="3: Return Stmt \n _fun_temp_object::X_X(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X *,0:int ,1:int ) [line 33]\n n$1=*&0$?%__sil_tmp__temp_construct_n$0.f:int [line 33]\n n$2=_fun_temp_object::div(n$1:int ) [line 33]\n *&return:int =n$2 [line 33]\n " shape="box"] - 28 -> 27 ; -27 [label="27: Exit temp_object::temp_field2_div0 \n " color=yellow style=filled] + "temp_object::temp_field_div03" -> "temp_object::temp_field_div02" ; +"temp_object::temp_field_div02" [label="2: Exit temp_object::temp_field_div0 \n " color=yellow style=filled] -26 [label="26: Start temp_object::temp_field2_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0); [line 35]\n " color=yellow style=filled] +"temp_object::temp_field_div01" [label="1: Start temp_object::temp_field_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0); [line 33]\n " color=yellow style=filled] - 26 -> 28 ; -25 [label="25: Return Stmt \n _fun_temp_object::X_X(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X *,0:int ,1:int ) [line 33]\n n$1=*&0$?%__sil_tmp__temp_construct_n$0.f:int [line 33]\n n$2=_fun_temp_object::div(n$1:int ) [line 33]\n *&return:int =n$2 [line 33]\n " shape="box"] + "temp_object::temp_field_div01" -> "temp_object::temp_field_div03" ; +"temp_object::getX_field_div13" [label="3: Return Stmt \n _fun_temp_object::getX(1:int ,0:int ,&0$?%__sil_tmp__temp_return_n$1:class temp_object::X *) [line 45]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 45]\n n$3=_fun_temp_object::div(n$2:int ) [line 45]\n *&return:int =n$3 [line 45]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit temp_object::temp_field_div0 \n " color=yellow style=filled] + "temp_object::getX_field_div13" -> "temp_object::getX_field_div12" ; +"temp_object::getX_field_div12" [label="2: Exit temp_object::getX_field_div1 \n " color=yellow style=filled] -23 [label="23: Start temp_object::temp_field_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0); [line 33]\n " color=yellow style=filled] +"temp_object::getX_field_div11" [label="1: Start temp_object::getX_field_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 45]\n " color=yellow style=filled] - 23 -> 25 ; -22 [label="22: DeclStmt \n _fun_temp_object::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$2:class temp_object::X *,0:int ,1:int ) [line 29]\n _fun_temp_object::X_X(&x:class temp_object::X *,&0$?%__sil_tmpSIL_materialize_temp__n$2:class temp_object::X &) [line 29]\n " shape="box"] + "temp_object::getX_field_div11" -> "temp_object::getX_field_div13" ; +"temp_object::temp_field_div13" [label="3: Return Stmt \n _fun_temp_object::X_X(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X *,1:int ,0:int ) [line 43]\n n$1=*&0$?%__sil_tmp__temp_construct_n$0.f:int [line 43]\n n$2=_fun_temp_object::div(n$1:int ) [line 43]\n *&return:int =n$2 [line 43]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Return Stmt \n _=*&x:class temp_object::X [line 30]\n n$1=_fun_temp_object::X_div(&x:class temp_object::X &) [line 30]\n *&return:int =n$1 [line 30]\n " shape="box"] + "temp_object::temp_field_div13" -> "temp_object::temp_field_div12" ; +"temp_object::temp_field_div12" [label="2: Exit temp_object::temp_field_div1 \n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit temp_object::assign_temp_div0 \n " color=yellow style=filled] +"temp_object::temp_field_div11" [label="1: Start temp_object::temp_field_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0); [line 43]\n " color=yellow style=filled] -19 [label="19: Start temp_object::assign_temp_div0\nFormals: \nLocals: x:class temp_object::X 0$?%__sil_tmpSIL_materialize_temp__n$2:class temp_object::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$2); [line 28]\n " color=yellow style=filled] + "temp_object::temp_field_div11" -> "temp_object::temp_field_div13" ; +"temp_object::assign_temp_div04" [label="4: DeclStmt \n _fun_temp_object::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$2:class temp_object::X *,0:int ,1:int ) [line 29]\n _fun_temp_object::X_X(&x:class temp_object::X *,&0$?%__sil_tmpSIL_materialize_temp__n$2:class temp_object::X &) [line 29]\n " shape="box"] - 19 -> 22 ; -18 [label="18: Return Stmt \n n$0=*&__return_param:class temp_object::X * [line 26]\n n$2=*&a:int [line 26]\n n$3=*&b:int [line 26]\n _fun_temp_object::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$1:class temp_object::X *,n$2:int ,n$3:int ) [line 26]\n _fun_temp_object::X_X(n$0:class temp_object::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class temp_object::X &) [line 26]\n " shape="box"] + "temp_object::assign_temp_div04" -> "temp_object::assign_temp_div03" ; +"temp_object::assign_temp_div03" [label="3: Return Stmt \n _=*&x:class temp_object::X [line 30]\n n$1=_fun_temp_object::X_div(&x:class temp_object::X &) [line 30]\n *&return:int =n$1 [line 30]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit temp_object::getX \n " color=yellow style=filled] + "temp_object::assign_temp_div03" -> "temp_object::assign_temp_div02" ; +"temp_object::assign_temp_div02" [label="2: Exit temp_object::assign_temp_div0 \n " color=yellow style=filled] -16 [label="16: Start temp_object::getX\nFormals: a:int b:int __return_param:class temp_object::X *\nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$1:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 26]\n " color=yellow style=filled] +"temp_object::assign_temp_div01" [label="1: Start temp_object::assign_temp_div0\nFormals: \nLocals: x:class temp_object::X 0$?%__sil_tmpSIL_materialize_temp__n$2:class temp_object::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$2); [line 28]\n " color=yellow style=filled] - 16 -> 18 ; -15 [label="15: Return Stmt \n n$0=*&f:int [line 21]\n *&return:int =(1 / n$0) [line 21]\n " shape="box"] + "temp_object::assign_temp_div01" -> "temp_object::assign_temp_div04" ; +"temp_object::X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class temp_object::X * [line 14]\n n$1=*&a:int [line 14]\n *n$0.f:int =n$1 [line 14]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit temp_object::div \n " color=yellow style=filled] + "temp_object::X_X3" -> "temp_object::X_X2" ; +"temp_object::X_X2" [label="2: Exit temp_object::X_X \n " color=yellow style=filled] -13 [label="13: Start temp_object::div\nFormals: f:int \nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] +"temp_object::X_X1" [label="1: Start temp_object::X_X\nFormals: this:class temp_object::X * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Return Stmt \n n$0=*&this:class temp_object::X * [line 18]\n n$1=*n$0.f:int [line 18]\n *&return:int =(1 / n$1) [line 18]\n " shape="box"] + "temp_object::X_X1" -> "temp_object::X_X3" ; +"temp_object::X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class temp_object::X * [line 13]\n n$1=*&a:int [line 13]\n *n$0.f:int =n$1 [line 13]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit temp_object::X_div \n " color=yellow style=filled] + "temp_object::X_X3" -> "temp_object::X_X2" ; +"temp_object::X_X2" [label="2: Exit temp_object::X_X \n " color=yellow style=filled] -10 [label="10: Start temp_object::X_div\nFormals: this:class temp_object::X *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"temp_object::X_X1" [label="1: Start temp_object::X_X\nFormals: this:class temp_object::X * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$0=*&this:class temp_object::X * [line 16]\n n$1=*&x:class temp_object::X & [line 16]\n n$2=*n$1.f:int [line 16]\n *n$0.f:int =n$2 [line 16]\n " shape="box"] + "temp_object::X_X1" -> "temp_object::X_X3" ; +"temp_object::X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class temp_object::X * [line 16]\n n$1=*&x:class temp_object::X & [line 16]\n n$2=*n$1.f:int [line 16]\n *n$0.f:int =n$2 [line 16]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit temp_object::X_X \n " color=yellow style=filled] + "temp_object::X_X3" -> "temp_object::X_X2" ; +"temp_object::X_X2" [label="2: Exit temp_object::X_X \n " color=yellow style=filled] -7 [label="7: Start temp_object::X_X\nFormals: this:class temp_object::X * x:class temp_object::X &\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"temp_object::X_X1" [label="1: Start temp_object::X_X\nFormals: this:class temp_object::X * x:class temp_object::X &\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&this:class temp_object::X * [line 14]\n n$1=*&a:int [line 14]\n *n$0.f:int =n$1 [line 14]\n " shape="box"] + "temp_object::X_X1" -> "temp_object::X_X3" ; +"temp_object::getX_method_div03" [label="3: Return Stmt \n _fun_temp_object::getX(0:int ,1:int ,&0$?%__sil_tmp__temp_return_n$1:class temp_object::X *) [line 41]\n n$2=_fun_temp_object::X_div(&0$?%__sil_tmp__temp_return_n$1:class temp_object::X &) [line 41]\n *&return:int =n$2 [line 41]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit temp_object::X_X \n " color=yellow style=filled] + "temp_object::getX_method_div03" -> "temp_object::getX_method_div02" ; +"temp_object::getX_method_div02" [label="2: Exit temp_object::getX_method_div0 \n " color=yellow style=filled] -4 [label="4: Start temp_object::X_X\nFormals: this:class temp_object::X * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"temp_object::getX_method_div01" [label="1: Start temp_object::getX_method_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 41]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class temp_object::X * [line 13]\n n$1=*&a:int [line 13]\n *n$0.f:int =n$1 [line 13]\n " shape="box"] + "temp_object::getX_method_div01" -> "temp_object::getX_method_div03" ; +"temp_object::temp_method_div03" [label="3: Return Stmt \n _fun_temp_object::X_X(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X *,0:int ,1:int ) [line 37]\n n$1=_fun_temp_object::X_div(&0$?%__sil_tmp__temp_construct_n$0:class temp_object::X &) [line 37]\n *&return:int =n$1 [line 37]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit temp_object::X_X \n " color=yellow style=filled] + "temp_object::temp_method_div03" -> "temp_object::temp_method_div02" ; +"temp_object::temp_method_div02" [label="2: Exit temp_object::temp_method_div0 \n " color=yellow style=filled] -1 [label="1: Start temp_object::X_X\nFormals: this:class temp_object::X * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"temp_object::temp_method_div01" [label="1: Start temp_object::temp_method_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class temp_object::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0); [line 37]\n " color=yellow style=filled] - 1 -> 3 ; + "temp_object::temp_method_div01" -> "temp_object::temp_method_div03" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/exceptions/Exceptions.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/exceptions/Exceptions.cpp.dot index 3968e55ba..7f529bb5b 100644 --- a/infer/tests/codetoanalyze/cpp/shared/exceptions/Exceptions.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/exceptions/Exceptions.cpp.dot @@ -1,68 +1,68 @@ /* @generated */ digraph iCFG { -17 [label="17: Return Stmt \n n$0=_fun_deref(0:int *) [line 28]\n *&return:int =n$0 [line 28]\n " shape="box"] +"main3" [label="3: Return Stmt \n n$0=_fun_deref(0:int *) [line 28]\n *&return:int =n$0 [line 28]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -15 [label="15: Start main\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 15 -> 17 ; -14 [label="14: Call _fun_deref_null \n n$0=_fun_deref_null(null:int *) [line 24]\n " shape="box"] + "main1" -> "main3" ; +"call_deref_with_null3" [label="3: Call _fun_deref_null \n n$0=_fun_deref_null(null:int *) [line 24]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit call_deref_with_null \n " color=yellow style=filled] + "call_deref_with_null3" -> "call_deref_with_null2" ; +"call_deref_with_null2" [label="2: Exit call_deref_with_null \n " color=yellow style=filled] -12 [label="12: Start call_deref_with_null\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +"call_deref_with_null1" [label="1: Start call_deref_with_null\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: Return Stmt \n n$0=*&p:int * [line 19]\n n$1=*n$0:int [line 19]\n *&return:int =n$1 [line 19]\n " shape="box"] + "call_deref_with_null1" -> "call_deref_with_null3" ; +"deref8" [label="8: ObjCCPPThrow \n _fun___infer_objc_cpp_throw(\"Null pointer!\":char *) [line 12]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit deref_null \n " color=yellow style=filled] + "deref8" -> "deref4" ; +"deref7" [label="7: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 11]\n " shape="invhouse"] -9 [label="9: Start deref_null\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "deref7" -> "deref4" ; +"deref6" [label="6: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 11]\n " shape="invhouse"] - 9 -> 11 ; -8 [label="8: ObjCCPPThrow \n _fun___infer_objc_cpp_throw(\"Null pointer!\":char *) [line 12]\n " shape="box"] + "deref6" -> "deref8" ; +"deref5" [label="5: BinaryOperatorStmt: EQ \n n$2=*&p:int * [line 11]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 11]\n " shape="invhouse"] + "deref5" -> "deref6" ; + "deref5" -> "deref7" ; +"deref4" [label="4: + \n " ] - 7 -> 4 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 11]\n " shape="invhouse"] + "deref4" -> "deref3" ; +"deref3" [label="3: Return Stmt \n n$0=*&p:int * [line 14]\n n$1=*n$0:int [line 14]\n *&return:int =n$1 [line 14]\n " shape="box"] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: EQ \n n$2=*&p:int * [line 11]\n " shape="box"] + "deref3" -> "deref2" ; +"deref2" [label="2: Exit deref \n " color=yellow style=filled] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] +"deref1" [label="1: Start deref\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&p:int * [line 14]\n n$1=*n$0:int [line 14]\n *&return:int =n$1 [line 14]\n " shape="box"] + "deref1" -> "deref5" ; +"deref_null3" [label="3: Return Stmt \n n$0=*&p:int * [line 19]\n n$1=*n$0:int [line 19]\n *&return:int =n$1 [line 19]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit deref \n " color=yellow style=filled] + "deref_null3" -> "deref_null2" ; +"deref_null2" [label="2: Exit deref_null \n " color=yellow style=filled] -1 [label="1: Start deref\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"deref_null1" [label="1: Start deref_null\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 1 -> 5 ; + "deref_null1" -> "deref_null3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/exceptions/noexception.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/exceptions/noexception.cpp.dot index 36fa6e863..36f32a89a 100644 --- a/infer/tests/codetoanalyze/cpp/shared/exceptions/noexception.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/exceptions/noexception.cpp.dot @@ -1,39 +1,39 @@ /* @generated */ digraph iCFG { -10 [label="10: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] +"throw12" [label="2: Exit throw1 \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Exit noexcept_in_throw1_is_false \n " color=yellow style=filled] +"throw11" [label="1: Start throw1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] -8 [label="8: Start noexcept_in_throw1_is_false\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] + "throw11" -> "throw12" ; +"noexcept_in_no_throw_is_true3" [label="3: Return Stmt \n *&return:int =1 [line 14]\n " shape="box"] - 8 -> 10 ; -7 [label="7: Return Stmt \n *&return:int =1 [line 14]\n " shape="box"] + "noexcept_in_no_throw_is_true3" -> "noexcept_in_no_throw_is_true2" ; +"noexcept_in_no_throw_is_true2" [label="2: Exit noexcept_in_no_throw_is_true \n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: Exit noexcept_in_no_throw_is_true \n " color=yellow style=filled] +"noexcept_in_no_throw_is_true1" [label="1: Start noexcept_in_no_throw_is_true\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] -5 [label="5: Start noexcept_in_no_throw_is_true\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] + "noexcept_in_no_throw_is_true1" -> "noexcept_in_no_throw_is_true3" ; +"noexcept_in_throw1_is_false3" [label="3: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] - 5 -> 7 ; -4 [label="4: Exit no_throw \n " color=yellow style=filled] + "noexcept_in_throw1_is_false3" -> "noexcept_in_throw1_is_false2" ; +"noexcept_in_throw1_is_false2" [label="2: Exit noexcept_in_throw1_is_false \n " color=yellow style=filled] -3 [label="3: Start no_throw\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"noexcept_in_throw1_is_false1" [label="1: Start noexcept_in_throw1_is_false\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 3 -> 4 ; -2 [label="2: Exit throw1 \n " color=yellow style=filled] + "noexcept_in_throw1_is_false1" -> "noexcept_in_throw1_is_false3" ; +"no_throw2" [label="2: Exit no_throw \n " color=yellow style=filled] -1 [label="1: Start throw1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"no_throw1" [label="1: Start no_throw\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 2 ; + "no_throw1" -> "no_throw2" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp.dot index 6bd75263b..2baa2d3a9 100644 --- a/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/lambda/lambda1.cpp.dot @@ -1,128 +1,128 @@ /* @generated */ digraph iCFG { -34 [label="34: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$1:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 =(_fun_fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()) [line 26]\n _fun_fooOK::lambda_shared_lambda_lambda1.cpp:26:12_(&y:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 &) [line 26]\n " shape="box"] +"foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()3" [label="3: Return Stmt \n *&return:int =(1 / 0) [line 19]\n " shape="box"] - 34 -> 31 ; -33 [label="33: Exit fooOK::lambda_shared_lambda_lambda1.cpp:26:12_ \n " color=yellow style=filled] + "foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()3" -> "foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()2" ; +"foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()2" [label="2: Exit foo::lambda_shared_lambda_lambda1.cpp:19:17_operator() \n " color=yellow style=filled] -32 [label="32: Start fooOK::lambda_shared_lambda_lambda1.cpp:26:12_\nFormals: this:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 * __param_0:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()1" [label="1: Start foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()\nFormals: this:class foo::lambda_shared_lambda_lambda1.cpp:19:17 *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 32 -> 33 ; -31 [label="31: Return Stmt \n n$0=_fun_fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()(&y:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 &,3:int ) [line 27]\n *&return:int =(5 / (4 - n$0)) [line 27]\n " shape="box"] + "foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()1" -> "foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()3" ; +"foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()3" [label="3: Return Stmt \n n$0=*&i:int [line 20]\n *&i:int =(n$0 + 1) [line 20]\n n$1=*&i:int [line 20]\n *&return:int =n$1 [line 20]\n " shape="box"] - 31 -> 27 ; -30 [label="30: Return Stmt \n n$0=*&i:int [line 26]\n *&i:int =(n$0 + 1) [line 26]\n *&return:int =n$0 [line 26]\n " shape="box"] + "foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()3" -> "foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()2" ; +"foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()2" [label="2: Exit foo::lambda_shared_lambda_lambda1.cpp:20:12_operator() \n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: Exit fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator() \n " color=yellow style=filled] +"foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()1" [label="1: Start foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()\nFormals: this:class foo::lambda_shared_lambda_lambda1.cpp:20:12 * i:int \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] -28 [label="28: Start fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()\nFormals: this:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 * i:int \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] + "foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()1" -> "foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()3" ; +"foo5" [label="5: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$2:class foo::lambda_shared_lambda_lambda1.cpp:19:17 =(_fun_foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()) [line 19]\n _fun_foo::lambda_shared_lambda_lambda1.cpp:19:17_(&unused:class foo::lambda_shared_lambda_lambda1.cpp:19:17 *,&0$?%__sil_tmpSIL_materialize_temp__n$2:class foo::lambda_shared_lambda_lambda1.cpp:19:17 &) [line 19]\n " shape="box"] - 28 -> 30 ; -27 [label="27: Exit fooOK \n " color=yellow style=filled] + "foo5" -> "foo4" ; +"foo4" [label="4: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$1:class foo::lambda_shared_lambda_lambda1.cpp:20:12 =(_fun_foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()) [line 20]\n _fun_foo::lambda_shared_lambda_lambda1.cpp:20:12_(&y:class foo::lambda_shared_lambda_lambda1.cpp:20:12 *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class foo::lambda_shared_lambda_lambda1.cpp:20:12 &) [line 20]\n " shape="box"] -26 [label="26: Start fooOK\nFormals: \nLocals: y:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 0$?%__sil_tmpSIL_materialize_temp__n$1:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 \n DECLARE_LOCALS(&return,&y,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 24]\n " color=yellow style=filled] + "foo4" -> "foo3" ; +"foo3" [label="3: Return Stmt \n n$0=_fun_foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()(&y:class foo::lambda_shared_lambda_lambda1.cpp:20:12 &,3:int ) [line 21]\n *&return:int =(5 / (4 - n$0)) [line 21]\n " shape="box"] - 26 -> 34 ; -25 [label="25: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$2:class foo::lambda_shared_lambda_lambda1.cpp:19:17 =(_fun_foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()) [line 19]\n _fun_foo::lambda_shared_lambda_lambda1.cpp:19:17_(&unused:class foo::lambda_shared_lambda_lambda1.cpp:19:17 *,&0$?%__sil_tmpSIL_materialize_temp__n$2:class foo::lambda_shared_lambda_lambda1.cpp:19:17 &) [line 19]\n " shape="box"] + "foo3" -> "foo2" ; +"foo2" [label="2: Exit foo \n " color=yellow style=filled] - 25 -> 19 ; -24 [label="24: Return Stmt \n *&return:int =(1 / 0) [line 19]\n " shape="box"] +"foo1" [label="1: Start foo\nFormals: \nLocals: y:class foo::lambda_shared_lambda_lambda1.cpp:20:12 0$?%__sil_tmpSIL_materialize_temp__n$1:class foo::lambda_shared_lambda_lambda1.cpp:20:12 unused:class foo::lambda_shared_lambda_lambda1.cpp:19:17 0$?%__sil_tmpSIL_materialize_temp__n$2:class foo::lambda_shared_lambda_lambda1.cpp:19:17 \n DECLARE_LOCALS(&return,&y,&0$?%__sil_tmpSIL_materialize_temp__n$1,&unused,&0$?%__sil_tmpSIL_materialize_temp__n$2); [line 18]\n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Exit foo::lambda_shared_lambda_lambda1.cpp:19:17_operator() \n " color=yellow style=filled] + "foo1" -> "foo5" ; +"foo::lambda_shared_lambda_lambda1.cpp:20:12_2" [label="2: Exit foo::lambda_shared_lambda_lambda1.cpp:20:12_ \n " color=yellow style=filled] -22 [label="22: Start foo::lambda_shared_lambda_lambda1.cpp:19:17_operator()\nFormals: this:class foo::lambda_shared_lambda_lambda1.cpp:19:17 *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"foo::lambda_shared_lambda_lambda1.cpp:20:12_1" [label="1: Start foo::lambda_shared_lambda_lambda1.cpp:20:12_\nFormals: this:class foo::lambda_shared_lambda_lambda1.cpp:20:12 * __param_0:class foo::lambda_shared_lambda_lambda1.cpp:20:12 &\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 22 -> 24 ; -21 [label="21: Exit foo::lambda_shared_lambda_lambda1.cpp:19:17_ \n " color=yellow style=filled] + "foo::lambda_shared_lambda_lambda1.cpp:20:12_1" -> "foo::lambda_shared_lambda_lambda1.cpp:20:12_2" ; +"bar::lambda_shared_lambda_lambda1.cpp:11:15_2" [label="2: Exit bar::lambda_shared_lambda_lambda1.cpp:11:15_ \n " color=yellow style=filled] -20 [label="20: Start foo::lambda_shared_lambda_lambda1.cpp:19:17_\nFormals: this:class foo::lambda_shared_lambda_lambda1.cpp:19:17 * __param_0:class foo::lambda_shared_lambda_lambda1.cpp:19:17 &\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"bar::lambda_shared_lambda_lambda1.cpp:11:15_1" [label="1: Start bar::lambda_shared_lambda_lambda1.cpp:11:15_\nFormals: this:class bar::lambda_shared_lambda_lambda1.cpp:11:15 * __param_0:class bar::lambda_shared_lambda_lambda1.cpp:11:15 &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 20 -> 21 ; -19 [label="19: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$1:class foo::lambda_shared_lambda_lambda1.cpp:20:12 =(_fun_foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()) [line 20]\n _fun_foo::lambda_shared_lambda_lambda1.cpp:20:12_(&y:class foo::lambda_shared_lambda_lambda1.cpp:20:12 *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class foo::lambda_shared_lambda_lambda1.cpp:20:12 &) [line 20]\n " shape="box"] + "bar::lambda_shared_lambda_lambda1.cpp:11:15_1" -> "bar::lambda_shared_lambda_lambda1.cpp:11:15_2" ; +"fooOK4" [label="4: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$1:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 =(_fun_fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()) [line 26]\n _fun_fooOK::lambda_shared_lambda_lambda1.cpp:26:12_(&y:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 &) [line 26]\n " shape="box"] - 19 -> 16 ; -18 [label="18: Exit foo::lambda_shared_lambda_lambda1.cpp:20:12_ \n " color=yellow style=filled] + "fooOK4" -> "fooOK3" ; +"fooOK3" [label="3: Return Stmt \n n$0=_fun_fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()(&y:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 &,3:int ) [line 27]\n *&return:int =(5 / (4 - n$0)) [line 27]\n " shape="box"] -17 [label="17: Start foo::lambda_shared_lambda_lambda1.cpp:20:12_\nFormals: this:class foo::lambda_shared_lambda_lambda1.cpp:20:12 * __param_0:class foo::lambda_shared_lambda_lambda1.cpp:20:12 &\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] + "fooOK3" -> "fooOK2" ; +"fooOK2" [label="2: Exit fooOK \n " color=yellow style=filled] - 17 -> 18 ; -16 [label="16: Return Stmt \n n$0=_fun_foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()(&y:class foo::lambda_shared_lambda_lambda1.cpp:20:12 &,3:int ) [line 21]\n *&return:int =(5 / (4 - n$0)) [line 21]\n " shape="box"] +"fooOK1" [label="1: Start fooOK\nFormals: \nLocals: y:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 0$?%__sil_tmpSIL_materialize_temp__n$1:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 \n DECLARE_LOCALS(&return,&y,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 24]\n " color=yellow style=filled] - 16 -> 12 ; -15 [label="15: Return Stmt \n n$0=*&i:int [line 20]\n *&i:int =(n$0 + 1) [line 20]\n n$1=*&i:int [line 20]\n *&return:int =n$1 [line 20]\n " shape="box"] + "fooOK1" -> "fooOK4" ; +"fooOK::lambda_shared_lambda_lambda1.cpp:26:12_2" [label="2: Exit fooOK::lambda_shared_lambda_lambda1.cpp:26:12_ \n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit foo::lambda_shared_lambda_lambda1.cpp:20:12_operator() \n " color=yellow style=filled] +"fooOK::lambda_shared_lambda_lambda1.cpp:26:12_1" [label="1: Start fooOK::lambda_shared_lambda_lambda1.cpp:26:12_\nFormals: this:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 * __param_0:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] -13 [label="13: Start foo::lambda_shared_lambda_lambda1.cpp:20:12_operator()\nFormals: this:class foo::lambda_shared_lambda_lambda1.cpp:20:12 * i:int \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] + "fooOK::lambda_shared_lambda_lambda1.cpp:26:12_1" -> "fooOK::lambda_shared_lambda_lambda1.cpp:26:12_2" ; +"fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()3" [label="3: Return Stmt \n n$0=*&i:int [line 26]\n *&i:int =(n$0 + 1) [line 26]\n *&return:int =n$0 [line 26]\n " shape="box"] - 13 -> 15 ; -12 [label="12: Exit foo \n " color=yellow style=filled] + "fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()3" -> "fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()2" ; +"fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()2" [label="2: Exit fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator() \n " color=yellow style=filled] -11 [label="11: Start foo\nFormals: \nLocals: y:class foo::lambda_shared_lambda_lambda1.cpp:20:12 0$?%__sil_tmpSIL_materialize_temp__n$1:class foo::lambda_shared_lambda_lambda1.cpp:20:12 unused:class foo::lambda_shared_lambda_lambda1.cpp:19:17 0$?%__sil_tmpSIL_materialize_temp__n$2:class foo::lambda_shared_lambda_lambda1.cpp:19:17 \n DECLARE_LOCALS(&return,&y,&0$?%__sil_tmpSIL_materialize_temp__n$1,&unused,&0$?%__sil_tmpSIL_materialize_temp__n$2); [line 18]\n " color=yellow style=filled] +"fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()1" [label="1: Start fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()\nFormals: this:class fooOK::lambda_shared_lambda_lambda1.cpp:26:12 * i:int \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 11 -> 25 ; -10 [label="10: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$1:class bar::lambda_shared_lambda_lambda1.cpp:11:15 =(_fun_bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()) [line 11]\n _fun_bar::lambda_shared_lambda_lambda1.cpp:11:15_(&func:class bar::lambda_shared_lambda_lambda1.cpp:11:15 *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class bar::lambda_shared_lambda_lambda1.cpp:11:15 &) [line 11]\n " shape="box"] + "fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()1" -> "fooOK::lambda_shared_lambda_lambda1.cpp:26:12_operator()3" ; +"foo::lambda_shared_lambda_lambda1.cpp:19:17_2" [label="2: Exit foo::lambda_shared_lambda_lambda1.cpp:19:17_ \n " color=yellow style=filled] - 10 -> 7 ; -9 [label="9: Exit bar::lambda_shared_lambda_lambda1.cpp:11:15_ \n " color=yellow style=filled] +"foo::lambda_shared_lambda_lambda1.cpp:19:17_1" [label="1: Start foo::lambda_shared_lambda_lambda1.cpp:19:17_\nFormals: this:class foo::lambda_shared_lambda_lambda1.cpp:19:17 * __param_0:class foo::lambda_shared_lambda_lambda1.cpp:19:17 &\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] -8 [label="8: Start bar::lambda_shared_lambda_lambda1.cpp:11:15_\nFormals: this:class bar::lambda_shared_lambda_lambda1.cpp:11:15 * __param_0:class bar::lambda_shared_lambda_lambda1.cpp:11:15 &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] + "foo::lambda_shared_lambda_lambda1.cpp:19:17_1" -> "foo::lambda_shared_lambda_lambda1.cpp:19:17_2" ; +"bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()4" [label="4: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] - 8 -> 9 ; -7 [label="7: Return Stmt \n n$0=_fun_bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()(&func:class bar::lambda_shared_lambda_lambda1.cpp:11:15 &) [line 15]\n *&return:int =(7 / n$0) [line 15]\n " shape="box"] + "bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()4" -> "bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()3" ; +"bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()3" [label="3: Return Stmt \n n$0=*&i:int [line 13]\n *&return:int =n$0 [line 13]\n " shape="box"] - 7 -> 2 ; -6 [label="6: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] + "bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()3" -> "bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()2" ; +"bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()2" [label="2: Exit bar::lambda_shared_lambda_lambda1.cpp:11:15_operator() \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&i:int [line 13]\n *&return:int =n$0 [line 13]\n " shape="box"] +"bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()1" [label="1: Start bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()\nFormals: this:class bar::lambda_shared_lambda_lambda1.cpp:11:15 *\nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 11]\n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit bar::lambda_shared_lambda_lambda1.cpp:11:15_operator() \n " color=yellow style=filled] + "bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()1" -> "bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()4" ; +"bar4" [label="4: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$1:class bar::lambda_shared_lambda_lambda1.cpp:11:15 =(_fun_bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()) [line 11]\n _fun_bar::lambda_shared_lambda_lambda1.cpp:11:15_(&func:class bar::lambda_shared_lambda_lambda1.cpp:11:15 *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class bar::lambda_shared_lambda_lambda1.cpp:11:15 &) [line 11]\n " shape="box"] -3 [label="3: Start bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()\nFormals: this:class bar::lambda_shared_lambda_lambda1.cpp:11:15 *\nLocals: i:int \n DECLARE_LOCALS(&return,&i); [line 11]\n " color=yellow style=filled] + "bar4" -> "bar3" ; +"bar3" [label="3: Return Stmt \n n$0=_fun_bar::lambda_shared_lambda_lambda1.cpp:11:15_operator()(&func:class bar::lambda_shared_lambda_lambda1.cpp:11:15 &) [line 15]\n *&return:int =(7 / n$0) [line 15]\n " shape="box"] - 3 -> 6 ; -2 [label="2: Exit bar \n " color=yellow style=filled] + "bar3" -> "bar2" ; +"bar2" [label="2: Exit bar \n " color=yellow style=filled] -1 [label="1: Start bar\nFormals: \nLocals: func:class bar::lambda_shared_lambda_lambda1.cpp:11:15 0$?%__sil_tmpSIL_materialize_temp__n$1:class bar::lambda_shared_lambda_lambda1.cpp:11:15 \n DECLARE_LOCALS(&return,&func,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 10]\n " color=yellow style=filled] +"bar1" [label="1: Start bar\nFormals: \nLocals: func:class bar::lambda_shared_lambda_lambda1.cpp:11:15 0$?%__sil_tmpSIL_materialize_temp__n$1:class bar::lambda_shared_lambda_lambda1.cpp:11:15 \n DECLARE_LOCALS(&return,&func,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 10]\n " color=yellow style=filled] - 1 -> 10 ; + "bar1" -> "bar4" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/conversion_operator.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/conversion_operator.cpp.dot index 43b17ca2e..15eb1e9e9 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/conversion_operator.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/conversion_operator.cpp.dot @@ -1,241 +1,241 @@ /* @generated */ digraph iCFG { -61 [label="61: DeclStmt \n _fun_conversion_operator::X_X(&x:class conversion_operator::X *,1:int ,1:_Bool ) [line 64]\n " shape="box"] +"conversion_operator::X_operator_bool3" [label="3: Return Stmt \n n$0=*&this:class conversion_operator::X * [line 14]\n n$1=*n$0.b_:_Bool [line 14]\n *&return:_Bool =n$1 [line 14]\n " shape="box"] - 61 -> 56 ; -60 [label="60: DeclStmt \n _=*&x:class conversion_operator::X [line 66]\n n$6=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 66]\n *&v:int =n$6 [line 66]\n " shape="box"] + "conversion_operator::X_operator_bool3" -> "conversion_operator::X_operator_bool2" ; +"conversion_operator::X_operator_bool2" [label="2: Exit conversion_operator::X_operator_bool \n " color=yellow style=filled] - 60 -> 59 ; -59 [label="59: Return Stmt \n n$4=*&v:int [line 67]\n *&return:int =(1 / n$4) [line 67]\n " shape="box"] +"conversion_operator::X_operator_bool1" [label="1: Start conversion_operator::X_operator_bool\nFormals: this:class conversion_operator::X *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 59 -> 53 ; -58 [label="58: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 65]\n " shape="invhouse"] + "conversion_operator::X_operator_bool1" -> "conversion_operator::X_operator_bool3" ; +"conversion_operator::branch_div110" [label="10: DeclStmt \n _fun_conversion_operator::X_X(&x:class conversion_operator::X *,1:int ,1:_Bool ) [line 64]\n " shape="box"] - 58 -> 55 ; -57 [label="57: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 65]\n " shape="invhouse"] + "conversion_operator::branch_div110" -> "conversion_operator::branch_div15" ; +"conversion_operator::branch_div19" [label="9: DeclStmt \n _=*&x:class conversion_operator::X [line 66]\n n$6=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 66]\n *&v:int =n$6 [line 66]\n " shape="box"] - 57 -> 60 ; -56 [label="56: Call _fun_conversion_operator::X_operator_bool \n _=*&x:class conversion_operator::X [line 65]\n n$3=_fun_conversion_operator::X_operator_bool(&x:class conversion_operator::X &) [line 65]\n " shape="box"] + "conversion_operator::branch_div19" -> "conversion_operator::branch_div18" ; +"conversion_operator::branch_div18" [label="8: Return Stmt \n n$4=*&v:int [line 67]\n *&return:int =(1 / n$4) [line 67]\n " shape="box"] - 56 -> 57 ; - 56 -> 58 ; -55 [label="55: + \n " ] + "conversion_operator::branch_div18" -> "conversion_operator::branch_div12" ; +"conversion_operator::branch_div17" [label="7: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 65]\n " shape="invhouse"] - 55 -> 54 ; -54 [label="54: Return Stmt \n _=*&x:class conversion_operator::X [line 69]\n n$1=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 69]\n *&return:int =n$1 [line 69]\n " shape="box"] + "conversion_operator::branch_div17" -> "conversion_operator::branch_div14" ; +"conversion_operator::branch_div16" [label="6: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 65]\n " shape="invhouse"] - 54 -> 53 ; -53 [label="53: Exit conversion_operator::branch_div1 \n " color=yellow style=filled] + "conversion_operator::branch_div16" -> "conversion_operator::branch_div19" ; +"conversion_operator::branch_div15" [label="5: Call _fun_conversion_operator::X_operator_bool \n _=*&x:class conversion_operator::X [line 65]\n n$3=_fun_conversion_operator::X_operator_bool(&x:class conversion_operator::X &) [line 65]\n " shape="box"] -52 [label="52: Start conversion_operator::branch_div1\nFormals: \nLocals: v:int x:class conversion_operator::X \n DECLARE_LOCALS(&return,&v,&x); [line 63]\n " color=yellow style=filled] + "conversion_operator::branch_div15" -> "conversion_operator::branch_div16" ; + "conversion_operator::branch_div15" -> "conversion_operator::branch_div17" ; +"conversion_operator::branch_div14" [label="4: + \n " ] - 52 -> 61 ; -51 [label="51: DeclStmt \n _fun_conversion_operator::X_X(&x:class conversion_operator::X *,0:int ,0:_Bool ) [line 55]\n " shape="box"] + "conversion_operator::branch_div14" -> "conversion_operator::branch_div13" ; +"conversion_operator::branch_div13" [label="3: Return Stmt \n _=*&x:class conversion_operator::X [line 69]\n n$1=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 69]\n *&return:int =n$1 [line 69]\n " shape="box"] - 51 -> 46 ; -50 [label="50: DeclStmt \n _=*&x:class conversion_operator::X [line 57]\n n$6=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 57]\n *&v:int =n$6 [line 57]\n " shape="box"] + "conversion_operator::branch_div13" -> "conversion_operator::branch_div12" ; +"conversion_operator::branch_div12" [label="2: Exit conversion_operator::branch_div1 \n " color=yellow style=filled] - 50 -> 49 ; -49 [label="49: Return Stmt \n n$4=*&v:int [line 58]\n *&return:int =(1 / n$4) [line 58]\n " shape="box"] +"conversion_operator::branch_div11" [label="1: Start conversion_operator::branch_div1\nFormals: \nLocals: v:int x:class conversion_operator::X \n DECLARE_LOCALS(&return,&v,&x); [line 63]\n " color=yellow style=filled] - 49 -> 43 ; -48 [label="48: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 56]\n " shape="invhouse"] + "conversion_operator::branch_div11" -> "conversion_operator::branch_div110" ; +"conversion_operator::Y_operator_X3" [label="3: Return Stmt \n n$0=*&__return_param:class conversion_operator::X * [line 29]\n n$2=*&this:class conversion_operator::Y * [line 29]\n n$3=*n$2.f:int [line 29]\n n$4=*&this:class conversion_operator::Y * [line 29]\n n$5=*n$4.b:int [line 29]\n _fun_conversion_operator::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X *,n$3:int ,n$5:_Bool ) [line 29]\n _fun_conversion_operator::X_X(n$0:class conversion_operator::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X &) [line 29]\n " shape="box"] - 48 -> 45 ; -47 [label="47: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 56]\n " shape="invhouse"] + "conversion_operator::Y_operator_X3" -> "conversion_operator::Y_operator_X2" ; +"conversion_operator::Y_operator_X2" [label="2: Exit conversion_operator::Y_operator_X \n " color=yellow style=filled] - 47 -> 50 ; -46 [label="46: Call _fun_conversion_operator::X_operator_bool \n _=*&x:class conversion_operator::X [line 56]\n n$3=_fun_conversion_operator::X_operator_bool(&x:class conversion_operator::X &) [line 56]\n " shape="box"] +"conversion_operator::Y_operator_X1" [label="1: Start conversion_operator::Y_operator_X\nFormals: this:class conversion_operator::Y * __return_param:class conversion_operator::X *\nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 29]\n " color=yellow style=filled] - 46 -> 47 ; - 46 -> 48 ; -45 [label="45: + \n " ] + "conversion_operator::Y_operator_X1" -> "conversion_operator::Y_operator_X3" ; +"conversion_operator::X_X4" [label="4: BinaryOperatorStmt: Assign \n n$2=*&this:class conversion_operator::X * [line 18]\n n$3=*&f:int [line 18]\n *n$2.f_:int =n$3 [line 18]\n " shape="box"] - 45 -> 44 ; -44 [label="44: Return Stmt \n _=*&x:class conversion_operator::X [line 60]\n n$1=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 60]\n *&return:int =n$1 [line 60]\n " shape="box"] + "conversion_operator::X_X4" -> "conversion_operator::X_X3" ; +"conversion_operator::X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class conversion_operator::X * [line 19]\n n$1=*&b:_Bool [line 19]\n *n$0.b_:_Bool =n$1 [line 19]\n " shape="box"] - 44 -> 43 ; -43 [label="43: Exit conversion_operator::branch_no_div \n " color=yellow style=filled] + "conversion_operator::X_X3" -> "conversion_operator::X_X2" ; +"conversion_operator::X_X2" [label="2: Exit conversion_operator::X_X \n " color=yellow style=filled] -42 [label="42: Start conversion_operator::branch_no_div\nFormals: \nLocals: v:int x:class conversion_operator::X \n DECLARE_LOCALS(&return,&v,&x); [line 54]\n " color=yellow style=filled] +"conversion_operator::X_X1" [label="1: Start conversion_operator::X_X\nFormals: this:class conversion_operator::X * f:int b:_Bool \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 42 -> 51 ; -41 [label="41: DeclStmt \n _fun_conversion_operator::Y_Y(&y:class conversion_operator::Y *) [line 44]\n " shape="box"] + "conversion_operator::X_X1" -> "conversion_operator::X_X4" ; +"conversion_operator::Y_Y2" [label="2: Exit conversion_operator::Y_Y \n " color=yellow style=filled] - 41 -> 40 ; -40 [label="40: BinaryOperatorStmt: Assign \n *&y.f:int =0 [line 45]\n " shape="box"] +"conversion_operator::Y_Y1" [label="1: Start conversion_operator::Y_Y\nFormals: this:class conversion_operator::Y *\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 40 -> 39 ; -39 [label="39: BinaryOperatorStmt: Assign \n *&y.b:int =1 [line 46]\n " shape="box"] + "conversion_operator::Y_Y1" -> "conversion_operator::Y_Y2" ; +"conversion_operator::X_operator_int3" [label="3: Return Stmt \n n$0=*&this:class conversion_operator::X * [line 13]\n n$1=*n$0.f_:int [line 13]\n *&return:int =n$1 [line 13]\n " shape="box"] - 39 -> 34 ; -38 [label="38: DeclStmt \n _=*&y:class conversion_operator::Y [line 48]\n _fun_conversion_operator::Y_operator_X(&y:class conversion_operator::Y &,&0$?%__sil_tmpSIL_materialize_temp__n$12:class conversion_operator::X *) [line 48]\n _fun_conversion_operator::X_X(&0$?%__sil_tmp__temp_construct_n$11:class conversion_operator::X *,&0$?%__sil_tmpSIL_materialize_temp__n$12:class conversion_operator::X &) [line 48]\n n$15=_fun_conversion_operator::X_operator_int(&0$?%__sil_tmp__temp_construct_n$11:class conversion_operator::X &) [line 48]\n *&v:int =n$15 [line 48]\n " shape="box"] + "conversion_operator::X_operator_int3" -> "conversion_operator::X_operator_int2" ; +"conversion_operator::X_operator_int2" [label="2: Exit conversion_operator::X_operator_int \n " color=yellow style=filled] - 38 -> 37 ; -37 [label="37: Return Stmt \n n$10=*&v:int [line 49]\n *&return:int =(1 / n$10) [line 49]\n " shape="box"] +"conversion_operator::X_operator_int1" [label="1: Start conversion_operator::X_operator_int\nFormals: this:class conversion_operator::X *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 37 -> 31 ; -36 [label="36: Prune (false branch) \n PRUNE((n$9 == 0), false); [line 47]\n " shape="invhouse"] + "conversion_operator::X_operator_int1" -> "conversion_operator::X_operator_int3" ; +"conversion_operator::X_X4" [label="4: BinaryOperatorStmt: Assign \n n$3=*&this:class conversion_operator::X * [line 22]\n n$4=*&x:class conversion_operator::X & [line 22]\n n$5=*n$4.f_:int [line 22]\n *n$3.f_:int =n$5 [line 22]\n " shape="box"] - 36 -> 33 ; -35 [label="35: Prune (true branch) \n PRUNE((n$9 != 0), true); [line 47]\n " shape="invhouse"] + "conversion_operator::X_X4" -> "conversion_operator::X_X3" ; +"conversion_operator::X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class conversion_operator::X * [line 23]\n n$1=*&x:class conversion_operator::X & [line 23]\n n$2=*n$1.b_:_Bool [line 23]\n *n$0.b_:_Bool =n$2 [line 23]\n " shape="box"] - 35 -> 38 ; -34 [label="34: Call _fun_conversion_operator::X_operator_bool \n _=*&y:class conversion_operator::Y [line 47]\n _fun_conversion_operator::Y_operator_X(&y:class conversion_operator::Y &,&0$?%__sil_tmpSIL_materialize_temp__n$6:class conversion_operator::X *) [line 47]\n _fun_conversion_operator::X_X(&0$?%__sil_tmp__temp_construct_n$5:class conversion_operator::X *,&0$?%__sil_tmpSIL_materialize_temp__n$6:class conversion_operator::X &) [line 47]\n n$9=_fun_conversion_operator::X_operator_bool(&0$?%__sil_tmp__temp_construct_n$5:class conversion_operator::X &) [line 47]\n " shape="box"] + "conversion_operator::X_X3" -> "conversion_operator::X_X2" ; +"conversion_operator::X_X2" [label="2: Exit conversion_operator::X_X \n " color=yellow style=filled] - 34 -> 35 ; - 34 -> 36 ; -33 [label="33: + \n " ] +"conversion_operator::X_X1" [label="1: Start conversion_operator::X_X\nFormals: this:class conversion_operator::X * x:class conversion_operator::X &\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 33 -> 32 ; -32 [label="32: Return Stmt \n _=*&y:class conversion_operator::Y [line 51]\n _fun_conversion_operator::Y_operator_X(&y:class conversion_operator::Y &,&0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X *) [line 51]\n _fun_conversion_operator::X_X(&0$?%__sil_tmp__temp_construct_n$0:class conversion_operator::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X &) [line 51]\n n$4=_fun_conversion_operator::X_operator_int(&0$?%__sil_tmp__temp_construct_n$0:class conversion_operator::X &) [line 51]\n *&return:int =n$4 [line 51]\n " shape="box"] + "conversion_operator::X_X1" -> "conversion_operator::X_X4" ; +"conversion_operator::branch_div010" [label="10: DeclStmt \n _fun_conversion_operator::X_X(&x:class conversion_operator::X *,0:int ,1:_Bool ) [line 35]\n " shape="box"] - 32 -> 31 ; -31 [label="31: Exit conversion_operator::y_branch_div0 \n " color=yellow style=filled] + "conversion_operator::branch_div010" -> "conversion_operator::branch_div05" ; +"conversion_operator::branch_div09" [label="9: DeclStmt \n _=*&x:class conversion_operator::X [line 37]\n n$6=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 37]\n *&v:int =n$6 [line 37]\n " shape="box"] -30 [label="30: Start conversion_operator::y_branch_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class conversion_operator::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X 0$?%__sil_tmp__temp_construct_n$5:class conversion_operator::X 0$?%__sil_tmpSIL_materialize_temp__n$6:class conversion_operator::X v:int 0$?%__sil_tmp__temp_construct_n$11:class conversion_operator::X 0$?%__sil_tmpSIL_materialize_temp__n$12:class conversion_operator::X y:class conversion_operator::Y \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&0$?%__sil_tmpSIL_materialize_temp__n$1,&0$?%__sil_tmp__temp_construct_n$5,&0$?%__sil_tmpSIL_materialize_temp__n$6,&v,&0$?%__sil_tmp__temp_construct_n$11,&0$?%__sil_tmpSIL_materialize_temp__n$12,&y); [line 43]\n " color=yellow style=filled] + "conversion_operator::branch_div09" -> "conversion_operator::branch_div08" ; +"conversion_operator::branch_div08" [label="8: Return Stmt \n n$4=*&v:int [line 38]\n *&return:int =(1 / n$4) [line 38]\n " shape="box"] - 30 -> 41 ; -29 [label="29: DeclStmt \n _fun_conversion_operator::X_X(&x:class conversion_operator::X *,0:int ,1:_Bool ) [line 35]\n " shape="box"] + "conversion_operator::branch_div08" -> "conversion_operator::branch_div02" ; +"conversion_operator::branch_div07" [label="7: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 36]\n " shape="invhouse"] - 29 -> 24 ; -28 [label="28: DeclStmt \n _=*&x:class conversion_operator::X [line 37]\n n$6=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 37]\n *&v:int =n$6 [line 37]\n " shape="box"] + "conversion_operator::branch_div07" -> "conversion_operator::branch_div04" ; +"conversion_operator::branch_div06" [label="6: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 36]\n " shape="invhouse"] - 28 -> 27 ; -27 [label="27: Return Stmt \n n$4=*&v:int [line 38]\n *&return:int =(1 / n$4) [line 38]\n " shape="box"] + "conversion_operator::branch_div06" -> "conversion_operator::branch_div09" ; +"conversion_operator::branch_div05" [label="5: Call _fun_conversion_operator::X_operator_bool \n _=*&x:class conversion_operator::X [line 36]\n n$3=_fun_conversion_operator::X_operator_bool(&x:class conversion_operator::X &) [line 36]\n " shape="box"] - 27 -> 21 ; -26 [label="26: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 36]\n " shape="invhouse"] + "conversion_operator::branch_div05" -> "conversion_operator::branch_div06" ; + "conversion_operator::branch_div05" -> "conversion_operator::branch_div07" ; +"conversion_operator::branch_div04" [label="4: + \n " ] - 26 -> 23 ; -25 [label="25: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 36]\n " shape="invhouse"] + "conversion_operator::branch_div04" -> "conversion_operator::branch_div03" ; +"conversion_operator::branch_div03" [label="3: Return Stmt \n _=*&x:class conversion_operator::X [line 40]\n n$1=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 40]\n *&return:int =n$1 [line 40]\n " shape="box"] - 25 -> 28 ; -24 [label="24: Call _fun_conversion_operator::X_operator_bool \n _=*&x:class conversion_operator::X [line 36]\n n$3=_fun_conversion_operator::X_operator_bool(&x:class conversion_operator::X &) [line 36]\n " shape="box"] + "conversion_operator::branch_div03" -> "conversion_operator::branch_div02" ; +"conversion_operator::branch_div02" [label="2: Exit conversion_operator::branch_div0 \n " color=yellow style=filled] - 24 -> 25 ; - 24 -> 26 ; -23 [label="23: + \n " ] +"conversion_operator::branch_div01" [label="1: Start conversion_operator::branch_div0\nFormals: \nLocals: v:int x:class conversion_operator::X \n DECLARE_LOCALS(&return,&v,&x); [line 34]\n " color=yellow style=filled] - 23 -> 22 ; -22 [label="22: Return Stmt \n _=*&x:class conversion_operator::X [line 40]\n n$1=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 40]\n *&return:int =n$1 [line 40]\n " shape="box"] + "conversion_operator::branch_div01" -> "conversion_operator::branch_div010" ; +"conversion_operator::y_branch_div012" [label="12: DeclStmt \n _fun_conversion_operator::Y_Y(&y:class conversion_operator::Y *) [line 44]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Exit conversion_operator::branch_div0 \n " color=yellow style=filled] + "conversion_operator::y_branch_div012" -> "conversion_operator::y_branch_div011" ; +"conversion_operator::y_branch_div011" [label="11: BinaryOperatorStmt: Assign \n *&y.f:int =0 [line 45]\n " shape="box"] -20 [label="20: Start conversion_operator::branch_div0\nFormals: \nLocals: v:int x:class conversion_operator::X \n DECLARE_LOCALS(&return,&v,&x); [line 34]\n " color=yellow style=filled] + "conversion_operator::y_branch_div011" -> "conversion_operator::y_branch_div010" ; +"conversion_operator::y_branch_div010" [label="10: BinaryOperatorStmt: Assign \n *&y.b:int =1 [line 46]\n " shape="box"] - 20 -> 29 ; -19 [label="19: Exit conversion_operator::Y_Y \n " color=yellow style=filled] + "conversion_operator::y_branch_div010" -> "conversion_operator::y_branch_div05" ; +"conversion_operator::y_branch_div09" [label="9: DeclStmt \n _=*&y:class conversion_operator::Y [line 48]\n _fun_conversion_operator::Y_operator_X(&y:class conversion_operator::Y &,&0$?%__sil_tmpSIL_materialize_temp__n$12:class conversion_operator::X *) [line 48]\n _fun_conversion_operator::X_X(&0$?%__sil_tmp__temp_construct_n$11:class conversion_operator::X *,&0$?%__sil_tmpSIL_materialize_temp__n$12:class conversion_operator::X &) [line 48]\n n$15=_fun_conversion_operator::X_operator_int(&0$?%__sil_tmp__temp_construct_n$11:class conversion_operator::X &) [line 48]\n *&v:int =n$15 [line 48]\n " shape="box"] -18 [label="18: Start conversion_operator::Y_Y\nFormals: this:class conversion_operator::Y *\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] + "conversion_operator::y_branch_div09" -> "conversion_operator::y_branch_div08" ; +"conversion_operator::y_branch_div08" [label="8: Return Stmt \n n$10=*&v:int [line 49]\n *&return:int =(1 / n$10) [line 49]\n " shape="box"] - 18 -> 19 ; -17 [label="17: Return Stmt \n n$0=*&__return_param:class conversion_operator::X * [line 29]\n n$2=*&this:class conversion_operator::Y * [line 29]\n n$3=*n$2.f:int [line 29]\n n$4=*&this:class conversion_operator::Y * [line 29]\n n$5=*n$4.b:int [line 29]\n _fun_conversion_operator::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X *,n$3:int ,n$5:_Bool ) [line 29]\n _fun_conversion_operator::X_X(n$0:class conversion_operator::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X &) [line 29]\n " shape="box"] + "conversion_operator::y_branch_div08" -> "conversion_operator::y_branch_div02" ; +"conversion_operator::y_branch_div07" [label="7: Prune (false branch) \n PRUNE((n$9 == 0), false); [line 47]\n " shape="invhouse"] - 17 -> 16 ; -16 [label="16: Exit conversion_operator::Y_operator_X \n " color=yellow style=filled] + "conversion_operator::y_branch_div07" -> "conversion_operator::y_branch_div04" ; +"conversion_operator::y_branch_div06" [label="6: Prune (true branch) \n PRUNE((n$9 != 0), true); [line 47]\n " shape="invhouse"] -15 [label="15: Start conversion_operator::Y_operator_X\nFormals: this:class conversion_operator::Y * __return_param:class conversion_operator::X *\nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 29]\n " color=yellow style=filled] + "conversion_operator::y_branch_div06" -> "conversion_operator::y_branch_div09" ; +"conversion_operator::y_branch_div05" [label="5: Call _fun_conversion_operator::X_operator_bool \n _=*&y:class conversion_operator::Y [line 47]\n _fun_conversion_operator::Y_operator_X(&y:class conversion_operator::Y &,&0$?%__sil_tmpSIL_materialize_temp__n$6:class conversion_operator::X *) [line 47]\n _fun_conversion_operator::X_X(&0$?%__sil_tmp__temp_construct_n$5:class conversion_operator::X *,&0$?%__sil_tmpSIL_materialize_temp__n$6:class conversion_operator::X &) [line 47]\n n$9=_fun_conversion_operator::X_operator_bool(&0$?%__sil_tmp__temp_construct_n$5:class conversion_operator::X &) [line 47]\n " shape="box"] - 15 -> 17 ; -14 [label="14: BinaryOperatorStmt: Assign \n n$3=*&this:class conversion_operator::X * [line 22]\n n$4=*&x:class conversion_operator::X & [line 22]\n n$5=*n$4.f_:int [line 22]\n *n$3.f_:int =n$5 [line 22]\n " shape="box"] + "conversion_operator::y_branch_div05" -> "conversion_operator::y_branch_div06" ; + "conversion_operator::y_branch_div05" -> "conversion_operator::y_branch_div07" ; +"conversion_operator::y_branch_div04" [label="4: + \n " ] - 14 -> 13 ; -13 [label="13: BinaryOperatorStmt: Assign \n n$0=*&this:class conversion_operator::X * [line 23]\n n$1=*&x:class conversion_operator::X & [line 23]\n n$2=*n$1.b_:_Bool [line 23]\n *n$0.b_:_Bool =n$2 [line 23]\n " shape="box"] + "conversion_operator::y_branch_div04" -> "conversion_operator::y_branch_div03" ; +"conversion_operator::y_branch_div03" [label="3: Return Stmt \n _=*&y:class conversion_operator::Y [line 51]\n _fun_conversion_operator::Y_operator_X(&y:class conversion_operator::Y &,&0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X *) [line 51]\n _fun_conversion_operator::X_X(&0$?%__sil_tmp__temp_construct_n$0:class conversion_operator::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X &) [line 51]\n n$4=_fun_conversion_operator::X_operator_int(&0$?%__sil_tmp__temp_construct_n$0:class conversion_operator::X &) [line 51]\n *&return:int =n$4 [line 51]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit conversion_operator::X_X \n " color=yellow style=filled] + "conversion_operator::y_branch_div03" -> "conversion_operator::y_branch_div02" ; +"conversion_operator::y_branch_div02" [label="2: Exit conversion_operator::y_branch_div0 \n " color=yellow style=filled] -11 [label="11: Start conversion_operator::X_X\nFormals: this:class conversion_operator::X * x:class conversion_operator::X &\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] +"conversion_operator::y_branch_div01" [label="1: Start conversion_operator::y_branch_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class conversion_operator::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class conversion_operator::X 0$?%__sil_tmp__temp_construct_n$5:class conversion_operator::X 0$?%__sil_tmpSIL_materialize_temp__n$6:class conversion_operator::X v:int 0$?%__sil_tmp__temp_construct_n$11:class conversion_operator::X 0$?%__sil_tmpSIL_materialize_temp__n$12:class conversion_operator::X y:class conversion_operator::Y \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&0$?%__sil_tmpSIL_materialize_temp__n$1,&0$?%__sil_tmp__temp_construct_n$5,&0$?%__sil_tmpSIL_materialize_temp__n$6,&v,&0$?%__sil_tmp__temp_construct_n$11,&0$?%__sil_tmpSIL_materialize_temp__n$12,&y); [line 43]\n " color=yellow style=filled] - 11 -> 14 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$2=*&this:class conversion_operator::X * [line 18]\n n$3=*&f:int [line 18]\n *n$2.f_:int =n$3 [line 18]\n " shape="box"] + "conversion_operator::y_branch_div01" -> "conversion_operator::y_branch_div012" ; +"conversion_operator::branch_no_div10" [label="10: DeclStmt \n _fun_conversion_operator::X_X(&x:class conversion_operator::X *,0:int ,0:_Bool ) [line 55]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$0=*&this:class conversion_operator::X * [line 19]\n n$1=*&b:_Bool [line 19]\n *n$0.b_:_Bool =n$1 [line 19]\n " shape="box"] + "conversion_operator::branch_no_div10" -> "conversion_operator::branch_no_div5" ; +"conversion_operator::branch_no_div9" [label="9: DeclStmt \n _=*&x:class conversion_operator::X [line 57]\n n$6=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 57]\n *&v:int =n$6 [line 57]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit conversion_operator::X_X \n " color=yellow style=filled] + "conversion_operator::branch_no_div9" -> "conversion_operator::branch_no_div8" ; +"conversion_operator::branch_no_div8" [label="8: Return Stmt \n n$4=*&v:int [line 58]\n *&return:int =(1 / n$4) [line 58]\n " shape="box"] -7 [label="7: Start conversion_operator::X_X\nFormals: this:class conversion_operator::X * f:int b:_Bool \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "conversion_operator::branch_no_div8" -> "conversion_operator::branch_no_div2" ; +"conversion_operator::branch_no_div7" [label="7: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 56]\n " shape="invhouse"] - 7 -> 10 ; -6 [label="6: Return Stmt \n n$0=*&this:class conversion_operator::X * [line 14]\n n$1=*n$0.b_:_Bool [line 14]\n *&return:_Bool =n$1 [line 14]\n " shape="box"] + "conversion_operator::branch_no_div7" -> "conversion_operator::branch_no_div4" ; +"conversion_operator::branch_no_div6" [label="6: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 56]\n " shape="invhouse"] - 6 -> 5 ; -5 [label="5: Exit conversion_operator::X_operator_bool \n " color=yellow style=filled] + "conversion_operator::branch_no_div6" -> "conversion_operator::branch_no_div9" ; +"conversion_operator::branch_no_div5" [label="5: Call _fun_conversion_operator::X_operator_bool \n _=*&x:class conversion_operator::X [line 56]\n n$3=_fun_conversion_operator::X_operator_bool(&x:class conversion_operator::X &) [line 56]\n " shape="box"] -4 [label="4: Start conversion_operator::X_operator_bool\nFormals: this:class conversion_operator::X *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] + "conversion_operator::branch_no_div5" -> "conversion_operator::branch_no_div6" ; + "conversion_operator::branch_no_div5" -> "conversion_operator::branch_no_div7" ; +"conversion_operator::branch_no_div4" [label="4: + \n " ] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&this:class conversion_operator::X * [line 13]\n n$1=*n$0.f_:int [line 13]\n *&return:int =n$1 [line 13]\n " shape="box"] + "conversion_operator::branch_no_div4" -> "conversion_operator::branch_no_div3" ; +"conversion_operator::branch_no_div3" [label="3: Return Stmt \n _=*&x:class conversion_operator::X [line 60]\n n$1=_fun_conversion_operator::X_operator_int(&x:class conversion_operator::X &) [line 60]\n *&return:int =n$1 [line 60]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit conversion_operator::X_operator_int \n " color=yellow style=filled] + "conversion_operator::branch_no_div3" -> "conversion_operator::branch_no_div2" ; +"conversion_operator::branch_no_div2" [label="2: Exit conversion_operator::branch_no_div \n " color=yellow style=filled] -1 [label="1: Start conversion_operator::X_operator_int\nFormals: this:class conversion_operator::X *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"conversion_operator::branch_no_div1" [label="1: Start conversion_operator::branch_no_div\nFormals: \nLocals: v:int x:class conversion_operator::X \n DECLARE_LOCALS(&return,&v,&x); [line 54]\n " color=yellow style=filled] - 1 -> 3 ; + "conversion_operator::branch_no_div1" -> "conversion_operator::branch_no_div10" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/default_parameters.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/default_parameters.cpp.dot index 98afdf27f..5afd38f55 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/default_parameters.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/default_parameters.cpp.dot @@ -1,33 +1,33 @@ /* @generated */ digraph iCFG { -8 [label="8: Call _fun_A_fun_default \n n$6=*&a_ptr:class A * [line 18]\n _=*n$6:class A [line 18]\n n$8=_fun_A_fun_default(n$6:class A *,1:int ,2:int ,3:int ) [line 18]\n " shape="box"] +"A_fun_default3" [label="3: Return Stmt \n n$0=*&a:int [line 13]\n n$1=*&b:int [line 13]\n n$2=*&c:int [line 13]\n *&return:int =((n$0 + n$1) + n$2) [line 13]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Call _fun_A_fun_default \n n$3=*&a_ptr:class A * [line 19]\n _=*n$3:class A [line 19]\n n$5=_fun_A_fun_default(n$3:class A *,1:int ,2:int ,20:int ) [line 19]\n " shape="box"] + "A_fun_default3" -> "A_fun_default2" ; +"A_fun_default2" [label="2: Exit A_fun_default \n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: Call _fun_A_fun_default \n n$0=*&a_ptr:class A * [line 20]\n _=*n$0:class A [line 20]\n n$2=_fun_A_fun_default(n$0:class A *,1:int ,10:int ,20:int ) [line 20]\n " shape="box"] +"A_fun_default1" [label="1: Start A_fun_default\nFormals: this:class A * a:int b:int c:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit call_method_with_default_parameters \n " color=yellow style=filled] + "A_fun_default1" -> "A_fun_default3" ; +"call_method_with_default_parameters5" [label="5: Call _fun_A_fun_default \n n$6=*&a_ptr:class A * [line 18]\n _=*n$6:class A [line 18]\n n$8=_fun_A_fun_default(n$6:class A *,1:int ,2:int ,3:int ) [line 18]\n " shape="box"] -4 [label="4: Start call_method_with_default_parameters\nFormals: \nLocals: a_ptr:class A * \n DECLARE_LOCALS(&return,&a_ptr); [line 16]\n " color=yellow style=filled] + "call_method_with_default_parameters5" -> "call_method_with_default_parameters4" ; +"call_method_with_default_parameters4" [label="4: Call _fun_A_fun_default \n n$3=*&a_ptr:class A * [line 19]\n _=*n$3:class A [line 19]\n n$5=_fun_A_fun_default(n$3:class A *,1:int ,2:int ,20:int ) [line 19]\n " shape="box"] - 4 -> 8 ; -3 [label="3: Return Stmt \n n$0=*&a:int [line 13]\n n$1=*&b:int [line 13]\n n$2=*&c:int [line 13]\n *&return:int =((n$0 + n$1) + n$2) [line 13]\n " shape="box"] + "call_method_with_default_parameters4" -> "call_method_with_default_parameters3" ; +"call_method_with_default_parameters3" [label="3: Call _fun_A_fun_default \n n$0=*&a_ptr:class A * [line 20]\n _=*n$0:class A [line 20]\n n$2=_fun_A_fun_default(n$0:class A *,1:int ,10:int ,20:int ) [line 20]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_fun_default \n " color=yellow style=filled] + "call_method_with_default_parameters3" -> "call_method_with_default_parameters2" ; +"call_method_with_default_parameters2" [label="2: Exit call_method_with_default_parameters \n " color=yellow style=filled] -1 [label="1: Start A_fun_default\nFormals: this:class A * a:int b:int c:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"call_method_with_default_parameters1" [label="1: Start call_method_with_default_parameters\nFormals: \nLocals: a_ptr:class A * \n DECLARE_LOCALS(&return,&a_ptr); [line 16]\n " color=yellow style=filled] - 1 -> 3 ; + "call_method_with_default_parameters1" -> "call_method_with_default_parameters5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/dereference_this.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/dereference_this.cpp.dot index ca93ada1d..9d6340ca2 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/dereference_this.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/dereference_this.cpp.dot @@ -1,40 +1,40 @@ /* @generated */ digraph iCFG { -10 [label="10: Call _fun_A_method \n n$0=*&a_ptr:class A * [line 25]\n _=*n$0:class A [line 25]\n n$2=_fun_A_method(n$0:class A *) [line 25]\n " shape="box"] +"test3" [label="3: Call _fun_A_method \n n$0=*&a_ptr:class A * [line 25]\n _=*n$0:class A [line 25]\n n$2=_fun_A_method(n$0:class A *) [line 25]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -8 [label="8: Start test\nFormals: \nLocals: a_ptr:class A * \n DECLARE_LOCALS(&return,&a_ptr); [line 23]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: a_ptr:class A * \n DECLARE_LOCALS(&return,&a_ptr); [line 23]\n " color=yellow style=filled] - 8 -> 10 ; -7 [label="7: Call _fun_A_init \n n$2=*&this:class A * [line 19]\n _=*n$2:class A [line 19]\n _fun_A_init(n$2:class A *,10:int ) [line 19]\n " shape="box"] + "test1" -> "test3" ; +"A_init3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class A * [line 14]\n n$1=*&val:int [line 14]\n *n$0.field:int =n$1 [line 14]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&this:class A * [line 20]\n n$1=*n$0.field:int [line 20]\n *&return:int =n$1 [line 20]\n " shape="box"] + "A_init3" -> "A_init2" ; +"A_init2" [label="2: Exit A_init \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit A_method \n " color=yellow style=filled] +"A_init1" [label="1: Start A_init\nFormals: this:class A * val:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] -4 [label="4: Start A_method\nFormals: this:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] + "A_init1" -> "A_init3" ; +"A_method4" [label="4: Call _fun_A_init \n n$2=*&this:class A * [line 19]\n _=*n$2:class A [line 19]\n _fun_A_init(n$2:class A *,10:int ) [line 19]\n " shape="box"] - 4 -> 7 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class A * [line 14]\n n$1=*&val:int [line 14]\n *n$0.field:int =n$1 [line 14]\n " shape="box"] + "A_method4" -> "A_method3" ; +"A_method3" [label="3: Return Stmt \n n$0=*&this:class A * [line 20]\n n$1=*n$0.field:int [line 20]\n *&return:int =n$1 [line 20]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_init \n " color=yellow style=filled] + "A_method3" -> "A_method2" ; +"A_method2" [label="2: Exit A_method \n " color=yellow style=filled] -1 [label="1: Start A_init\nFormals: this:class A * val:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"A_method1" [label="1: Start A_method\nFormals: this:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 1 -> 3 ; + "A_method1" -> "A_method4" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/inline_method.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/inline_method.cpp.dot index 37a1599ba..3fd98db43 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/inline_method.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/inline_method.cpp.dot @@ -1,44 +1,44 @@ /* @generated */ digraph iCFG { -11 [label="11: Call _fun_A_fun \n n$4=*&a_ptr:class A * [line 25]\n _=*n$4:class A [line 25]\n n$6=_fun_A_fun(n$4:class A *) [line 25]\n " shape="box"] +"test_call4" [label="4: Call _fun_A_fun \n n$4=*&a_ptr:class A * [line 25]\n _=*n$4:class A [line 25]\n n$6=_fun_A_fun(n$4:class A *) [line 25]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Call _fun_A::AIn_fun \n n$0=*&a_ptr:class A * [line 26]\n n$1=*n$0.in:class A::AIn * [line 26]\n _=*n$1:class A::AIn [line 26]\n n$3=_fun_A::AIn_fun(n$1:class A::AIn *) [line 26]\n " shape="box"] + "test_call4" -> "test_call3" ; +"test_call3" [label="3: Call _fun_A::AIn_fun \n n$0=*&a_ptr:class A * [line 26]\n n$1=*n$0.in:class A::AIn * [line 26]\n _=*n$1:class A::AIn [line 26]\n n$3=_fun_A::AIn_fun(n$1:class A::AIn *) [line 26]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Exit test_call \n " color=yellow style=filled] + "test_call3" -> "test_call2" ; +"test_call2" [label="2: Exit test_call \n " color=yellow style=filled] -8 [label="8: Start test_call\nFormals: \nLocals: a_ptr:class A * \n DECLARE_LOCALS(&return,&a_ptr); [line 23]\n " color=yellow style=filled] +"test_call1" [label="1: Start test_call\nFormals: \nLocals: a_ptr:class A * \n DECLARE_LOCALS(&return,&a_ptr); [line 23]\n " color=yellow style=filled] - 8 -> 11 ; -7 [label="7: DeclStmt \n *&c:int =10 [line 18]\n " shape="box"] + "test_call1" -> "test_call4" ; +"A_fun4" [label="4: DeclStmt \n *&c:int =10 [line 18]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&c:int [line 19]\n *&return:int =(n$0 + 1) [line 19]\n " shape="box"] + "A_fun4" -> "A_fun3" ; +"A_fun3" [label="3: Return Stmt \n n$0=*&c:int [line 19]\n *&return:int =(n$0 + 1) [line 19]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit A_fun \n " color=yellow style=filled] + "A_fun3" -> "A_fun2" ; +"A_fun2" [label="2: Exit A_fun \n " color=yellow style=filled] -4 [label="4: Start A_fun\nFormals: this:class A *\nLocals: c:int \n DECLARE_LOCALS(&return,&c); [line 17]\n " color=yellow style=filled] +"A_fun1" [label="1: Start A_fun\nFormals: this:class A *\nLocals: c:int \n DECLARE_LOCALS(&return,&c); [line 17]\n " color=yellow style=filled] - 4 -> 7 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 13]\n " shape="box"] + "A_fun1" -> "A_fun4" ; +"A::AIn_fun3" [label="3: Return Stmt \n *&return:int =1 [line 13]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A::AIn_fun \n " color=yellow style=filled] + "A::AIn_fun3" -> "A::AIn_fun2" ; +"A::AIn_fun2" [label="2: Exit A::AIn_fun \n " color=yellow style=filled] -1 [label="1: Start A::AIn_fun\nFormals: this:class A::AIn *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"A::AIn_fun1" [label="1: Start A::AIn_fun\nFormals: this:class A::AIn *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 1 -> 3 ; + "A::AIn_fun1" -> "A::AIn_fun3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/overloading.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/overloading.cpp.dot index 7f478fb2b..5e6fcc6c4 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/overloading.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/overloading.cpp.dot @@ -1,40 +1,40 @@ /* @generated */ digraph iCFG { -10 [label="10: Call _fun_A_fun \n n$3=*&a_ptr:class A * [line 23]\n _=*n$3:class A [line 23]\n n$5=_fun_A_fun(n$3:class A *,1:int ,2:int ) [line 23]\n " shape="box"] +"test4" [label="4: Call _fun_A_fun \n n$3=*&a_ptr:class A * [line 23]\n _=*n$3:class A [line 23]\n n$5=_fun_A_fun(n$3:class A *,1:int ,2:int ) [line 23]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Call _fun_A_fun \n n$0=*&a_ptr:class A * [line 24]\n _=*n$0:class A [line 24]\n n$2=_fun_A_fun(n$0:class A *,1:int ,2:int ,3:int ) [line 24]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: Call _fun_A_fun \n n$0=*&a_ptr:class A * [line 24]\n _=*n$0:class A [line 24]\n n$2=_fun_A_fun(n$0:class A *,1:int ,2:int ,3:int ) [line 24]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -7 [label="7: Start test\nFormals: \nLocals: a_ptr:class A * \n DECLARE_LOCALS(&return,&a_ptr); [line 20]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: a_ptr:class A * \n DECLARE_LOCALS(&return,&a_ptr); [line 20]\n " color=yellow style=filled] - 7 -> 10 ; -6 [label="6: Return Stmt \n n$0=*&a:int [line 18]\n n$1=*&b:int [line 18]\n *&return:int =(n$0 - n$1) [line 18]\n " shape="box"] + "test1" -> "test4" ; +"A_fun3" [label="3: Return Stmt \n n$0=*&a:int [line 16]\n n$1=*&b:int [line 16]\n n$2=*&c:int [line 16]\n *&return:int =((n$0 + n$1) + n$2) [line 16]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit A_fun \n " color=yellow style=filled] + "A_fun3" -> "A_fun2" ; +"A_fun2" [label="2: Exit A_fun \n " color=yellow style=filled] -4 [label="4: Start A_fun\nFormals: this:class A * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"A_fun1" [label="1: Start A_fun\nFormals: this:class A * a:int b:int c:int \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&a:int [line 16]\n n$1=*&b:int [line 16]\n n$2=*&c:int [line 16]\n *&return:int =((n$0 + n$1) + n$2) [line 16]\n " shape="box"] + "A_fun1" -> "A_fun3" ; +"A_fun3" [label="3: Return Stmt \n n$0=*&a:int [line 18]\n n$1=*&b:int [line 18]\n *&return:int =(n$0 - n$1) [line 18]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_fun \n " color=yellow style=filled] + "A_fun3" -> "A_fun2" ; +"A_fun2" [label="2: Exit A_fun \n " color=yellow style=filled] -1 [label="1: Start A_fun\nFormals: this:class A * a:int b:int c:int \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"A_fun1" [label="1: Start A_fun\nFormals: this:class A * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 1 -> 3 ; + "A_fun1" -> "A_fun3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/return_struct.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/return_struct.cpp.dot index f1e470efa..a74fd15a7 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/return_struct.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/return_struct.cpp.dot @@ -1,51 +1,51 @@ /* @generated */ digraph iCFG { -13 [label="13: DeclStmt \n n$2=*&a:class A * [line 22]\n _=*n$2:class A [line 22]\n _fun_A_get(n$2:class A *,1:int ,&0$?%__sil_tmpSIL_materialize_temp__n$1:class X *) [line 22]\n _fun_X_X(&x:class X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class X &) [line 22]\n " shape="box"] +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Return Stmt \n n$0=*&x.f:int [line 23]\n *&return:int =(1 / n$0) [line 23]\n " shape="box"] +"X_X1" [label="1: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: Exit test \n " color=yellow style=filled] + "X_X1" -> "X_X2" ; +"test4" [label="4: DeclStmt \n n$2=*&a:class A * [line 22]\n _=*n$2:class A [line 22]\n _fun_A_get(n$2:class A *,1:int ,&0$?%__sil_tmpSIL_materialize_temp__n$1:class X *) [line 22]\n _fun_X_X(&x:class X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class X &) [line 22]\n " shape="box"] -10 [label="10: Start test\nFormals: a:class A *\nLocals: x:class X 0$?%__sil_tmpSIL_materialize_temp__n$1:class X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 21]\n " color=yellow style=filled] + "test4" -> "test3" ; +"test3" [label="3: Return Stmt \n n$0=*&x.f:int [line 23]\n *&return:int =(1 / n$0) [line 23]\n " shape="box"] - 10 -> 13 ; -9 [label="9: DeclStmt \n _fun_X_X(&x:class X *) [line 16]\n " shape="box"] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Return Stmt \n n$0=*&__return_param:class X * [line 17]\n _fun_X_X(n$0:class X *,&x:class X &) [line 17]\n " shape="box"] +"test1" [label="1: Start test\nFormals: a:class A *\nLocals: x:class X 0$?%__sil_tmpSIL_materialize_temp__n$1:class X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 21]\n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit A_get \n " color=yellow style=filled] + "test1" -> "test4" ; +"A_get4" [label="4: DeclStmt \n _fun_X_X(&x:class X *) [line 16]\n " shape="box"] -6 [label="6: Start A_get\nFormals: this:class A * p:int __return_param:class X *\nLocals: x:class X \n DECLARE_LOCALS(&return,&x); [line 15]\n " color=yellow style=filled] + "A_get4" -> "A_get3" ; +"A_get3" [label="3: Return Stmt \n n$0=*&__return_param:class X * [line 17]\n _fun_X_X(n$0:class X *,&x:class X &) [line 17]\n " shape="box"] - 6 -> 9 ; -5 [label="5: Constructor Init \n n$0=*&this:class X * [line 10]\n n$1=*&__param_0:class X & [line 10]\n n$2=*n$1.f:int [line 10]\n *n$0.f:int =n$2 [line 10]\n " shape="box"] + "A_get3" -> "A_get2" ; +"A_get2" [label="2: Exit A_get \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit X_X \n " color=yellow style=filled] +"A_get1" [label="1: Start A_get\nFormals: this:class A * p:int __return_param:class X *\nLocals: x:class X \n DECLARE_LOCALS(&return,&x); [line 15]\n " color=yellow style=filled] -3 [label="3: Start X_X\nFormals: this:class X * __param_0:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] + "A_get1" -> "A_get4" ; +"X_X3" [label="3: Constructor Init \n n$0=*&this:class X * [line 10]\n n$1=*&__param_0:class X & [line 10]\n n$2=*n$1.f:int [line 10]\n *n$0.f:int =n$2 [line 10]\n " shape="box"] - 3 -> 5 ; -2 [label="2: Exit X_X \n " color=yellow style=filled] + "X_X3" -> "X_X2" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] -1 [label="1: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"X_X1" [label="1: Start X_X\nFormals: this:class X * __param_0:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 1 -> 2 ; + "X_X1" -> "X_X3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/static.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/static.cpp.dot index af2f97d95..5fc2709f4 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/static.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/static.cpp.dot @@ -1,36 +1,36 @@ /* @generated */ digraph iCFG { -9 [label="9: Call _fun_A_fun \n n$0=*&a:class A * [line 21]\n n$1=_fun_A_fun(0:int ) [line 21]\n " shape="box"] +"div0_instance3" [label="3: Call _fun_A_fun \n n$0=*&a:class A * [line 21]\n n$1=_fun_A_fun(0:int ) [line 21]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit div0_instance \n " color=yellow style=filled] + "div0_instance3" -> "div0_instance2" ; +"div0_instance2" [label="2: Exit div0_instance \n " color=yellow style=filled] -7 [label="7: Start div0_instance\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"div0_instance1" [label="1: Start div0_instance\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Call _fun_A_fun \n n$0=_fun_A_fun(0:int ) [line 17]\n " shape="box"] + "div0_instance1" -> "div0_instance3" ; +"div0_class3" [label="3: Call _fun_A_fun \n n$0=_fun_A_fun(0:int ) [line 17]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit div0_class \n " color=yellow style=filled] + "div0_class3" -> "div0_class2" ; +"div0_class2" [label="2: Exit div0_class \n " color=yellow style=filled] -4 [label="4: Start div0_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] +"div0_class1" [label="1: Start div0_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&a:int [line 15]\n *&return:int =(1 / n$0) [line 15]\n " shape="box"] + "div0_class1" -> "div0_class3" ; +"A_fun3" [label="3: Return Stmt \n n$0=*&a:int [line 15]\n *&return:int =(1 / n$0) [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_fun \n " color=yellow style=filled] + "A_fun3" -> "A_fun2" ; +"A_fun2" [label="2: Exit A_fun \n " color=yellow style=filled] -1 [label="1: Start A_fun\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"A_fun1" [label="1: Start A_fun\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 1 -> 3 ; + "A_fun1" -> "A_fun3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/virtual_methods.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/virtual_methods.cpp.dot index 6b898b1ad..7aa7485ca 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/virtual_methods.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/virtual_methods.cpp.dot @@ -1,202 +1,202 @@ /* @generated */ digraph iCFG { -53 [label="53: DeclStmt \n n$1=_fun___new(sizeof(class Triangle ):unsigned long ) [line 71]\n _fun_Triangle_Triangle(n$1:class Triangle *) [line 71]\n *&trgl:class Triangle *=n$1 [line 71]\n " shape="box"] +"call_virtual_destructor4" [label="4: DeclStmt \n n$1=_fun___new(sizeof(class Triangle ):unsigned long ) [line 71]\n _fun_Triangle_Triangle(n$1:class Triangle *) [line 71]\n *&trgl:class Triangle *=n$1 [line 71]\n " shape="box"] - 53 -> 52 ; -52 [label="52: Call delete \n n$0=*&trgl:class Polygon * [line 72]\n _fun___delete(n$0:class Polygon *) [line 72]\n " shape="box"] + "call_virtual_destructor4" -> "call_virtual_destructor3" ; +"call_virtual_destructor3" [label="3: Call delete \n n$0=*&trgl:class Polygon * [line 72]\n _fun___delete(n$0:class Polygon *) [line 72]\n " shape="box"] - 52 -> 51 ; -51 [label="51: Exit call_virtual_destructor \n " color=yellow style=filled] + "call_virtual_destructor3" -> "call_virtual_destructor2" ; +"call_virtual_destructor2" [label="2: Exit call_virtual_destructor \n " color=yellow style=filled] -50 [label="50: Start call_virtual_destructor\nFormals: \nLocals: trgl:class Polygon * \n DECLARE_LOCALS(&return,&trgl); [line 70]\n " color=yellow style=filled] +"call_virtual_destructor1" [label="1: Start call_virtual_destructor\nFormals: \nLocals: trgl:class Polygon * \n DECLARE_LOCALS(&return,&trgl); [line 70]\n " color=yellow style=filled] - 50 -> 53 ; -49 [label="49: DeclStmt \n _fun_Triangle_Triangle(&trgl:class Triangle *) [line 60]\n " shape="box"] + "call_virtual_destructor1" -> "call_virtual_destructor4" ; +"Polygon_area3" [label="3: Return Stmt \n *&return:int =0 [line 20]\n " shape="box"] - 49 -> 48 ; -48 [label="48: DeclStmt \n _fun_Polygon_Polygon(&poly:class Polygon *) [line 61]\n " shape="box"] + "Polygon_area3" -> "Polygon_area2" ; +"Polygon_area2" [label="2: Exit Polygon_area \n " color=yellow style=filled] - 48 -> 47 ; -47 [label="47: DeclStmt \n *&ppoly2:class Triangle *=&trgl [line 62]\n " shape="box"] +"Polygon_area1" [label="1: Start Polygon_area\nFormals: this:class Polygon *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 47 -> 46 ; -46 [label="46: Call _fun_Polygon_set_values \n n$3=*&ppoly2:class Polygon * [line 63]\n _=*n$3:class Polygon [line 63]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 63]\n " shape="box"] + "Polygon_area1" -> "Polygon_area3" ; +"Rectangle_Rectangle3" [label="3: Constructor Init \n n$0=*&this:class Rectangle * [line 23]\n _fun_Polygon_Polygon(n$0:class Rectangle *) [line 23]\n " shape="box"] - 46 -> 45 ; -45 [label="45: Return Stmt \n n$0=*&ppoly2:class Polygon * [line 64]\n _=*n$0:class Polygon [line 64]\n n$2=_fun_Polygon_area(n$0:class Polygon *) [line 64]\n *&return:int =(1 / n$2) [line 64]\n " shape="box"] + "Rectangle_Rectangle3" -> "Rectangle_Rectangle2" ; +"Rectangle_Rectangle2" [label="2: Exit Rectangle_Rectangle \n " color=yellow style=filled] - 45 -> 44 ; -44 [label="44: Exit tri_not_virtual_area \n " color=yellow style=filled] +"Rectangle_Rectangle1" [label="1: Start Rectangle_Rectangle\nFormals: this:class Rectangle *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] -43 [label="43: Start tri_not_virtual_area\nFormals: \nLocals: ppoly2:class Polygon * poly:class Polygon trgl:class Triangle \n DECLARE_LOCALS(&return,&ppoly2,&poly,&trgl); [line 59]\n " color=yellow style=filled] + "Rectangle_Rectangle1" -> "Rectangle_Rectangle3" ; +"Polygon_Polygon2" [label="2: Exit Polygon_Polygon \n " color=yellow style=filled] - 43 -> 49 ; -42 [label="42: DeclStmt \n _fun_Polygon_Polygon(&poly:class Polygon *) [line 54]\n " shape="box"] +"Polygon_Polygon1" [label="1: Start Polygon_Polygon\nFormals: this:class Polygon *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 42 -> 41 ; -41 [label="41: DeclStmt \n *&ppoly3:class Polygon *=&poly [line 55]\n " shape="box"] + "Polygon_Polygon1" -> "Polygon_Polygon2" ; +"rect_area6" [label="6: DeclStmt \n _fun_Rectangle_Rectangle(&rect:class Rectangle *) [line 39]\n " shape="box"] - 41 -> 40 ; -40 [label="40: Return Stmt \n n$0=*&ppoly3:class Polygon * [line 56]\n _=*n$0:class Polygon [line 56]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 56]\n *&return:int =(1 / n$2) [line 56]\n " shape="box"] + "rect_area6" -> "rect_area5" ; +"rect_area5" [label="5: DeclStmt \n *&ppoly1:class Rectangle *=&rect [line 40]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Exit poly_area \n " color=yellow style=filled] + "rect_area5" -> "rect_area4" ; +"rect_area4" [label="4: Call _fun_Polygon_set_values \n n$3=*&ppoly1:class Polygon * [line 41]\n _=*n$3:class Polygon [line 41]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 41]\n " shape="box"] -38 [label="38: Start poly_area\nFormals: \nLocals: ppoly3:class Polygon * poly:class Polygon \n DECLARE_LOCALS(&return,&ppoly3,&poly); [line 53]\n " color=yellow style=filled] + "rect_area4" -> "rect_area3" ; +"rect_area3" [label="3: Return Stmt \n n$0=*&ppoly1:class Polygon * [line 42]\n _=*n$0:class Polygon [line 42]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 42]\n *&return:int =(1 / (n$2 - 20)) [line 42]\n " shape="box"] - 38 -> 42 ; -37 [label="37: DeclStmt \n _fun_Triangle_Triangle(&trgl:class Triangle *) [line 46]\n " shape="box"] + "rect_area3" -> "rect_area2" ; +"rect_area2" [label="2: Exit rect_area \n " color=yellow style=filled] - 37 -> 36 ; -36 [label="36: DeclStmt \n _fun_Polygon_Polygon(&poly:class Polygon *) [line 47]\n " shape="box"] +"rect_area1" [label="1: Start rect_area\nFormals: \nLocals: ppoly1:class Polygon * rect:class Rectangle \n DECLARE_LOCALS(&return,&ppoly1,&rect); [line 38]\n " color=yellow style=filled] - 36 -> 35 ; -35 [label="35: DeclStmt \n *&ppoly2:class Triangle *=&trgl [line 48]\n " shape="box"] + "rect_area1" -> "rect_area6" ; +"tri_area7" [label="7: DeclStmt \n _fun_Triangle_Triangle(&trgl:class Triangle *) [line 46]\n " shape="box"] - 35 -> 34 ; -34 [label="34: Call _fun_Polygon_set_values \n n$3=*&ppoly2:class Polygon * [line 49]\n _=*n$3:class Polygon [line 49]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 49]\n " shape="box"] + "tri_area7" -> "tri_area6" ; +"tri_area6" [label="6: DeclStmt \n _fun_Polygon_Polygon(&poly:class Polygon *) [line 47]\n " shape="box"] - 34 -> 33 ; -33 [label="33: Return Stmt \n n$0=*&ppoly2:class Polygon * [line 50]\n _=*n$0:class Polygon [line 50]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 50]\n *&return:int =(1 / (n$2 - 10)) [line 50]\n " shape="box"] + "tri_area6" -> "tri_area5" ; +"tri_area5" [label="5: DeclStmt \n *&ppoly2:class Triangle *=&trgl [line 48]\n " shape="box"] - 33 -> 32 ; -32 [label="32: Exit tri_area \n " color=yellow style=filled] + "tri_area5" -> "tri_area4" ; +"tri_area4" [label="4: Call _fun_Polygon_set_values \n n$3=*&ppoly2:class Polygon * [line 49]\n _=*n$3:class Polygon [line 49]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 49]\n " shape="box"] -31 [label="31: Start tri_area\nFormals: \nLocals: ppoly2:class Polygon * poly:class Polygon trgl:class Triangle \n DECLARE_LOCALS(&return,&ppoly2,&poly,&trgl); [line 45]\n " color=yellow style=filled] + "tri_area4" -> "tri_area3" ; +"tri_area3" [label="3: Return Stmt \n n$0=*&ppoly2:class Polygon * [line 50]\n _=*n$0:class Polygon [line 50]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 50]\n *&return:int =(1 / (n$2 - 10)) [line 50]\n " shape="box"] - 31 -> 37 ; -30 [label="30: DeclStmt \n _fun_Rectangle_Rectangle(&rect:class Rectangle *) [line 39]\n " shape="box"] + "tri_area3" -> "tri_area2" ; +"tri_area2" [label="2: Exit tri_area \n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: DeclStmt \n *&ppoly1:class Rectangle *=&rect [line 40]\n " shape="box"] +"tri_area1" [label="1: Start tri_area\nFormals: \nLocals: ppoly2:class Polygon * poly:class Polygon trgl:class Triangle \n DECLARE_LOCALS(&return,&ppoly2,&poly,&trgl); [line 45]\n " color=yellow style=filled] - 29 -> 28 ; -28 [label="28: Call _fun_Polygon_set_values \n n$3=*&ppoly1:class Polygon * [line 41]\n _=*n$3:class Polygon [line 41]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 41]\n " shape="box"] + "tri_area1" -> "tri_area7" ; +"Polygon_set_values4" [label="4: BinaryOperatorStmt: Assign \n n$2=*&this:class Polygon * [line 17]\n n$3=*&a:int [line 17]\n *n$2.width:int =n$3 [line 17]\n " shape="box"] - 28 -> 27 ; -27 [label="27: Return Stmt \n n$0=*&ppoly1:class Polygon * [line 42]\n _=*n$0:class Polygon [line 42]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 42]\n *&return:int =(1 / (n$2 - 20)) [line 42]\n " shape="box"] + "Polygon_set_values4" -> "Polygon_set_values3" ; +"Polygon_set_values3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class Polygon * [line 18]\n n$1=*&b:int [line 18]\n *n$0.height:int =n$1 [line 18]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Exit rect_area \n " color=yellow style=filled] + "Polygon_set_values3" -> "Polygon_set_values2" ; +"Polygon_set_values2" [label="2: Exit Polygon_set_values \n " color=yellow style=filled] -25 [label="25: Start rect_area\nFormals: \nLocals: ppoly1:class Polygon * rect:class Rectangle \n DECLARE_LOCALS(&return,&ppoly1,&rect); [line 38]\n " color=yellow style=filled] +"Polygon_set_values1" [label="1: Start Polygon_set_values\nFormals: this:class Polygon * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 25 -> 30 ; -24 [label="24: Constructor Init \n n$0=*&this:class Triangle * [line 29]\n _fun_Polygon_Polygon(n$0:class Triangle *) [line 29]\n " shape="box"] + "Polygon_set_values1" -> "Polygon_set_values4" ; +"Rectangle_area3" [label="3: Return Stmt \n n$0=*&this:class Rectangle * [line 26]\n n$1=*n$0.width:int [line 26]\n n$2=*&this:class Rectangle * [line 26]\n n$3=*n$2.height:int [line 26]\n *&return:int =(n$1 * n$3) [line 26]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Exit Triangle_Triangle \n " color=yellow style=filled] + "Rectangle_area3" -> "Rectangle_area2" ; +"Rectangle_area2" [label="2: Exit Rectangle_area \n " color=yellow style=filled] -22 [label="22: Start Triangle_Triangle\nFormals: this:class Triangle *\nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] +"Rectangle_area1" [label="1: Start Rectangle_area\nFormals: this:class Rectangle *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 22 -> 24 ; -21 [label="21: DeclStmt \n n$1=*&this:class Triangle * [line 33]\n n$2=*n$1.width:int [line 33]\n n$3=*&this:class Triangle * [line 33]\n n$4=*n$3.height:int [line 33]\n *&x:int =(n$2 * n$4) [line 33]\n " shape="box"] + "Rectangle_area1" -> "Rectangle_area3" ; +"Triangle_Triangle3" [label="3: Constructor Init \n n$0=*&this:class Triangle * [line 29]\n _fun_Polygon_Polygon(n$0:class Triangle *) [line 29]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Return Stmt \n n$0=*&x:int [line 34]\n *&return:int =(n$0 - 10) [line 34]\n " shape="box"] + "Triangle_Triangle3" -> "Triangle_Triangle2" ; +"Triangle_Triangle2" [label="2: Exit Triangle_Triangle \n " color=yellow style=filled] - 20 -> 19 ; -19 [label="19: Exit Triangle_area \n " color=yellow style=filled] +"Triangle_Triangle1" [label="1: Start Triangle_Triangle\nFormals: this:class Triangle *\nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] -18 [label="18: Start Triangle_area\nFormals: this:class Triangle *\nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 32]\n " color=yellow style=filled] + "Triangle_Triangle1" -> "Triangle_Triangle3" ; +"poly_area5" [label="5: DeclStmt \n _fun_Polygon_Polygon(&poly:class Polygon *) [line 54]\n " shape="box"] - 18 -> 21 ; -17 [label="17: Exit Triangle_~Triangle \n " color=yellow style=filled] + "poly_area5" -> "poly_area4" ; +"poly_area4" [label="4: DeclStmt \n *&ppoly3:class Polygon *=&poly [line 55]\n " shape="box"] -16 [label="16: Start Triangle_~Triangle\nFormals: this:class Triangle *\nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] + "poly_area4" -> "poly_area3" ; +"poly_area3" [label="3: Return Stmt \n n$0=*&ppoly3:class Polygon * [line 56]\n _=*n$0:class Polygon [line 56]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 56]\n *&return:int =(1 / n$2) [line 56]\n " shape="box"] - 16 -> 17 ; -15 [label="15: Constructor Init \n n$0=*&this:class Rectangle * [line 23]\n _fun_Polygon_Polygon(n$0:class Rectangle *) [line 23]\n " shape="box"] + "poly_area3" -> "poly_area2" ; +"poly_area2" [label="2: Exit poly_area \n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit Rectangle_Rectangle \n " color=yellow style=filled] +"poly_area1" [label="1: Start poly_area\nFormals: \nLocals: ppoly3:class Polygon * poly:class Polygon \n DECLARE_LOCALS(&return,&ppoly3,&poly); [line 53]\n " color=yellow style=filled] -13 [label="13: Start Rectangle_Rectangle\nFormals: this:class Rectangle *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] + "poly_area1" -> "poly_area5" ; +"Triangle_area4" [label="4: DeclStmt \n n$1=*&this:class Triangle * [line 33]\n n$2=*n$1.width:int [line 33]\n n$3=*&this:class Triangle * [line 33]\n n$4=*n$3.height:int [line 33]\n *&x:int =(n$2 * n$4) [line 33]\n " shape="box"] - 13 -> 15 ; -12 [label="12: Return Stmt \n n$0=*&this:class Rectangle * [line 26]\n n$1=*n$0.width:int [line 26]\n n$2=*&this:class Rectangle * [line 26]\n n$3=*n$2.height:int [line 26]\n *&return:int =(n$1 * n$3) [line 26]\n " shape="box"] + "Triangle_area4" -> "Triangle_area3" ; +"Triangle_area3" [label="3: Return Stmt \n n$0=*&x:int [line 34]\n *&return:int =(n$0 - 10) [line 34]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit Rectangle_area \n " color=yellow style=filled] + "Triangle_area3" -> "Triangle_area2" ; +"Triangle_area2" [label="2: Exit Triangle_area \n " color=yellow style=filled] -10 [label="10: Start Rectangle_area\nFormals: this:class Rectangle *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"Triangle_area1" [label="1: Start Triangle_area\nFormals: this:class Triangle *\nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 32]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Exit Polygon_Polygon \n " color=yellow style=filled] + "Triangle_area1" -> "Triangle_area4" ; +"Triangle_~Triangle2" [label="2: Exit Triangle_~Triangle \n " color=yellow style=filled] -8 [label="8: Start Polygon_Polygon\nFormals: this:class Polygon *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"Triangle_~Triangle1" [label="1: Start Triangle_~Triangle\nFormals: this:class Triangle *\nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] - 8 -> 9 ; -7 [label="7: Return Stmt \n *&return:int =0 [line 20]\n " shape="box"] + "Triangle_~Triangle1" -> "Triangle_~Triangle2" ; +"tri_not_virtual_area7" [label="7: DeclStmt \n _fun_Triangle_Triangle(&trgl:class Triangle *) [line 60]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit Polygon_area \n " color=yellow style=filled] + "tri_not_virtual_area7" -> "tri_not_virtual_area6" ; +"tri_not_virtual_area6" [label="6: DeclStmt \n _fun_Polygon_Polygon(&poly:class Polygon *) [line 61]\n " shape="box"] -5 [label="5: Start Polygon_area\nFormals: this:class Polygon *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] + "tri_not_virtual_area6" -> "tri_not_virtual_area5" ; +"tri_not_virtual_area5" [label="5: DeclStmt \n *&ppoly2:class Triangle *=&trgl [line 62]\n " shape="box"] - 5 -> 7 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$2=*&this:class Polygon * [line 17]\n n$3=*&a:int [line 17]\n *n$2.width:int =n$3 [line 17]\n " shape="box"] + "tri_not_virtual_area5" -> "tri_not_virtual_area4" ; +"tri_not_virtual_area4" [label="4: Call _fun_Polygon_set_values \n n$3=*&ppoly2:class Polygon * [line 63]\n _=*n$3:class Polygon [line 63]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 63]\n " shape="box"] - 4 -> 3 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class Polygon * [line 18]\n n$1=*&b:int [line 18]\n *n$0.height:int =n$1 [line 18]\n " shape="box"] + "tri_not_virtual_area4" -> "tri_not_virtual_area3" ; +"tri_not_virtual_area3" [label="3: Return Stmt \n n$0=*&ppoly2:class Polygon * [line 64]\n _=*n$0:class Polygon [line 64]\n n$2=_fun_Polygon_area(n$0:class Polygon *) [line 64]\n *&return:int =(1 / n$2) [line 64]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Polygon_set_values \n " color=yellow style=filled] + "tri_not_virtual_area3" -> "tri_not_virtual_area2" ; +"tri_not_virtual_area2" [label="2: Exit tri_not_virtual_area \n " color=yellow style=filled] -1 [label="1: Start Polygon_set_values\nFormals: this:class Polygon * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"tri_not_virtual_area1" [label="1: Start tri_not_virtual_area\nFormals: \nLocals: ppoly2:class Polygon * poly:class Polygon trgl:class Triangle \n DECLARE_LOCALS(&return,&ppoly2,&poly,&trgl); [line 59]\n " color=yellow style=filled] - 1 -> 4 ; + "tri_not_virtual_area1" -> "tri_not_virtual_area7" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/namespace/function.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/namespace/function.cpp.dot index 88b57f433..2f6989752 100644 --- a/infer/tests/codetoanalyze/cpp/shared/namespace/function.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/namespace/function.cpp.dot @@ -1,58 +1,58 @@ /* @generated */ digraph iCFG { -15 [label="15: Return Stmt \n n$0=_fun_f1::get() [line 24]\n n$1=_fun_f2::get() [line 24]\n *&return:int =(1 / (n$0 + n$1)) [line 24]\n " shape="box"] +"div0_namespace_resolution3" [label="3: Return Stmt \n n$0=_fun_f1::get() [line 24]\n n$1=_fun_f2::get() [line 24]\n *&return:int =(1 / (n$0 + n$1)) [line 24]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit div0_namespace_resolution \n " color=yellow style=filled] + "div0_namespace_resolution3" -> "div0_namespace_resolution2" ; +"div0_namespace_resolution2" [label="2: Exit div0_namespace_resolution \n " color=yellow style=filled] -13 [label="13: Start div0_namespace_resolution\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +"div0_namespace_resolution1" [label="1: Start div0_namespace_resolution\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Return Stmt \n n$0=_fun_f1::get0() [line 21]\n *&return:int =(1 / n$0) [line 21]\n " shape="box"] + "div0_namespace_resolution1" -> "div0_namespace_resolution3" ; +"div0_using3" [label="3: Return Stmt \n n$0=_fun_f1::get0() [line 21]\n *&return:int =(1 / n$0) [line 21]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit div0_using \n " color=yellow style=filled] + "div0_using3" -> "div0_using2" ; +"div0_using2" [label="2: Exit div0_using \n " color=yellow style=filled] -10 [label="10: Start div0_using\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"div0_using1" [label="1: Start div0_using\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Return Stmt \n *&return:int =-1 [line 16]\n " shape="box"] + "div0_using1" -> "div0_using3" ; +"f1::get03" [label="3: Return Stmt \n *&return:int =0 [line 12]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit f2::get \n " color=yellow style=filled] + "f1::get03" -> "f1::get02" ; +"f1::get02" [label="2: Exit f1::get0 \n " color=yellow style=filled] -7 [label="7: Start f2::get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"f1::get01" [label="1: Start f1::get0\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Return Stmt \n *&return:int =0 [line 12]\n " shape="box"] + "f1::get01" -> "f1::get03" ; +"f1::get3" [label="3: Return Stmt \n *&return:int =1 [line 11]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit f1::get0 \n " color=yellow style=filled] + "f1::get3" -> "f1::get2" ; +"f1::get2" [label="2: Exit f1::get \n " color=yellow style=filled] -4 [label="4: Start f1::get0\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"f1::get1" [label="1: Start f1::get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 11]\n " shape="box"] + "f1::get1" -> "f1::get3" ; +"f2::get3" [label="3: Return Stmt \n *&return:int =-1 [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit f1::get \n " color=yellow style=filled] + "f2::get3" -> "f2::get2" ; +"f2::get2" [label="2: Exit f2::get \n " color=yellow style=filled] -1 [label="1: Start f1::get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"f2::get1" [label="1: Start f2::get\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 1 -> 3 ; + "f2::get1" -> "f2::get3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/namespace/global_variable.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/namespace/global_variable.cpp.dot index 9df409107..f76f23d33 100644 --- a/infer/tests/codetoanalyze/cpp/shared/namespace/global_variable.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/namespace/global_variable.cpp.dot @@ -1,60 +1,60 @@ /* @generated */ digraph iCFG { -15 [label="15: BinaryOperatorStmt: Assign \n *&#GB$f1::A::v:int =1 [line 41]\n " shape="box"] +"div0_static_field5" [label="5: BinaryOperatorStmt: Assign \n *&#GB$B::v:int =1 [line 35]\n " shape="box"] - 15 -> 14 ; -14 [label="14: BinaryOperatorStmt: Assign \n *&#GB$B::v:int =-2 [line 42]\n " shape="box"] + "div0_static_field5" -> "div0_static_field4" ; +"div0_static_field4" [label="4: BinaryOperatorStmt: Assign \n *&#GB$f1::A::v:int =-2 [line 36]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Return Stmt \n n$0=*&#GB$f1::A::v:int [line 43]\n n$1=*&#GB$B::v:int [line 43]\n *&return:int =(1 / ((n$0 + n$1) + 1)) [line 43]\n " shape="box"] + "div0_static_field4" -> "div0_static_field3" ; +"div0_static_field3" [label="3: Return Stmt \n n$0=*&#GB$f1::A::v:int [line 37]\n n$1=*&#GB$B::v:int [line 37]\n *&return:int =(1 / ((n$0 + n$1) + 1)) [line 37]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit div0_static_field_member_access \n " color=yellow style=filled] + "div0_static_field3" -> "div0_static_field2" ; +"div0_static_field2" [label="2: Exit div0_static_field \n " color=yellow style=filled] -11 [label="11: Start div0_static_field_member_access\nFormals: a:class f1::A * b:class C *\nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] +"div0_static_field1" [label="1: Start div0_static_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 11 -> 15 ; -10 [label="10: BinaryOperatorStmt: Assign \n *&#GB$B::v:int =1 [line 35]\n " shape="box"] + "div0_static_field1" -> "div0_static_field5" ; +"div0_static_field_member_access5" [label="5: BinaryOperatorStmt: Assign \n *&#GB$f1::A::v:int =1 [line 41]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n *&#GB$f1::A::v:int =-2 [line 36]\n " shape="box"] + "div0_static_field_member_access5" -> "div0_static_field_member_access4" ; +"div0_static_field_member_access4" [label="4: BinaryOperatorStmt: Assign \n *&#GB$B::v:int =-2 [line 42]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Return Stmt \n n$0=*&#GB$f1::A::v:int [line 37]\n n$1=*&#GB$B::v:int [line 37]\n *&return:int =(1 / ((n$0 + n$1) + 1)) [line 37]\n " shape="box"] + "div0_static_field_member_access4" -> "div0_static_field_member_access3" ; +"div0_static_field_member_access3" [label="3: Return Stmt \n n$0=*&#GB$f1::A::v:int [line 43]\n n$1=*&#GB$B::v:int [line 43]\n *&return:int =(1 / ((n$0 + n$1) + 1)) [line 43]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit div0_static_field \n " color=yellow style=filled] + "div0_static_field_member_access3" -> "div0_static_field_member_access2" ; +"div0_static_field_member_access2" [label="2: Exit div0_static_field_member_access \n " color=yellow style=filled] -6 [label="6: Start div0_static_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] +"div0_static_field_member_access1" [label="1: Start div0_static_field_member_access\nFormals: a:class f1::A * b:class C *\nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] - 6 -> 10 ; -5 [label="5: BinaryOperatorStmt: Assign \n *&#GB$f1::val:int =1 [line 29]\n " shape="box"] + "div0_static_field_member_access1" -> "div0_static_field_member_access5" ; +"div0_namepace_res5" [label="5: BinaryOperatorStmt: Assign \n *&#GB$f1::val:int =1 [line 29]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n *&#GB$f2::val:int =-2 [line 30]\n " shape="box"] + "div0_namepace_res5" -> "div0_namepace_res4" ; +"div0_namepace_res4" [label="4: BinaryOperatorStmt: Assign \n *&#GB$f2::val:int =-2 [line 30]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&#GB$f1::val:int [line 31]\n n$1=*&#GB$f2::val:int [line 31]\n *&return:int =(1 / ((n$0 + n$1) + 1)) [line 31]\n " shape="box"] + "div0_namepace_res4" -> "div0_namepace_res3" ; +"div0_namepace_res3" [label="3: Return Stmt \n n$0=*&#GB$f1::val:int [line 31]\n n$1=*&#GB$f2::val:int [line 31]\n *&return:int =(1 / ((n$0 + n$1) + 1)) [line 31]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit div0_namepace_res \n " color=yellow style=filled] + "div0_namepace_res3" -> "div0_namepace_res2" ; +"div0_namepace_res2" [label="2: Exit div0_namepace_res \n " color=yellow style=filled] -1 [label="1: Start div0_namepace_res\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] +"div0_namepace_res1" [label="1: Start div0_namepace_res\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] - 1 -> 5 ; + "div0_namepace_res1" -> "div0_namepace_res5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/namespace/namespace.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/namespace/namespace.cpp.dot index 13904a200..8abfbe3ec 100644 --- a/infer/tests/codetoanalyze/cpp/shared/namespace/namespace.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/namespace/namespace.cpp.dot @@ -1,115 +1,115 @@ /* @generated */ digraph iCFG { -30 [label="30: DeclStmt \n _fun_foo::my_record_(&x:class foo::my_record *) [line 46]\n " shape="box"] +"foo::value3" [label="3: Return Stmt \n *&return:int =5 [line 17]\n " shape="box"] - 30 -> 29 ; -29 [label="29: DeclStmt \n _fun_bar::Rectangle_Rectangle(&rect1:class bar::Rectangle *) [line 48]\n " shape="box"] + "foo::value3" -> "foo::value2" ; +"foo::value2" [label="2: Exit foo::value \n " color=yellow style=filled] - 29 -> 28 ; -28 [label="28: Call _fun_bar::Rectangle_set_values \n _=*&rect1:class bar::Rectangle [line 49]\n _fun_bar::Rectangle_set_values(&rect1:class bar::Rectangle &,3:int ,4:int ) [line 49]\n " shape="box"] +"foo::value1" [label="1: Start foo::value\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 28 -> 27 ; -27 [label="27: DeclStmt \n _fun_foo::Rectangle_Rectangle(&rect2:class foo::Rectangle *) [line 51]\n " shape="box"] + "foo::value1" -> "foo::value3" ; +"foo::Rectangle_Rectangle2" [label="2: Exit foo::Rectangle_Rectangle \n " color=yellow style=filled] - 27 -> 26 ; -26 [label="26: Call _fun_foo::Rectangle_set_values \n _=*&rect2:class foo::Rectangle [line 52]\n _fun_foo::Rectangle_set_values(&rect2:class foo::Rectangle &,7:int ,10:int ) [line 52]\n " shape="box"] +"foo::Rectangle_Rectangle1" [label="1: Start foo::Rectangle_Rectangle\nFormals: this:class foo::Rectangle *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: BinaryOperatorStmt: Assign \n *&x.a:int =10 [line 54]\n " shape="box"] + "foo::Rectangle_Rectangle1" -> "foo::Rectangle_Rectangle2" ; +"__infer_globals_initializer_bar::rect3" [label="3: DeclStmt \n _fun_bar::Rectangle_Rectangle(&#GB$bar::rect:class bar::Rectangle *) [line 38]\n " shape="box"] - 25 -> 24 ; -24 [label="24: BinaryOperatorStmt: Assign \n n$2=_fun_foo::value() [line 55]\n *&i:int =n$2 [line 55]\n " shape="box"] + "__infer_globals_initializer_bar::rect3" -> "__infer_globals_initializer_bar::rect2" ; +"__infer_globals_initializer_bar::rect2" [label="2: Exit __infer_globals_initializer_bar::rect \n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: BinaryOperatorStmt: Assign \n n$1=_fun_bar::value() [line 56]\n *&i:int =n$1 [line 56]\n " shape="box"] +"__infer_globals_initializer_bar::rect1" [label="1: Start __infer_globals_initializer_bar::rect\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 23 -> 22 ; -22 [label="22: BinaryOperatorStmt: Assign \n *&#GB$bar::pi:double =3.141600 [line 57]\n n$0=*&#GB$bar::pi:double [line 57]\n *&j:double =n$0 [line 57]\n " shape="box"] + "__infer_globals_initializer_bar::rect1" -> "__infer_globals_initializer_bar::rect3" ; +"bar::Rectangle_Rectangle2" [label="2: Exit bar::Rectangle_Rectangle \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Return Stmt \n *&return:int =0 [line 58]\n " shape="box"] +"bar::Rectangle_Rectangle1" [label="1: Start bar::Rectangle_Rectangle\nFormals: this:class bar::Rectangle *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit main \n " color=yellow style=filled] + "bar::Rectangle_Rectangle1" -> "bar::Rectangle_Rectangle2" ; +"bar::value3" [label="3: Return Stmt \n *&#GB$bar::pi:double =3.141600 [line 30]\n n$0=*&#GB$bar::pi:double [line 30]\n *&return:double =(2 * n$0) [line 30]\n " shape="box"] -19 [label="19: Start main\nFormals: \nLocals: rect2:class foo::Rectangle rect1:class bar::Rectangle x:class foo::my_record j:double i:int \n DECLARE_LOCALS(&return,&rect2,&rect1,&x,&j,&i); [line 41]\n " color=yellow style=filled] + "bar::value3" -> "bar::value2" ; +"bar::value2" [label="2: Exit bar::value \n " color=yellow style=filled] - 19 -> 30 ; -18 [label="18: DeclStmt \n _fun_bar::Rectangle_Rectangle(&#GB$bar::rect:class bar::Rectangle *) [line 38]\n " shape="box"] +"bar::value1" [label="1: Start bar::value\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Exit __infer_globals_initializer_bar::rect \n " color=yellow style=filled] + "bar::value1" -> "bar::value3" ; +"main12" [label="12: DeclStmt \n _fun_foo::my_record_(&x:class foo::my_record *) [line 46]\n " shape="box"] -16 [label="16: Start __infer_globals_initializer_bar::rect\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] + "main12" -> "main11" ; +"main11" [label="11: DeclStmt \n _fun_bar::Rectangle_Rectangle(&rect1:class bar::Rectangle *) [line 48]\n " shape="box"] - 16 -> 18 ; -15 [label="15: Exit bar::Rectangle_Rectangle \n " color=yellow style=filled] + "main11" -> "main10" ; +"main10" [label="10: Call _fun_bar::Rectangle_set_values \n _=*&rect1:class bar::Rectangle [line 49]\n _fun_bar::Rectangle_set_values(&rect1:class bar::Rectangle &,3:int ,4:int ) [line 49]\n " shape="box"] -14 [label="14: Start bar::Rectangle_Rectangle\nFormals: this:class bar::Rectangle *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] + "main10" -> "main9" ; +"main9" [label="9: DeclStmt \n _fun_foo::Rectangle_Rectangle(&rect2:class foo::Rectangle *) [line 51]\n " shape="box"] - 14 -> 15 ; -13 [label="13: Return Stmt \n *&#GB$bar::pi:double =3.141600 [line 30]\n n$0=*&#GB$bar::pi:double [line 30]\n *&return:double =(2 * n$0) [line 30]\n " shape="box"] + "main9" -> "main8" ; +"main8" [label="8: Call _fun_foo::Rectangle_set_values \n _=*&rect2:class foo::Rectangle [line 52]\n _fun_foo::Rectangle_set_values(&rect2:class foo::Rectangle &,7:int ,10:int ) [line 52]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit bar::value \n " color=yellow style=filled] + "main8" -> "main7" ; +"main7" [label="7: BinaryOperatorStmt: Assign \n *&x.a:int =10 [line 54]\n " shape="box"] -11 [label="11: Start bar::value\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] + "main7" -> "main6" ; +"main6" [label="6: BinaryOperatorStmt: Assign \n n$2=_fun_foo::value() [line 55]\n *&i:int =n$2 [line 55]\n " shape="box"] - 11 -> 13 ; -10 [label="10: DeclStmt \n *&#GB$bar::pi:double =3.141600 [line 29]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n n$1=_fun_bar::value() [line 56]\n *&i:int =n$1 [line 56]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Exit __infer_globals_initializer_bar::pi \n " color=yellow style=filled] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: Assign \n *&#GB$bar::pi:double =3.141600 [line 57]\n n$0=*&#GB$bar::pi:double [line 57]\n *&j:double =n$0 [line 57]\n " shape="box"] -8 [label="8: Start __infer_globals_initializer_bar::pi\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 58]\n " shape="box"] - 8 -> 10 ; -7 [label="7: Exit foo::Rectangle_Rectangle \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -6 [label="6: Start foo::Rectangle_Rectangle\nFormals: this:class foo::Rectangle *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: rect2:class foo::Rectangle rect1:class bar::Rectangle x:class foo::my_record j:double i:int \n DECLARE_LOCALS(&return,&rect2,&rect1,&x,&j,&i); [line 41]\n " color=yellow style=filled] - 6 -> 7 ; -5 [label="5: Return Stmt \n *&return:int =5 [line 17]\n " shape="box"] + "main1" -> "main12" ; +"foo::my_record_2" [label="2: Exit foo::my_record_ \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit foo::value \n " color=yellow style=filled] +"foo::my_record_1" [label="1: Start foo::my_record_\nFormals: this:class foo::my_record *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] -3 [label="3: Start foo::value\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "foo::my_record_1" -> "foo::my_record_2" ; +"__infer_globals_initializer_bar::pi3" [label="3: DeclStmt \n *&#GB$bar::pi:double =3.141600 [line 29]\n " shape="box"] - 3 -> 5 ; -2 [label="2: Exit foo::my_record_ \n " color=yellow style=filled] + "__infer_globals_initializer_bar::pi3" -> "__infer_globals_initializer_bar::pi2" ; +"__infer_globals_initializer_bar::pi2" [label="2: Exit __infer_globals_initializer_bar::pi \n " color=yellow style=filled] -1 [label="1: Start foo::my_record_\nFormals: this:class foo::my_record *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"__infer_globals_initializer_bar::pi1" [label="1: Start __infer_globals_initializer_bar::pi\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] - 1 -> 2 ; + "__infer_globals_initializer_bar::pi1" -> "__infer_globals_initializer_bar::pi3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_for.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_for.cpp.dot index 73e05ba7c..4629ed2e8 100644 --- a/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_for.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_for.cpp.dot @@ -1,83 +1,83 @@ /* @generated */ digraph iCFG { -20 [label="20: DeclStmt \n *&result:int =0 [line 18]\n " shape="box"] +"init_with_scoped_var10" [label="10: DeclStmt \n *&result:int =0 [line 18]\n " shape="box"] - 20 -> 14 ; -19 [label="19: BinaryOperatorStmt: AddAssign \n n$3=*&x:int [line 20]\n n$4=*&result:int [line 20]\n *&result:int =(n$4 + n$3) [line 20]\n " shape="box"] + "init_with_scoped_var10" -> "init_with_scoped_var4" ; +"init_with_scoped_var9" [label="9: BinaryOperatorStmt: AddAssign \n n$3=*&x:int [line 20]\n n$4=*&result:int [line 20]\n *&result:int =(n$4 + n$3) [line 20]\n " shape="box"] - 19 -> 15 ; -18 [label="18: DeclStmt \n n$2=*&i:int [line 19]\n *&x:int =n$2 [line 19]\n " shape="box"] + "init_with_scoped_var9" -> "init_with_scoped_var5" ; +"init_with_scoped_var8" [label="8: DeclStmt \n n$2=*&i:int [line 19]\n *&x:int =n$2 [line 19]\n " shape="box"] - 18 -> 16 ; - 18 -> 17 ; -17 [label="17: Prune (false branch) \n n$1=*&x:int [line 19]\n PRUNE((n$1 == 0), false); [line 19]\n " shape="invhouse"] + "init_with_scoped_var8" -> "init_with_scoped_var6" ; + "init_with_scoped_var8" -> "init_with_scoped_var7" ; +"init_with_scoped_var7" [label="7: Prune (false branch) \n n$1=*&x:int [line 19]\n PRUNE((n$1 == 0), false); [line 19]\n " shape="invhouse"] - 17 -> 12 ; -16 [label="16: Prune (true branch) \n n$1=*&x:int [line 19]\n PRUNE((n$1 != 0), true); [line 19]\n " shape="invhouse"] + "init_with_scoped_var7" -> "init_with_scoped_var2" ; +"init_with_scoped_var6" [label="6: Prune (true branch) \n n$1=*&x:int [line 19]\n PRUNE((n$1 != 0), true); [line 19]\n " shape="invhouse"] - 16 -> 19 ; -15 [label="15: UnaryOperator \n n$0=*&i:int [line 19]\n *&i:int =(n$0 - 1) [line 19]\n " shape="box"] + "init_with_scoped_var6" -> "init_with_scoped_var9" ; +"init_with_scoped_var5" [label="5: UnaryOperator \n n$0=*&i:int [line 19]\n *&i:int =(n$0 - 1) [line 19]\n " shape="box"] - 15 -> 13 ; -14 [label="14: DeclStmt \n *&i:int =10 [line 19]\n " shape="box"] + "init_with_scoped_var5" -> "init_with_scoped_var3" ; +"init_with_scoped_var4" [label="4: DeclStmt \n *&i:int =10 [line 19]\n " shape="box"] - 14 -> 13 ; -13 [label="13: + \n " ] + "init_with_scoped_var4" -> "init_with_scoped_var3" ; +"init_with_scoped_var3" [label="3: + \n " ] - 13 -> 18 ; -12 [label="12: Exit init_with_scoped_var \n " color=yellow style=filled] + "init_with_scoped_var3" -> "init_with_scoped_var8" ; +"init_with_scoped_var2" [label="2: Exit init_with_scoped_var \n " color=yellow style=filled] -11 [label="11: Start init_with_scoped_var\nFormals: \nLocals: i:int x:int result:int \n DECLARE_LOCALS(&return,&i,&x,&result); [line 17]\n " color=yellow style=filled] +"init_with_scoped_var1" [label="1: Start init_with_scoped_var\nFormals: \nLocals: i:int x:int result:int \n DECLARE_LOCALS(&return,&i,&x,&result); [line 17]\n " color=yellow style=filled] - 11 -> 20 ; -10 [label="10: DeclStmt \n *&result:int =0 [line 11]\n " shape="box"] + "init_with_scoped_var1" -> "init_with_scoped_var10" ; +"simple_init10" [label="10: DeclStmt \n *&result:int =0 [line 11]\n " shape="box"] - 10 -> 4 ; -9 [label="9: BinaryOperatorStmt: AddAssign \n n$2=*&x:int [line 13]\n n$3=*&result:int [line 13]\n *&result:int =(n$3 + n$2) [line 13]\n " shape="box"] + "simple_init10" -> "simple_init4" ; +"simple_init9" [label="9: BinaryOperatorStmt: AddAssign \n n$2=*&x:int [line 13]\n n$3=*&result:int [line 13]\n *&result:int =(n$3 + n$2) [line 13]\n " shape="box"] - 9 -> 5 ; -8 [label="8: DeclStmt \n *&x:int =2 [line 12]\n " shape="box"] + "simple_init9" -> "simple_init5" ; +"simple_init8" [label="8: DeclStmt \n *&x:int =2 [line 12]\n " shape="box"] - 8 -> 6 ; - 8 -> 7 ; -7 [label="7: Prune (false branch) \n n$1=*&x:int [line 12]\n PRUNE((n$1 == 0), false); [line 12]\n " shape="invhouse"] + "simple_init8" -> "simple_init6" ; + "simple_init8" -> "simple_init7" ; +"simple_init7" [label="7: Prune (false branch) \n n$1=*&x:int [line 12]\n PRUNE((n$1 == 0), false); [line 12]\n " shape="invhouse"] - 7 -> 2 ; -6 [label="6: Prune (true branch) \n n$1=*&x:int [line 12]\n PRUNE((n$1 != 0), true); [line 12]\n " shape="invhouse"] + "simple_init7" -> "simple_init2" ; +"simple_init6" [label="6: Prune (true branch) \n n$1=*&x:int [line 12]\n PRUNE((n$1 != 0), true); [line 12]\n " shape="invhouse"] - 6 -> 9 ; -5 [label="5: UnaryOperator \n n$0=*&i:int [line 12]\n *&i:int =(n$0 + 1) [line 12]\n " shape="box"] + "simple_init6" -> "simple_init9" ; +"simple_init5" [label="5: UnaryOperator \n n$0=*&i:int [line 12]\n *&i:int =(n$0 + 1) [line 12]\n " shape="box"] - 5 -> 3 ; -4 [label="4: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] + "simple_init5" -> "simple_init3" ; +"simple_init4" [label="4: DeclStmt \n *&i:int =0 [line 12]\n " shape="box"] - 4 -> 3 ; -3 [label="3: + \n " ] + "simple_init4" -> "simple_init3" ; +"simple_init3" [label="3: + \n " ] - 3 -> 8 ; -2 [label="2: Exit simple_init \n " color=yellow style=filled] + "simple_init3" -> "simple_init8" ; +"simple_init2" [label="2: Exit simple_init \n " color=yellow style=filled] -1 [label="1: Start simple_init\nFormals: \nLocals: i:int x:int result:int \n DECLARE_LOCALS(&return,&i,&x,&result); [line 10]\n " color=yellow style=filled] +"simple_init1" [label="1: Start simple_init\nFormals: \nLocals: i:int x:int result:int \n DECLARE_LOCALS(&return,&i,&x,&result); [line 10]\n " color=yellow style=filled] - 1 -> 10 ; + "simple_init1" -> "simple_init10" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_if.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_if.cpp.dot index f2cde9342..52eca9b5c 100644 --- a/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_if.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_if.cpp.dot @@ -1,296 +1,296 @@ /* @generated */ digraph iCFG { -73 [label="73: Return Stmt \n n$1=*&p:int * [line 60]\n n$2=*n$1:int [line 60]\n *&return:int =n$2 [line 60]\n " shape="box"] +"simple_init_div09" [label="9: Return Stmt \n n$2=*&a:int [line 20]\n *&return:int =(1 / n$2) [line 20]\n " shape="box"] - 73 -> 66 ; -72 [label="72: Return Stmt \n *&return:int =1 [line 58]\n " shape="box"] + "simple_init_div09" -> "simple_init_div02" ; +"simple_init_div08" [label="8: Return Stmt \n n$1=*&a:int [line 18]\n *&return:int =n$1 [line 18]\n " shape="box"] - 72 -> 66 ; -71 [label="71: DeclStmt \n *&p:int *=null [line 57]\n " shape="box"] + "simple_init_div08" -> "simple_init_div02" ; +"simple_init_div07" [label="7: DeclStmt \n *&a:int =0 [line 17]\n " shape="box"] - 71 -> 69 ; - 71 -> 70 ; -70 [label="70: Prune (false branch) \n n$0=*&p:int * [line 57]\n PRUNE((n$0 == 0), false); [line 57]\n " shape="invhouse"] + "simple_init_div07" -> "simple_init_div05" ; + "simple_init_div07" -> "simple_init_div06" ; +"simple_init_div06" [label="6: Prune (false branch) \n n$0=*&a:int [line 17]\n PRUNE((n$0 == 0), false); [line 17]\n " shape="invhouse"] - 70 -> 73 ; -69 [label="69: Prune (true branch) \n n$0=*&p:int * [line 57]\n PRUNE((n$0 != 0), true); [line 57]\n " shape="invhouse"] + "simple_init_div06" -> "simple_init_div09" ; +"simple_init_div05" [label="5: Prune (true branch) \n n$0=*&a:int [line 17]\n PRUNE((n$0 != 0), true); [line 17]\n " shape="invhouse"] - 69 -> 72 ; -68 [label="68: between_join_and_exit \n " shape="box"] + "simple_init_div05" -> "simple_init_div08" ; +"simple_init_div04" [label="4: between_join_and_exit \n " shape="box"] - 68 -> 66 ; -67 [label="67: + \n " ] + "simple_init_div04" -> "simple_init_div02" ; +"simple_init_div03" [label="3: + \n " ] - 67 -> 68 ; -66 [label="66: Exit simple_init_null_deref \n " color=yellow style=filled] + "simple_init_div03" -> "simple_init_div04" ; +"simple_init_div02" [label="2: Exit simple_init_div0 \n " color=yellow style=filled] -65 [label="65: Start simple_init_null_deref\nFormals: \nLocals: p:int * \n DECLARE_LOCALS(&return,&p); [line 56]\n " color=yellow style=filled] +"simple_init_div01" [label="1: Start simple_init_div0\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 16]\n " color=yellow style=filled] - 65 -> 71 ; -64 [label="64: DeclStmt \n *&r:int =1 [line 49]\n " shape="box"] + "simple_init_div01" -> "simple_init_div07" ; +"conditional_init_div013" [label="13: Return Stmt \n n$3=*&a:int [line 44]\n *&return:int =(1 / (n$3 - 1)) [line 44]\n " shape="box"] - 64 -> 62 ; -63 [label="63: BinaryOperatorStmt: Assign \n n$3=*&a:int & [line 51]\n *n$3:int =0 [line 51]\n " shape="box"] + "conditional_init_div013" -> "conditional_init_div02" ; +"conditional_init_div012" [label="12: DeclStmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 43]\n *&a:int =n$2 [line 43]\n " shape="box"] - 63 -> 59 ; -62 [label="62: DeclStmt \n *&a:int &=&r [line 50]\n " shape="box"] + "conditional_init_div012" -> "conditional_init_div05" ; + "conditional_init_div012" -> "conditional_init_div06" ; +"conditional_init_div011" [label="11: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =0 [line 43]\n " shape="box"] - 62 -> 60 ; - 62 -> 61 ; -61 [label="61: Prune (false branch) \n n$1=*&a:int & [line 50]\n n$2=*n$1:int [line 50]\n PRUNE((n$2 == 0), false); [line 50]\n " shape="invhouse"] + "conditional_init_div011" -> "conditional_init_div07" ; +"conditional_init_div010" [label="10: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 43]\n " shape="box"] - 61 -> 59 ; -60 [label="60: Prune (true branch) \n n$1=*&a:int & [line 50]\n n$2=*n$1:int [line 50]\n PRUNE((n$2 != 0), true); [line 50]\n " shape="invhouse"] + "conditional_init_div010" -> "conditional_init_div07" ; +"conditional_init_div09" [label="9: Prune (false branch) \n PRUNE((1 == 0), false); [line 43]\n " shape="invhouse"] - 60 -> 63 ; -59 [label="59: + \n " ] + "conditional_init_div09" -> "conditional_init_div011" ; +"conditional_init_div08" [label="8: Prune (true branch) \n PRUNE((1 != 0), true); [line 43]\n " shape="invhouse"] - 59 -> 58 ; -58 [label="58: Return Stmt \n n$0=*&r:int [line 53]\n *&return:int =(1 / n$0) [line 53]\n " shape="box"] + "conditional_init_div08" -> "conditional_init_div010" ; +"conditional_init_div07" [label="7: + \n " ] - 58 -> 57 ; -57 [label="57: Exit reference_init_div0 \n " color=yellow style=filled] + "conditional_init_div07" -> "conditional_init_div012" ; +"conditional_init_div06" [label="6: Prune (false branch) \n n$0=*&a:int [line 43]\n PRUNE((n$0 == 0), false); [line 43]\n " shape="invhouse"] -56 [label="56: Start reference_init_div0\nFormals: \nLocals: a:int & r:int \n DECLARE_LOCALS(&return,&a,&r); [line 48]\n " color=yellow style=filled] + "conditional_init_div06" -> "conditional_init_div03" ; +"conditional_init_div05" [label="5: Prune (true branch) \n n$0=*&a:int [line 43]\n PRUNE((n$0 != 0), true); [line 43]\n " shape="invhouse"] - 56 -> 64 ; -55 [label="55: Return Stmt \n n$3=*&a:int [line 44]\n *&return:int =(1 / (n$3 - 1)) [line 44]\n " shape="box"] + "conditional_init_div05" -> "conditional_init_div013" ; +"conditional_init_div04" [label="4: between_join_and_exit \n " shape="box"] - 55 -> 44 ; -54 [label="54: DeclStmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 43]\n *&a:int =n$2 [line 43]\n " shape="box"] + "conditional_init_div04" -> "conditional_init_div02" ; +"conditional_init_div03" [label="3: + \n " ] - 54 -> 47 ; - 54 -> 48 ; -53 [label="53: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =0 [line 43]\n " shape="box"] + "conditional_init_div03" -> "conditional_init_div04" ; +"conditional_init_div02" [label="2: Exit conditional_init_div0 \n " color=yellow style=filled] - 53 -> 49 ; -52 [label="52: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =1 [line 43]\n " shape="box"] +"conditional_init_div01" [label="1: Start conditional_init_div0\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 42]\n " color=yellow style=filled] - 52 -> 49 ; -51 [label="51: Prune (false branch) \n PRUNE((1 == 0), false); [line 43]\n " shape="invhouse"] + "conditional_init_div01" -> "conditional_init_div08" ; + "conditional_init_div01" -> "conditional_init_div09" ; +"simple_inif_elseif_div014" [label="14: Return Stmt \n n$2=*&a:int [line 30]\n n$3=*&b:int [line 30]\n *&return:int =(1 / (n$2 + n$3)) [line 30]\n " shape="box"] - 51 -> 53 ; -50 [label="50: Prune (true branch) \n PRUNE((1 != 0), true); [line 43]\n " shape="invhouse"] + "simple_inif_elseif_div014" -> "simple_inif_elseif_div02" ; +"simple_inif_elseif_div013" [label="13: Return Stmt \n *&return:int =1 [line 28]\n " shape="box"] - 50 -> 52 ; -49 [label="49: + \n " ] + "simple_inif_elseif_div013" -> "simple_inif_elseif_div02" ; +"simple_inif_elseif_div012" [label="12: DeclStmt \n *&b:int =0 [line 27]\n " shape="box"] - 49 -> 54 ; -48 [label="48: Prune (false branch) \n n$0=*&a:int [line 43]\n PRUNE((n$0 == 0), false); [line 43]\n " shape="invhouse"] + "simple_inif_elseif_div012" -> "simple_inif_elseif_div010" ; + "simple_inif_elseif_div012" -> "simple_inif_elseif_div011" ; +"simple_inif_elseif_div011" [label="11: Prune (false branch) \n n$1=*&b:int [line 27]\n PRUNE((n$1 == 0), false); [line 27]\n " shape="invhouse"] - 48 -> 45 ; -47 [label="47: Prune (true branch) \n n$0=*&a:int [line 43]\n PRUNE((n$0 != 0), true); [line 43]\n " shape="invhouse"] + "simple_inif_elseif_div011" -> "simple_inif_elseif_div014" ; +"simple_inif_elseif_div010" [label="10: Prune (true branch) \n n$1=*&b:int [line 27]\n PRUNE((n$1 != 0), true); [line 27]\n " shape="invhouse"] - 47 -> 55 ; -46 [label="46: between_join_and_exit \n " shape="box"] + "simple_inif_elseif_div010" -> "simple_inif_elseif_div013" ; +"simple_inif_elseif_div09" [label="9: + \n " ] - 46 -> 44 ; -45 [label="45: + \n " ] + "simple_inif_elseif_div09" -> "simple_inif_elseif_div03" ; +"simple_inif_elseif_div08" [label="8: Return Stmt \n *&return:int =1 [line 26]\n " shape="box"] - 45 -> 46 ; -44 [label="44: Exit conditional_init_div0 \n " color=yellow style=filled] + "simple_inif_elseif_div08" -> "simple_inif_elseif_div02" ; +"simple_inif_elseif_div07" [label="7: DeclStmt \n *&a:int =0 [line 25]\n " shape="box"] -43 [label="43: Start conditional_init_div0\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$1); [line 42]\n " color=yellow style=filled] + "simple_inif_elseif_div07" -> "simple_inif_elseif_div05" ; + "simple_inif_elseif_div07" -> "simple_inif_elseif_div06" ; +"simple_inif_elseif_div06" [label="6: Prune (false branch) \n n$0=*&a:int [line 25]\n PRUNE((n$0 == 0), false); [line 25]\n " shape="invhouse"] - 43 -> 50 ; - 43 -> 51 ; -42 [label="42: Return Stmt \n n$2=*&a:int [line 38]\n *&return:int =(1 / (n$2 - 1)) [line 38]\n " shape="box"] + "simple_inif_elseif_div06" -> "simple_inif_elseif_div012" ; +"simple_inif_elseif_div05" [label="5: Prune (true branch) \n n$0=*&a:int [line 25]\n PRUNE((n$0 != 0), true); [line 25]\n " shape="invhouse"] - 42 -> 36 ; -41 [label="41: DeclStmt \n n$1=_fun_get1() [line 37]\n *&a:int =n$1 [line 37]\n " shape="box"] + "simple_inif_elseif_div05" -> "simple_inif_elseif_div08" ; +"simple_inif_elseif_div04" [label="4: between_join_and_exit \n " shape="box"] - 41 -> 39 ; - 41 -> 40 ; -40 [label="40: Prune (false branch) \n n$0=*&a:int [line 37]\n PRUNE((n$0 == 0), false); [line 37]\n " shape="invhouse"] + "simple_inif_elseif_div04" -> "simple_inif_elseif_div02" ; +"simple_inif_elseif_div03" [label="3: + \n " ] - 40 -> 37 ; -39 [label="39: Prune (true branch) \n n$0=*&a:int [line 37]\n PRUNE((n$0 != 0), true); [line 37]\n " shape="invhouse"] + "simple_inif_elseif_div03" -> "simple_inif_elseif_div04" ; +"simple_inif_elseif_div02" [label="2: Exit simple_inif_elseif_div0 \n " color=yellow style=filled] - 39 -> 42 ; -38 [label="38: between_join_and_exit \n " shape="box"] +"simple_inif_elseif_div01" [label="1: Start simple_inif_elseif_div0\nFormals: \nLocals: a:int b:int \n DECLARE_LOCALS(&return,&a,&b); [line 24]\n " color=yellow style=filled] - 38 -> 36 ; -37 [label="37: + \n " ] + "simple_inif_elseif_div01" -> "simple_inif_elseif_div07" ; +"function_call_init_div08" [label="8: Return Stmt \n n$2=*&a:int [line 38]\n *&return:int =(1 / (n$2 - 1)) [line 38]\n " shape="box"] - 37 -> 38 ; -36 [label="36: Exit function_call_init_div0 \n " color=yellow style=filled] + "function_call_init_div08" -> "function_call_init_div02" ; +"function_call_init_div07" [label="7: DeclStmt \n n$1=_fun_get1() [line 37]\n *&a:int =n$1 [line 37]\n " shape="box"] -35 [label="35: Start function_call_init_div0\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 36]\n " color=yellow style=filled] + "function_call_init_div07" -> "function_call_init_div05" ; + "function_call_init_div07" -> "function_call_init_div06" ; +"function_call_init_div06" [label="6: Prune (false branch) \n n$0=*&a:int [line 37]\n PRUNE((n$0 == 0), false); [line 37]\n " shape="invhouse"] - 35 -> 41 ; -34 [label="34: Return Stmt \n *&return:int =1 [line 34]\n " shape="box"] + "function_call_init_div06" -> "function_call_init_div03" ; +"function_call_init_div05" [label="5: Prune (true branch) \n n$0=*&a:int [line 37]\n PRUNE((n$0 != 0), true); [line 37]\n " shape="invhouse"] - 34 -> 33 ; -33 [label="33: Exit get1 \n " color=yellow style=filled] + "function_call_init_div05" -> "function_call_init_div08" ; +"function_call_init_div04" [label="4: between_join_and_exit \n " shape="box"] -32 [label="32: Start get1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] + "function_call_init_div04" -> "function_call_init_div02" ; +"function_call_init_div03" [label="3: + \n " ] - 32 -> 34 ; -31 [label="31: Return Stmt \n n$2=*&a:int [line 30]\n n$3=*&b:int [line 30]\n *&return:int =(1 / (n$2 + n$3)) [line 30]\n " shape="box"] + "function_call_init_div03" -> "function_call_init_div04" ; +"function_call_init_div02" [label="2: Exit function_call_init_div0 \n " color=yellow style=filled] - 31 -> 19 ; -30 [label="30: Return Stmt \n *&return:int =1 [line 28]\n " shape="box"] +"function_call_init_div01" [label="1: Start function_call_init_div0\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 36]\n " color=yellow style=filled] - 30 -> 19 ; -29 [label="29: DeclStmt \n *&b:int =0 [line 27]\n " shape="box"] + "function_call_init_div01" -> "function_call_init_div07" ; +"simple_init_null_deref9" [label="9: Return Stmt \n n$1=*&p:int * [line 60]\n n$2=*n$1:int [line 60]\n *&return:int =n$2 [line 60]\n " shape="box"] - 29 -> 27 ; - 29 -> 28 ; -28 [label="28: Prune (false branch) \n n$1=*&b:int [line 27]\n PRUNE((n$1 == 0), false); [line 27]\n " shape="invhouse"] + "simple_init_null_deref9" -> "simple_init_null_deref2" ; +"simple_init_null_deref8" [label="8: Return Stmt \n *&return:int =1 [line 58]\n " shape="box"] - 28 -> 31 ; -27 [label="27: Prune (true branch) \n n$1=*&b:int [line 27]\n PRUNE((n$1 != 0), true); [line 27]\n " shape="invhouse"] + "simple_init_null_deref8" -> "simple_init_null_deref2" ; +"simple_init_null_deref7" [label="7: DeclStmt \n *&p:int *=null [line 57]\n " shape="box"] - 27 -> 30 ; -26 [label="26: + \n " ] + "simple_init_null_deref7" -> "simple_init_null_deref5" ; + "simple_init_null_deref7" -> "simple_init_null_deref6" ; +"simple_init_null_deref6" [label="6: Prune (false branch) \n n$0=*&p:int * [line 57]\n PRUNE((n$0 == 0), false); [line 57]\n " shape="invhouse"] - 26 -> 20 ; -25 [label="25: Return Stmt \n *&return:int =1 [line 26]\n " shape="box"] + "simple_init_null_deref6" -> "simple_init_null_deref9" ; +"simple_init_null_deref5" [label="5: Prune (true branch) \n n$0=*&p:int * [line 57]\n PRUNE((n$0 != 0), true); [line 57]\n " shape="invhouse"] - 25 -> 19 ; -24 [label="24: DeclStmt \n *&a:int =0 [line 25]\n " shape="box"] + "simple_init_null_deref5" -> "simple_init_null_deref8" ; +"simple_init_null_deref4" [label="4: between_join_and_exit \n " shape="box"] - 24 -> 22 ; - 24 -> 23 ; -23 [label="23: Prune (false branch) \n n$0=*&a:int [line 25]\n PRUNE((n$0 == 0), false); [line 25]\n " shape="invhouse"] + "simple_init_null_deref4" -> "simple_init_null_deref2" ; +"simple_init_null_deref3" [label="3: + \n " ] - 23 -> 29 ; -22 [label="22: Prune (true branch) \n n$0=*&a:int [line 25]\n PRUNE((n$0 != 0), true); [line 25]\n " shape="invhouse"] + "simple_init_null_deref3" -> "simple_init_null_deref4" ; +"simple_init_null_deref2" [label="2: Exit simple_init_null_deref \n " color=yellow style=filled] - 22 -> 25 ; -21 [label="21: between_join_and_exit \n " shape="box"] +"simple_init_null_deref1" [label="1: Start simple_init_null_deref\nFormals: \nLocals: p:int * \n DECLARE_LOCALS(&return,&p); [line 56]\n " color=yellow style=filled] - 21 -> 19 ; -20 [label="20: + \n " ] + "simple_init_null_deref1" -> "simple_init_null_deref7" ; +"reference_init_div09" [label="9: DeclStmt \n *&r:int =1 [line 49]\n " shape="box"] - 20 -> 21 ; -19 [label="19: Exit simple_inif_elseif_div0 \n " color=yellow style=filled] + "reference_init_div09" -> "reference_init_div07" ; +"reference_init_div08" [label="8: BinaryOperatorStmt: Assign \n n$3=*&a:int & [line 51]\n *n$3:int =0 [line 51]\n " shape="box"] -18 [label="18: Start simple_inif_elseif_div0\nFormals: \nLocals: a:int b:int \n DECLARE_LOCALS(&return,&a,&b); [line 24]\n " color=yellow style=filled] + "reference_init_div08" -> "reference_init_div04" ; +"reference_init_div07" [label="7: DeclStmt \n *&a:int &=&r [line 50]\n " shape="box"] - 18 -> 24 ; -17 [label="17: Return Stmt \n n$2=*&a:int [line 20]\n *&return:int =(1 / n$2) [line 20]\n " shape="box"] + "reference_init_div07" -> "reference_init_div05" ; + "reference_init_div07" -> "reference_init_div06" ; +"reference_init_div06" [label="6: Prune (false branch) \n n$1=*&a:int & [line 50]\n n$2=*n$1:int [line 50]\n PRUNE((n$2 == 0), false); [line 50]\n " shape="invhouse"] - 17 -> 10 ; -16 [label="16: Return Stmt \n n$1=*&a:int [line 18]\n *&return:int =n$1 [line 18]\n " shape="box"] + "reference_init_div06" -> "reference_init_div04" ; +"reference_init_div05" [label="5: Prune (true branch) \n n$1=*&a:int & [line 50]\n n$2=*n$1:int [line 50]\n PRUNE((n$2 != 0), true); [line 50]\n " shape="invhouse"] - 16 -> 10 ; -15 [label="15: DeclStmt \n *&a:int =0 [line 17]\n " shape="box"] + "reference_init_div05" -> "reference_init_div08" ; +"reference_init_div04" [label="4: + \n " ] - 15 -> 13 ; - 15 -> 14 ; -14 [label="14: Prune (false branch) \n n$0=*&a:int [line 17]\n PRUNE((n$0 == 0), false); [line 17]\n " shape="invhouse"] + "reference_init_div04" -> "reference_init_div03" ; +"reference_init_div03" [label="3: Return Stmt \n n$0=*&r:int [line 53]\n *&return:int =(1 / n$0) [line 53]\n " shape="box"] - 14 -> 17 ; -13 [label="13: Prune (true branch) \n n$0=*&a:int [line 17]\n PRUNE((n$0 != 0), true); [line 17]\n " shape="invhouse"] + "reference_init_div03" -> "reference_init_div02" ; +"reference_init_div02" [label="2: Exit reference_init_div0 \n " color=yellow style=filled] - 13 -> 16 ; -12 [label="12: between_join_and_exit \n " shape="box"] +"reference_init_div01" [label="1: Start reference_init_div0\nFormals: \nLocals: a:int & r:int \n DECLARE_LOCALS(&return,&a,&r); [line 48]\n " color=yellow style=filled] - 12 -> 10 ; -11 [label="11: + \n " ] + "reference_init_div01" -> "reference_init_div09" ; +"get13" [label="3: Return Stmt \n *&return:int =1 [line 34]\n " shape="box"] - 11 -> 12 ; -10 [label="10: Exit simple_init_div0 \n " color=yellow style=filled] + "get13" -> "get12" ; +"get12" [label="2: Exit get1 \n " color=yellow style=filled] -9 [label="9: Start simple_init_div0\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 16]\n " color=yellow style=filled] +"get11" [label="1: Start get1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 9 -> 15 ; -8 [label="8: Return Stmt \n n$1=*&a:int [line 12]\n *&return:int =(1 / n$1) [line 12]\n " shape="box"] + "get11" -> "get13" ; +"simple_init_div18" [label="8: Return Stmt \n n$1=*&a:int [line 12]\n *&return:int =(1 / n$1) [line 12]\n " shape="box"] - 8 -> 2 ; -7 [label="7: DeclStmt \n *&a:int =1 [line 11]\n " shape="box"] + "simple_init_div18" -> "simple_init_div12" ; +"simple_init_div17" [label="7: DeclStmt \n *&a:int =1 [line 11]\n " shape="box"] - 7 -> 5 ; - 7 -> 6 ; -6 [label="6: Prune (false branch) \n n$0=*&a:int [line 11]\n PRUNE((n$0 == 0), false); [line 11]\n " shape="invhouse"] + "simple_init_div17" -> "simple_init_div15" ; + "simple_init_div17" -> "simple_init_div16" ; +"simple_init_div16" [label="6: Prune (false branch) \n n$0=*&a:int [line 11]\n PRUNE((n$0 == 0), false); [line 11]\n " shape="invhouse"] - 6 -> 3 ; -5 [label="5: Prune (true branch) \n n$0=*&a:int [line 11]\n PRUNE((n$0 != 0), true); [line 11]\n " shape="invhouse"] + "simple_init_div16" -> "simple_init_div13" ; +"simple_init_div15" [label="5: Prune (true branch) \n n$0=*&a:int [line 11]\n PRUNE((n$0 != 0), true); [line 11]\n " shape="invhouse"] - 5 -> 8 ; -4 [label="4: between_join_and_exit \n " shape="box"] + "simple_init_div15" -> "simple_init_div18" ; +"simple_init_div14" [label="4: between_join_and_exit \n " shape="box"] - 4 -> 2 ; -3 [label="3: + \n " ] + "simple_init_div14" -> "simple_init_div12" ; +"simple_init_div13" [label="3: + \n " ] - 3 -> 4 ; -2 [label="2: Exit simple_init_div1 \n " color=yellow style=filled] + "simple_init_div13" -> "simple_init_div14" ; +"simple_init_div12" [label="2: Exit simple_init_div1 \n " color=yellow style=filled] -1 [label="1: Start simple_init_div1\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 10]\n " color=yellow style=filled] +"simple_init_div11" [label="1: Start simple_init_div1\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 10]\n " color=yellow style=filled] - 1 -> 7 ; + "simple_init_div11" -> "simple_init_div17" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_switch.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_switch.cpp.dot index ba4d60e02..5a54c5425 100644 --- a/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_switch.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_switch.cpp.dot @@ -1,61 +1,61 @@ /* @generated */ digraph iCFG { -14 [label="14: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 12]\n " shape="invhouse"] +"get14" [label="14: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 12]\n " shape="invhouse"] - 14 -> 11 ; - 14 -> 12 ; -13 [label="13: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 12]\n " shape="invhouse"] + "get14" -> "get11" ; + "get14" -> "get12" ; +"get13" [label="13: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 12]\n " shape="invhouse"] - 13 -> 10 ; -12 [label="12: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 13]\n " shape="invhouse"] + "get13" -> "get10" ; +"get12" [label="12: Prune (false branch) \n PRUNE(((n$0 == 1) == 0), false); [line 13]\n " shape="invhouse"] - 12 -> 8 ; - 12 -> 9 ; -11 [label="11: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 13]\n " shape="invhouse"] + "get12" -> "get8" ; + "get12" -> "get9" ; +"get11" [label="11: Prune (true branch) \n PRUNE(((n$0 == 1) != 0), true); [line 13]\n " shape="invhouse"] - 11 -> 10 ; -10 [label="10: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] + "get11" -> "get10" ; +"get10" [label="10: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] - 10 -> 2 ; -9 [label="9: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 15]\n " shape="invhouse"] + "get10" -> "get2" ; +"get9" [label="9: Prune (false branch) \n PRUNE(((n$0 == 2) == 0), false); [line 15]\n " shape="invhouse"] - 9 -> 5 ; -8 [label="8: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 15]\n " shape="invhouse"] + "get9" -> "get5" ; +"get8" [label="8: Prune (true branch) \n PRUNE(((n$0 == 2) != 0), true); [line 15]\n " shape="invhouse"] - 8 -> 7 ; -7 [label="7: Return Stmt \n *&return:int =1 [line 16]\n " shape="box"] + "get8" -> "get7" ; +"get7" [label="7: Return Stmt \n *&return:int =1 [line 16]\n " shape="box"] - 7 -> 2 ; -6 [label="6: Return Stmt \n n$2=*&x:int [line 18]\n *&return:int =n$2 [line 18]\n " shape="box"] + "get7" -> "get2" ; +"get6" [label="6: Return Stmt \n n$2=*&x:int [line 18]\n *&return:int =n$2 [line 18]\n " shape="box"] - 6 -> 2 ; -5 [label="5: DefaultStmt_placeholder \n " shape="box"] + "get6" -> "get2" ; +"get5" [label="5: DefaultStmt_placeholder \n " shape="box"] - 5 -> 6 ; -4 [label="4: DeclStmt \n n$1=*&a:int [line 11]\n *&x:int =n$1 [line 11]\n " shape="box"] + "get5" -> "get6" ; +"get4" [label="4: DeclStmt \n n$1=*&a:int [line 11]\n *&x:int =n$1 [line 11]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Switch_stmt \n n$0=*&x:int [line 11]\n " shape="box"] + "get4" -> "get3" ; +"get3" [label="3: Switch_stmt \n n$0=*&x:int [line 11]\n " shape="box"] - 3 -> 13 ; - 3 -> 14 ; -2 [label="2: Exit get \n " color=yellow style=filled] + "get3" -> "get13" ; + "get3" -> "get14" ; +"get2" [label="2: Exit get \n " color=yellow style=filled] -1 [label="1: Start get\nFormals: a:int \nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 10]\n " color=yellow style=filled] +"get1" [label="1: Start get\nFormals: a:int \nLocals: x:int \n DECLARE_LOCALS(&return,&x); [line 10]\n " color=yellow style=filled] - 1 -> 4 ; + "get1" -> "get4" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_while.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_while.cpp.dot index 2c2937c78..214304b60 100644 --- a/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_while.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/nestedoperators/var_decl_inside_while.cpp.dot @@ -1,116 +1,116 @@ /* @generated */ digraph iCFG { -28 [label="28: DeclStmt \n *&x:int =10 [line 21]\n " shape="box"] +"conditional_assignment17" [label="17: DeclStmt \n *&x:int =10 [line 21]\n " shape="box"] - 28 -> 27 ; -27 [label="27: DeclStmt \n *&result:int =0 [line 22]\n " shape="box"] + "conditional_assignment17" -> "conditional_assignment16" ; +"conditional_assignment16" [label="16: DeclStmt \n *&result:int =0 [line 22]\n " shape="box"] - 27 -> 15 ; -26 [label="26: BinaryOperatorStmt: AddAssign \n n$6=*&a:int [line 24]\n n$7=*&result:int [line 24]\n *&result:int =(n$7 + n$6) [line 24]\n " shape="box"] + "conditional_assignment16" -> "conditional_assignment4" ; +"conditional_assignment15" [label="15: BinaryOperatorStmt: AddAssign \n n$6=*&a:int [line 24]\n n$7=*&result:int [line 24]\n *&result:int =(n$7 + n$6) [line 24]\n " shape="box"] - 26 -> 25 ; -25 [label="25: BinaryOperatorStmt: SubAssign \n n$5=*&x:int [line 25]\n *&x:int =(n$5 - 1) [line 25]\n " shape="box"] + "conditional_assignment15" -> "conditional_assignment14" ; +"conditional_assignment14" [label="14: BinaryOperatorStmt: SubAssign \n n$5=*&x:int [line 25]\n *&x:int =(n$5 - 1) [line 25]\n " shape="box"] - 25 -> 15 ; -24 [label="24: DeclStmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 23]\n *&a:int =n$4 [line 23]\n " shape="box"] + "conditional_assignment14" -> "conditional_assignment4" ; +"conditional_assignment13" [label="13: DeclStmt \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 23]\n *&a:int =n$4 [line 23]\n " shape="box"] - 24 -> 16 ; - 24 -> 17 ; -23 [label="23: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =0 [line 23]\n " shape="box"] + "conditional_assignment13" -> "conditional_assignment5" ; + "conditional_assignment13" -> "conditional_assignment6" ; +"conditional_assignment12" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =0 [line 23]\n " shape="box"] - 23 -> 18 ; -22 [label="22: ConditinalStmt Branch \n n$3=*&x:int [line 23]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$3 [line 23]\n " shape="box"] + "conditional_assignment12" -> "conditional_assignment7" ; +"conditional_assignment11" [label="11: ConditinalStmt Branch \n n$3=*&x:int [line 23]\n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int =n$3 [line 23]\n " shape="box"] - 22 -> 18 ; -21 [label="21: Prune (false branch) \n PRUNE(((n$2 > 0) == 0), false); [line 23]\n " shape="invhouse"] + "conditional_assignment11" -> "conditional_assignment7" ; +"conditional_assignment10" [label="10: Prune (false branch) \n PRUNE(((n$2 > 0) == 0), false); [line 23]\n " shape="invhouse"] - 21 -> 23 ; -20 [label="20: Prune (true branch) \n PRUNE(((n$2 > 0) != 0), true); [line 23]\n " shape="invhouse"] + "conditional_assignment10" -> "conditional_assignment12" ; +"conditional_assignment9" [label="9: Prune (true branch) \n PRUNE(((n$2 > 0) != 0), true); [line 23]\n " shape="invhouse"] - 20 -> 22 ; -19 [label="19: BinaryOperatorStmt: GT \n n$2=*&x:int [line 23]\n " shape="box"] + "conditional_assignment9" -> "conditional_assignment11" ; +"conditional_assignment8" [label="8: BinaryOperatorStmt: GT \n n$2=*&x:int [line 23]\n " shape="box"] - 19 -> 20 ; - 19 -> 21 ; -18 [label="18: + \n " ] + "conditional_assignment8" -> "conditional_assignment9" ; + "conditional_assignment8" -> "conditional_assignment10" ; +"conditional_assignment7" [label="7: + \n " ] - 18 -> 24 ; -17 [label="17: Prune (false branch) \n n$0=*&a:int [line 23]\n PRUNE((n$0 == 0), false); [line 23]\n " shape="invhouse"] + "conditional_assignment7" -> "conditional_assignment13" ; +"conditional_assignment6" [label="6: Prune (false branch) \n n$0=*&a:int [line 23]\n PRUNE((n$0 == 0), false); [line 23]\n " shape="invhouse"] - 17 -> 14 ; -16 [label="16: Prune (true branch) \n n$0=*&a:int [line 23]\n PRUNE((n$0 != 0), true); [line 23]\n " shape="invhouse"] + "conditional_assignment6" -> "conditional_assignment3" ; +"conditional_assignment5" [label="5: Prune (true branch) \n n$0=*&a:int [line 23]\n PRUNE((n$0 != 0), true); [line 23]\n " shape="invhouse"] - 16 -> 26 ; -15 [label="15: + \n " ] + "conditional_assignment5" -> "conditional_assignment15" ; +"conditional_assignment4" [label="4: + \n " ] - 15 -> 19 ; -14 [label="14: Return Stmt \n *&return:int =0 [line 27]\n " shape="box"] + "conditional_assignment4" -> "conditional_assignment8" ; +"conditional_assignment3" [label="3: Return Stmt \n *&return:int =0 [line 27]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit conditional_assignment \n " color=yellow style=filled] + "conditional_assignment3" -> "conditional_assignment2" ; +"conditional_assignment2" [label="2: Exit conditional_assignment \n " color=yellow style=filled] -12 [label="12: Start conditional_assignment\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int result:int x:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$1,&result,&x); [line 20]\n " color=yellow style=filled] +"conditional_assignment1" [label="1: Start conditional_assignment\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int result:int x:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_temp_conditional___n$1,&result,&x); [line 20]\n " color=yellow style=filled] - 12 -> 28 ; -11 [label="11: DeclStmt \n *&x:int =10 [line 11]\n " shape="box"] + "conditional_assignment1" -> "conditional_assignment17" ; +"simple_assignment11" [label="11: DeclStmt \n *&x:int =10 [line 11]\n " shape="box"] - 11 -> 10 ; -10 [label="10: DeclStmt \n *&result:int =0 [line 12]\n " shape="box"] + "simple_assignment11" -> "simple_assignment10" ; +"simple_assignment10" [label="10: DeclStmt \n *&result:int =0 [line 12]\n " shape="box"] - 10 -> 4 ; -9 [label="9: BinaryOperatorStmt: AddAssign \n n$3=*&a:int [line 14]\n n$4=*&result:int [line 14]\n *&result:int =(n$4 + n$3) [line 14]\n " shape="box"] + "simple_assignment10" -> "simple_assignment4" ; +"simple_assignment9" [label="9: BinaryOperatorStmt: AddAssign \n n$3=*&a:int [line 14]\n n$4=*&result:int [line 14]\n *&result:int =(n$4 + n$3) [line 14]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: SubAssign \n n$2=*&x:int [line 15]\n *&x:int =(n$2 - 1) [line 15]\n " shape="box"] + "simple_assignment9" -> "simple_assignment8" ; +"simple_assignment8" [label="8: BinaryOperatorStmt: SubAssign \n n$2=*&x:int [line 15]\n *&x:int =(n$2 - 1) [line 15]\n " shape="box"] - 8 -> 4 ; -7 [label="7: DeclStmt \n n$1=*&x:int [line 13]\n *&a:int =n$1 [line 13]\n " shape="box"] + "simple_assignment8" -> "simple_assignment4" ; +"simple_assignment7" [label="7: DeclStmt \n n$1=*&x:int [line 13]\n *&a:int =n$1 [line 13]\n " shape="box"] - 7 -> 5 ; - 7 -> 6 ; -6 [label="6: Prune (false branch) \n n$0=*&a:int [line 13]\n PRUNE((n$0 == 0), false); [line 13]\n " shape="invhouse"] + "simple_assignment7" -> "simple_assignment5" ; + "simple_assignment7" -> "simple_assignment6" ; +"simple_assignment6" [label="6: Prune (false branch) \n n$0=*&a:int [line 13]\n PRUNE((n$0 == 0), false); [line 13]\n " shape="invhouse"] - 6 -> 3 ; -5 [label="5: Prune (true branch) \n n$0=*&a:int [line 13]\n PRUNE((n$0 != 0), true); [line 13]\n " shape="invhouse"] + "simple_assignment6" -> "simple_assignment3" ; +"simple_assignment5" [label="5: Prune (true branch) \n n$0=*&a:int [line 13]\n PRUNE((n$0 != 0), true); [line 13]\n " shape="invhouse"] - 5 -> 9 ; -4 [label="4: + \n " ] + "simple_assignment5" -> "simple_assignment9" ; +"simple_assignment4" [label="4: + \n " ] - 4 -> 7 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] + "simple_assignment4" -> "simple_assignment7" ; +"simple_assignment3" [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit simple_assignment \n " color=yellow style=filled] + "simple_assignment3" -> "simple_assignment2" ; +"simple_assignment2" [label="2: Exit simple_assignment \n " color=yellow style=filled] -1 [label="1: Start simple_assignment\nFormals: \nLocals: a:int result:int x:int \n DECLARE_LOCALS(&return,&a,&result,&x); [line 10]\n " color=yellow style=filled] +"simple_assignment1" [label="1: Start simple_assignment\nFormals: \nLocals: a:int result:int x:int \n DECLARE_LOCALS(&return,&a,&result,&x); [line 10]\n " color=yellow style=filled] - 1 -> 11 ; + "simple_assignment1" -> "simple_assignment11" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/npe/method_call.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/npe/method_call.cpp.dot index 77fee5a5e..1b48ad85c 100644 --- a/infer/tests/codetoanalyze/cpp/shared/npe/method_call.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/npe/method_call.cpp.dot @@ -1,84 +1,84 @@ /* @generated */ digraph iCFG { -22 [label="22: Call _fun_call_with_forward_declaration \n _fun_call_with_forward_declaration(null:class XForward *) [line 38]\n " shape="box"] +"npe_call4" [label="4: DeclStmt \n *&x:class X *=null [line 16]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Exit npe_call_with_forward_declaration \n " color=yellow style=filled] + "npe_call4" -> "npe_call3" ; +"npe_call3" [label="3: Return Stmt \n n$0=*&x:class X * [line 17]\n _=*n$0:class X [line 17]\n n$2=_fun_X_call(n$0:class X *) [line 17]\n *&return:int =n$2 [line 17]\n " shape="box"] -20 [label="20: Start npe_call_with_forward_declaration\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 37]\n " color=yellow style=filled] + "npe_call3" -> "npe_call2" ; +"npe_call2" [label="2: Exit npe_call \n " color=yellow style=filled] - 20 -> 22 ; -19 [label="19: Call _fun_XForward_call \n n$0=*&x:class XForward * [line 35]\n _=*n$0:class XForward [line 35]\n n$2=_fun_XForward_call(n$0:class XForward *) [line 35]\n " shape="box"] +"npe_call1" [label="1: Start npe_call\nFormals: \nLocals: x:class X * \n DECLARE_LOCALS(&return,&x); [line 15]\n " color=yellow style=filled] - 19 -> 18 ; -18 [label="18: Exit call_with_forward_declaration \n " color=yellow style=filled] + "npe_call1" -> "npe_call4" ; +"getX3" [label="3: Return Stmt \n *&return:class X *=null [line 20]\n " shape="box"] -17 [label="17: Start call_with_forward_declaration\nFormals: x:class XForward *\nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] + "getX3" -> "getX2" ; +"getX2" [label="2: Exit getX \n " color=yellow style=filled] - 17 -> 19 ; -16 [label="16: Return Stmt \n *&return:int =0 [line 31]\n " shape="box"] +"getX1" [label="1: Start getX\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Exit XForward_call \n " color=yellow style=filled] + "getX1" -> "getX3" ; +"call_with_forward_declaration3" [label="3: Call _fun_XForward_call \n n$0=*&x:class XForward * [line 35]\n _=*n$0:class XForward [line 35]\n n$2=_fun_XForward_call(n$0:class XForward *) [line 35]\n " shape="box"] -14 [label="14: Start XForward_call\nFormals: this:class XForward *\nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] + "call_with_forward_declaration3" -> "call_with_forward_declaration2" ; +"call_with_forward_declaration2" [label="2: Exit call_with_forward_declaration \n " color=yellow style=filled] - 14 -> 16 ; -13 [label="13: Call _fun_X_call \n n$0=_fun_getX() [line 22]\n _=*n$0:class X [line 22]\n n$2=_fun_X_call(n$0:class X *) [line 22]\n " shape="box"] +"call_with_forward_declaration1" [label="1: Start call_with_forward_declaration\nFormals: x:class XForward *\nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit npe_call_after_call \n " color=yellow style=filled] + "call_with_forward_declaration1" -> "call_with_forward_declaration3" ; +"npe_call_after_call3" [label="3: Call _fun_X_call \n n$0=_fun_getX() [line 22]\n _=*n$0:class X [line 22]\n n$2=_fun_X_call(n$0:class X *) [line 22]\n " shape="box"] -11 [label="11: Start npe_call_after_call\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] + "npe_call_after_call3" -> "npe_call_after_call2" ; +"npe_call_after_call2" [label="2: Exit npe_call_after_call \n " color=yellow style=filled] - 11 -> 13 ; -10 [label="10: Return Stmt \n *&return:class X *=null [line 20]\n " shape="box"] +"npe_call_after_call1" [label="1: Start npe_call_after_call\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Exit getX \n " color=yellow style=filled] + "npe_call_after_call1" -> "npe_call_after_call3" ; +"XForward_call3" [label="3: Return Stmt \n *&return:int =0 [line 31]\n " shape="box"] -8 [label="8: Start getX\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] + "XForward_call3" -> "XForward_call2" ; +"XForward_call2" [label="2: Exit XForward_call \n " color=yellow style=filled] - 8 -> 10 ; -7 [label="7: DeclStmt \n *&x:class X *=null [line 16]\n " shape="box"] +"XForward_call1" [label="1: Start XForward_call\nFormals: this:class XForward *\nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&x:class X * [line 17]\n _=*n$0:class X [line 17]\n n$2=_fun_X_call(n$0:class X *) [line 17]\n *&return:int =n$2 [line 17]\n " shape="box"] + "XForward_call1" -> "XForward_call3" ; +"X_call3" [label="3: Return Stmt \n *&return:int =1 [line 12]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit npe_call \n " color=yellow style=filled] + "X_call3" -> "X_call2" ; +"X_call2" [label="2: Exit X_call \n " color=yellow style=filled] -4 [label="4: Start npe_call\nFormals: \nLocals: x:class X * \n DECLARE_LOCALS(&return,&x); [line 15]\n " color=yellow style=filled] +"X_call1" [label="1: Start X_call\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 4 -> 7 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 12]\n " shape="box"] + "X_call1" -> "X_call3" ; +"npe_call_with_forward_declaration3" [label="3: Call _fun_call_with_forward_declaration \n _fun_call_with_forward_declaration(null:class XForward *) [line 38]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit X_call \n " color=yellow style=filled] + "npe_call_with_forward_declaration3" -> "npe_call_with_forward_declaration2" ; +"npe_call_with_forward_declaration2" [label="2: Exit npe_call_with_forward_declaration \n " color=yellow style=filled] -1 [label="1: Start X_call\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"npe_call_with_forward_declaration1" [label="1: Start npe_call_with_forward_declaration\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 37]\n " color=yellow style=filled] - 1 -> 3 ; + "npe_call_with_forward_declaration1" -> "npe_call_with_forward_declaration3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/box.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/box.cpp.dot index e370b1f7c..7df84d583 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/box.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/box.cpp.dot @@ -1,22 +1,22 @@ /* @generated */ digraph iCFG { -5 [label="5: DeclStmt \n *&v:int =3 [line 11]\n " shape="box"] +"test5" [label="5: DeclStmt \n *&v:int =3 [line 11]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n *&r:int &=&v [line 12]\n " shape="box"] + "test5" -> "test4" ; +"test4" [label="4: DeclStmt \n *&r:int &=&v [line 12]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n *&p:int *=&v [line 13]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: DeclStmt \n *&p:int *=&v [line 13]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start test\nFormals: \nLocals: p:int * r:int & v:int \n DECLARE_LOCALS(&return,&p,&r,&v); [line 10]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: p:int * r:int & v:int \n DECLARE_LOCALS(&return,&p,&r,&v); [line 10]\n " color=yellow style=filled] - 1 -> 5 ; + "test1" -> "test5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/increment.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/increment.cpp.dot index 1b914bf8a..3aa3fb6cf 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/increment.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/increment.cpp.dot @@ -1,45 +1,45 @@ /* @generated */ digraph iCFG { -11 [label="11: DeclStmt \n *&v:int =3 [line 17]\n " shape="box"] +"using_ref6" [label="6: DeclStmt \n *&v:int =3 [line 17]\n " shape="box"] - 11 -> 10 ; -10 [label="10: DeclStmt \n *&vr:int &=&v [line 18]\n " shape="box"] + "using_ref6" -> "using_ref5" ; +"using_ref5" [label="5: DeclStmt \n *&vr:int &=&v [line 18]\n " shape="box"] - 10 -> 9 ; -9 [label="9: DeclStmt \n n$2=*&vr:int & [line 19]\n n$3=*n$2:int [line 19]\n *n$2:int =(n$3 + 1) [line 19]\n *&r:int &=n$2 [line 19]\n " shape="box"] + "using_ref5" -> "using_ref4" ; +"using_ref4" [label="4: DeclStmt \n n$2=*&vr:int & [line 19]\n n$3=*n$2:int [line 19]\n *n$2:int =(n$3 + 1) [line 19]\n *&r:int &=n$2 [line 19]\n " shape="box"] - 9 -> 8 ; -8 [label="8: DeclStmt \n n$0=*&vr:int & [line 20]\n n$1=*n$0:int [line 20]\n *n$0:int =(n$1 - 1) [line 20]\n *&q:int &=n$0 [line 20]\n " shape="box"] + "using_ref4" -> "using_ref3" ; +"using_ref3" [label="3: DeclStmt \n n$0=*&vr:int & [line 20]\n n$1=*n$0:int [line 20]\n *n$0:int =(n$1 - 1) [line 20]\n *&q:int &=n$0 [line 20]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit using_ref \n " color=yellow style=filled] + "using_ref3" -> "using_ref2" ; +"using_ref2" [label="2: Exit using_ref \n " color=yellow style=filled] -6 [label="6: Start using_ref\nFormals: \nLocals: q:int & r:int & vr:int & v:int \n DECLARE_LOCALS(&return,&q,&r,&vr,&v); [line 16]\n " color=yellow style=filled] +"using_ref1" [label="1: Start using_ref\nFormals: \nLocals: q:int & r:int & vr:int & v:int \n DECLARE_LOCALS(&return,&q,&r,&vr,&v); [line 16]\n " color=yellow style=filled] - 6 -> 11 ; -5 [label="5: DeclStmt \n *&v:int =3 [line 11]\n " shape="box"] + "using_ref1" -> "using_ref6" ; +"using_value5" [label="5: DeclStmt \n *&v:int =3 [line 11]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n n$1=*&v:int [line 12]\n *&v:int =(n$1 + 1) [line 12]\n *&r:int &=&v [line 12]\n " shape="box"] + "using_value5" -> "using_value4" ; +"using_value4" [label="4: DeclStmt \n n$1=*&v:int [line 12]\n *&v:int =(n$1 + 1) [line 12]\n *&r:int &=&v [line 12]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n n$0=*&v:int [line 13]\n *&v:int =(n$0 - 1) [line 13]\n *&q:int &=&v [line 13]\n " shape="box"] + "using_value4" -> "using_value3" ; +"using_value3" [label="3: DeclStmt \n n$0=*&v:int [line 13]\n *&v:int =(n$0 - 1) [line 13]\n *&q:int &=&v [line 13]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit using_value \n " color=yellow style=filled] + "using_value3" -> "using_value2" ; +"using_value2" [label="2: Exit using_value \n " color=yellow style=filled] -1 [label="1: Start using_value\nFormals: \nLocals: q:int & r:int & v:int \n DECLARE_LOCALS(&return,&q,&r,&v); [line 10]\n " color=yellow style=filled] +"using_value1" [label="1: Start using_value\nFormals: \nLocals: q:int & r:int & v:int \n DECLARE_LOCALS(&return,&q,&r,&v); [line 10]\n " color=yellow style=filled] - 1 -> 5 ; + "using_value1" -> "using_value5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/init.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/init.cpp.dot index 2b823d780..567521f48 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/init.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/init.cpp.dot @@ -1,60 +1,60 @@ /* @generated */ digraph iCFG { -15 [label="15: DeclStmt \n n$2=*&par:int * [line 23]\n n$3=*n$2:int [line 23]\n *&v:int =n$3 [line 23]\n " shape="box"] +"init_from_ref5" [label="5: DeclStmt \n n$2=*&par:int & [line 11]\n n$3=*n$2:int [line 11]\n *&v:int =n$3 [line 11]\n " shape="box"] - 15 -> 14 ; -14 [label="14: DeclStmt \n n$1=*&par:int * [line 24]\n *&d:int &=n$1 [line 24]\n " shape="box"] + "init_from_ref5" -> "init_from_ref4" ; +"init_from_ref4" [label="4: DeclStmt \n n$1=*&par:int & [line 12]\n *&d:int &=n$1 [line 12]\n " shape="box"] - 14 -> 13 ; -13 [label="13: DeclStmt \n n$0=*&par:int * [line 25]\n *&p:int *=n$0 [line 25]\n " shape="box"] + "init_from_ref4" -> "init_from_ref3" ; +"init_from_ref3" [label="3: DeclStmt \n n$0=*&par:int & [line 13]\n *&p:int *=n$0 [line 13]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit init_from_ptr \n " color=yellow style=filled] + "init_from_ref3" -> "init_from_ref2" ; +"init_from_ref2" [label="2: Exit init_from_ref \n " color=yellow style=filled] -11 [label="11: Start init_from_ptr\nFormals: par:int *\nLocals: p:int * d:int & v:int \n DECLARE_LOCALS(&return,&p,&d,&v); [line 22]\n " color=yellow style=filled] +"init_from_ref1" [label="1: Start init_from_ref\nFormals: par:int &\nLocals: p:int * d:int & v:int \n DECLARE_LOCALS(&return,&p,&d,&v); [line 10]\n " color=yellow style=filled] - 11 -> 15 ; -10 [label="10: DeclStmt \n n$0=*&par:int [line 17]\n *&v:int =n$0 [line 17]\n " shape="box"] + "init_from_ref1" -> "init_from_ref5" ; +"init_from_val5" [label="5: DeclStmt \n n$0=*&par:int [line 17]\n *&v:int =n$0 [line 17]\n " shape="box"] - 10 -> 9 ; -9 [label="9: DeclStmt \n *&d:int &=&par [line 18]\n " shape="box"] + "init_from_val5" -> "init_from_val4" ; +"init_from_val4" [label="4: DeclStmt \n *&d:int &=&par [line 18]\n " shape="box"] - 9 -> 8 ; -8 [label="8: DeclStmt \n *&p:int *=&par [line 19]\n " shape="box"] + "init_from_val4" -> "init_from_val3" ; +"init_from_val3" [label="3: DeclStmt \n *&p:int *=&par [line 19]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit init_from_val \n " color=yellow style=filled] + "init_from_val3" -> "init_from_val2" ; +"init_from_val2" [label="2: Exit init_from_val \n " color=yellow style=filled] -6 [label="6: Start init_from_val\nFormals: par:int \nLocals: p:int * d:int & v:int \n DECLARE_LOCALS(&return,&p,&d,&v); [line 16]\n " color=yellow style=filled] +"init_from_val1" [label="1: Start init_from_val\nFormals: par:int \nLocals: p:int * d:int & v:int \n DECLARE_LOCALS(&return,&p,&d,&v); [line 16]\n " color=yellow style=filled] - 6 -> 10 ; -5 [label="5: DeclStmt \n n$2=*&par:int & [line 11]\n n$3=*n$2:int [line 11]\n *&v:int =n$3 [line 11]\n " shape="box"] + "init_from_val1" -> "init_from_val5" ; +"init_from_ptr5" [label="5: DeclStmt \n n$2=*&par:int * [line 23]\n n$3=*n$2:int [line 23]\n *&v:int =n$3 [line 23]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n n$1=*&par:int & [line 12]\n *&d:int &=n$1 [line 12]\n " shape="box"] + "init_from_ptr5" -> "init_from_ptr4" ; +"init_from_ptr4" [label="4: DeclStmt \n n$1=*&par:int * [line 24]\n *&d:int &=n$1 [line 24]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n n$0=*&par:int & [line 13]\n *&p:int *=n$0 [line 13]\n " shape="box"] + "init_from_ptr4" -> "init_from_ptr3" ; +"init_from_ptr3" [label="3: DeclStmt \n n$0=*&par:int * [line 25]\n *&p:int *=n$0 [line 25]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit init_from_ref \n " color=yellow style=filled] + "init_from_ptr3" -> "init_from_ptr2" ; +"init_from_ptr2" [label="2: Exit init_from_ptr \n " color=yellow style=filled] -1 [label="1: Start init_from_ref\nFormals: par:int &\nLocals: p:int * d:int & v:int \n DECLARE_LOCALS(&return,&p,&d,&v); [line 10]\n " color=yellow style=filled] +"init_from_ptr1" [label="1: Start init_from_ptr\nFormals: par:int *\nLocals: p:int * d:int & v:int \n DECLARE_LOCALS(&return,&p,&d,&v); [line 22]\n " color=yellow style=filled] - 1 -> 5 ; + "init_from_ptr1" -> "init_from_ptr5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/member_access.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/member_access.cpp.dot index 6c54454e6..83bede2fd 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/member_access.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/member_access.cpp.dot @@ -1,44 +1,44 @@ /* @generated */ digraph iCFG { -11 [label="11: DeclStmt \n n$3=*&x:class X * [line 21]\n n$4=*n$3.f:int [line 21]\n *&f:int =n$4 [line 21]\n " shape="box"] +"access_ref4" [label="4: DeclStmt \n n$3=*&x:class X & [line 16]\n n$4=*n$3.f:int [line 16]\n *&f:int =n$4 [line 16]\n " shape="box"] - 11 -> 10 ; -10 [label="10: DeclStmt \n n$0=*&x:class X * [line 22]\n _=*n$0:class X [line 22]\n n$2=_fun_X_call(n$0:class X *) [line 22]\n *&c:int =n$2 [line 22]\n " shape="box"] + "access_ref4" -> "access_ref3" ; +"access_ref3" [label="3: DeclStmt \n n$0=*&x:class X & [line 17]\n _=*n$0:class X [line 17]\n n$2=_fun_X_call(n$0:class X &) [line 17]\n *&c:int =n$2 [line 17]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Exit access_ptr \n " color=yellow style=filled] + "access_ref3" -> "access_ref2" ; +"access_ref2" [label="2: Exit access_ref \n " color=yellow style=filled] -8 [label="8: Start access_ptr\nFormals: x:class X *\nLocals: c:int f:int \n DECLARE_LOCALS(&return,&c,&f); [line 20]\n " color=yellow style=filled] +"access_ref1" [label="1: Start access_ref\nFormals: x:class X &\nLocals: c:int f:int \n DECLARE_LOCALS(&return,&c,&f); [line 15]\n " color=yellow style=filled] - 8 -> 11 ; -7 [label="7: DeclStmt \n n$3=*&x:class X & [line 16]\n n$4=*n$3.f:int [line 16]\n *&f:int =n$4 [line 16]\n " shape="box"] + "access_ref1" -> "access_ref4" ; +"access_ptr4" [label="4: DeclStmt \n n$3=*&x:class X * [line 21]\n n$4=*n$3.f:int [line 21]\n *&f:int =n$4 [line 21]\n " shape="box"] - 7 -> 6 ; -6 [label="6: DeclStmt \n n$0=*&x:class X & [line 17]\n _=*n$0:class X [line 17]\n n$2=_fun_X_call(n$0:class X &) [line 17]\n *&c:int =n$2 [line 17]\n " shape="box"] + "access_ptr4" -> "access_ptr3" ; +"access_ptr3" [label="3: DeclStmt \n n$0=*&x:class X * [line 22]\n _=*n$0:class X [line 22]\n n$2=_fun_X_call(n$0:class X *) [line 22]\n *&c:int =n$2 [line 22]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit access_ref \n " color=yellow style=filled] + "access_ptr3" -> "access_ptr2" ; +"access_ptr2" [label="2: Exit access_ptr \n " color=yellow style=filled] -4 [label="4: Start access_ref\nFormals: x:class X &\nLocals: c:int f:int \n DECLARE_LOCALS(&return,&c,&f); [line 15]\n " color=yellow style=filled] +"access_ptr1" [label="1: Start access_ptr\nFormals: x:class X *\nLocals: c:int f:int \n DECLARE_LOCALS(&return,&c,&f); [line 20]\n " color=yellow style=filled] - 4 -> 7 ; -3 [label="3: Return Stmt \n n$0=*&this:class X * [line 12]\n n$1=*n$0.f:int [line 12]\n *&return:int =n$1 [line 12]\n " shape="box"] + "access_ptr1" -> "access_ptr4" ; +"X_call3" [label="3: Return Stmt \n n$0=*&this:class X * [line 12]\n n$1=*n$0.f:int [line 12]\n *&return:int =n$1 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit X_call \n " color=yellow style=filled] + "X_call3" -> "X_call2" ; +"X_call2" [label="2: Exit X_call \n " color=yellow style=filled] -1 [label="1: Start X_call\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"X_call1" [label="1: Start X_call\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "X_call1" -> "X_call3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/member_access_from_return.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/member_access_from_return.cpp.dot index 133bcd911..62ba606d4 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/member_access_from_return.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/member_access_from_return.cpp.dot @@ -1,84 +1,84 @@ /* @generated */ digraph iCFG { -22 [label="22: DeclStmt \n n$3=_fun_get_ptr() [line 25]\n n$4=*n$3.f:int [line 25]\n *&f:int =n$4 [line 25]\n " shape="box"] +"__infer_globals_initializer_global3" [label="3: DeclStmt \n _fun_X_X(&#GB$global:class X *) [line 15]\n " shape="box"] - 22 -> 21 ; -21 [label="21: DeclStmt \n n$0=_fun_get_ptr() [line 26]\n _=*n$0:class X [line 26]\n n$2=_fun_X_call(n$0:class X *) [line 26]\n *&c:int =n$2 [line 26]\n " shape="box"] + "__infer_globals_initializer_global3" -> "__infer_globals_initializer_global2" ; +"__infer_globals_initializer_global2" [label="2: Exit __infer_globals_initializer_global \n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit test_ptr \n " color=yellow style=filled] +"__infer_globals_initializer_global1" [label="1: Start __infer_globals_initializer_global\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] -19 [label="19: Start test_ptr\nFormals: \nLocals: c:int f:int \n DECLARE_LOCALS(&return,&c,&f); [line 24]\n " color=yellow style=filled] + "__infer_globals_initializer_global1" -> "__infer_globals_initializer_global3" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] - 19 -> 22 ; -18 [label="18: DeclStmt \n n$3=_fun_get_ref() [line 20]\n n$4=*n$3.f:int [line 20]\n *&f:int =n$4 [line 20]\n " shape="box"] +"X_X1" [label="1: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: DeclStmt \n n$0=_fun_get_ref() [line 21]\n _=*n$0:class X [line 21]\n n$2=_fun_X_call(n$0:class X &) [line 21]\n *&c:int =n$2 [line 21]\n " shape="box"] + "X_X1" -> "X_X2" ; +"get_ptr3" [label="3: Return Stmt \n *&return:class X *=&#GB$global [line 16]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Exit test_ref \n " color=yellow style=filled] + "get_ptr3" -> "get_ptr2" ; +"get_ptr2" [label="2: Exit get_ptr \n " color=yellow style=filled] -15 [label="15: Start test_ref\nFormals: \nLocals: c:int f:int \n DECLARE_LOCALS(&return,&c,&f); [line 19]\n " color=yellow style=filled] +"get_ptr1" [label="1: Start get_ptr\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 15 -> 18 ; -14 [label="14: Return Stmt \n *&return:class X &=&#GB$global [line 17]\n " shape="box"] + "get_ptr1" -> "get_ptr3" ; +"test_ref4" [label="4: DeclStmt \n n$3=_fun_get_ref() [line 20]\n n$4=*n$3.f:int [line 20]\n *&f:int =n$4 [line 20]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit get_ref \n " color=yellow style=filled] + "test_ref4" -> "test_ref3" ; +"test_ref3" [label="3: DeclStmt \n n$0=_fun_get_ref() [line 21]\n _=*n$0:class X [line 21]\n n$2=_fun_X_call(n$0:class X &) [line 21]\n *&c:int =n$2 [line 21]\n " shape="box"] -12 [label="12: Start get_ref\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "test_ref3" -> "test_ref2" ; +"test_ref2" [label="2: Exit test_ref \n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: Return Stmt \n *&return:class X *=&#GB$global [line 16]\n " shape="box"] +"test_ref1" [label="1: Start test_ref\nFormals: \nLocals: c:int f:int \n DECLARE_LOCALS(&return,&c,&f); [line 19]\n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Exit get_ptr \n " color=yellow style=filled] + "test_ref1" -> "test_ref4" ; +"get_ref3" [label="3: Return Stmt \n *&return:class X &=&#GB$global [line 17]\n " shape="box"] -9 [label="9: Start get_ptr\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] + "get_ref3" -> "get_ref2" ; +"get_ref2" [label="2: Exit get_ref \n " color=yellow style=filled] - 9 -> 11 ; -8 [label="8: DeclStmt \n _fun_X_X(&#GB$global:class X *) [line 15]\n " shape="box"] +"get_ref1" [label="1: Start get_ref\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit __infer_globals_initializer_global \n " color=yellow style=filled] + "get_ref1" -> "get_ref3" ; +"test_ptr4" [label="4: DeclStmt \n n$3=_fun_get_ptr() [line 25]\n n$4=*n$3.f:int [line 25]\n *&f:int =n$4 [line 25]\n " shape="box"] -6 [label="6: Start __infer_globals_initializer_global\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] + "test_ptr4" -> "test_ptr3" ; +"test_ptr3" [label="3: DeclStmt \n n$0=_fun_get_ptr() [line 26]\n _=*n$0:class X [line 26]\n n$2=_fun_X_call(n$0:class X *) [line 26]\n *&c:int =n$2 [line 26]\n " shape="box"] - 6 -> 8 ; -5 [label="5: Exit X_X \n " color=yellow style=filled] + "test_ptr3" -> "test_ptr2" ; +"test_ptr2" [label="2: Exit test_ptr \n " color=yellow style=filled] -4 [label="4: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"test_ptr1" [label="1: Start test_ptr\nFormals: \nLocals: c:int f:int \n DECLARE_LOCALS(&return,&c,&f); [line 24]\n " color=yellow style=filled] - 4 -> 5 ; -3 [label="3: Return Stmt \n n$0=*&this:class X * [line 12]\n n$1=*n$0.f:int [line 12]\n *&return:int =n$1 [line 12]\n " shape="box"] + "test_ptr1" -> "test_ptr4" ; +"X_call3" [label="3: Return Stmt \n n$0=*&this:class X * [line 12]\n n$1=*n$0.f:int [line 12]\n *&return:int =n$1 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit X_call \n " color=yellow style=filled] + "X_call3" -> "X_call2" ; +"X_call2" [label="2: Exit X_call \n " color=yellow style=filled] -1 [label="1: Start X_call\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"X_call1" [label="1: Start X_call\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "X_call1" -> "X_call3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/nested_assignment.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/nested_assignment.cpp.dot index 2b7ad4c79..47132a8e8 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/nested_assignment.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/nested_assignment.cpp.dot @@ -1,64 +1,64 @@ /* @generated */ digraph iCFG { -16 [label="16: DeclStmt \n *&a:int =3 [line 23]\n " shape="box"] +"nested5" [label="5: DeclStmt \n *&a:int =3 [line 17]\n " shape="box"] - 16 -> 15 ; -15 [label="15: DeclStmt \n n$3=*&a:int [line 24]\n *&b:int =n$3 [line 24]\n " shape="box"] + "nested5" -> "nested4" ; +"nested4" [label="4: DeclStmt \n *&a:int =4 [line 18]\n *&ref_from_val:int &=&a [line 18]\n " shape="box"] - 15 -> 14 ; -14 [label="14: DeclStmt \n *&b:int =4 [line 28]\n n$2=*&b:int [line 28]\n *&a:int =n$2 [line 28]\n *&ref_from_val:int &=&a [line 28]\n " shape="box"] + "nested4" -> "nested3" ; +"nested3" [label="3: DeclStmt \n n$0=*&ref_from_val:int & [line 19]\n *n$0:int =6 [line 19]\n *&ref_from_ref:int &=n$0 [line 19]\n " shape="box"] - 14 -> 13 ; -13 [label="13: DeclStmt \n n$0=*&ref_from_val:int & [line 29]\n *&b:int =5 [line 29]\n n$1=*&b:int [line 29]\n *n$0:int =n$1 [line 29]\n *&ref_from_ref:int &=n$0 [line 29]\n " shape="box"] + "nested3" -> "nested2" ; +"nested2" [label="2: Exit nested \n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit crazy_nested \n " color=yellow style=filled] +"nested1" [label="1: Start nested\nFormals: \nLocals: ref_from_ref:int & ref_from_val:int & a:int \n DECLARE_LOCALS(&return,&ref_from_ref,&ref_from_val,&a); [line 16]\n " color=yellow style=filled] -11 [label="11: Start crazy_nested\nFormals: \nLocals: ref_from_ref:int & ref_from_val:int & b:int a:int \n DECLARE_LOCALS(&return,&ref_from_ref,&ref_from_val,&b,&a); [line 22]\n " color=yellow style=filled] + "nested1" -> "nested5" ; +"normal5" [label="5: DeclStmt \n *&a:int =3 [line 11]\n " shape="box"] - 11 -> 16 ; -10 [label="10: DeclStmt \n *&a:int =3 [line 17]\n " shape="box"] + "normal5" -> "normal4" ; +"normal4" [label="4: DeclStmt \n *&ref_from_val:int &=&a [line 12]\n " shape="box"] - 10 -> 9 ; -9 [label="9: DeclStmt \n *&a:int =4 [line 18]\n *&ref_from_val:int &=&a [line 18]\n " shape="box"] + "normal4" -> "normal3" ; +"normal3" [label="3: DeclStmt \n n$0=*&ref_from_val:int & [line 13]\n *&ref_from_ref:int &=n$0 [line 13]\n " shape="box"] - 9 -> 8 ; -8 [label="8: DeclStmt \n n$0=*&ref_from_val:int & [line 19]\n *n$0:int =6 [line 19]\n *&ref_from_ref:int &=n$0 [line 19]\n " shape="box"] + "normal3" -> "normal2" ; +"normal2" [label="2: Exit normal \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit nested \n " color=yellow style=filled] +"normal1" [label="1: Start normal\nFormals: \nLocals: ref_from_ref:int & ref_from_val:int & a:int \n DECLARE_LOCALS(&return,&ref_from_ref,&ref_from_val,&a); [line 10]\n " color=yellow style=filled] -6 [label="6: Start nested\nFormals: \nLocals: ref_from_ref:int & ref_from_val:int & a:int \n DECLARE_LOCALS(&return,&ref_from_ref,&ref_from_val,&a); [line 16]\n " color=yellow style=filled] + "normal1" -> "normal5" ; +"crazy_nested6" [label="6: DeclStmt \n *&a:int =3 [line 23]\n " shape="box"] - 6 -> 10 ; -5 [label="5: DeclStmt \n *&a:int =3 [line 11]\n " shape="box"] + "crazy_nested6" -> "crazy_nested5" ; +"crazy_nested5" [label="5: DeclStmt \n n$3=*&a:int [line 24]\n *&b:int =n$3 [line 24]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n *&ref_from_val:int &=&a [line 12]\n " shape="box"] + "crazy_nested5" -> "crazy_nested4" ; +"crazy_nested4" [label="4: DeclStmt \n *&b:int =4 [line 28]\n n$2=*&b:int [line 28]\n *&a:int =n$2 [line 28]\n *&ref_from_val:int &=&a [line 28]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n n$0=*&ref_from_val:int & [line 13]\n *&ref_from_ref:int &=n$0 [line 13]\n " shape="box"] + "crazy_nested4" -> "crazy_nested3" ; +"crazy_nested3" [label="3: DeclStmt \n n$0=*&ref_from_val:int & [line 29]\n *&b:int =5 [line 29]\n n$1=*&b:int [line 29]\n *n$0:int =n$1 [line 29]\n *&ref_from_ref:int &=n$0 [line 29]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit normal \n " color=yellow style=filled] + "crazy_nested3" -> "crazy_nested2" ; +"crazy_nested2" [label="2: Exit crazy_nested \n " color=yellow style=filled] -1 [label="1: Start normal\nFormals: \nLocals: ref_from_ref:int & ref_from_val:int & a:int \n DECLARE_LOCALS(&return,&ref_from_ref,&ref_from_val,&a); [line 10]\n " color=yellow style=filled] +"crazy_nested1" [label="1: Start crazy_nested\nFormals: \nLocals: ref_from_ref:int & ref_from_val:int & b:int a:int \n DECLARE_LOCALS(&return,&ref_from_ref,&ref_from_val,&b,&a); [line 22]\n " color=yellow style=filled] - 1 -> 5 ; + "crazy_nested1" -> "crazy_nested6" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/reference_field.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/reference_field.cpp.dot index bc982b1f3..ce13d14cf 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/reference_field.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/reference_field.cpp.dot @@ -1,456 +1,456 @@ /* @generated */ digraph iCFG { -119 [label="119: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 139]\n " shape="box"] +"reference_field::val_getI_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 139]\n " shape="box"] - 119 -> 118 ; -118 [label="118: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 140]\n " shape="box"] + "reference_field::val_getI_div07" -> "reference_field::val_getI_div06" ; +"reference_field::val_getI_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 140]\n " shape="box"] - 118 -> 117 ; -117 [label="117: DeclStmt \n _fun_reference_field::Val_Val(&r:class reference_field::Val *,&x:class reference_field::X &) [line 141]\n " shape="box"] + "reference_field::val_getI_div06" -> "reference_field::val_getI_div05" ; +"reference_field::val_getI_div05" [label="5: DeclStmt \n _fun_reference_field::Val_Val(&r:class reference_field::Val *,&x:class reference_field::X &) [line 141]\n " shape="box"] - 117 -> 116 ; -116 [label="116: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 142]\n " shape="box"] + "reference_field::val_getI_div05" -> "reference_field::val_getI_div04" ; +"reference_field::val_getI_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 142]\n " shape="box"] - 116 -> 115 ; -115 [label="115: Return Stmt \n _=*&r:class reference_field::Val [line 143]\n n$1=_fun_reference_field::Val_getI(&r:class reference_field::Val &) [line 143]\n *&return:int =(1 / n$1) [line 143]\n " shape="box"] + "reference_field::val_getI_div04" -> "reference_field::val_getI_div03" ; +"reference_field::val_getI_div03" [label="3: Return Stmt \n _=*&r:class reference_field::Val [line 143]\n n$1=_fun_reference_field::Val_getI(&r:class reference_field::Val &) [line 143]\n *&return:int =(1 / n$1) [line 143]\n " shape="box"] - 115 -> 114 ; -114 [label="114: Exit reference_field::val_getI_div0 \n " color=yellow style=filled] + "reference_field::val_getI_div03" -> "reference_field::val_getI_div02" ; +"reference_field::val_getI_div02" [label="2: Exit reference_field::val_getI_div0 \n " color=yellow style=filled] -113 [label="113: Start reference_field::val_getI_div0\nFormals: \nLocals: r:class reference_field::Val x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 138]\n " color=yellow style=filled] +"reference_field::val_getI_div01" [label="1: Start reference_field::val_getI_div0\nFormals: \nLocals: r:class reference_field::Val x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 138]\n " color=yellow style=filled] - 113 -> 119 ; -112 [label="112: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 131]\n " shape="box"] + "reference_field::val_getI_div01" -> "reference_field::val_getI_div07" ; +"reference_field::val_F_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 115]\n " shape="box"] - 112 -> 111 ; -111 [label="111: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 132]\n " shape="box"] + "reference_field::val_F_div07" -> "reference_field::val_F_div06" ; +"reference_field::val_F_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 116]\n " shape="box"] - 111 -> 110 ; -110 [label="110: DeclStmt \n _fun_reference_field::Val_Val(&r:class reference_field::Val *,&x:class reference_field::X &) [line 133]\n " shape="box"] + "reference_field::val_F_div06" -> "reference_field::val_F_div05" ; +"reference_field::val_F_div05" [label="5: DeclStmt \n _fun_reference_field::Val_Val(&r:class reference_field::Val *,&x:class reference_field::X &) [line 117]\n " shape="box"] - 110 -> 109 ; -109 [label="109: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 134]\n " shape="box"] + "reference_field::val_F_div05" -> "reference_field::val_F_div04" ; +"reference_field::val_F_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 118]\n " shape="box"] - 109 -> 108 ; -108 [label="108: Return Stmt \n _=*&r:class reference_field::Val [line 135]\n n$1=_fun_reference_field::Val_getF(&r:class reference_field::Val &) [line 135]\n *&return:int =(1 / n$1) [line 135]\n " shape="box"] + "reference_field::val_F_div04" -> "reference_field::val_F_div03" ; +"reference_field::val_F_div03" [label="3: Return Stmt \n n$0=*&r.x.f:int [line 119]\n *&return:int =(1 / n$0) [line 119]\n " shape="box"] - 108 -> 107 ; -107 [label="107: Exit reference_field::val_getF_div0 \n " color=yellow style=filled] + "reference_field::val_F_div03" -> "reference_field::val_F_div02" ; +"reference_field::val_F_div02" [label="2: Exit reference_field::val_F_div0 \n " color=yellow style=filled] -106 [label="106: Start reference_field::val_getF_div0\nFormals: \nLocals: r:class reference_field::Val x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 130]\n " color=yellow style=filled] +"reference_field::val_F_div01" [label="1: Start reference_field::val_F_div0\nFormals: \nLocals: r:class reference_field::Val x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 114]\n " color=yellow style=filled] - 106 -> 112 ; -105 [label="105: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 123]\n " shape="box"] + "reference_field::val_F_div01" -> "reference_field::val_F_div07" ; +"reference_field::ref_I_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 57]\n " shape="box"] - 105 -> 104 ; -104 [label="104: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 124]\n " shape="box"] + "reference_field::ref_I_div07" -> "reference_field::ref_I_div06" ; +"reference_field::ref_I_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 58]\n " shape="box"] - 104 -> 103 ; -103 [label="103: DeclStmt \n _fun_reference_field::Val_Val(&r:class reference_field::Val *,&x:class reference_field::X &) [line 125]\n " shape="box"] + "reference_field::ref_I_div06" -> "reference_field::ref_I_div05" ; +"reference_field::ref_I_div05" [label="5: DeclStmt \n _fun_reference_field::Ref_Ref(&r:class reference_field::Ref *,&x:class reference_field::X &) [line 59]\n " shape="box"] - 103 -> 102 ; -102 [label="102: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 126]\n " shape="box"] + "reference_field::ref_I_div05" -> "reference_field::ref_I_div04" ; +"reference_field::ref_I_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 60]\n " shape="box"] - 102 -> 101 ; -101 [label="101: Return Stmt \n n$0=*&r.i:int [line 127]\n *&return:int =(1 / n$0) [line 127]\n " shape="box"] + "reference_field::ref_I_div04" -> "reference_field::ref_I_div03" ; +"reference_field::ref_I_div03" [label="3: Return Stmt \n n$0=*&r.i:int & [line 61]\n n$1=*n$0:int & [line 61]\n *&return:int =(1 / n$1) [line 61]\n " shape="box"] - 101 -> 100 ; -100 [label="100: Exit reference_field::val_I_div0 \n " color=yellow style=filled] + "reference_field::ref_I_div03" -> "reference_field::ref_I_div02" ; +"reference_field::ref_I_div02" [label="2: Exit reference_field::ref_I_div0 \n " color=yellow style=filled] -99 [label="99: Start reference_field::val_I_div0\nFormals: \nLocals: r:class reference_field::Val x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 122]\n " color=yellow style=filled] +"reference_field::ref_I_div01" [label="1: Start reference_field::ref_I_div0\nFormals: \nLocals: r:class reference_field::Ref x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 56]\n " color=yellow style=filled] - 99 -> 105 ; -98 [label="98: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 115]\n " shape="box"] + "reference_field::ref_I_div01" -> "reference_field::ref_I_div07" ; +"reference_field::val_getF_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 131]\n " shape="box"] - 98 -> 97 ; -97 [label="97: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 116]\n " shape="box"] + "reference_field::val_getF_div07" -> "reference_field::val_getF_div06" ; +"reference_field::val_getF_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 132]\n " shape="box"] - 97 -> 96 ; -96 [label="96: DeclStmt \n _fun_reference_field::Val_Val(&r:class reference_field::Val *,&x:class reference_field::X &) [line 117]\n " shape="box"] + "reference_field::val_getF_div06" -> "reference_field::val_getF_div05" ; +"reference_field::val_getF_div05" [label="5: DeclStmt \n _fun_reference_field::Val_Val(&r:class reference_field::Val *,&x:class reference_field::X &) [line 133]\n " shape="box"] - 96 -> 95 ; -95 [label="95: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 118]\n " shape="box"] + "reference_field::val_getF_div05" -> "reference_field::val_getF_div04" ; +"reference_field::val_getF_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 134]\n " shape="box"] - 95 -> 94 ; -94 [label="94: Return Stmt \n n$0=*&r.x.f:int [line 119]\n *&return:int =(1 / n$0) [line 119]\n " shape="box"] + "reference_field::val_getF_div04" -> "reference_field::val_getF_div03" ; +"reference_field::val_getF_div03" [label="3: Return Stmt \n _=*&r:class reference_field::Val [line 135]\n n$1=_fun_reference_field::Val_getF(&r:class reference_field::Val &) [line 135]\n *&return:int =(1 / n$1) [line 135]\n " shape="box"] - 94 -> 93 ; -93 [label="93: Exit reference_field::val_F_div0 \n " color=yellow style=filled] + "reference_field::val_getF_div03" -> "reference_field::val_getF_div02" ; +"reference_field::val_getF_div02" [label="2: Exit reference_field::val_getF_div0 \n " color=yellow style=filled] -92 [label="92: Start reference_field::val_F_div0\nFormals: \nLocals: r:class reference_field::Val x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 114]\n " color=yellow style=filled] +"reference_field::val_getF_div01" [label="1: Start reference_field::val_getF_div0\nFormals: \nLocals: r:class reference_field::Val x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 130]\n " color=yellow style=filled] - 92 -> 98 ; -91 [label="91: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 106]\n " shape="box"] + "reference_field::val_getF_div01" -> "reference_field::val_getF_div07" ; +"reference_field::Ptr_getI3" [label="3: Return Stmt \n n$0=*&this:class reference_field::Ptr * [line 36]\n n$1=*n$0.i:int * [line 36]\n n$2=*n$1:int [line 36]\n *&return:int =n$2 [line 36]\n " shape="box"] - 91 -> 90 ; -90 [label="90: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 107]\n " shape="box"] + "reference_field::Ptr_getI3" -> "reference_field::Ptr_getI2" ; +"reference_field::Ptr_getI2" [label="2: Exit reference_field::Ptr_getI \n " color=yellow style=filled] - 90 -> 89 ; -89 [label="89: DeclStmt \n _fun_reference_field::Ptr_Ptr(&r:class reference_field::Ptr *,&x:class reference_field::X &) [line 108]\n " shape="box"] +"reference_field::Ptr_getI1" [label="1: Start reference_field::Ptr_getI\nFormals: this:class reference_field::Ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] - 89 -> 88 ; -88 [label="88: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 109]\n " shape="box"] + "reference_field::Ptr_getI1" -> "reference_field::Ptr_getI3" ; +"reference_field::ptr_I_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 90]\n " shape="box"] - 88 -> 87 ; -87 [label="87: Return Stmt \n _=*&r:class reference_field::Ptr [line 110]\n n$1=_fun_reference_field::Ptr_getI(&r:class reference_field::Ptr &) [line 110]\n *&return:int =(1 / n$1) [line 110]\n " shape="box"] + "reference_field::ptr_I_div07" -> "reference_field::ptr_I_div06" ; +"reference_field::ptr_I_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 91]\n " shape="box"] - 87 -> 86 ; -86 [label="86: Exit reference_field::ptr_getI_div0 \n " color=yellow style=filled] + "reference_field::ptr_I_div06" -> "reference_field::ptr_I_div05" ; +"reference_field::ptr_I_div05" [label="5: DeclStmt \n _fun_reference_field::Ptr_Ptr(&r:class reference_field::Ptr *,&x:class reference_field::X &) [line 92]\n " shape="box"] -85 [label="85: Start reference_field::ptr_getI_div0\nFormals: \nLocals: r:class reference_field::Ptr x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 105]\n " color=yellow style=filled] + "reference_field::ptr_I_div05" -> "reference_field::ptr_I_div04" ; +"reference_field::ptr_I_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 93]\n " shape="box"] - 85 -> 91 ; -84 [label="84: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 98]\n " shape="box"] + "reference_field::ptr_I_div04" -> "reference_field::ptr_I_div03" ; +"reference_field::ptr_I_div03" [label="3: Return Stmt \n n$0=*&r.i:int * [line 94]\n n$1=*n$0:int [line 94]\n *&return:int =(1 / n$1) [line 94]\n " shape="box"] - 84 -> 83 ; -83 [label="83: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 99]\n " shape="box"] + "reference_field::ptr_I_div03" -> "reference_field::ptr_I_div02" ; +"reference_field::ptr_I_div02" [label="2: Exit reference_field::ptr_I_div0 \n " color=yellow style=filled] - 83 -> 82 ; -82 [label="82: DeclStmt \n _fun_reference_field::Ptr_Ptr(&r:class reference_field::Ptr *,&x:class reference_field::X &) [line 100]\n " shape="box"] +"reference_field::ptr_I_div01" [label="1: Start reference_field::ptr_I_div0\nFormals: \nLocals: r:class reference_field::Ptr x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 89]\n " color=yellow style=filled] - 82 -> 81 ; -81 [label="81: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 101]\n " shape="box"] + "reference_field::ptr_I_div01" -> "reference_field::ptr_I_div07" ; +"reference_field::ref_F_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 49]\n " shape="box"] - 81 -> 80 ; -80 [label="80: Return Stmt \n _=*&r:class reference_field::Ptr [line 102]\n n$1=_fun_reference_field::Ptr_getF(&r:class reference_field::Ptr &) [line 102]\n *&return:int =(1 / n$1) [line 102]\n " shape="box"] + "reference_field::ref_F_div07" -> "reference_field::ref_F_div06" ; +"reference_field::ref_F_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 50]\n " shape="box"] - 80 -> 79 ; -79 [label="79: Exit reference_field::ptr_getF_div0 \n " color=yellow style=filled] + "reference_field::ref_F_div06" -> "reference_field::ref_F_div05" ; +"reference_field::ref_F_div05" [label="5: DeclStmt \n _fun_reference_field::Ref_Ref(&r:class reference_field::Ref *,&x:class reference_field::X &) [line 51]\n " shape="box"] -78 [label="78: Start reference_field::ptr_getF_div0\nFormals: \nLocals: r:class reference_field::Ptr x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 97]\n " color=yellow style=filled] + "reference_field::ref_F_div05" -> "reference_field::ref_F_div04" ; +"reference_field::ref_F_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 52]\n " shape="box"] - 78 -> 84 ; -77 [label="77: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 90]\n " shape="box"] + "reference_field::ref_F_div04" -> "reference_field::ref_F_div03" ; +"reference_field::ref_F_div03" [label="3: Return Stmt \n n$0=*&r.x:class reference_field::X & [line 53]\n n$1=*n$0.f:int [line 53]\n *&return:int =(1 / n$1) [line 53]\n " shape="box"] - 77 -> 76 ; -76 [label="76: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 91]\n " shape="box"] + "reference_field::ref_F_div03" -> "reference_field::ref_F_div02" ; +"reference_field::ref_F_div02" [label="2: Exit reference_field::ref_F_div0 \n " color=yellow style=filled] - 76 -> 75 ; -75 [label="75: DeclStmt \n _fun_reference_field::Ptr_Ptr(&r:class reference_field::Ptr *,&x:class reference_field::X &) [line 92]\n " shape="box"] +"reference_field::ref_F_div01" [label="1: Start reference_field::ref_F_div0\nFormals: \nLocals: r:class reference_field::Ref x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 48]\n " color=yellow style=filled] - 75 -> 74 ; -74 [label="74: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 93]\n " shape="box"] + "reference_field::ref_F_div01" -> "reference_field::ref_F_div07" ; +"reference_field::Val_getF3" [label="3: Return Stmt \n n$0=*&this:class reference_field::Val * [line 43]\n n$1=*n$0.x.f:int [line 43]\n *&return:int =n$1 [line 43]\n " shape="box"] - 74 -> 73 ; -73 [label="73: Return Stmt \n n$0=*&r.i:int * [line 94]\n n$1=*n$0:int [line 94]\n *&return:int =(1 / n$1) [line 94]\n " shape="box"] + "reference_field::Val_getF3" -> "reference_field::Val_getF2" ; +"reference_field::Val_getF2" [label="2: Exit reference_field::Val_getF \n " color=yellow style=filled] - 73 -> 72 ; -72 [label="72: Exit reference_field::ptr_I_div0 \n " color=yellow style=filled] +"reference_field::Val_getF1" [label="1: Start reference_field::Val_getF\nFormals: this:class reference_field::Val *\nLocals: \n DECLARE_LOCALS(&return); [line 43]\n " color=yellow style=filled] -71 [label="71: Start reference_field::ptr_I_div0\nFormals: \nLocals: r:class reference_field::Ptr x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 89]\n " color=yellow style=filled] + "reference_field::Val_getF1" -> "reference_field::Val_getF3" ; +"reference_field::Ptr_Ptr4" [label="4: Constructor Init \n n$3=*&this:class reference_field::Ptr * [line 34]\n n$4=*&r_:class reference_field::X & [line 34]\n *n$3.x:class reference_field::X *=n$4 [line 34]\n " shape="box"] - 71 -> 77 ; -70 [label="70: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 82]\n " shape="box"] + "reference_field::Ptr_Ptr4" -> "reference_field::Ptr_Ptr3" ; +"reference_field::Ptr_Ptr3" [label="3: Constructor Init \n n$0=*&this:class reference_field::Ptr * [line 34]\n n$1=*&this:class reference_field::Ptr * [line 34]\n n$2=*n$1.x:class reference_field::X * [line 34]\n *n$0.i:int *=n$2.f [line 34]\n " shape="box"] - 70 -> 69 ; -69 [label="69: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 83]\n " shape="box"] + "reference_field::Ptr_Ptr3" -> "reference_field::Ptr_Ptr2" ; +"reference_field::Ptr_Ptr2" [label="2: Exit reference_field::Ptr_Ptr \n " color=yellow style=filled] - 69 -> 68 ; -68 [label="68: DeclStmt \n _fun_reference_field::Ptr_Ptr(&r:class reference_field::Ptr *,&x:class reference_field::X &) [line 84]\n " shape="box"] +"reference_field::Ptr_Ptr1" [label="1: Start reference_field::Ptr_Ptr\nFormals: this:class reference_field::Ptr * r_:class reference_field::X &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 68 -> 67 ; -67 [label="67: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 85]\n " shape="box"] + "reference_field::Ptr_Ptr1" -> "reference_field::Ptr_Ptr4" ; +"reference_field::Ref_getI3" [label="3: Return Stmt \n n$0=*&this:class reference_field::Ref * [line 28]\n n$1=*n$0.i:int & [line 28]\n n$2=*n$1:int & [line 28]\n *&return:int =n$2 [line 28]\n " shape="box"] - 67 -> 66 ; -66 [label="66: Return Stmt \n n$0=*&r.x:class reference_field::X * [line 86]\n n$1=*n$0.f:int [line 86]\n *&return:int =(1 / n$1) [line 86]\n " shape="box"] + "reference_field::Ref_getI3" -> "reference_field::Ref_getI2" ; +"reference_field::Ref_getI2" [label="2: Exit reference_field::Ref_getI \n " color=yellow style=filled] - 66 -> 65 ; -65 [label="65: Exit reference_field::ptr_F_div0 \n " color=yellow style=filled] +"reference_field::Ref_getI1" [label="1: Start reference_field::Ref_getI\nFormals: this:class reference_field::Ref *\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] -64 [label="64: Start reference_field::ptr_F_div0\nFormals: \nLocals: r:class reference_field::Ptr x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 81]\n " color=yellow style=filled] + "reference_field::Ref_getI1" -> "reference_field::Ref_getI3" ; +"reference_field::val_I_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 123]\n " shape="box"] - 64 -> 70 ; -63 [label="63: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 73]\n " shape="box"] + "reference_field::val_I_div07" -> "reference_field::val_I_div06" ; +"reference_field::val_I_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 124]\n " shape="box"] - 63 -> 62 ; -62 [label="62: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 74]\n " shape="box"] + "reference_field::val_I_div06" -> "reference_field::val_I_div05" ; +"reference_field::val_I_div05" [label="5: DeclStmt \n _fun_reference_field::Val_Val(&r:class reference_field::Val *,&x:class reference_field::X &) [line 125]\n " shape="box"] - 62 -> 61 ; -61 [label="61: DeclStmt \n _fun_reference_field::Ref_Ref(&r:class reference_field::Ref *,&x:class reference_field::X &) [line 75]\n " shape="box"] + "reference_field::val_I_div05" -> "reference_field::val_I_div04" ; +"reference_field::val_I_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 126]\n " shape="box"] - 61 -> 60 ; -60 [label="60: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 76]\n " shape="box"] + "reference_field::val_I_div04" -> "reference_field::val_I_div03" ; +"reference_field::val_I_div03" [label="3: Return Stmt \n n$0=*&r.i:int [line 127]\n *&return:int =(1 / n$0) [line 127]\n " shape="box"] - 60 -> 59 ; -59 [label="59: Return Stmt \n _=*&r:class reference_field::Ref [line 77]\n n$1=_fun_reference_field::Ref_getI(&r:class reference_field::Ref &) [line 77]\n *&return:int =(1 / n$1) [line 77]\n " shape="box"] + "reference_field::val_I_div03" -> "reference_field::val_I_div02" ; +"reference_field::val_I_div02" [label="2: Exit reference_field::val_I_div0 \n " color=yellow style=filled] - 59 -> 58 ; -58 [label="58: Exit reference_field::ref_getI_div0 \n " color=yellow style=filled] +"reference_field::val_I_div01" [label="1: Start reference_field::val_I_div0\nFormals: \nLocals: r:class reference_field::Val x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 122]\n " color=yellow style=filled] -57 [label="57: Start reference_field::ref_getI_div0\nFormals: \nLocals: r:class reference_field::Ref x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 72]\n " color=yellow style=filled] + "reference_field::val_I_div01" -> "reference_field::val_I_div07" ; +"reference_field::Ptr_getF3" [label="3: Return Stmt \n n$0=*&this:class reference_field::Ptr * [line 35]\n n$1=*n$0.x:class reference_field::X * [line 35]\n n$2=*n$1.f:int [line 35]\n *&return:int =n$2 [line 35]\n " shape="box"] - 57 -> 63 ; -56 [label="56: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 65]\n " shape="box"] + "reference_field::Ptr_getF3" -> "reference_field::Ptr_getF2" ; +"reference_field::Ptr_getF2" [label="2: Exit reference_field::Ptr_getF \n " color=yellow style=filled] - 56 -> 55 ; -55 [label="55: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 66]\n " shape="box"] +"reference_field::Ptr_getF1" [label="1: Start reference_field::Ptr_getF\nFormals: this:class reference_field::Ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] - 55 -> 54 ; -54 [label="54: DeclStmt \n _fun_reference_field::Ref_Ref(&r:class reference_field::Ref *,&x:class reference_field::X &) [line 67]\n " shape="box"] + "reference_field::Ptr_getF1" -> "reference_field::Ptr_getF3" ; +"reference_field::Val_getI3" [label="3: Return Stmt \n n$0=*&this:class reference_field::Val * [line 44]\n n$1=*n$0.i:int [line 44]\n *&return:int =n$1 [line 44]\n " shape="box"] - 54 -> 53 ; -53 [label="53: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 68]\n " shape="box"] + "reference_field::Val_getI3" -> "reference_field::Val_getI2" ; +"reference_field::Val_getI2" [label="2: Exit reference_field::Val_getI \n " color=yellow style=filled] - 53 -> 52 ; -52 [label="52: Return Stmt \n _=*&r:class reference_field::Ref [line 69]\n n$1=_fun_reference_field::Ref_getF(&r:class reference_field::Ref &) [line 69]\n *&return:int =(1 / n$1) [line 69]\n " shape="box"] +"reference_field::Val_getI1" [label="1: Start reference_field::Val_getI\nFormals: this:class reference_field::Val *\nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] - 52 -> 51 ; -51 [label="51: Exit reference_field::ref_getF_div0 \n " color=yellow style=filled] + "reference_field::Val_getI1" -> "reference_field::Val_getI3" ; +"reference_field::X_X3" [label="3: Constructor Init \n n$0=*&this:class reference_field::X * [line 12]\n n$1=*&__param_0:class reference_field::X & [line 12]\n n$2=*n$1.f:int [line 12]\n *n$0.f:int =n$2 [line 12]\n " shape="box"] -50 [label="50: Start reference_field::ref_getF_div0\nFormals: \nLocals: r:class reference_field::Ref x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 64]\n " color=yellow style=filled] + "reference_field::X_X3" -> "reference_field::X_X2" ; +"reference_field::X_X2" [label="2: Exit reference_field::X_X \n " color=yellow style=filled] - 50 -> 56 ; -49 [label="49: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 57]\n " shape="box"] +"reference_field::X_X1" [label="1: Start reference_field::X_X\nFormals: this:class reference_field::X * __param_0:class reference_field::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 49 -> 48 ; -48 [label="48: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 58]\n " shape="box"] + "reference_field::X_X1" -> "reference_field::X_X3" ; +"reference_field::Ref_Ref4" [label="4: Constructor Init \n n$3=*&this:class reference_field::Ref * [line 26]\n n$4=*&r_:class reference_field::X & [line 26]\n *n$3.x:class reference_field::X &=n$4 [line 26]\n " shape="box"] - 48 -> 47 ; -47 [label="47: DeclStmt \n _fun_reference_field::Ref_Ref(&r:class reference_field::Ref *,&x:class reference_field::X &) [line 59]\n " shape="box"] + "reference_field::Ref_Ref4" -> "reference_field::Ref_Ref3" ; +"reference_field::Ref_Ref3" [label="3: Constructor Init \n n$0=*&this:class reference_field::Ref * [line 26]\n n$1=*&this:class reference_field::Ref * [line 26]\n n$2=*n$1.x:class reference_field::X & [line 26]\n *n$0.i:int &=n$2.f [line 26]\n " shape="box"] - 47 -> 46 ; -46 [label="46: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 60]\n " shape="box"] + "reference_field::Ref_Ref3" -> "reference_field::Ref_Ref2" ; +"reference_field::Ref_Ref2" [label="2: Exit reference_field::Ref_Ref \n " color=yellow style=filled] - 46 -> 45 ; -45 [label="45: Return Stmt \n n$0=*&r.i:int & [line 61]\n n$1=*n$0:int & [line 61]\n *&return:int =(1 / n$1) [line 61]\n " shape="box"] +"reference_field::Ref_Ref1" [label="1: Start reference_field::Ref_Ref\nFormals: this:class reference_field::Ref * r_:class reference_field::X &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 45 -> 44 ; -44 [label="44: Exit reference_field::ref_I_div0 \n " color=yellow style=filled] + "reference_field::Ref_Ref1" -> "reference_field::Ref_Ref4" ; +"reference_field::Val_Val4" [label="4: Constructor Init \n n$3=*&this:class reference_field::Val * [line 42]\n n$4=*&r_:class reference_field::X & [line 42]\n _fun_reference_field::X_X(n$3.x:class reference_field::X *,n$4:class reference_field::X &) [line 42]\n " shape="box"] -43 [label="43: Start reference_field::ref_I_div0\nFormals: \nLocals: r:class reference_field::Ref x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 56]\n " color=yellow style=filled] + "reference_field::Val_Val4" -> "reference_field::Val_Val3" ; +"reference_field::Val_Val3" [label="3: Constructor Init \n n$0=*&this:class reference_field::Val * [line 42]\n n$1=*&this:class reference_field::Val * [line 42]\n n$2=*n$1.x.f:int [line 42]\n *n$0.i:int =n$2 [line 42]\n " shape="box"] - 43 -> 49 ; -42 [label="42: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 49]\n " shape="box"] + "reference_field::Val_Val3" -> "reference_field::Val_Val2" ; +"reference_field::Val_Val2" [label="2: Exit reference_field::Val_Val \n " color=yellow style=filled] - 42 -> 41 ; -41 [label="41: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 50]\n " shape="box"] +"reference_field::Val_Val1" [label="1: Start reference_field::Val_Val\nFormals: this:class reference_field::Val * r_:class reference_field::X &\nLocals: \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] - 41 -> 40 ; -40 [label="40: DeclStmt \n _fun_reference_field::Ref_Ref(&r:class reference_field::Ref *,&x:class reference_field::X &) [line 51]\n " shape="box"] + "reference_field::Val_Val1" -> "reference_field::Val_Val4" ; +"reference_field::Ref_getF3" [label="3: Return Stmt \n n$0=*&this:class reference_field::Ref * [line 27]\n n$1=*n$0.x:class reference_field::X & [line 27]\n n$2=*n$1.f:int [line 27]\n *&return:int =n$2 [line 27]\n " shape="box"] - 40 -> 39 ; -39 [label="39: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 52]\n " shape="box"] + "reference_field::Ref_getF3" -> "reference_field::Ref_getF2" ; +"reference_field::Ref_getF2" [label="2: Exit reference_field::Ref_getF \n " color=yellow style=filled] - 39 -> 38 ; -38 [label="38: Return Stmt \n n$0=*&r.x:class reference_field::X & [line 53]\n n$1=*n$0.f:int [line 53]\n *&return:int =(1 / n$1) [line 53]\n " shape="box"] +"reference_field::Ref_getF1" [label="1: Start reference_field::Ref_getF\nFormals: this:class reference_field::Ref *\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 38 -> 37 ; -37 [label="37: Exit reference_field::ref_F_div0 \n " color=yellow style=filled] + "reference_field::Ref_getF1" -> "reference_field::Ref_getF3" ; +"reference_field::ptr_getI_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 106]\n " shape="box"] -36 [label="36: Start reference_field::ref_F_div0\nFormals: \nLocals: r:class reference_field::Ref x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 48]\n " color=yellow style=filled] + "reference_field::ptr_getI_div07" -> "reference_field::ptr_getI_div06" ; +"reference_field::ptr_getI_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 107]\n " shape="box"] - 36 -> 42 ; -35 [label="35: Return Stmt \n n$0=*&this:class reference_field::Val * [line 44]\n n$1=*n$0.i:int [line 44]\n *&return:int =n$1 [line 44]\n " shape="box"] + "reference_field::ptr_getI_div06" -> "reference_field::ptr_getI_div05" ; +"reference_field::ptr_getI_div05" [label="5: DeclStmt \n _fun_reference_field::Ptr_Ptr(&r:class reference_field::Ptr *,&x:class reference_field::X &) [line 108]\n " shape="box"] - 35 -> 34 ; -34 [label="34: Exit reference_field::Val_getI \n " color=yellow style=filled] + "reference_field::ptr_getI_div05" -> "reference_field::ptr_getI_div04" ; +"reference_field::ptr_getI_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 109]\n " shape="box"] -33 [label="33: Start reference_field::Val_getI\nFormals: this:class reference_field::Val *\nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] + "reference_field::ptr_getI_div04" -> "reference_field::ptr_getI_div03" ; +"reference_field::ptr_getI_div03" [label="3: Return Stmt \n _=*&r:class reference_field::Ptr [line 110]\n n$1=_fun_reference_field::Ptr_getI(&r:class reference_field::Ptr &) [line 110]\n *&return:int =(1 / n$1) [line 110]\n " shape="box"] - 33 -> 35 ; -32 [label="32: Return Stmt \n n$0=*&this:class reference_field::Val * [line 43]\n n$1=*n$0.x.f:int [line 43]\n *&return:int =n$1 [line 43]\n " shape="box"] + "reference_field::ptr_getI_div03" -> "reference_field::ptr_getI_div02" ; +"reference_field::ptr_getI_div02" [label="2: Exit reference_field::ptr_getI_div0 \n " color=yellow style=filled] - 32 -> 31 ; -31 [label="31: Exit reference_field::Val_getF \n " color=yellow style=filled] +"reference_field::ptr_getI_div01" [label="1: Start reference_field::ptr_getI_div0\nFormals: \nLocals: r:class reference_field::Ptr x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 105]\n " color=yellow style=filled] -30 [label="30: Start reference_field::Val_getF\nFormals: this:class reference_field::Val *\nLocals: \n DECLARE_LOCALS(&return); [line 43]\n " color=yellow style=filled] + "reference_field::ptr_getI_div01" -> "reference_field::ptr_getI_div07" ; +"reference_field::ptr_F_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 82]\n " shape="box"] - 30 -> 32 ; -29 [label="29: Constructor Init \n n$3=*&this:class reference_field::Val * [line 42]\n n$4=*&r_:class reference_field::X & [line 42]\n _fun_reference_field::X_X(n$3.x:class reference_field::X *,n$4:class reference_field::X &) [line 42]\n " shape="box"] + "reference_field::ptr_F_div07" -> "reference_field::ptr_F_div06" ; +"reference_field::ptr_F_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 83]\n " shape="box"] - 29 -> 28 ; -28 [label="28: Constructor Init \n n$0=*&this:class reference_field::Val * [line 42]\n n$1=*&this:class reference_field::Val * [line 42]\n n$2=*n$1.x.f:int [line 42]\n *n$0.i:int =n$2 [line 42]\n " shape="box"] + "reference_field::ptr_F_div06" -> "reference_field::ptr_F_div05" ; +"reference_field::ptr_F_div05" [label="5: DeclStmt \n _fun_reference_field::Ptr_Ptr(&r:class reference_field::Ptr *,&x:class reference_field::X &) [line 84]\n " shape="box"] - 28 -> 27 ; -27 [label="27: Exit reference_field::Val_Val \n " color=yellow style=filled] + "reference_field::ptr_F_div05" -> "reference_field::ptr_F_div04" ; +"reference_field::ptr_F_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 85]\n " shape="box"] -26 [label="26: Start reference_field::Val_Val\nFormals: this:class reference_field::Val * r_:class reference_field::X &\nLocals: \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] + "reference_field::ptr_F_div04" -> "reference_field::ptr_F_div03" ; +"reference_field::ptr_F_div03" [label="3: Return Stmt \n n$0=*&r.x:class reference_field::X * [line 86]\n n$1=*n$0.f:int [line 86]\n *&return:int =(1 / n$1) [line 86]\n " shape="box"] - 26 -> 29 ; -25 [label="25: Return Stmt \n n$0=*&this:class reference_field::Ptr * [line 36]\n n$1=*n$0.i:int * [line 36]\n n$2=*n$1:int [line 36]\n *&return:int =n$2 [line 36]\n " shape="box"] + "reference_field::ptr_F_div03" -> "reference_field::ptr_F_div02" ; +"reference_field::ptr_F_div02" [label="2: Exit reference_field::ptr_F_div0 \n " color=yellow style=filled] - 25 -> 24 ; -24 [label="24: Exit reference_field::Ptr_getI \n " color=yellow style=filled] +"reference_field::ptr_F_div01" [label="1: Start reference_field::ptr_F_div0\nFormals: \nLocals: r:class reference_field::Ptr x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 81]\n " color=yellow style=filled] -23 [label="23: Start reference_field::Ptr_getI\nFormals: this:class reference_field::Ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] + "reference_field::ptr_F_div01" -> "reference_field::ptr_F_div07" ; +"reference_field::ref_getI_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 73]\n " shape="box"] - 23 -> 25 ; -22 [label="22: Return Stmt \n n$0=*&this:class reference_field::Ptr * [line 35]\n n$1=*n$0.x:class reference_field::X * [line 35]\n n$2=*n$1.f:int [line 35]\n *&return:int =n$2 [line 35]\n " shape="box"] + "reference_field::ref_getI_div07" -> "reference_field::ref_getI_div06" ; +"reference_field::ref_getI_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 74]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Exit reference_field::Ptr_getF \n " color=yellow style=filled] + "reference_field::ref_getI_div06" -> "reference_field::ref_getI_div05" ; +"reference_field::ref_getI_div05" [label="5: DeclStmt \n _fun_reference_field::Ref_Ref(&r:class reference_field::Ref *,&x:class reference_field::X &) [line 75]\n " shape="box"] -20 [label="20: Start reference_field::Ptr_getF\nFormals: this:class reference_field::Ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] + "reference_field::ref_getI_div05" -> "reference_field::ref_getI_div04" ; +"reference_field::ref_getI_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 76]\n " shape="box"] - 20 -> 22 ; -19 [label="19: Constructor Init \n n$3=*&this:class reference_field::Ptr * [line 34]\n n$4=*&r_:class reference_field::X & [line 34]\n *n$3.x:class reference_field::X *=n$4 [line 34]\n " shape="box"] + "reference_field::ref_getI_div04" -> "reference_field::ref_getI_div03" ; +"reference_field::ref_getI_div03" [label="3: Return Stmt \n _=*&r:class reference_field::Ref [line 77]\n n$1=_fun_reference_field::Ref_getI(&r:class reference_field::Ref &) [line 77]\n *&return:int =(1 / n$1) [line 77]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Constructor Init \n n$0=*&this:class reference_field::Ptr * [line 34]\n n$1=*&this:class reference_field::Ptr * [line 34]\n n$2=*n$1.x:class reference_field::X * [line 34]\n *n$0.i:int *=n$2.f [line 34]\n " shape="box"] + "reference_field::ref_getI_div03" -> "reference_field::ref_getI_div02" ; +"reference_field::ref_getI_div02" [label="2: Exit reference_field::ref_getI_div0 \n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Exit reference_field::Ptr_Ptr \n " color=yellow style=filled] +"reference_field::ref_getI_div01" [label="1: Start reference_field::ref_getI_div0\nFormals: \nLocals: r:class reference_field::Ref x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 72]\n " color=yellow style=filled] -16 [label="16: Start reference_field::Ptr_Ptr\nFormals: this:class reference_field::Ptr * r_:class reference_field::X &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] + "reference_field::ref_getI_div01" -> "reference_field::ref_getI_div07" ; +"reference_field::ref_getF_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 65]\n " shape="box"] - 16 -> 19 ; -15 [label="15: Return Stmt \n n$0=*&this:class reference_field::Ref * [line 28]\n n$1=*n$0.i:int & [line 28]\n n$2=*n$1:int & [line 28]\n *&return:int =n$2 [line 28]\n " shape="box"] + "reference_field::ref_getF_div07" -> "reference_field::ref_getF_div06" ; +"reference_field::ref_getF_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 66]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit reference_field::Ref_getI \n " color=yellow style=filled] + "reference_field::ref_getF_div06" -> "reference_field::ref_getF_div05" ; +"reference_field::ref_getF_div05" [label="5: DeclStmt \n _fun_reference_field::Ref_Ref(&r:class reference_field::Ref *,&x:class reference_field::X &) [line 67]\n " shape="box"] -13 [label="13: Start reference_field::Ref_getI\nFormals: this:class reference_field::Ref *\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] + "reference_field::ref_getF_div05" -> "reference_field::ref_getF_div04" ; +"reference_field::ref_getF_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 68]\n " shape="box"] - 13 -> 15 ; -12 [label="12: Return Stmt \n n$0=*&this:class reference_field::Ref * [line 27]\n n$1=*n$0.x:class reference_field::X & [line 27]\n n$2=*n$1.f:int [line 27]\n *&return:int =n$2 [line 27]\n " shape="box"] + "reference_field::ref_getF_div04" -> "reference_field::ref_getF_div03" ; +"reference_field::ref_getF_div03" [label="3: Return Stmt \n _=*&r:class reference_field::Ref [line 69]\n n$1=_fun_reference_field::Ref_getF(&r:class reference_field::Ref &) [line 69]\n *&return:int =(1 / n$1) [line 69]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit reference_field::Ref_getF \n " color=yellow style=filled] + "reference_field::ref_getF_div03" -> "reference_field::ref_getF_div02" ; +"reference_field::ref_getF_div02" [label="2: Exit reference_field::ref_getF_div0 \n " color=yellow style=filled] -10 [label="10: Start reference_field::Ref_getF\nFormals: this:class reference_field::Ref *\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] +"reference_field::ref_getF_div01" [label="1: Start reference_field::ref_getF_div0\nFormals: \nLocals: r:class reference_field::Ref x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 64]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Constructor Init \n n$3=*&this:class reference_field::Ref * [line 26]\n n$4=*&r_:class reference_field::X & [line 26]\n *n$3.x:class reference_field::X &=n$4 [line 26]\n " shape="box"] + "reference_field::ref_getF_div01" -> "reference_field::ref_getF_div07" ; +"reference_field::ptr_getF_div07" [label="7: DeclStmt \n _fun_reference_field::X_X(&x:class reference_field::X *) [line 98]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Constructor Init \n n$0=*&this:class reference_field::Ref * [line 26]\n n$1=*&this:class reference_field::Ref * [line 26]\n n$2=*n$1.x:class reference_field::X & [line 26]\n *n$0.i:int &=n$2.f [line 26]\n " shape="box"] + "reference_field::ptr_getF_div07" -> "reference_field::ptr_getF_div06" ; +"reference_field::ptr_getF_div06" [label="6: BinaryOperatorStmt: Assign \n *&x.f:int =1 [line 99]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit reference_field::Ref_Ref \n " color=yellow style=filled] + "reference_field::ptr_getF_div06" -> "reference_field::ptr_getF_div05" ; +"reference_field::ptr_getF_div05" [label="5: DeclStmt \n _fun_reference_field::Ptr_Ptr(&r:class reference_field::Ptr *,&x:class reference_field::X &) [line 100]\n " shape="box"] -6 [label="6: Start reference_field::Ref_Ref\nFormals: this:class reference_field::Ref * r_:class reference_field::X &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] + "reference_field::ptr_getF_div05" -> "reference_field::ptr_getF_div04" ; +"reference_field::ptr_getF_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 101]\n " shape="box"] - 6 -> 9 ; -5 [label="5: Constructor Init \n n$0=*&this:class reference_field::X * [line 12]\n n$1=*&__param_0:class reference_field::X & [line 12]\n n$2=*n$1.f:int [line 12]\n *n$0.f:int =n$2 [line 12]\n " shape="box"] + "reference_field::ptr_getF_div04" -> "reference_field::ptr_getF_div03" ; +"reference_field::ptr_getF_div03" [label="3: Return Stmt \n _=*&r:class reference_field::Ptr [line 102]\n n$1=_fun_reference_field::Ptr_getF(&r:class reference_field::Ptr &) [line 102]\n *&return:int =(1 / n$1) [line 102]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit reference_field::X_X \n " color=yellow style=filled] + "reference_field::ptr_getF_div03" -> "reference_field::ptr_getF_div02" ; +"reference_field::ptr_getF_div02" [label="2: Exit reference_field::ptr_getF_div0 \n " color=yellow style=filled] -3 [label="3: Start reference_field::X_X\nFormals: this:class reference_field::X * __param_0:class reference_field::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"reference_field::ptr_getF_div01" [label="1: Start reference_field::ptr_getF_div0\nFormals: \nLocals: r:class reference_field::Ptr x:class reference_field::X \n DECLARE_LOCALS(&return,&r,&x); [line 97]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit reference_field::X_X \n " color=yellow style=filled] + "reference_field::ptr_getF_div01" -> "reference_field::ptr_getF_div07" ; +"reference_field::X_X2" [label="2: Exit reference_field::X_X \n " color=yellow style=filled] -1 [label="1: Start reference_field::X_X\nFormals: this:class reference_field::X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"reference_field::X_X1" [label="1: Start reference_field::X_X\nFormals: this:class reference_field::X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 2 ; + "reference_field::X_X1" -> "reference_field::X_X2" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/reference_struct_e2e.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/reference_struct_e2e.cpp.dot index 5d8202952..f3118ddf5 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/reference_struct_e2e.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/reference_struct_e2e.cpp.dot @@ -1,482 +1,482 @@ /* @generated */ digraph iCFG { -126 [label="126: Call _fun_X_zero \n n$4=_fun_get_global_ref() [line 124]\n _=*n$4:class X [line 124]\n _fun_X_zero(n$4:class X &) [line 124]\n " shape="box"] +"get_global_ptr_div1_method5" [label="5: BinaryOperatorStmt: Assign \n n$5=_fun_get_global_ptr() [line 68]\n *n$5.f:int =0 [line 68]\n " shape="box"] - 126 -> 125 ; -125 [label="125: BinaryOperatorStmt: Assign \n n$3=_fun_get_global_ref() [line 125]\n *n$3.f:int =1 [line 125]\n " shape="box"] + "get_global_ptr_div1_method5" -> "get_global_ptr_div1_method4" ; +"get_global_ptr_div1_method4" [label="4: Call _fun_X_nonzero \n n$3=_fun_get_global_ptr() [line 69]\n _=*n$3:class X [line 69]\n _fun_X_nonzero(n$3:class X *) [line 69]\n " shape="box"] - 125 -> 124 ; -124 [label="124: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 126]\n _=*n$0:class X [line 126]\n n$2=_fun_X_div(n$0:class X &) [line 126]\n " shape="box"] + "get_global_ptr_div1_method4" -> "get_global_ptr_div1_method3" ; +"get_global_ptr_div1_method3" [label="3: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 70]\n _=*n$0:class X [line 70]\n n$2=_fun_X_div(n$0:class X *) [line 70]\n " shape="box"] - 124 -> 123 ; -123 [label="123: Exit get_global_ref_div1_field \n " color=yellow style=filled] + "get_global_ptr_div1_method3" -> "get_global_ptr_div1_method2" ; +"get_global_ptr_div1_method2" [label="2: Exit get_global_ptr_div1_method \n " color=yellow style=filled] -122 [label="122: Start get_global_ref_div1_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 123]\n " color=yellow style=filled] +"get_global_ptr_div1_method1" [label="1: Start get_global_ptr_div1_method\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 67]\n " color=yellow style=filled] - 122 -> 126 ; -121 [label="121: Call _fun_X_nonzero \n n$4=_fun_get_global_ref() [line 118]\n _=*n$4:class X [line 118]\n _fun_X_nonzero(n$4:class X &) [line 118]\n " shape="box"] + "get_global_ptr_div1_method1" -> "get_global_ptr_div1_method5" ; +"X_div3" [label="3: Return Stmt \n n$0=*&this:class X * [line 14]\n n$1=*n$0.f:int [line 14]\n *&return:int =(1 / n$1) [line 14]\n " shape="box"] - 121 -> 120 ; -120 [label="120: BinaryOperatorStmt: Assign \n n$3=_fun_get_global_ref() [line 119]\n *n$3.f:int =0 [line 119]\n " shape="box"] + "X_div3" -> "X_div2" ; +"X_div2" [label="2: Exit X_div \n " color=yellow style=filled] - 120 -> 119 ; -119 [label="119: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 120]\n _=*n$0:class X [line 120]\n n$2=_fun_X_div(n$0:class X &) [line 120]\n " shape="box"] +"X_div1" [label="1: Start X_div\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 119 -> 118 ; -118 [label="118: Exit get_global_ref_div0_field \n " color=yellow style=filled] + "X_div1" -> "X_div3" ; +"get_global_ref_div0_field5" [label="5: Call _fun_X_nonzero \n n$4=_fun_get_global_ref() [line 118]\n _=*n$4:class X [line 118]\n _fun_X_nonzero(n$4:class X &) [line 118]\n " shape="box"] -117 [label="117: Start get_global_ref_div0_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 117]\n " color=yellow style=filled] + "get_global_ref_div0_field5" -> "get_global_ref_div0_field4" ; +"get_global_ref_div0_field4" [label="4: BinaryOperatorStmt: Assign \n n$3=_fun_get_global_ref() [line 119]\n *n$3.f:int =0 [line 119]\n " shape="box"] - 117 -> 121 ; -116 [label="116: BinaryOperatorStmt: Assign \n n$5=_fun_get_global_ref() [line 112]\n *n$5.f:int =0 [line 112]\n " shape="box"] + "get_global_ref_div0_field4" -> "get_global_ref_div0_field3" ; +"get_global_ref_div0_field3" [label="3: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 120]\n _=*n$0:class X [line 120]\n n$2=_fun_X_div(n$0:class X &) [line 120]\n " shape="box"] - 116 -> 115 ; -115 [label="115: Call _fun_X_nonzero \n n$3=_fun_get_global_ref() [line 113]\n _=*n$3:class X [line 113]\n _fun_X_nonzero(n$3:class X &) [line 113]\n " shape="box"] + "get_global_ref_div0_field3" -> "get_global_ref_div0_field2" ; +"get_global_ref_div0_field2" [label="2: Exit get_global_ref_div0_field \n " color=yellow style=filled] - 115 -> 114 ; -114 [label="114: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 114]\n _=*n$0:class X [line 114]\n n$2=_fun_X_div(n$0:class X &) [line 114]\n " shape="box"] +"get_global_ref_div0_field1" [label="1: Start get_global_ref_div0_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 117]\n " color=yellow style=filled] - 114 -> 113 ; -113 [label="113: Exit get_global_ref_div1_method \n " color=yellow style=filled] + "get_global_ref_div0_field1" -> "get_global_ref_div0_field5" ; +"method_div0_ref4" [label="4: Call _fun_zero_ref \n n$3=*&x:class X & [line 86]\n _fun_zero_ref(n$3:class X &) [line 86]\n " shape="box"] -112 [label="112: Start get_global_ref_div1_method\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 111]\n " color=yellow style=filled] + "method_div0_ref4" -> "method_div0_ref3" ; +"method_div0_ref3" [label="3: Return Stmt \n n$0=*&x:class X & [line 87]\n _=*n$0:class X [line 87]\n n$2=_fun_X_div(n$0:class X &) [line 87]\n *&return:int =n$2 [line 87]\n " shape="box"] - 112 -> 116 ; -111 [label="111: BinaryOperatorStmt: Assign \n n$5=_fun_get_global_ref() [line 106]\n *n$5.f:int =1 [line 106]\n " shape="box"] + "method_div0_ref3" -> "method_div0_ref2" ; +"method_div0_ref2" [label="2: Exit method_div0_ref \n " color=yellow style=filled] - 111 -> 110 ; -110 [label="110: Call _fun_X_zero \n n$3=_fun_get_global_ref() [line 107]\n _=*n$3:class X [line 107]\n _fun_X_zero(n$3:class X &) [line 107]\n " shape="box"] +"method_div0_ref1" [label="1: Start method_div0_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 85]\n " color=yellow style=filled] - 110 -> 109 ; -109 [label="109: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 108]\n _=*n$0:class X [line 108]\n n$2=_fun_X_div(n$0:class X &) [line 108]\n " shape="box"] + "method_div0_ref1" -> "method_div0_ref4" ; +"method_div0_ptr8" [label="8: Call _fun_zero_ptr \n n$4=*&x:class X * [line 35]\n _fun_zero_ptr(n$4:class X *) [line 35]\n " shape="box"] - 109 -> 108 ; -108 [label="108: Exit get_global_ref_div0_method \n " color=yellow style=filled] + "method_div0_ptr8" -> "method_div0_ptr7" ; +"method_div0_ptr7" [label="7: Return Stmt \n n$1=*&x:class X * [line 36]\n _=*n$1:class X [line 36]\n n$3=_fun_X_div(n$1:class X *) [line 36]\n *&return:int =n$3 [line 36]\n " shape="box"] -107 [label="107: Start get_global_ref_div0_method\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 105]\n " color=yellow style=filled] + "method_div0_ptr7" -> "method_div0_ptr2" ; +"method_div0_ptr6" [label="6: Prune (false branch) \n n$0=*&x:class X * [line 34]\n PRUNE((n$0 == 0), false); [line 34]\n " shape="invhouse"] - 107 -> 111 ; -106 [label="106: Call _fun_set_field_ref \n n$3=*&x:class X & [line 101]\n _fun_set_field_ref(n$3:class X &,1:int ) [line 101]\n " shape="box"] + "method_div0_ptr6" -> "method_div0_ptr3" ; +"method_div0_ptr5" [label="5: Prune (true branch) \n n$0=*&x:class X * [line 34]\n PRUNE((n$0 != 0), true); [line 34]\n " shape="invhouse"] - 106 -> 105 ; -105 [label="105: Return Stmt \n n$0=*&x:class X & [line 102]\n _=*n$0:class X [line 102]\n n$2=_fun_X_div(n$0:class X &) [line 102]\n *&return:int =n$2 [line 102]\n " shape="box"] + "method_div0_ptr5" -> "method_div0_ptr8" ; +"method_div0_ptr4" [label="4: between_join_and_exit \n " shape="box"] - 105 -> 104 ; -104 [label="104: Exit field_div1_ref \n " color=yellow style=filled] + "method_div0_ptr4" -> "method_div0_ptr2" ; +"method_div0_ptr3" [label="3: + \n " ] -103 [label="103: Start field_div1_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 100]\n " color=yellow style=filled] + "method_div0_ptr3" -> "method_div0_ptr4" ; +"method_div0_ptr2" [label="2: Exit method_div0_ptr \n " color=yellow style=filled] - 103 -> 106 ; -102 [label="102: Call _fun_set_field_ref \n n$3=*&x:class X & [line 96]\n _fun_set_field_ref(n$3:class X &,0:int ) [line 96]\n " shape="box"] +"method_div0_ptr1" [label="1: Start method_div0_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 33]\n " color=yellow style=filled] - 102 -> 101 ; -101 [label="101: Return Stmt \n n$0=*&x:class X & [line 97]\n _=*n$0:class X [line 97]\n n$2=_fun_X_div(n$0:class X &) [line 97]\n *&return:int =n$2 [line 97]\n " shape="box"] + "method_div0_ptr1" -> "method_div0_ptr5" ; + "method_div0_ptr1" -> "method_div0_ptr6" ; +"__infer_globals_initializer_global3" [label="3: DeclStmt \n _fun_X_X(&#GB$global:class X *) [line 29]\n " shape="box"] - 101 -> 100 ; -100 [label="100: Exit field_div0_ref \n " color=yellow style=filled] + "__infer_globals_initializer_global3" -> "__infer_globals_initializer_global2" ; +"__infer_globals_initializer_global2" [label="2: Exit __infer_globals_initializer_global \n " color=yellow style=filled] -99 [label="99: Start field_div0_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 95]\n " color=yellow style=filled] +"__infer_globals_initializer_global1" [label="1: Start __infer_globals_initializer_global\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] - 99 -> 102 ; -98 [label="98: Call _fun_nonzero_ref \n n$3=*&x:class X & [line 91]\n _fun_nonzero_ref(n$3:class X &) [line 91]\n " shape="box"] + "__infer_globals_initializer_global1" -> "__infer_globals_initializer_global3" ; +"X_nonzero3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class X * [line 12]\n *n$0.f:int =1 [line 12]\n " shape="box"] - 98 -> 97 ; -97 [label="97: Return Stmt \n n$0=*&x:class X & [line 92]\n _=*n$0:class X [line 92]\n n$2=_fun_X_div(n$0:class X &) [line 92]\n *&return:int =n$2 [line 92]\n " shape="box"] + "X_nonzero3" -> "X_nonzero2" ; +"X_nonzero2" [label="2: Exit X_nonzero \n " color=yellow style=filled] - 97 -> 96 ; -96 [label="96: Exit method_div1_ref \n " color=yellow style=filled] +"X_nonzero1" [label="1: Start X_nonzero\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] -95 [label="95: Start method_div1_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 90]\n " color=yellow style=filled] + "X_nonzero1" -> "X_nonzero3" ; +"get_global_ref_div1_field5" [label="5: Call _fun_X_zero \n n$4=_fun_get_global_ref() [line 124]\n _=*n$4:class X [line 124]\n _fun_X_zero(n$4:class X &) [line 124]\n " shape="box"] - 95 -> 98 ; -94 [label="94: Call _fun_zero_ref \n n$3=*&x:class X & [line 86]\n _fun_zero_ref(n$3:class X &) [line 86]\n " shape="box"] + "get_global_ref_div1_field5" -> "get_global_ref_div1_field4" ; +"get_global_ref_div1_field4" [label="4: BinaryOperatorStmt: Assign \n n$3=_fun_get_global_ref() [line 125]\n *n$3.f:int =1 [line 125]\n " shape="box"] - 94 -> 93 ; -93 [label="93: Return Stmt \n n$0=*&x:class X & [line 87]\n _=*n$0:class X [line 87]\n n$2=_fun_X_div(n$0:class X &) [line 87]\n *&return:int =n$2 [line 87]\n " shape="box"] + "get_global_ref_div1_field4" -> "get_global_ref_div1_field3" ; +"get_global_ref_div1_field3" [label="3: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 126]\n _=*n$0:class X [line 126]\n n$2=_fun_X_div(n$0:class X &) [line 126]\n " shape="box"] - 93 -> 92 ; -92 [label="92: Exit method_div0_ref \n " color=yellow style=filled] + "get_global_ref_div1_field3" -> "get_global_ref_div1_field2" ; +"get_global_ref_div1_field2" [label="2: Exit get_global_ref_div1_field \n " color=yellow style=filled] -91 [label="91: Start method_div0_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 85]\n " color=yellow style=filled] +"get_global_ref_div1_field1" [label="1: Start get_global_ref_div1_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 123]\n " color=yellow style=filled] - 91 -> 94 ; -90 [label="90: Call _fun_X_zero \n n$4=_fun_get_global_ptr() [line 80]\n _=*n$4:class X [line 80]\n _fun_X_zero(n$4:class X *) [line 80]\n " shape="box"] + "get_global_ref_div1_field1" -> "get_global_ref_div1_field5" ; +"get_global_ref3" [label="3: Return Stmt \n *&return:class X &=&#GB$global [line 31]\n " shape="box"] - 90 -> 89 ; -89 [label="89: BinaryOperatorStmt: Assign \n n$3=_fun_get_global_ptr() [line 81]\n *n$3.f:int =1 [line 81]\n " shape="box"] + "get_global_ref3" -> "get_global_ref2" ; +"get_global_ref2" [label="2: Exit get_global_ref \n " color=yellow style=filled] - 89 -> 88 ; -88 [label="88: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 82]\n _=*n$0:class X [line 82]\n n$2=_fun_X_div(n$0:class X *) [line 82]\n " shape="box"] +"get_global_ref1" [label="1: Start get_global_ref\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] - 88 -> 87 ; -87 [label="87: Exit get_global_ptr_div1_field \n " color=yellow style=filled] + "get_global_ref1" -> "get_global_ref3" ; +"zero_ptr3" [label="3: Call _fun_X_zero \n n$0=*&x:class X * [line 17]\n _=*n$0:class X [line 17]\n _fun_X_zero(n$0:class X *) [line 17]\n " shape="box"] -86 [label="86: Start get_global_ptr_div1_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 79]\n " color=yellow style=filled] + "zero_ptr3" -> "zero_ptr2" ; +"zero_ptr2" [label="2: Exit zero_ptr \n " color=yellow style=filled] - 86 -> 90 ; -85 [label="85: Call _fun_X_nonzero \n n$4=_fun_get_global_ptr() [line 74]\n _=*n$4:class X [line 74]\n _fun_X_nonzero(n$4:class X *) [line 74]\n " shape="box"] +"zero_ptr1" [label="1: Start zero_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 85 -> 84 ; -84 [label="84: BinaryOperatorStmt: Assign \n n$3=_fun_get_global_ptr() [line 75]\n *n$3.f:int =0 [line 75]\n " shape="box"] + "zero_ptr1" -> "zero_ptr3" ; +"get_global_ptr_div0_method5" [label="5: BinaryOperatorStmt: Assign \n n$5=_fun_get_global_ptr() [line 62]\n *n$5.f:int =1 [line 62]\n " shape="box"] - 84 -> 83 ; -83 [label="83: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 76]\n _=*n$0:class X [line 76]\n n$2=_fun_X_div(n$0:class X *) [line 76]\n " shape="box"] + "get_global_ptr_div0_method5" -> "get_global_ptr_div0_method4" ; +"get_global_ptr_div0_method4" [label="4: Call _fun_X_zero \n n$3=_fun_get_global_ptr() [line 63]\n _=*n$3:class X [line 63]\n _fun_X_zero(n$3:class X *) [line 63]\n " shape="box"] - 83 -> 82 ; -82 [label="82: Exit get_global_ptr_div0_field \n " color=yellow style=filled] + "get_global_ptr_div0_method4" -> "get_global_ptr_div0_method3" ; +"get_global_ptr_div0_method3" [label="3: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 64]\n _=*n$0:class X [line 64]\n n$2=_fun_X_div(n$0:class X *) [line 64]\n " shape="box"] -81 [label="81: Start get_global_ptr_div0_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 73]\n " color=yellow style=filled] + "get_global_ptr_div0_method3" -> "get_global_ptr_div0_method2" ; +"get_global_ptr_div0_method2" [label="2: Exit get_global_ptr_div0_method \n " color=yellow style=filled] - 81 -> 85 ; -80 [label="80: BinaryOperatorStmt: Assign \n n$5=_fun_get_global_ptr() [line 68]\n *n$5.f:int =0 [line 68]\n " shape="box"] +"get_global_ptr_div0_method1" [label="1: Start get_global_ptr_div0_method\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 61]\n " color=yellow style=filled] - 80 -> 79 ; -79 [label="79: Call _fun_X_nonzero \n n$3=_fun_get_global_ptr() [line 69]\n _=*n$3:class X [line 69]\n _fun_X_nonzero(n$3:class X *) [line 69]\n " shape="box"] + "get_global_ptr_div0_method1" -> "get_global_ptr_div0_method5" ; +"X_X2" [label="2: Exit X_X \n " color=yellow style=filled] - 79 -> 78 ; -78 [label="78: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 70]\n _=*n$0:class X [line 70]\n n$2=_fun_X_div(n$0:class X *) [line 70]\n " shape="box"] +"X_X1" [label="1: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 78 -> 77 ; -77 [label="77: Exit get_global_ptr_div1_method \n " color=yellow style=filled] + "X_X1" -> "X_X2" ; +"get_global_ref_div0_method5" [label="5: BinaryOperatorStmt: Assign \n n$5=_fun_get_global_ref() [line 106]\n *n$5.f:int =1 [line 106]\n " shape="box"] -76 [label="76: Start get_global_ptr_div1_method\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 67]\n " color=yellow style=filled] + "get_global_ref_div0_method5" -> "get_global_ref_div0_method4" ; +"get_global_ref_div0_method4" [label="4: Call _fun_X_zero \n n$3=_fun_get_global_ref() [line 107]\n _=*n$3:class X [line 107]\n _fun_X_zero(n$3:class X &) [line 107]\n " shape="box"] - 76 -> 80 ; -75 [label="75: BinaryOperatorStmt: Assign \n n$5=_fun_get_global_ptr() [line 62]\n *n$5.f:int =1 [line 62]\n " shape="box"] + "get_global_ref_div0_method4" -> "get_global_ref_div0_method3" ; +"get_global_ref_div0_method3" [label="3: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 108]\n _=*n$0:class X [line 108]\n n$2=_fun_X_div(n$0:class X &) [line 108]\n " shape="box"] - 75 -> 74 ; -74 [label="74: Call _fun_X_zero \n n$3=_fun_get_global_ptr() [line 63]\n _=*n$3:class X [line 63]\n _fun_X_zero(n$3:class X *) [line 63]\n " shape="box"] + "get_global_ref_div0_method3" -> "get_global_ref_div0_method2" ; +"get_global_ref_div0_method2" [label="2: Exit get_global_ref_div0_method \n " color=yellow style=filled] - 74 -> 73 ; -73 [label="73: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 64]\n _=*n$0:class X [line 64]\n n$2=_fun_X_div(n$0:class X *) [line 64]\n " shape="box"] +"get_global_ref_div0_method1" [label="1: Start get_global_ref_div0_method\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 105]\n " color=yellow style=filled] - 73 -> 72 ; -72 [label="72: Exit get_global_ptr_div0_method \n " color=yellow style=filled] + "get_global_ref_div0_method1" -> "get_global_ref_div0_method5" ; +"method_div1_ptr8" [label="8: Call _fun_nonzero_ptr \n n$4=*&x:class X * [line 42]\n _fun_nonzero_ptr(n$4:class X *) [line 42]\n " shape="box"] -71 [label="71: Start get_global_ptr_div0_method\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 61]\n " color=yellow style=filled] + "method_div1_ptr8" -> "method_div1_ptr7" ; +"method_div1_ptr7" [label="7: Return Stmt \n n$1=*&x:class X * [line 43]\n _=*n$1:class X [line 43]\n n$3=_fun_X_div(n$1:class X *) [line 43]\n *&return:int =n$3 [line 43]\n " shape="box"] - 71 -> 75 ; -70 [label="70: Call _fun_set_field_ptr \n n$4=*&x:class X * [line 56]\n _fun_set_field_ptr(n$4:class X *,1:int ) [line 56]\n " shape="box"] + "method_div1_ptr7" -> "method_div1_ptr2" ; +"method_div1_ptr6" [label="6: Prune (false branch) \n n$0=*&x:class X * [line 41]\n PRUNE((n$0 == 0), false); [line 41]\n " shape="invhouse"] - 70 -> 69 ; -69 [label="69: Return Stmt \n n$1=*&x:class X * [line 57]\n _=*n$1:class X [line 57]\n n$3=_fun_X_div(n$1:class X *) [line 57]\n *&return:int =n$3 [line 57]\n " shape="box"] + "method_div1_ptr6" -> "method_div1_ptr3" ; +"method_div1_ptr5" [label="5: Prune (true branch) \n n$0=*&x:class X * [line 41]\n PRUNE((n$0 != 0), true); [line 41]\n " shape="invhouse"] - 69 -> 64 ; -68 [label="68: Prune (false branch) \n n$0=*&x:class X * [line 55]\n PRUNE((n$0 == 0), false); [line 55]\n " shape="invhouse"] + "method_div1_ptr5" -> "method_div1_ptr8" ; +"method_div1_ptr4" [label="4: between_join_and_exit \n " shape="box"] - 68 -> 65 ; -67 [label="67: Prune (true branch) \n n$0=*&x:class X * [line 55]\n PRUNE((n$0 != 0), true); [line 55]\n " shape="invhouse"] + "method_div1_ptr4" -> "method_div1_ptr2" ; +"method_div1_ptr3" [label="3: + \n " ] - 67 -> 70 ; -66 [label="66: between_join_and_exit \n " shape="box"] + "method_div1_ptr3" -> "method_div1_ptr4" ; +"method_div1_ptr2" [label="2: Exit method_div1_ptr \n " color=yellow style=filled] - 66 -> 64 ; -65 [label="65: + \n " ] +"method_div1_ptr1" [label="1: Start method_div1_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] - 65 -> 66 ; -64 [label="64: Exit field_div1_ptr \n " color=yellow style=filled] + "method_div1_ptr1" -> "method_div1_ptr5" ; + "method_div1_ptr1" -> "method_div1_ptr6" ; +"get_global_ptr3" [label="3: Return Stmt \n *&return:class X *=&#GB$global [line 30]\n " shape="box"] -63 [label="63: Start field_div1_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 54]\n " color=yellow style=filled] + "get_global_ptr3" -> "get_global_ptr2" ; +"get_global_ptr2" [label="2: Exit get_global_ptr \n " color=yellow style=filled] - 63 -> 67 ; - 63 -> 68 ; -62 [label="62: Call _fun_set_field_ptr \n n$4=*&x:class X * [line 49]\n _fun_set_field_ptr(n$4:class X *,0:int ) [line 49]\n " shape="box"] +"get_global_ptr1" [label="1: Start get_global_ptr\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] - 62 -> 61 ; -61 [label="61: Return Stmt \n n$1=*&x:class X * [line 50]\n _=*n$1:class X [line 50]\n n$3=_fun_X_div(n$1:class X *) [line 50]\n *&return:int =n$3 [line 50]\n " shape="box"] + "get_global_ptr1" -> "get_global_ptr3" ; +"zero_ref3" [label="3: Call _fun_X_zero \n n$0=*&x:class X & [line 23]\n _=*n$0:class X [line 23]\n _fun_X_zero(n$0:class X &) [line 23]\n " shape="box"] - 61 -> 56 ; -60 [label="60: Prune (false branch) \n n$0=*&x:class X * [line 48]\n PRUNE((n$0 == 0), false); [line 48]\n " shape="invhouse"] + "zero_ref3" -> "zero_ref2" ; +"zero_ref2" [label="2: Exit zero_ref \n " color=yellow style=filled] - 60 -> 57 ; -59 [label="59: Prune (true branch) \n n$0=*&x:class X * [line 48]\n PRUNE((n$0 != 0), true); [line 48]\n " shape="invhouse"] +"zero_ref1" [label="1: Start zero_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 59 -> 62 ; -58 [label="58: between_join_and_exit \n " shape="box"] + "zero_ref1" -> "zero_ref3" ; +"X_zero3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class X * [line 13]\n *n$0.f:int =0 [line 13]\n " shape="box"] - 58 -> 56 ; -57 [label="57: + \n " ] + "X_zero3" -> "X_zero2" ; +"X_zero2" [label="2: Exit X_zero \n " color=yellow style=filled] - 57 -> 58 ; -56 [label="56: Exit field_div0_ptr \n " color=yellow style=filled] +"X_zero1" [label="1: Start X_zero\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] -55 [label="55: Start field_div0_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] + "X_zero1" -> "X_zero3" ; +"get_global_ptr_div1_field5" [label="5: Call _fun_X_zero \n n$4=_fun_get_global_ptr() [line 80]\n _=*n$4:class X [line 80]\n _fun_X_zero(n$4:class X *) [line 80]\n " shape="box"] - 55 -> 59 ; - 55 -> 60 ; -54 [label="54: Call _fun_nonzero_ptr \n n$4=*&x:class X * [line 42]\n _fun_nonzero_ptr(n$4:class X *) [line 42]\n " shape="box"] + "get_global_ptr_div1_field5" -> "get_global_ptr_div1_field4" ; +"get_global_ptr_div1_field4" [label="4: BinaryOperatorStmt: Assign \n n$3=_fun_get_global_ptr() [line 81]\n *n$3.f:int =1 [line 81]\n " shape="box"] - 54 -> 53 ; -53 [label="53: Return Stmt \n n$1=*&x:class X * [line 43]\n _=*n$1:class X [line 43]\n n$3=_fun_X_div(n$1:class X *) [line 43]\n *&return:int =n$3 [line 43]\n " shape="box"] + "get_global_ptr_div1_field4" -> "get_global_ptr_div1_field3" ; +"get_global_ptr_div1_field3" [label="3: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 82]\n _=*n$0:class X [line 82]\n n$2=_fun_X_div(n$0:class X *) [line 82]\n " shape="box"] - 53 -> 48 ; -52 [label="52: Prune (false branch) \n n$0=*&x:class X * [line 41]\n PRUNE((n$0 == 0), false); [line 41]\n " shape="invhouse"] + "get_global_ptr_div1_field3" -> "get_global_ptr_div1_field2" ; +"get_global_ptr_div1_field2" [label="2: Exit get_global_ptr_div1_field \n " color=yellow style=filled] - 52 -> 49 ; -51 [label="51: Prune (true branch) \n n$0=*&x:class X * [line 41]\n PRUNE((n$0 != 0), true); [line 41]\n " shape="invhouse"] +"get_global_ptr_div1_field1" [label="1: Start get_global_ptr_div1_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 79]\n " color=yellow style=filled] - 51 -> 54 ; -50 [label="50: between_join_and_exit \n " shape="box"] + "get_global_ptr_div1_field1" -> "get_global_ptr_div1_field5" ; +"set_field_ref3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&x:class X & [line 27]\n n$1=*&val:int [line 27]\n *n$0.f:int =n$1 [line 27]\n " shape="box"] - 50 -> 48 ; -49 [label="49: + \n " ] + "set_field_ref3" -> "set_field_ref2" ; +"set_field_ref2" [label="2: Exit set_field_ref \n " color=yellow style=filled] - 49 -> 50 ; -48 [label="48: Exit method_div1_ptr \n " color=yellow style=filled] +"set_field_ref1" [label="1: Start set_field_ref\nFormals: x:class X & val:int \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] -47 [label="47: Start method_div1_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] + "set_field_ref1" -> "set_field_ref3" ; +"field_div0_ptr8" [label="8: Call _fun_set_field_ptr \n n$4=*&x:class X * [line 49]\n _fun_set_field_ptr(n$4:class X *,0:int ) [line 49]\n " shape="box"] - 47 -> 51 ; - 47 -> 52 ; -46 [label="46: Call _fun_zero_ptr \n n$4=*&x:class X * [line 35]\n _fun_zero_ptr(n$4:class X *) [line 35]\n " shape="box"] + "field_div0_ptr8" -> "field_div0_ptr7" ; +"field_div0_ptr7" [label="7: Return Stmt \n n$1=*&x:class X * [line 50]\n _=*n$1:class X [line 50]\n n$3=_fun_X_div(n$1:class X *) [line 50]\n *&return:int =n$3 [line 50]\n " shape="box"] - 46 -> 45 ; -45 [label="45: Return Stmt \n n$1=*&x:class X * [line 36]\n _=*n$1:class X [line 36]\n n$3=_fun_X_div(n$1:class X *) [line 36]\n *&return:int =n$3 [line 36]\n " shape="box"] + "field_div0_ptr7" -> "field_div0_ptr2" ; +"field_div0_ptr6" [label="6: Prune (false branch) \n n$0=*&x:class X * [line 48]\n PRUNE((n$0 == 0), false); [line 48]\n " shape="invhouse"] - 45 -> 40 ; -44 [label="44: Prune (false branch) \n n$0=*&x:class X * [line 34]\n PRUNE((n$0 == 0), false); [line 34]\n " shape="invhouse"] + "field_div0_ptr6" -> "field_div0_ptr3" ; +"field_div0_ptr5" [label="5: Prune (true branch) \n n$0=*&x:class X * [line 48]\n PRUNE((n$0 != 0), true); [line 48]\n " shape="invhouse"] - 44 -> 41 ; -43 [label="43: Prune (true branch) \n n$0=*&x:class X * [line 34]\n PRUNE((n$0 != 0), true); [line 34]\n " shape="invhouse"] + "field_div0_ptr5" -> "field_div0_ptr8" ; +"field_div0_ptr4" [label="4: between_join_and_exit \n " shape="box"] - 43 -> 46 ; -42 [label="42: between_join_and_exit \n " shape="box"] + "field_div0_ptr4" -> "field_div0_ptr2" ; +"field_div0_ptr3" [label="3: + \n " ] - 42 -> 40 ; -41 [label="41: + \n " ] + "field_div0_ptr3" -> "field_div0_ptr4" ; +"field_div0_ptr2" [label="2: Exit field_div0_ptr \n " color=yellow style=filled] - 41 -> 42 ; -40 [label="40: Exit method_div0_ptr \n " color=yellow style=filled] +"field_div0_ptr1" [label="1: Start field_div0_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] -39 [label="39: Start method_div0_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 33]\n " color=yellow style=filled] + "field_div0_ptr1" -> "field_div0_ptr5" ; + "field_div0_ptr1" -> "field_div0_ptr6" ; +"set_field_ptr3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&x:class X * [line 21]\n n$1=*&val:int [line 21]\n *n$0.f:int =n$1 [line 21]\n " shape="box"] - 39 -> 43 ; - 39 -> 44 ; -38 [label="38: Return Stmt \n *&return:class X &=&#GB$global [line 31]\n " shape="box"] + "set_field_ptr3" -> "set_field_ptr2" ; +"set_field_ptr2" [label="2: Exit set_field_ptr \n " color=yellow style=filled] - 38 -> 37 ; -37 [label="37: Exit get_global_ref \n " color=yellow style=filled] +"set_field_ptr1" [label="1: Start set_field_ptr\nFormals: x:class X * val:int \nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] -36 [label="36: Start get_global_ref\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] + "set_field_ptr1" -> "set_field_ptr3" ; +"field_div0_ref4" [label="4: Call _fun_set_field_ref \n n$3=*&x:class X & [line 96]\n _fun_set_field_ref(n$3:class X &,0:int ) [line 96]\n " shape="box"] - 36 -> 38 ; -35 [label="35: Return Stmt \n *&return:class X *=&#GB$global [line 30]\n " shape="box"] + "field_div0_ref4" -> "field_div0_ref3" ; +"field_div0_ref3" [label="3: Return Stmt \n n$0=*&x:class X & [line 97]\n _=*n$0:class X [line 97]\n n$2=_fun_X_div(n$0:class X &) [line 97]\n *&return:int =n$2 [line 97]\n " shape="box"] - 35 -> 34 ; -34 [label="34: Exit get_global_ptr \n " color=yellow style=filled] + "field_div0_ref3" -> "field_div0_ref2" ; +"field_div0_ref2" [label="2: Exit field_div0_ref \n " color=yellow style=filled] -33 [label="33: Start get_global_ptr\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] +"field_div0_ref1" [label="1: Start field_div0_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 95]\n " color=yellow style=filled] - 33 -> 35 ; -32 [label="32: DeclStmt \n _fun_X_X(&#GB$global:class X *) [line 29]\n " shape="box"] + "field_div0_ref1" -> "field_div0_ref4" ; +"get_global_ptr_div0_field5" [label="5: Call _fun_X_nonzero \n n$4=_fun_get_global_ptr() [line 74]\n _=*n$4:class X [line 74]\n _fun_X_nonzero(n$4:class X *) [line 74]\n " shape="box"] - 32 -> 31 ; -31 [label="31: Exit __infer_globals_initializer_global \n " color=yellow style=filled] + "get_global_ptr_div0_field5" -> "get_global_ptr_div0_field4" ; +"get_global_ptr_div0_field4" [label="4: BinaryOperatorStmt: Assign \n n$3=_fun_get_global_ptr() [line 75]\n *n$3.f:int =0 [line 75]\n " shape="box"] -30 [label="30: Start __infer_globals_initializer_global\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] + "get_global_ptr_div0_field4" -> "get_global_ptr_div0_field3" ; +"get_global_ptr_div0_field3" [label="3: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 76]\n _=*n$0:class X [line 76]\n n$2=_fun_X_div(n$0:class X *) [line 76]\n " shape="box"] - 30 -> 32 ; -29 [label="29: BinaryOperatorStmt: Assign \n n$0=*&x:class X & [line 27]\n n$1=*&val:int [line 27]\n *n$0.f:int =n$1 [line 27]\n " shape="box"] + "get_global_ptr_div0_field3" -> "get_global_ptr_div0_field2" ; +"get_global_ptr_div0_field2" [label="2: Exit get_global_ptr_div0_field \n " color=yellow style=filled] - 29 -> 28 ; -28 [label="28: Exit set_field_ref \n " color=yellow style=filled] +"get_global_ptr_div0_field1" [label="1: Start get_global_ptr_div0_field\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 73]\n " color=yellow style=filled] -27 [label="27: Start set_field_ref\nFormals: x:class X & val:int \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] + "get_global_ptr_div0_field1" -> "get_global_ptr_div0_field5" ; +"field_div1_ref4" [label="4: Call _fun_set_field_ref \n n$3=*&x:class X & [line 101]\n _fun_set_field_ref(n$3:class X &,1:int ) [line 101]\n " shape="box"] - 27 -> 29 ; -26 [label="26: Call _fun_X_nonzero \n n$0=*&x:class X & [line 25]\n _=*n$0:class X [line 25]\n _fun_X_nonzero(n$0:class X &) [line 25]\n " shape="box"] + "field_div1_ref4" -> "field_div1_ref3" ; +"field_div1_ref3" [label="3: Return Stmt \n n$0=*&x:class X & [line 102]\n _=*n$0:class X [line 102]\n n$2=_fun_X_div(n$0:class X &) [line 102]\n *&return:int =n$2 [line 102]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Exit nonzero_ref \n " color=yellow style=filled] + "field_div1_ref3" -> "field_div1_ref2" ; +"field_div1_ref2" [label="2: Exit field_div1_ref \n " color=yellow style=filled] -24 [label="24: Start nonzero_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] +"field_div1_ref1" [label="1: Start field_div1_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 100]\n " color=yellow style=filled] - 24 -> 26 ; -23 [label="23: Call _fun_X_zero \n n$0=*&x:class X & [line 23]\n _=*n$0:class X [line 23]\n _fun_X_zero(n$0:class X &) [line 23]\n " shape="box"] + "field_div1_ref1" -> "field_div1_ref4" ; +"field_div1_ptr8" [label="8: Call _fun_set_field_ptr \n n$4=*&x:class X * [line 56]\n _fun_set_field_ptr(n$4:class X *,1:int ) [line 56]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Exit zero_ref \n " color=yellow style=filled] + "field_div1_ptr8" -> "field_div1_ptr7" ; +"field_div1_ptr7" [label="7: Return Stmt \n n$1=*&x:class X * [line 57]\n _=*n$1:class X [line 57]\n n$3=_fun_X_div(n$1:class X *) [line 57]\n *&return:int =n$3 [line 57]\n " shape="box"] -21 [label="21: Start zero_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] + "field_div1_ptr7" -> "field_div1_ptr2" ; +"field_div1_ptr6" [label="6: Prune (false branch) \n n$0=*&x:class X * [line 55]\n PRUNE((n$0 == 0), false); [line 55]\n " shape="invhouse"] - 21 -> 23 ; -20 [label="20: BinaryOperatorStmt: Assign \n n$0=*&x:class X * [line 21]\n n$1=*&val:int [line 21]\n *n$0.f:int =n$1 [line 21]\n " shape="box"] + "field_div1_ptr6" -> "field_div1_ptr3" ; +"field_div1_ptr5" [label="5: Prune (true branch) \n n$0=*&x:class X * [line 55]\n PRUNE((n$0 != 0), true); [line 55]\n " shape="invhouse"] - 20 -> 19 ; -19 [label="19: Exit set_field_ptr \n " color=yellow style=filled] + "field_div1_ptr5" -> "field_div1_ptr8" ; +"field_div1_ptr4" [label="4: between_join_and_exit \n " shape="box"] -18 [label="18: Start set_field_ptr\nFormals: x:class X * val:int \nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] + "field_div1_ptr4" -> "field_div1_ptr2" ; +"field_div1_ptr3" [label="3: + \n " ] - 18 -> 20 ; -17 [label="17: Call _fun_X_nonzero \n n$0=*&x:class X * [line 19]\n _=*n$0:class X [line 19]\n _fun_X_nonzero(n$0:class X *) [line 19]\n " shape="box"] + "field_div1_ptr3" -> "field_div1_ptr4" ; +"field_div1_ptr2" [label="2: Exit field_div1_ptr \n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Exit nonzero_ptr \n " color=yellow style=filled] +"field_div1_ptr1" [label="1: Start field_div1_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 54]\n " color=yellow style=filled] -15 [label="15: Start nonzero_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] + "field_div1_ptr1" -> "field_div1_ptr5" ; + "field_div1_ptr1" -> "field_div1_ptr6" ; +"nonzero_ptr3" [label="3: Call _fun_X_nonzero \n n$0=*&x:class X * [line 19]\n _=*n$0:class X [line 19]\n _fun_X_nonzero(n$0:class X *) [line 19]\n " shape="box"] - 15 -> 17 ; -14 [label="14: Call _fun_X_zero \n n$0=*&x:class X * [line 17]\n _=*n$0:class X [line 17]\n _fun_X_zero(n$0:class X *) [line 17]\n " shape="box"] + "nonzero_ptr3" -> "nonzero_ptr2" ; +"nonzero_ptr2" [label="2: Exit nonzero_ptr \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Exit zero_ptr \n " color=yellow style=filled] +"nonzero_ptr1" [label="1: Start nonzero_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] -12 [label="12: Start zero_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "nonzero_ptr1" -> "nonzero_ptr3" ; +"method_div1_ref4" [label="4: Call _fun_nonzero_ref \n n$3=*&x:class X & [line 91]\n _fun_nonzero_ref(n$3:class X &) [line 91]\n " shape="box"] - 12 -> 14 ; -11 [label="11: Exit X_X \n " color=yellow style=filled] + "method_div1_ref4" -> "method_div1_ref3" ; +"method_div1_ref3" [label="3: Return Stmt \n n$0=*&x:class X & [line 92]\n _=*n$0:class X [line 92]\n n$2=_fun_X_div(n$0:class X &) [line 92]\n *&return:int =n$2 [line 92]\n " shape="box"] -10 [label="10: Start X_X\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] + "method_div1_ref3" -> "method_div1_ref2" ; +"method_div1_ref2" [label="2: Exit method_div1_ref \n " color=yellow style=filled] - 10 -> 11 ; -9 [label="9: Return Stmt \n n$0=*&this:class X * [line 14]\n n$1=*n$0.f:int [line 14]\n *&return:int =(1 / n$1) [line 14]\n " shape="box"] +"method_div1_ref1" [label="1: Start method_div1_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 90]\n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit X_div \n " color=yellow style=filled] + "method_div1_ref1" -> "method_div1_ref4" ; +"nonzero_ref3" [label="3: Call _fun_X_nonzero \n n$0=*&x:class X & [line 25]\n _=*n$0:class X [line 25]\n _fun_X_nonzero(n$0:class X &) [line 25]\n " shape="box"] -7 [label="7: Start X_div\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] + "nonzero_ref3" -> "nonzero_ref2" ; +"nonzero_ref2" [label="2: Exit nonzero_ref \n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&this:class X * [line 13]\n *n$0.f:int =0 [line 13]\n " shape="box"] +"nonzero_ref1" [label="1: Start nonzero_ref\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit X_zero \n " color=yellow style=filled] + "nonzero_ref1" -> "nonzero_ref3" ; +"get_global_ref_div1_method5" [label="5: BinaryOperatorStmt: Assign \n n$5=_fun_get_global_ref() [line 112]\n *n$5.f:int =0 [line 112]\n " shape="box"] -4 [label="4: Start X_zero\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] + "get_global_ref_div1_method5" -> "get_global_ref_div1_method4" ; +"get_global_ref_div1_method4" [label="4: Call _fun_X_nonzero \n n$3=_fun_get_global_ref() [line 113]\n _=*n$3:class X [line 113]\n _fun_X_nonzero(n$3:class X &) [line 113]\n " shape="box"] - 4 -> 6 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class X * [line 12]\n *n$0.f:int =1 [line 12]\n " shape="box"] + "get_global_ref_div1_method4" -> "get_global_ref_div1_method3" ; +"get_global_ref_div1_method3" [label="3: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 114]\n _=*n$0:class X [line 114]\n n$2=_fun_X_div(n$0:class X &) [line 114]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit X_nonzero \n " color=yellow style=filled] + "get_global_ref_div1_method3" -> "get_global_ref_div1_method2" ; +"get_global_ref_div1_method2" [label="2: Exit get_global_ref_div1_method \n " color=yellow style=filled] -1 [label="1: Start X_nonzero\nFormals: this:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"get_global_ref_div1_method1" [label="1: Start get_global_ref_div1_method\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 111]\n " color=yellow style=filled] - 1 -> 3 ; + "get_global_ref_div1_method1" -> "get_global_ref_div1_method5" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/reference_type_e2e.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/reference_type_e2e.cpp.dot index d7268d289..3b5cfe9a2 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/reference_type_e2e.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/reference_type_e2e.cpp.dot @@ -1,217 +1,217 @@ /* @generated */ digraph iCFG { -56 [label="56: DeclStmt \n *&a:int =2 [line 63]\n " shape="box"] +"ref_div0_function_temp_var6" [label="6: DeclStmt \n *&a:int =2 [line 47]\n " shape="box"] - 56 -> 55 ; -55 [label="55: DeclStmt \n *&b:int =3 [line 64]\n " shape="box"] + "ref_div0_function_temp_var6" -> "ref_div0_function_temp_var5" ; +"ref_div0_function_temp_var5" [label="5: DeclStmt \n *&r:int &=&a [line 48]\n " shape="box"] - 55 -> 54 ; -54 [label="54: DeclStmt \n *&r1:int &=&a [line 65]\n " shape="box"] + "ref_div0_function_temp_var5" -> "ref_div0_function_temp_var4" ; +"ref_div0_function_temp_var4" [label="4: Call _fun_zero_ref \n n$1=*&r:int & [line 49]\n _fun_zero_ref(n$1:int &) [line 49]\n " shape="box"] - 54 -> 53 ; -53 [label="53: DeclStmt \n n$2=*&r1:int & [line 66]\n *&b:int =1 [line 66]\n n$3=*&b:int [line 66]\n *n$2:int =n$3 [line 66]\n *&r2:int &=n$2 [line 66]\n " shape="box"] + "ref_div0_function_temp_var4" -> "ref_div0_function_temp_var3" ; +"ref_div0_function_temp_var3" [label="3: Return Stmt \n n$0=*&a:int [line 50]\n *&return:int =(1 / n$0) [line 50]\n " shape="box"] - 53 -> 52 ; -52 [label="52: BinaryOperatorStmt: Assign \n n$1=*&r2:int & [line 67]\n *n$1:int =0 [line 67]\n " shape="box"] + "ref_div0_function_temp_var3" -> "ref_div0_function_temp_var2" ; +"ref_div0_function_temp_var2" [label="2: Exit ref_div0_function_temp_var \n " color=yellow style=filled] - 52 -> 51 ; -51 [label="51: Return Stmt \n n$0=*&b:int [line 68]\n *&return:int =(1 / n$0) [line 68]\n " shape="box"] +"ref_div0_function_temp_var1" [label="1: Start ref_div0_function_temp_var\nFormals: \nLocals: r:int & a:int \n DECLARE_LOCALS(&return,&r,&a); [line 46]\n " color=yellow style=filled] - 51 -> 50 ; -50 [label="50: Exit ref_div1_nested_assignment \n " color=yellow style=filled] + "ref_div0_function_temp_var1" -> "ref_div0_function_temp_var6" ; +"ptr_div06" [label="6: DeclStmt \n *&a:int =2 [line 14]\n " shape="box"] -49 [label="49: Start ref_div1_nested_assignment\nFormals: \nLocals: r2:int & r1:int & b:int a:int \n DECLARE_LOCALS(&return,&r2,&r1,&b,&a); [line 62]\n " color=yellow style=filled] + "ptr_div06" -> "ptr_div05" ; +"ptr_div05" [label="5: DeclStmt \n *&p:int *=&a [line 15]\n " shape="box"] - 49 -> 56 ; -48 [label="48: DeclStmt \n *&a:int =2 [line 54]\n " shape="box"] + "ptr_div05" -> "ptr_div04" ; +"ptr_div04" [label="4: BinaryOperatorStmt: Assign \n n$1=*&p:int * [line 16]\n *n$1:int =0 [line 16]\n " shape="box"] - 48 -> 47 ; -47 [label="47: DeclStmt \n *&b:int =3 [line 55]\n " shape="box"] + "ptr_div04" -> "ptr_div03" ; +"ptr_div03" [label="3: Return Stmt \n n$0=*&a:int [line 17]\n *&return:int =(1 / n$0) [line 17]\n " shape="box"] - 47 -> 46 ; -46 [label="46: DeclStmt \n *&r1:int &=&a [line 56]\n " shape="box"] + "ptr_div03" -> "ptr_div02" ; +"ptr_div02" [label="2: Exit ptr_div0 \n " color=yellow style=filled] - 46 -> 45 ; -45 [label="45: DeclStmt \n n$2=*&r1:int & [line 57]\n *&b:int =1 [line 57]\n n$3=*&b:int [line 57]\n *n$2:int =n$3 [line 57]\n *&r2:int &=n$2 [line 57]\n " shape="box"] +"ptr_div01" [label="1: Start ptr_div0\nFormals: \nLocals: p:int * a:int \n DECLARE_LOCALS(&return,&p,&a); [line 13]\n " color=yellow style=filled] - 45 -> 44 ; -44 [label="44: BinaryOperatorStmt: Assign \n n$1=*&r2:int & [line 58]\n *n$1:int =0 [line 58]\n " shape="box"] + "ptr_div01" -> "ptr_div06" ; +"ref_div1_nested_assignment8" [label="8: DeclStmt \n *&a:int =2 [line 63]\n " shape="box"] - 44 -> 43 ; -43 [label="43: Return Stmt \n n$0=*&a:int [line 59]\n *&return:int =(1 / n$0) [line 59]\n " shape="box"] + "ref_div1_nested_assignment8" -> "ref_div1_nested_assignment7" ; +"ref_div1_nested_assignment7" [label="7: DeclStmt \n *&b:int =3 [line 64]\n " shape="box"] - 43 -> 42 ; -42 [label="42: Exit ref_div0_nested_assignment \n " color=yellow style=filled] + "ref_div1_nested_assignment7" -> "ref_div1_nested_assignment6" ; +"ref_div1_nested_assignment6" [label="6: DeclStmt \n *&r1:int &=&a [line 65]\n " shape="box"] -41 [label="41: Start ref_div0_nested_assignment\nFormals: \nLocals: r2:int & r1:int & b:int a:int \n DECLARE_LOCALS(&return,&r2,&r1,&b,&a); [line 53]\n " color=yellow style=filled] + "ref_div1_nested_assignment6" -> "ref_div1_nested_assignment5" ; +"ref_div1_nested_assignment5" [label="5: DeclStmt \n n$2=*&r1:int & [line 66]\n *&b:int =1 [line 66]\n n$3=*&b:int [line 66]\n *n$2:int =n$3 [line 66]\n *&r2:int &=n$2 [line 66]\n " shape="box"] - 41 -> 48 ; -40 [label="40: DeclStmt \n *&a:int =2 [line 47]\n " shape="box"] + "ref_div1_nested_assignment5" -> "ref_div1_nested_assignment4" ; +"ref_div1_nested_assignment4" [label="4: BinaryOperatorStmt: Assign \n n$1=*&r2:int & [line 67]\n *n$1:int =0 [line 67]\n " shape="box"] - 40 -> 39 ; -39 [label="39: DeclStmt \n *&r:int &=&a [line 48]\n " shape="box"] + "ref_div1_nested_assignment4" -> "ref_div1_nested_assignment3" ; +"ref_div1_nested_assignment3" [label="3: Return Stmt \n n$0=*&b:int [line 68]\n *&return:int =(1 / n$0) [line 68]\n " shape="box"] - 39 -> 38 ; -38 [label="38: Call _fun_zero_ref \n n$1=*&r:int & [line 49]\n _fun_zero_ref(n$1:int &) [line 49]\n " shape="box"] + "ref_div1_nested_assignment3" -> "ref_div1_nested_assignment2" ; +"ref_div1_nested_assignment2" [label="2: Exit ref_div1_nested_assignment \n " color=yellow style=filled] - 38 -> 37 ; -37 [label="37: Return Stmt \n n$0=*&a:int [line 50]\n *&return:int =(1 / n$0) [line 50]\n " shape="box"] +"ref_div1_nested_assignment1" [label="1: Start ref_div1_nested_assignment\nFormals: \nLocals: r2:int & r1:int & b:int a:int \n DECLARE_LOCALS(&return,&r2,&r1,&b,&a); [line 62]\n " color=yellow style=filled] - 37 -> 36 ; -36 [label="36: Exit ref_div0_function_temp_var \n " color=yellow style=filled] + "ref_div1_nested_assignment1" -> "ref_div1_nested_assignment8" ; +"ref_div06" [label="6: DeclStmt \n *&a:int =2 [line 34]\n " shape="box"] -35 [label="35: Start ref_div0_function_temp_var\nFormals: \nLocals: r:int & a:int \n DECLARE_LOCALS(&return,&r,&a); [line 46]\n " color=yellow style=filled] + "ref_div06" -> "ref_div05" ; +"ref_div05" [label="5: DeclStmt \n *&r:int &=&a [line 35]\n " shape="box"] - 35 -> 40 ; -34 [label="34: DeclStmt \n *&a:int =2 [line 41]\n " shape="box"] + "ref_div05" -> "ref_div04" ; +"ref_div04" [label="4: BinaryOperatorStmt: Assign \n n$1=*&r:int & [line 36]\n *n$1:int =0 [line 36]\n " shape="box"] - 34 -> 33 ; -33 [label="33: Call _fun_zero_ref \n _fun_zero_ref(&a:int &) [line 42]\n " shape="box"] + "ref_div04" -> "ref_div03" ; +"ref_div03" [label="3: Return Stmt \n n$0=*&a:int [line 37]\n *&return:int =(1 / n$0) [line 37]\n " shape="box"] - 33 -> 32 ; -32 [label="32: Return Stmt \n n$0=*&a:int [line 43]\n *&return:int =(1 / n$0) [line 43]\n " shape="box"] + "ref_div03" -> "ref_div02" ; +"ref_div02" [label="2: Exit ref_div0 \n " color=yellow style=filled] - 32 -> 31 ; -31 [label="31: Exit ref_div0_function \n " color=yellow style=filled] +"ref_div01" [label="1: Start ref_div0\nFormals: \nLocals: r:int & a:int \n DECLARE_LOCALS(&return,&r,&a); [line 33]\n " color=yellow style=filled] -30 [label="30: Start ref_div0_function\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 40]\n " color=yellow style=filled] + "ref_div01" -> "ref_div06" ; +"zero_ptr3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&p:int * [line 10]\n *n$0:int =0 [line 10]\n " shape="box"] - 30 -> 34 ; -29 [label="29: DeclStmt \n *&a:int =2 [line 34]\n " shape="box"] + "zero_ptr3" -> "zero_ptr2" ; +"zero_ptr2" [label="2: Exit zero_ptr \n " color=yellow style=filled] - 29 -> 28 ; -28 [label="28: DeclStmt \n *&r:int &=&a [line 35]\n " shape="box"] +"zero_ptr1" [label="1: Start zero_ptr\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 28 -> 27 ; -27 [label="27: BinaryOperatorStmt: Assign \n n$1=*&r:int & [line 36]\n *n$1:int =0 [line 36]\n " shape="box"] + "zero_ptr1" -> "zero_ptr3" ; +"ref_div0_nested_assignment8" [label="8: DeclStmt \n *&a:int =2 [line 54]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Return Stmt \n n$0=*&a:int [line 37]\n *&return:int =(1 / n$0) [line 37]\n " shape="box"] + "ref_div0_nested_assignment8" -> "ref_div0_nested_assignment7" ; +"ref_div0_nested_assignment7" [label="7: DeclStmt \n *&b:int =3 [line 55]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Exit ref_div0 \n " color=yellow style=filled] + "ref_div0_nested_assignment7" -> "ref_div0_nested_assignment6" ; +"ref_div0_nested_assignment6" [label="6: DeclStmt \n *&r1:int &=&a [line 56]\n " shape="box"] -24 [label="24: Start ref_div0\nFormals: \nLocals: r:int & a:int \n DECLARE_LOCALS(&return,&r,&a); [line 33]\n " color=yellow style=filled] + "ref_div0_nested_assignment6" -> "ref_div0_nested_assignment5" ; +"ref_div0_nested_assignment5" [label="5: DeclStmt \n n$2=*&r1:int & [line 57]\n *&b:int =1 [line 57]\n n$3=*&b:int [line 57]\n *n$2:int =n$3 [line 57]\n *&r2:int &=n$2 [line 57]\n " shape="box"] - 24 -> 29 ; -23 [label="23: DeclStmt \n *&a:int =2 [line 27]\n " shape="box"] + "ref_div0_nested_assignment5" -> "ref_div0_nested_assignment4" ; +"ref_div0_nested_assignment4" [label="4: BinaryOperatorStmt: Assign \n n$1=*&r2:int & [line 58]\n *n$1:int =0 [line 58]\n " shape="box"] - 23 -> 22 ; -22 [label="22: DeclStmt \n *&r:int *=&a [line 28]\n " shape="box"] + "ref_div0_nested_assignment4" -> "ref_div0_nested_assignment3" ; +"ref_div0_nested_assignment3" [label="3: Return Stmt \n n$0=*&a:int [line 59]\n *&return:int =(1 / n$0) [line 59]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Call _fun_zero_ptr \n n$1=*&r:int * [line 29]\n _fun_zero_ptr(n$1:int *) [line 29]\n " shape="box"] + "ref_div0_nested_assignment3" -> "ref_div0_nested_assignment2" ; +"ref_div0_nested_assignment2" [label="2: Exit ref_div0_nested_assignment \n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Return Stmt \n n$0=*&a:int [line 30]\n *&return:int =(1 / n$0) [line 30]\n " shape="box"] +"ref_div0_nested_assignment1" [label="1: Start ref_div0_nested_assignment\nFormals: \nLocals: r2:int & r1:int & b:int a:int \n DECLARE_LOCALS(&return,&r2,&r1,&b,&a); [line 53]\n " color=yellow style=filled] - 20 -> 19 ; -19 [label="19: Exit ptr_div0_function_temp_var \n " color=yellow style=filled] + "ref_div0_nested_assignment1" -> "ref_div0_nested_assignment8" ; +"ptr_div0_function_temp_var6" [label="6: DeclStmt \n *&a:int =2 [line 27]\n " shape="box"] -18 [label="18: Start ptr_div0_function_temp_var\nFormals: \nLocals: r:int * a:int \n DECLARE_LOCALS(&return,&r,&a); [line 26]\n " color=yellow style=filled] + "ptr_div0_function_temp_var6" -> "ptr_div0_function_temp_var5" ; +"ptr_div0_function_temp_var5" [label="5: DeclStmt \n *&r:int *=&a [line 28]\n " shape="box"] - 18 -> 23 ; -17 [label="17: DeclStmt \n *&a:int =2 [line 21]\n " shape="box"] + "ptr_div0_function_temp_var5" -> "ptr_div0_function_temp_var4" ; +"ptr_div0_function_temp_var4" [label="4: Call _fun_zero_ptr \n n$1=*&r:int * [line 29]\n _fun_zero_ptr(n$1:int *) [line 29]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Call _fun_zero_ptr \n _fun_zero_ptr(&a:int *) [line 22]\n " shape="box"] + "ptr_div0_function_temp_var4" -> "ptr_div0_function_temp_var3" ; +"ptr_div0_function_temp_var3" [label="3: Return Stmt \n n$0=*&a:int [line 30]\n *&return:int =(1 / n$0) [line 30]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Return Stmt \n n$0=*&a:int [line 23]\n *&return:int =(1 / n$0) [line 23]\n " shape="box"] + "ptr_div0_function_temp_var3" -> "ptr_div0_function_temp_var2" ; +"ptr_div0_function_temp_var2" [label="2: Exit ptr_div0_function_temp_var \n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit ptr_div0_function \n " color=yellow style=filled] +"ptr_div0_function_temp_var1" [label="1: Start ptr_div0_function_temp_var\nFormals: \nLocals: r:int * a:int \n DECLARE_LOCALS(&return,&r,&a); [line 26]\n " color=yellow style=filled] -13 [label="13: Start ptr_div0_function\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 20]\n " color=yellow style=filled] + "ptr_div0_function_temp_var1" -> "ptr_div0_function_temp_var6" ; +"ptr_div0_function5" [label="5: DeclStmt \n *&a:int =2 [line 21]\n " shape="box"] - 13 -> 17 ; -12 [label="12: DeclStmt \n *&a:int =2 [line 14]\n " shape="box"] + "ptr_div0_function5" -> "ptr_div0_function4" ; +"ptr_div0_function4" [label="4: Call _fun_zero_ptr \n _fun_zero_ptr(&a:int *) [line 22]\n " shape="box"] - 12 -> 11 ; -11 [label="11: DeclStmt \n *&p:int *=&a [line 15]\n " shape="box"] + "ptr_div0_function4" -> "ptr_div0_function3" ; +"ptr_div0_function3" [label="3: Return Stmt \n n$0=*&a:int [line 23]\n *&return:int =(1 / n$0) [line 23]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$1=*&p:int * [line 16]\n *n$1:int =0 [line 16]\n " shape="box"] + "ptr_div0_function3" -> "ptr_div0_function2" ; +"ptr_div0_function2" [label="2: Exit ptr_div0_function \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Return Stmt \n n$0=*&a:int [line 17]\n *&return:int =(1 / n$0) [line 17]\n " shape="box"] +"ptr_div0_function1" [label="1: Start ptr_div0_function\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 20]\n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit ptr_div0 \n " color=yellow style=filled] + "ptr_div0_function1" -> "ptr_div0_function5" ; +"ref_div0_function5" [label="5: DeclStmt \n *&a:int =2 [line 41]\n " shape="box"] -7 [label="7: Start ptr_div0\nFormals: \nLocals: p:int * a:int \n DECLARE_LOCALS(&return,&p,&a); [line 13]\n " color=yellow style=filled] + "ref_div0_function5" -> "ref_div0_function4" ; +"ref_div0_function4" [label="4: Call _fun_zero_ref \n _fun_zero_ref(&a:int &) [line 42]\n " shape="box"] - 7 -> 12 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&p:int & [line 11]\n *n$0:int =0 [line 11]\n " shape="box"] + "ref_div0_function4" -> "ref_div0_function3" ; +"ref_div0_function3" [label="3: Return Stmt \n n$0=*&a:int [line 43]\n *&return:int =(1 / n$0) [line 43]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit zero_ref \n " color=yellow style=filled] + "ref_div0_function3" -> "ref_div0_function2" ; +"ref_div0_function2" [label="2: Exit ref_div0_function \n " color=yellow style=filled] -4 [label="4: Start zero_ref\nFormals: p:int &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"ref_div0_function1" [label="1: Start ref_div0_function\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 40]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&p:int * [line 10]\n *n$0:int =0 [line 10]\n " shape="box"] + "ref_div0_function1" -> "ref_div0_function5" ; +"zero_ref3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&p:int & [line 11]\n *n$0:int =0 [line 11]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit zero_ptr \n " color=yellow style=filled] + "zero_ref3" -> "zero_ref2" ; +"zero_ref2" [label="2: Exit zero_ref \n " color=yellow style=filled] -1 [label="1: Start zero_ptr\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"zero_ref1" [label="1: Start zero_ref\nFormals: p:int &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 1 -> 3 ; + "zero_ref1" -> "zero_ref3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/temporary_lvalue.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/temporary_lvalue.cpp.dot index 3148daa44..ee6a11a37 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/temporary_lvalue.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/temporary_lvalue.cpp.dot @@ -1,55 +1,55 @@ /* @generated */ digraph iCFG { -14 [label="14: DeclStmt \n *&a:int =0 [line 21]\n " shape="box"] +"div3" [label="3: Return Stmt \n n$0=*&v:int & [line 10]\n n$1=*n$0:int [line 10]\n *&return:int =(1 / n$1) [line 10]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Return Stmt \n n$0=_fun_div(&a:int &) [line 22]\n *&return:int =n$0 [line 22]\n " shape="box"] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit div0_no_const_ref \n " color=yellow style=filled] +"div1" [label="1: Start div\nFormals: v:int &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] -11 [label="11: Start div0_no_const_ref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 20]\n " color=yellow style=filled] + "div1" -> "div3" ; +"div0_init_expr4" [label="4: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$2:int =0 [line 13]\n *&a:int &=&0$?%__sil_tmpSIL_materialize_temp__n$2 [line 13]\n " shape="box"] - 11 -> 14 ; -10 [label="10: Return Stmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0:int =0 [line 17]\n n$1=_fun_div(&0$?%__sil_tmpSIL_materialize_temp__n$0:int &) [line 17]\n *&return:int =n$1 [line 17]\n " shape="box"] + "div0_init_expr4" -> "div0_init_expr3" ; +"div0_init_expr3" [label="3: Return Stmt \n n$0=*&a:int & [line 14]\n n$1=_fun_div(n$0:int &) [line 14]\n *&return:int =n$1 [line 14]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Exit div0_function_param_cast \n " color=yellow style=filled] + "div0_init_expr3" -> "div0_init_expr2" ; +"div0_init_expr2" [label="2: Exit div0_init_expr \n " color=yellow style=filled] -8 [label="8: Start div0_function_param_cast\nFormals: \nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 17]\n " color=yellow style=filled] +"div0_init_expr1" [label="1: Start div0_init_expr\nFormals: \nLocals: a:int & 0$?%__sil_tmpSIL_materialize_temp__n$2:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_materialize_temp__n$2); [line 12]\n " color=yellow style=filled] - 8 -> 10 ; -7 [label="7: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$2:int =0 [line 13]\n *&a:int &=&0$?%__sil_tmpSIL_materialize_temp__n$2 [line 13]\n " shape="box"] + "div0_init_expr1" -> "div0_init_expr4" ; +"div0_function_param_cast3" [label="3: Return Stmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0:int =0 [line 17]\n n$1=_fun_div(&0$?%__sil_tmpSIL_materialize_temp__n$0:int &) [line 17]\n *&return:int =n$1 [line 17]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&a:int & [line 14]\n n$1=_fun_div(n$0:int &) [line 14]\n *&return:int =n$1 [line 14]\n " shape="box"] + "div0_function_param_cast3" -> "div0_function_param_cast2" ; +"div0_function_param_cast2" [label="2: Exit div0_function_param_cast \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit div0_init_expr \n " color=yellow style=filled] +"div0_function_param_cast1" [label="1: Start div0_function_param_cast\nFormals: \nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$0:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 17]\n " color=yellow style=filled] -4 [label="4: Start div0_init_expr\nFormals: \nLocals: a:int & 0$?%__sil_tmpSIL_materialize_temp__n$2:int \n DECLARE_LOCALS(&return,&a,&0$?%__sil_tmpSIL_materialize_temp__n$2); [line 12]\n " color=yellow style=filled] + "div0_function_param_cast1" -> "div0_function_param_cast3" ; +"div0_no_const_ref4" [label="4: DeclStmt \n *&a:int =0 [line 21]\n " shape="box"] - 4 -> 7 ; -3 [label="3: Return Stmt \n n$0=*&v:int & [line 10]\n n$1=*n$0:int [line 10]\n *&return:int =(1 / n$1) [line 10]\n " shape="box"] + "div0_no_const_ref4" -> "div0_no_const_ref3" ; +"div0_no_const_ref3" [label="3: Return Stmt \n n$0=_fun_div(&a:int &) [line 22]\n *&return:int =n$0 [line 22]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit div \n " color=yellow style=filled] + "div0_no_const_ref3" -> "div0_no_const_ref2" ; +"div0_no_const_ref2" [label="2: Exit div0_no_const_ref \n " color=yellow style=filled] -1 [label="1: Start div\nFormals: v:int &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"div0_no_const_ref1" [label="1: Start div0_no_const_ref\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 20]\n " color=yellow style=filled] - 1 -> 3 ; + "div0_no_const_ref1" -> "div0_no_const_ref4" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/reference/unbox.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/reference/unbox.cpp.dot index 966143203..184e70ae4 100644 --- a/infer/tests/codetoanalyze/cpp/shared/reference/unbox.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/reference/unbox.cpp.dot @@ -1,90 +1,90 @@ /* @generated */ digraph iCFG { -23 [label="23: DeclStmt \n *&a:int =3 [line 28]\n " shape="box"] +"fun_r3" [label="3: Return Stmt \n n$0=*&p:int & [line 12]\n n$1=*n$0:int [line 12]\n *&return:int =n$1 [line 12]\n " shape="box"] - 23 -> 22 ; -22 [label="22: DeclStmt \n *&p:int *=&a [line 29]\n " shape="box"] + "fun_r3" -> "fun_r2" ; +"fun_r2" [label="2: Exit fun_r \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Call _fun_fun_p \n n$5=*&p:int * [line 31]\n n$6=_fun_fun_p(n$5:int *) [line 31]\n " shape="box"] +"fun_r1" [label="1: Start fun_r\nFormals: p:int &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Call _fun_fun_v \n n$2=*&p:int * [line 32]\n n$3=*n$2:int [line 32]\n n$4=_fun_fun_v(n$3:int ) [line 32]\n " shape="box"] + "fun_r1" -> "fun_r3" ; +"unbox_ptr7" [label="7: DeclStmt \n *&a:int =3 [line 28]\n " shape="box"] - 20 -> 19 ; -19 [label="19: Call _fun_fun_r \n n$0=*&p:int * [line 33]\n n$1=_fun_fun_r(n$0:int &) [line 33]\n " shape="box"] + "unbox_ptr7" -> "unbox_ptr6" ; +"unbox_ptr6" [label="6: DeclStmt \n *&p:int *=&a [line 29]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit unbox_ptr \n " color=yellow style=filled] + "unbox_ptr6" -> "unbox_ptr5" ; +"unbox_ptr5" [label="5: Call _fun_fun_p \n n$5=*&p:int * [line 31]\n n$6=_fun_fun_p(n$5:int *) [line 31]\n " shape="box"] -17 [label="17: Start unbox_ptr\nFormals: \nLocals: p:int * a:int \n DECLARE_LOCALS(&return,&p,&a); [line 27]\n " color=yellow style=filled] + "unbox_ptr5" -> "unbox_ptr4" ; +"unbox_ptr4" [label="4: Call _fun_fun_v \n n$2=*&p:int * [line 32]\n n$3=*n$2:int [line 32]\n n$4=_fun_fun_v(n$3:int ) [line 32]\n " shape="box"] - 17 -> 23 ; -16 [label="16: DeclStmt \n *&a:int =3 [line 18]\n " shape="box"] + "unbox_ptr4" -> "unbox_ptr3" ; +"unbox_ptr3" [label="3: Call _fun_fun_r \n n$0=*&p:int * [line 33]\n n$1=_fun_fun_r(n$0:int &) [line 33]\n " shape="box"] - 16 -> 15 ; -15 [label="15: DeclStmt \n *&r:int &=&a [line 19]\n " shape="box"] + "unbox_ptr3" -> "unbox_ptr2" ; +"unbox_ptr2" [label="2: Exit unbox_ptr \n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Call _fun_fun_p \n n$5=*&r:int & [line 21]\n n$6=_fun_fun_p(n$5:int *) [line 21]\n " shape="box"] +"unbox_ptr1" [label="1: Start unbox_ptr\nFormals: \nLocals: p:int * a:int \n DECLARE_LOCALS(&return,&p,&a); [line 27]\n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Call _fun_fun_v \n n$2=*&r:int & [line 22]\n n$3=*n$2:int [line 22]\n n$4=_fun_fun_v(n$3:int ) [line 22]\n " shape="box"] + "unbox_ptr1" -> "unbox_ptr7" ; +"fun_v3" [label="3: Return Stmt \n n$0=*&p:int [line 11]\n *&return:int =n$0 [line 11]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Call _fun_fun_r \n n$0=*&r:int & [line 23]\n n$1=_fun_fun_r(n$0:int &) [line 23]\n " shape="box"] + "fun_v3" -> "fun_v2" ; +"fun_v2" [label="2: Exit fun_v \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: Exit unbox_ref \n " color=yellow style=filled] +"fun_v1" [label="1: Start fun_v\nFormals: p:int \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] -10 [label="10: Start unbox_ref\nFormals: \nLocals: r:int & a:int \n DECLARE_LOCALS(&return,&r,&a); [line 17]\n " color=yellow style=filled] + "fun_v1" -> "fun_v3" ; +"unbox_ref7" [label="7: DeclStmt \n *&a:int =3 [line 18]\n " shape="box"] - 10 -> 16 ; -9 [label="9: Return Stmt \n n$0=*&p:int & [line 12]\n n$1=*n$0:int [line 12]\n *&return:int =n$1 [line 12]\n " shape="box"] + "unbox_ref7" -> "unbox_ref6" ; +"unbox_ref6" [label="6: DeclStmt \n *&r:int &=&a [line 19]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit fun_r \n " color=yellow style=filled] + "unbox_ref6" -> "unbox_ref5" ; +"unbox_ref5" [label="5: Call _fun_fun_p \n n$5=*&r:int & [line 21]\n n$6=_fun_fun_p(n$5:int *) [line 21]\n " shape="box"] -7 [label="7: Start fun_r\nFormals: p:int &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] + "unbox_ref5" -> "unbox_ref4" ; +"unbox_ref4" [label="4: Call _fun_fun_v \n n$2=*&r:int & [line 22]\n n$3=*n$2:int [line 22]\n n$4=_fun_fun_v(n$3:int ) [line 22]\n " shape="box"] - 7 -> 9 ; -6 [label="6: Return Stmt \n n$0=*&p:int [line 11]\n *&return:int =n$0 [line 11]\n " shape="box"] + "unbox_ref4" -> "unbox_ref3" ; +"unbox_ref3" [label="3: Call _fun_fun_r \n n$0=*&r:int & [line 23]\n n$1=_fun_fun_r(n$0:int &) [line 23]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit fun_v \n " color=yellow style=filled] + "unbox_ref3" -> "unbox_ref2" ; +"unbox_ref2" [label="2: Exit unbox_ref \n " color=yellow style=filled] -4 [label="4: Start fun_v\nFormals: p:int \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"unbox_ref1" [label="1: Start unbox_ref\nFormals: \nLocals: r:int & a:int \n DECLARE_LOCALS(&return,&r,&a); [line 17]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&p:int * [line 10]\n n$1=*n$0:int [line 10]\n *&return:int =n$1 [line 10]\n " shape="box"] + "unbox_ref1" -> "unbox_ref7" ; +"fun_p3" [label="3: Return Stmt \n n$0=*&p:int * [line 10]\n n$1=*n$0:int [line 10]\n *&return:int =n$1 [line 10]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit fun_p \n " color=yellow style=filled] + "fun_p3" -> "fun_p2" ; +"fun_p2" [label="2: Exit fun_p \n " color=yellow style=filled] -1 [label="1: Start fun_p\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"fun_p1" [label="1: Start fun_p\nFormals: p:int *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 1 -> 3 ; + "fun_p1" -> "fun_p3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/templates/class_template_instantiate.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/templates/class_template_instantiate.cpp.dot index 9daca80cc..512de5b55 100644 --- a/infer/tests/codetoanalyze/cpp/shared/templates/class_template_instantiate.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/templates/class_template_instantiate.cpp.dot @@ -1,113 +1,113 @@ /* @generated */ digraph iCFG { -30 [label="30: Return Stmt \n n$0=*&s:class ExecStore & [line 41]\n _=*n$0.f:class Choose2 [line 41]\n n$2=_fun_Choose2_extra(n$0.f:class Choose2 &,1:int ) [line 41]\n *&return:int =n$2 [line 41]\n " shape="box"] +"Choose1_div3" [label="3: Return Stmt \n n$0=*&a:int [line 11]\n *&return:int =(1 / n$0) [line 11]\n " shape="box"] - 30 -> 29 ; -29 [label="29: Exit choose2_div1_extra \n " color=yellow style=filled] + "Choose1_div3" -> "Choose1_div2" ; +"Choose1_div2" [label="2: Exit Choose1_div \n " color=yellow style=filled] -28 [label="28: Start choose2_div1_extra\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 41]\n " color=yellow style=filled] +"Choose1_div1" [label="1: Start Choose1_div\nFormals: this:class Choose1 * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 28 -> 30 ; -27 [label="27: Return Stmt \n n$0=*&s:class ExecStore & [line 39]\n _=*n$0.f:class Choose2 [line 39]\n n$2=_fun_Choose2_extra(n$0.f:class Choose2 &,0:int ) [line 39]\n *&return:int =n$2 [line 39]\n " shape="box"] + "Choose1_div1" -> "Choose1_div3" ; +"choose2_div0_extra3" [label="3: Return Stmt \n n$0=*&s:class ExecStore & [line 39]\n _=*n$0.f:class Choose2 [line 39]\n n$2=_fun_Choose2_extra(n$0.f:class Choose2 &,0:int ) [line 39]\n *&return:int =n$2 [line 39]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Exit choose2_div0_extra \n " color=yellow style=filled] + "choose2_div0_extra3" -> "choose2_div0_extra2" ; +"choose2_div0_extra2" [label="2: Exit choose2_div0_extra \n " color=yellow style=filled] -25 [label="25: Start choose2_div0_extra\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 39]\n " color=yellow style=filled] +"choose2_div0_extra1" [label="1: Start choose2_div0_extra\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 39]\n " color=yellow style=filled] - 25 -> 27 ; -24 [label="24: Return Stmt \n n$0=*&s:class ExecStore & [line 36]\n _=*n$0:class ExecStore [line 36]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,1:int ) [line 36]\n *&return:int =n$2 [line 36]\n " shape="box"] + "choose2_div0_extra1" -> "choose2_div0_extra3" ; +"ExecStore_call_div3" [label="3: Return Stmt \n n$0=*&this:class ExecStore * [line 26]\n _=*n$0.f:class Choose1 [line 26]\n n$2=*&a:int [line 26]\n n$3=_fun_Choose1_div(n$0.f:class Choose1 &,n$2:int ,0:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Exit choose2_div0_no_report \n " color=yellow style=filled] + "ExecStore_call_div3" -> "ExecStore_call_div2" ; +"ExecStore_call_div2" [label="2: Exit ExecStore_call_div \n " color=yellow style=filled] -22 [label="22: Start choose2_div0_no_report\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] +"ExecStore_call_div1" [label="1: Start ExecStore_call_div\nFormals: this:class ExecStore * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 22 -> 24 ; -21 [label="21: Return Stmt \n n$0=*&s:class ExecStore & [line 32]\n _=*n$0:class ExecStore [line 32]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,1:int ) [line 32]\n *&return:int =n$2 [line 32]\n " shape="box"] + "ExecStore_call_div1" -> "ExecStore_call_div3" ; +"Choose2_div3" [label="3: Return Stmt \n n$0=*&b:int [line 15]\n *&return:int =(1 / n$0) [line 15]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Exit choose1_div1 \n " color=yellow style=filled] + "Choose2_div3" -> "Choose2_div2" ; +"Choose2_div2" [label="2: Exit Choose2_div \n " color=yellow style=filled] -19 [label="19: Start choose1_div1\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] +"Choose2_div1" [label="1: Start Choose2_div\nFormals: this:class Choose2 * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 19 -> 21 ; -18 [label="18: Return Stmt \n n$0=*&s:class ExecStore & [line 30]\n _=*n$0:class ExecStore [line 30]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,0:int ) [line 30]\n *&return:int =n$2 [line 30]\n " shape="box"] + "Choose2_div1" -> "Choose2_div3" ; +"choose2_div1_extra3" [label="3: Return Stmt \n n$0=*&s:class ExecStore & [line 41]\n _=*n$0.f:class Choose2 [line 41]\n n$2=_fun_Choose2_extra(n$0.f:class Choose2 &,1:int ) [line 41]\n *&return:int =n$2 [line 41]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit choose1_div0 \n " color=yellow style=filled] + "choose2_div1_extra3" -> "choose2_div1_extra2" ; +"choose2_div1_extra2" [label="2: Exit choose2_div1_extra \n " color=yellow style=filled] -16 [label="16: Start choose1_div0\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] +"choose2_div1_extra1" [label="1: Start choose2_div1_extra\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 41]\n " color=yellow style=filled] - 16 -> 18 ; -15 [label="15: Return Stmt \n n$0=*&this:class ExecStore * [line 26]\n _=*n$0.f:class Choose2 [line 26]\n n$2=*&a:int [line 26]\n n$3=_fun_Choose2_div(n$0.f:class Choose2 &,n$2:int ,0:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] + "choose2_div1_extra1" -> "choose2_div1_extra3" ; +"choose1_div03" [label="3: Return Stmt \n n$0=*&s:class ExecStore & [line 30]\n _=*n$0:class ExecStore [line 30]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,0:int ) [line 30]\n *&return:int =n$2 [line 30]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit ExecStore_call_div \n " color=yellow style=filled] + "choose1_div03" -> "choose1_div02" ; +"choose1_div02" [label="2: Exit choose1_div0 \n " color=yellow style=filled] -13 [label="13: Start ExecStore_call_div\nFormals: this:class ExecStore * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +"choose1_div01" [label="1: Start choose1_div0\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Return Stmt \n n$0=*&this:class ExecStore * [line 26]\n _=*n$0.f:class Choose1 [line 26]\n n$2=*&a:int [line 26]\n n$3=_fun_Choose1_div(n$0.f:class Choose1 &,n$2:int ,0:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] + "choose1_div01" -> "choose1_div03" ; +"choose1_div13" [label="3: Return Stmt \n n$0=*&s:class ExecStore & [line 32]\n _=*n$0:class ExecStore [line 32]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,1:int ) [line 32]\n *&return:int =n$2 [line 32]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit ExecStore_call_div \n " color=yellow style=filled] + "choose1_div13" -> "choose1_div12" ; +"choose1_div12" [label="2: Exit choose1_div1 \n " color=yellow style=filled] -10 [label="10: Start ExecStore_call_div\nFormals: this:class ExecStore * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +"choose1_div11" [label="1: Start choose1_div1\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Return Stmt \n n$0=*&a:int [line 18]\n *&return:int =(1 / n$0) [line 18]\n " shape="box"] + "choose1_div11" -> "choose1_div13" ; +"Choose2_extra3" [label="3: Return Stmt \n n$0=*&a:int [line 18]\n *&return:int =(1 / n$0) [line 18]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit Choose2_extra \n " color=yellow style=filled] + "Choose2_extra3" -> "Choose2_extra2" ; +"Choose2_extra2" [label="2: Exit Choose2_extra \n " color=yellow style=filled] -7 [label="7: Start Choose2_extra\nFormals: this:class Choose2 * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"Choose2_extra1" [label="1: Start Choose2_extra\nFormals: this:class Choose2 * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Return Stmt \n n$0=*&b:int [line 15]\n *&return:int =(1 / n$0) [line 15]\n " shape="box"] + "Choose2_extra1" -> "Choose2_extra3" ; +"choose2_div0_no_report3" [label="3: Return Stmt \n n$0=*&s:class ExecStore & [line 36]\n _=*n$0:class ExecStore [line 36]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,1:int ) [line 36]\n *&return:int =n$2 [line 36]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit Choose2_div \n " color=yellow style=filled] + "choose2_div0_no_report3" -> "choose2_div0_no_report2" ; +"choose2_div0_no_report2" [label="2: Exit choose2_div0_no_report \n " color=yellow style=filled] -4 [label="4: Start Choose2_div\nFormals: this:class Choose2 * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"choose2_div0_no_report1" [label="1: Start choose2_div0_no_report\nFormals: s:class ExecStore &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&a:int [line 11]\n *&return:int =(1 / n$0) [line 11]\n " shape="box"] + "choose2_div0_no_report1" -> "choose2_div0_no_report3" ; +"ExecStore_call_div3" [label="3: Return Stmt \n n$0=*&this:class ExecStore * [line 26]\n _=*n$0.f:class Choose2 [line 26]\n n$2=*&a:int [line 26]\n n$3=_fun_Choose2_div(n$0.f:class Choose2 &,n$2:int ,0:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Choose1_div \n " color=yellow style=filled] + "ExecStore_call_div3" -> "ExecStore_call_div2" ; +"ExecStore_call_div2" [label="2: Exit ExecStore_call_div \n " color=yellow style=filled] -1 [label="1: Start Choose1_div\nFormals: this:class Choose1 * a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"ExecStore_call_div1" [label="1: Start ExecStore_call_div\nFormals: this:class ExecStore * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 1 -> 3 ; + "ExecStore_call_div1" -> "ExecStore_call_div3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/templates/function.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/templates/function.cpp.dot index e6c9d52fc..c4234fb0c 100644 --- a/infer/tests/codetoanalyze/cpp/shared/templates/function.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/templates/function.cpp.dot @@ -1,184 +1,184 @@ /* @generated */ digraph iCFG { -49 [label="49: Return Stmt \n n$0=_fun_function::createAndGetVal() [line 74]\n n$1=_fun_function::createAndGetVal() [line 74]\n *&return:int =(n$0 / n$1) [line 74]\n " shape="box"] +"function::X3_get3" [label="3: Return Stmt \n *&return:int =0 [line 21]\n " shape="box"] - 49 -> 48 ; -48 [label="48: Exit function::div1_create_and_get_val \n " color=yellow style=filled] + "function::X3_get3" -> "function::X3_get2" ; +"function::X3_get2" [label="2: Exit function::X3_get \n " color=yellow style=filled] -47 [label="47: Start function::div1_create_and_get_val\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 73]\n " color=yellow style=filled] +"function::X3_get1" [label="1: Start function::X3_get\nFormals: this:class function::X3 *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 47 -> 49 ; -46 [label="46: Return Stmt \n n$0=_fun_function::createAndGetVal() [line 70]\n n$1=_fun_function::createAndGetVal() [line 70]\n *&return:int =(n$0 / n$1) [line 70]\n " shape="box"] + "function::X3_get1" -> "function::X3_get3" ; +"function::div1_create_and_get_val3" [label="3: Return Stmt \n n$0=_fun_function::createAndGetVal() [line 74]\n n$1=_fun_function::createAndGetVal() [line 74]\n *&return:int =(n$0 / n$1) [line 74]\n " shape="box"] - 46 -> 45 ; -45 [label="45: Exit function::div0_create_and_get_val \n " color=yellow style=filled] + "function::div1_create_and_get_val3" -> "function::div1_create_and_get_val2" ; +"function::div1_create_and_get_val2" [label="2: Exit function::div1_create_and_get_val \n " color=yellow style=filled] -44 [label="44: Start function::div0_create_and_get_val\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 69]\n " color=yellow style=filled] +"function::div1_create_and_get_val1" [label="1: Start function::div1_create_and_get_val\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 73]\n " color=yellow style=filled] - 44 -> 46 ; -43 [label="43: DeclStmt \n _fun_function::X1_X1(&x1:class function::X1 *) [line 64]\n " shape="box"] + "function::div1_create_and_get_val1" -> "function::div1_create_and_get_val3" ; +"function::createAndGetVal4" [label="4: DeclStmt \n _fun_function::X3_X3(&x:class function::X3 *) [line 37]\n " shape="box"] - 43 -> 42 ; -42 [label="42: DeclStmt \n _fun_function::X3_X3(&x3:class function::X3 *) [line 65]\n " shape="box"] + "function::createAndGetVal4" -> "function::createAndGetVal3" ; +"function::createAndGetVal3" [label="3: Return Stmt \n n$0=_fun_function::getVal(&x:class function::X3 &) [line 38]\n *&return:int =n$0 [line 38]\n " shape="box"] - 42 -> 41 ; -41 [label="41: Return Stmt \n n$0=_fun_function::getVal(&x3:class function::X3 &) [line 66]\n n$1=_fun_function::getVal(&x1:class function::X1 &) [line 66]\n *&return:int =(n$0 / n$1) [line 66]\n " shape="box"] + "function::createAndGetVal3" -> "function::createAndGetVal2" ; +"function::createAndGetVal2" [label="2: Exit function::createAndGetVal \n " color=yellow style=filled] - 41 -> 40 ; -40 [label="40: Exit function::div1_get_val \n " color=yellow style=filled] +"function::createAndGetVal1" [label="1: Start function::createAndGetVal\nFormals: \nLocals: x:class function::X3 \n DECLARE_LOCALS(&return,&x); [line 36]\n " color=yellow style=filled] -39 [label="39: Start function::div1_get_val\nFormals: \nLocals: x3:class function::X3 x1:class function::X1 \n DECLARE_LOCALS(&return,&x3,&x1); [line 63]\n " color=yellow style=filled] + "function::createAndGetVal1" -> "function::createAndGetVal4" ; +"function::createAndGetVal4" [label="4: DeclStmt \n _fun_function::X1_X1(&x:class function::X1 *) [line 37]\n " shape="box"] - 39 -> 43 ; -38 [label="38: DeclStmt \n _fun_function::X1_X1(&x1:class function::X1 *) [line 58]\n " shape="box"] + "function::createAndGetVal4" -> "function::createAndGetVal3" ; +"function::createAndGetVal3" [label="3: Return Stmt \n n$0=_fun_function::getVal(&x:class function::X1 &) [line 38]\n *&return:int =n$0 [line 38]\n " shape="box"] - 38 -> 37 ; -37 [label="37: DeclStmt \n _fun_function::X3_X3(&x3:class function::X3 *) [line 59]\n " shape="box"] + "function::createAndGetVal3" -> "function::createAndGetVal2" ; +"function::createAndGetVal2" [label="2: Exit function::createAndGetVal \n " color=yellow style=filled] - 37 -> 36 ; -36 [label="36: Return Stmt \n n$0=_fun_function::getVal(&x1:class function::X1 &) [line 60]\n n$1=_fun_function::getVal(&x3:class function::X3 &) [line 60]\n *&return:int =(n$0 / n$1) [line 60]\n " shape="box"] +"function::createAndGetVal1" [label="1: Start function::createAndGetVal\nFormals: \nLocals: x:class function::X1 \n DECLARE_LOCALS(&return,&x); [line 36]\n " color=yellow style=filled] - 36 -> 35 ; -35 [label="35: Exit function::div0_get_val \n " color=yellow style=filled] + "function::createAndGetVal1" -> "function::createAndGetVal4" ; +"function::div0_create_and_get_val3" [label="3: Return Stmt \n n$0=_fun_function::createAndGetVal() [line 70]\n n$1=_fun_function::createAndGetVal() [line 70]\n *&return:int =(n$0 / n$1) [line 70]\n " shape="box"] -34 [label="34: Start function::div0_get_val\nFormals: \nLocals: x3:class function::X3 x1:class function::X1 \n DECLARE_LOCALS(&return,&x3,&x1); [line 57]\n " color=yellow style=filled] + "function::div0_create_and_get_val3" -> "function::div0_create_and_get_val2" ; +"function::div0_create_and_get_val2" [label="2: Exit function::div0_create_and_get_val \n " color=yellow style=filled] - 34 -> 38 ; -33 [label="33: Return Stmt \n n$0=_fun_function::createAndGetVal() [line 43]\n *&return:int =(1 / n$0) [line 43]\n " shape="box"] +"function::div0_create_and_get_val1" [label="1: Start function::div0_create_and_get_val\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 69]\n " color=yellow style=filled] - 33 -> 32 ; -32 [label="32: Exit function::createAndDiv \n " color=yellow style=filled] + "function::div0_create_and_get_val1" -> "function::div0_create_and_get_val3" ; +"function::div0_get_val5" [label="5: DeclStmt \n _fun_function::X1_X1(&x1:class function::X1 *) [line 58]\n " shape="box"] -31 [label="31: Start function::createAndDiv\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] + "function::div0_get_val5" -> "function::div0_get_val4" ; +"function::div0_get_val4" [label="4: DeclStmt \n _fun_function::X3_X3(&x3:class function::X3 *) [line 59]\n " shape="box"] - 31 -> 33 ; -30 [label="30: Return Stmt \n n$0=_fun_function::createAndGetVal() [line 43]\n *&return:int =(1 / n$0) [line 43]\n " shape="box"] + "function::div0_get_val4" -> "function::div0_get_val3" ; +"function::div0_get_val3" [label="3: Return Stmt \n n$0=_fun_function::getVal(&x1:class function::X1 &) [line 60]\n n$1=_fun_function::getVal(&x3:class function::X3 &) [line 60]\n *&return:int =(n$0 / n$1) [line 60]\n " shape="box"] - 30 -> 29 ; -29 [label="29: Exit function::createAndDiv \n " color=yellow style=filled] + "function::div0_get_val3" -> "function::div0_get_val2" ; +"function::div0_get_val2" [label="2: Exit function::div0_get_val \n " color=yellow style=filled] -28 [label="28: Start function::createAndDiv\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] +"function::div0_get_val1" [label="1: Start function::div0_get_val\nFormals: \nLocals: x3:class function::X3 x1:class function::X1 \n DECLARE_LOCALS(&return,&x3,&x1); [line 57]\n " color=yellow style=filled] - 28 -> 30 ; -27 [label="27: DeclStmt \n _fun_function::X1_X1(&x:class function::X1 *) [line 37]\n " shape="box"] + "function::div0_get_val1" -> "function::div0_get_val5" ; +"function::X3_X32" [label="2: Exit function::X3_X3 \n " color=yellow style=filled] - 27 -> 26 ; -26 [label="26: Return Stmt \n n$0=_fun_function::getVal(&x:class function::X1 &) [line 38]\n *&return:int =n$0 [line 38]\n " shape="box"] +"function::X3_X31" [label="1: Start function::X3_X3\nFormals: this:class function::X3 *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: Exit function::createAndGetVal \n " color=yellow style=filled] + "function::X3_X31" -> "function::X3_X32" ; +"function::createAndDiv3" [label="3: Return Stmt \n n$0=_fun_function::createAndGetVal() [line 43]\n *&return:int =(1 / n$0) [line 43]\n " shape="box"] -24 [label="24: Start function::createAndGetVal\nFormals: \nLocals: x:class function::X1 \n DECLARE_LOCALS(&return,&x); [line 36]\n " color=yellow style=filled] + "function::createAndDiv3" -> "function::createAndDiv2" ; +"function::createAndDiv2" [label="2: Exit function::createAndDiv \n " color=yellow style=filled] - 24 -> 27 ; -23 [label="23: DeclStmt \n _fun_function::X3_X3(&x:class function::X3 *) [line 37]\n " shape="box"] +"function::createAndDiv1" [label="1: Start function::createAndDiv\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] - 23 -> 22 ; -22 [label="22: Return Stmt \n n$0=_fun_function::getVal(&x:class function::X3 &) [line 38]\n *&return:int =n$0 [line 38]\n " shape="box"] + "function::createAndDiv1" -> "function::createAndDiv3" ; +"function::X1_getVal3" [label="3: Return Stmt \n *&return:int =1 [line 13]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Exit function::createAndGetVal \n " color=yellow style=filled] + "function::X1_getVal3" -> "function::X1_getVal2" ; +"function::X1_getVal2" [label="2: Exit function::X1_getVal \n " color=yellow style=filled] -20 [label="20: Start function::createAndGetVal\nFormals: \nLocals: x:class function::X3 \n DECLARE_LOCALS(&return,&x); [line 36]\n " color=yellow style=filled] +"function::X1_getVal1" [label="1: Start function::X1_getVal\nFormals: this:class function::X1 *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 20 -> 23 ; -19 [label="19: Return Stmt \n n$0=*&x:class function::X3 & [line 32]\n _=*n$0:class function::X3 [line 32]\n n$2=_fun_function::X3_get(n$0:class function::X3 &) [line 32]\n *&return:int =n$2 [line 32]\n " shape="box"] + "function::X1_getVal1" -> "function::X1_getVal3" ; +"function::getVal3" [label="3: Return Stmt \n n$0=*&x:class function::X3 & [line 32]\n _=*n$0:class function::X3 [line 32]\n n$2=_fun_function::X3_get(n$0:class function::X3 &) [line 32]\n *&return:int =n$2 [line 32]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit function::getVal \n " color=yellow style=filled] + "function::getVal3" -> "function::getVal2" ; +"function::getVal2" [label="2: Exit function::getVal \n " color=yellow style=filled] -17 [label="17: Start function::getVal\nFormals: x:class function::X3 &\nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] +"function::getVal1" [label="1: Start function::getVal\nFormals: x:class function::X3 &\nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] - 17 -> 19 ; -16 [label="16: Return Stmt \n n$0=*&x:class function::X1 & [line 26]\n _=*n$0:class function::X1 [line 26]\n n$2=_fun_function::X1_getVal(n$0:class function::X1 &) [line 26]\n *&return:int =n$2 [line 26]\n " shape="box"] + "function::getVal1" -> "function::getVal3" ; +"function::X2_getVal3" [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Exit function::getVal \n " color=yellow style=filled] + "function::X2_getVal3" -> "function::X2_getVal2" ; +"function::X2_getVal2" [label="2: Exit function::X2_getVal \n " color=yellow style=filled] -14 [label="14: Start function::getVal\nFormals: x:class function::X1 &\nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] +"function::X2_getVal1" [label="1: Start function::X2_getVal\nFormals: this:class function::X2 *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 14 -> 16 ; -13 [label="13: Exit function::X3_X3 \n " color=yellow style=filled] + "function::X2_getVal1" -> "function::X2_getVal3" ; +"function::div1_get_val5" [label="5: DeclStmt \n _fun_function::X1_X1(&x1:class function::X1 *) [line 64]\n " shape="box"] -12 [label="12: Start function::X3_X3\nFormals: this:class function::X3 *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] + "function::div1_get_val5" -> "function::div1_get_val4" ; +"function::div1_get_val4" [label="4: DeclStmt \n _fun_function::X3_X3(&x3:class function::X3 *) [line 65]\n " shape="box"] - 12 -> 13 ; -11 [label="11: Return Stmt \n *&return:int =0 [line 21]\n " shape="box"] + "function::div1_get_val4" -> "function::div1_get_val3" ; +"function::div1_get_val3" [label="3: Return Stmt \n n$0=_fun_function::getVal(&x3:class function::X3 &) [line 66]\n n$1=_fun_function::getVal(&x1:class function::X1 &) [line 66]\n *&return:int =(n$0 / n$1) [line 66]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit function::X3_get \n " color=yellow style=filled] + "function::div1_get_val3" -> "function::div1_get_val2" ; +"function::div1_get_val2" [label="2: Exit function::div1_get_val \n " color=yellow style=filled] -9 [label="9: Start function::X3_get\nFormals: this:class function::X3 *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] +"function::div1_get_val1" [label="1: Start function::div1_get_val\nFormals: \nLocals: x3:class function::X3 x1:class function::X1 \n DECLARE_LOCALS(&return,&x3,&x1); [line 63]\n " color=yellow style=filled] - 9 -> 11 ; -8 [label="8: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] + "function::div1_get_val1" -> "function::div1_get_val5" ; +"function::getVal3" [label="3: Return Stmt \n n$0=*&x:class function::X1 & [line 26]\n _=*n$0:class function::X1 [line 26]\n n$2=_fun_function::X1_getVal(n$0:class function::X1 &) [line 26]\n *&return:int =n$2 [line 26]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit function::X2_getVal \n " color=yellow style=filled] + "function::getVal3" -> "function::getVal2" ; +"function::getVal2" [label="2: Exit function::getVal \n " color=yellow style=filled] -6 [label="6: Start function::X2_getVal\nFormals: this:class function::X2 *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] +"function::getVal1" [label="1: Start function::getVal\nFormals: x:class function::X1 &\nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: Exit function::X1_X1 \n " color=yellow style=filled] + "function::getVal1" -> "function::getVal3" ; +"function::X1_X12" [label="2: Exit function::X1_X1 \n " color=yellow style=filled] -4 [label="4: Start function::X1_X1\nFormals: this:class function::X1 *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"function::X1_X11" [label="1: Start function::X1_X1\nFormals: this:class function::X1 *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 4 -> 5 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 13]\n " shape="box"] + "function::X1_X11" -> "function::X1_X12" ; +"function::createAndDiv3" [label="3: Return Stmt \n n$0=_fun_function::createAndGetVal() [line 43]\n *&return:int =(1 / n$0) [line 43]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit function::X1_getVal \n " color=yellow style=filled] + "function::createAndDiv3" -> "function::createAndDiv2" ; +"function::createAndDiv2" [label="2: Exit function::createAndDiv \n " color=yellow style=filled] -1 [label="1: Start function::X1_getVal\nFormals: this:class function::X1 *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"function::createAndDiv1" [label="1: Start function::createAndDiv\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] - 1 -> 3 ; + "function::createAndDiv1" -> "function::createAndDiv3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/templates/function_pack.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/templates/function_pack.cpp.dot index ed66fc2df..d8c5952b4 100644 --- a/infer/tests/codetoanalyze/cpp/shared/templates/function_pack.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/templates/function_pack.cpp.dot @@ -1,201 +1,201 @@ /* @generated */ digraph iCFG { -54 [label="54: Return Stmt \n n$0=_fun_div<5ae447456b906d06>(1:int ,2:int ,3:int ,4:int ,5:int ,6:int ,7:int ,8:int ,9:int ,10:int ) [line 26]\n *&return:int =n$0 [line 26]\n " shape="box"] +"div0_3args33" [label="3: Return Stmt \n n$0=_fun_div(1:int ,2:int ,0:int ) [line 21]\n *&return:int =n$0 [line 21]\n " shape="box"] - 54 -> 53 ; -53 [label="53: Exit no_div0_10args \n " color=yellow style=filled] + "div0_3args33" -> "div0_3args32" ; +"div0_3args32" [label="2: Exit div0_3args3 \n " color=yellow style=filled] -52 [label="52: Start no_div0_10args\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"div0_3args31" [label="1: Start div0_3args3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 52 -> 54 ; -51 [label="51: Return Stmt \n n$0=_fun_div(1:int ,2:int ,3:int ) [line 25]\n *&return:int =n$0 [line 25]\n " shape="box"] + "div0_3args31" -> "div0_3args33" ; +"div3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=*&args:int [line 14]\n n$7=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ,n$6:int ) [line 14]\n *&return:int =((1 / n$0) + n$7) [line 14]\n " shape="box"] - 51 -> 50 ; -50 [label="50: Exit no_div0_3_args \n " color=yellow style=filled] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] -49 [label="49: Start no_div0_3_args\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] +"div1" [label="1: Start div\nFormals: v:int args:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 49 -> 51 ; -48 [label="48: Return Stmt \n n$0=_fun_div<5ae447456b906d06>(1:int ,2:int ,3:int ,4:int ,5:int ,6:int ,7:int ,0:int ,9:int ,10:int ) [line 23]\n *&return:int =n$0 [line 23]\n " shape="box"] + "div1" -> "div3" ; +"div<5ae447456b906d06>3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=*&args:int [line 14]\n n$7=*&args:int [line 14]\n n$8=*&args:int [line 14]\n n$9=*&args:int [line 14]\n n$10=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ,n$6:int ,n$7:int ,n$8:int ,n$9:int ) [line 14]\n *&return:int =((1 / n$0) + n$10) [line 14]\n " shape="box"] - 48 -> 47 ; -47 [label="47: Exit div0_10args \n " color=yellow style=filled] + "div<5ae447456b906d06>3" -> "div<5ae447456b906d06>2" ; +"div<5ae447456b906d06>2" [label="2: Exit div<5ae447456b906d06> \n " color=yellow style=filled] -46 [label="46: Start div0_10args\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] +"div<5ae447456b906d06>1" [label="1: Start div<5ae447456b906d06>\nFormals: v:int args:int args:int args:int args:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 46 -> 48 ; -45 [label="45: Return Stmt \n n$0=_fun_div(1:int ,0:int ,0:int ) [line 22]\n *&return:int =n$0 [line 22]\n " shape="box"] + "div<5ae447456b906d06>1" -> "div<5ae447456b906d06>3" ; +"div3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=*&args:int [line 14]\n n$7=*&args:int [line 14]\n n$8=*&args:int [line 14]\n n$9=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ,n$6:int ,n$7:int ,n$8:int ) [line 14]\n *&return:int =((1 / n$0) + n$9) [line 14]\n " shape="box"] - 45 -> 44 ; -44 [label="44: Exit div0_3args4 \n " color=yellow style=filled] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] -43 [label="43: Start div0_3args4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] +"div1" [label="1: Start div\nFormals: v:int args:int args:int args:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 43 -> 45 ; -42 [label="42: Return Stmt \n n$0=_fun_div(1:int ,2:int ,0:int ) [line 21]\n *&return:int =n$0 [line 21]\n " shape="box"] + "div1" -> "div3" ; +"div3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=_fun_div(n$1:int ,n$2:int ) [line 14]\n *&return:int =((1 / n$0) + n$3) [line 14]\n " shape="box"] - 42 -> 41 ; -41 [label="41: Exit div0_3args3 \n " color=yellow style=filled] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] -40 [label="40: Start div0_3args3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] +"div1" [label="1: Start div\nFormals: v:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 40 -> 42 ; -39 [label="39: Return Stmt \n n$0=_fun_div(1:int ,0:int ,3:int ) [line 20]\n *&return:int =n$0 [line 20]\n " shape="box"] + "div1" -> "div3" ; +"no_div0_10args3" [label="3: Return Stmt \n n$0=_fun_div<5ae447456b906d06>(1:int ,2:int ,3:int ,4:int ,5:int ,6:int ,7:int ,8:int ,9:int ,10:int ) [line 26]\n *&return:int =n$0 [line 26]\n " shape="box"] - 39 -> 38 ; -38 [label="38: Exit div0_3args2 \n " color=yellow style=filled] + "no_div0_10args3" -> "no_div0_10args2" ; +"no_div0_10args2" [label="2: Exit no_div0_10args \n " color=yellow style=filled] -37 [label="37: Start div0_3args2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +"no_div0_10args1" [label="1: Start no_div0_10args\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 37 -> 39 ; -36 [label="36: Return Stmt \n n$0=_fun_div(0:int ,2:int ,3:int ) [line 19]\n *&return:int =n$0 [line 19]\n " shape="box"] + "no_div0_10args1" -> "no_div0_10args3" ; +"div0_10args3" [label="3: Return Stmt \n n$0=_fun_div<5ae447456b906d06>(1:int ,2:int ,3:int ,4:int ,5:int ,6:int ,7:int ,0:int ,9:int ,10:int ) [line 23]\n *&return:int =n$0 [line 23]\n " shape="box"] - 36 -> 35 ; -35 [label="35: Exit div0_3args1 \n " color=yellow style=filled] + "div0_10args3" -> "div0_10args2" ; +"div0_10args2" [label="2: Exit div0_10args \n " color=yellow style=filled] -34 [label="34: Start div0_3args1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"div0_10args1" [label="1: Start div0_10args\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 34 -> 36 ; -33 [label="33: Return Stmt \n n$0=_fun_div(0:int ) [line 17]\n *&return:int =n$0 [line 17]\n " shape="box"] + "div0_10args1" -> "div0_10args3" ; +"div3" [label="3: Return Stmt \n n$0=*&d:int [line 11]\n *&return:int =(1 / n$0) [line 11]\n " shape="box"] - 33 -> 32 ; -32 [label="32: Exit div0_1arg \n " color=yellow style=filled] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] -31 [label="31: Start div0_1arg\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] +"div1" [label="1: Start div\nFormals: d:int \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 31 -> 33 ; -30 [label="30: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=*&args:int [line 14]\n n$7=*&args:int [line 14]\n n$8=*&args:int [line 14]\n n$9=*&args:int [line 14]\n n$10=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ,n$6:int ,n$7:int ,n$8:int ,n$9:int ) [line 14]\n *&return:int =((1 / n$0) + n$10) [line 14]\n " shape="box"] + "div1" -> "div3" ; +"div3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ) [line 14]\n *&return:int =((1 / n$0) + n$5) [line 14]\n " shape="box"] - 30 -> 11 ; -29 [label="29: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=*&args:int [line 14]\n n$7=*&args:int [line 14]\n n$8=*&args:int [line 14]\n n$9=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ,n$6:int ,n$7:int ,n$8:int ) [line 14]\n *&return:int =((1 / n$0) + n$9) [line 14]\n " shape="box"] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] - 29 -> 13 ; -28 [label="28: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=*&args:int [line 14]\n n$7=*&args:int [line 14]\n n$8=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ,n$6:int ,n$7:int ) [line 14]\n *&return:int =((1 / n$0) + n$8) [line 14]\n " shape="box"] +"div1" [label="1: Start div\nFormals: v:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 28 -> 15 ; -27 [label="27: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=*&args:int [line 14]\n n$7=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ,n$6:int ) [line 14]\n *&return:int =((1 / n$0) + n$7) [line 14]\n " shape="box"] + "div1" -> "div3" ; +"div3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=_fun_div(n$1:int ) [line 14]\n *&return:int =((1 / n$0) + n$2) [line 14]\n " shape="box"] - 27 -> 17 ; -26 [label="26: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ) [line 14]\n *&return:int =((1 / n$0) + n$6) [line 14]\n " shape="box"] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] - 26 -> 19 ; -25 [label="25: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ) [line 14]\n *&return:int =((1 / n$0) + n$5) [line 14]\n " shape="box"] +"div1" [label="1: Start div\nFormals: v:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 25 -> 21 ; -24 [label="24: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=_fun_div(n$1:int ,n$2:int ,n$3:int ) [line 14]\n *&return:int =((1 / n$0) + n$4) [line 14]\n " shape="box"] + "div1" -> "div3" ; +"div0_3args23" [label="3: Return Stmt \n n$0=_fun_div(1:int ,0:int ,3:int ) [line 20]\n *&return:int =n$0 [line 20]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Exit div \n " color=yellow style=filled] + "div0_3args23" -> "div0_3args22" ; +"div0_3args22" [label="2: Exit div0_3args2 \n " color=yellow style=filled] -22 [label="22: Start div\nFormals: v:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"div0_3args21" [label="1: Start div0_3args2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 22 -> 24 ; -21 [label="21: Exit div \n " color=yellow style=filled] + "div0_3args21" -> "div0_3args23" ; +"div3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=*&args:int [line 14]\n n$7=*&args:int [line 14]\n n$8=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ,n$6:int ,n$7:int ) [line 14]\n *&return:int =((1 / n$0) + n$8) [line 14]\n " shape="box"] -20 [label="20: Start div\nFormals: v:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] - 20 -> 25 ; -19 [label="19: Exit div \n " color=yellow style=filled] +"div1" [label="1: Start div\nFormals: v:int args:int args:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] -18 [label="18: Start div\nFormals: v:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] + "div1" -> "div3" ; +"div3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=_fun_div(n$1:int ,n$2:int ,n$3:int ) [line 14]\n *&return:int =((1 / n$0) + n$4) [line 14]\n " shape="box"] - 18 -> 26 ; -17 [label="17: Exit div \n " color=yellow style=filled] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] -16 [label="16: Start div\nFormals: v:int args:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"div1" [label="1: Start div\nFormals: v:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 16 -> 27 ; -15 [label="15: Exit div \n " color=yellow style=filled] + "div1" -> "div3" ; +"no_div0_3_args3" [label="3: Return Stmt \n n$0=_fun_div(1:int ,2:int ,3:int ) [line 25]\n *&return:int =n$0 [line 25]\n " shape="box"] -14 [label="14: Start div\nFormals: v:int args:int args:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] + "no_div0_3_args3" -> "no_div0_3_args2" ; +"no_div0_3_args2" [label="2: Exit no_div0_3_args \n " color=yellow style=filled] - 14 -> 28 ; -13 [label="13: Exit div \n " color=yellow style=filled] +"no_div0_3_args1" [label="1: Start no_div0_3_args\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] -12 [label="12: Start div\nFormals: v:int args:int args:int args:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] + "no_div0_3_args1" -> "no_div0_3_args3" ; +"div3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=*&args:int [line 14]\n n$4=*&args:int [line 14]\n n$5=*&args:int [line 14]\n n$6=_fun_div(n$1:int ,n$2:int ,n$3:int ,n$4:int ,n$5:int ) [line 14]\n *&return:int =((1 / n$0) + n$6) [line 14]\n " shape="box"] - 12 -> 29 ; -11 [label="11: Exit div<5ae447456b906d06> \n " color=yellow style=filled] + "div3" -> "div2" ; +"div2" [label="2: Exit div \n " color=yellow style=filled] -10 [label="10: Start div<5ae447456b906d06>\nFormals: v:int args:int args:int args:int args:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"div1" [label="1: Start div\nFormals: v:int args:int args:int args:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 10 -> 30 ; -9 [label="9: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=*&args:int [line 14]\n n$3=_fun_div(n$1:int ,n$2:int ) [line 14]\n *&return:int =((1 / n$0) + n$3) [line 14]\n " shape="box"] + "div1" -> "div3" ; +"div0_1arg3" [label="3: Return Stmt \n n$0=_fun_div(0:int ) [line 17]\n *&return:int =n$0 [line 17]\n " shape="box"] - 9 -> 5 ; -8 [label="8: Return Stmt \n n$0=*&v:int [line 14]\n n$1=*&args:int [line 14]\n n$2=_fun_div(n$1:int ) [line 14]\n *&return:int =((1 / n$0) + n$2) [line 14]\n " shape="box"] + "div0_1arg3" -> "div0_1arg2" ; +"div0_1arg2" [label="2: Exit div0_1arg \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit div \n " color=yellow style=filled] +"div0_1arg1" [label="1: Start div0_1arg\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] -6 [label="6: Start div\nFormals: v:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] + "div0_1arg1" -> "div0_1arg3" ; +"div0_3args43" [label="3: Return Stmt \n n$0=_fun_div(1:int ,0:int ,0:int ) [line 22]\n *&return:int =n$0 [line 22]\n " shape="box"] - 6 -> 8 ; -5 [label="5: Exit div \n " color=yellow style=filled] + "div0_3args43" -> "div0_3args42" ; +"div0_3args42" [label="2: Exit div0_3args4 \n " color=yellow style=filled] -4 [label="4: Start div\nFormals: v:int args:int args:int \nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"div0_3args41" [label="1: Start div0_3args4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] - 4 -> 9 ; -3 [label="3: Return Stmt \n n$0=*&d:int [line 11]\n *&return:int =(1 / n$0) [line 11]\n " shape="box"] + "div0_3args41" -> "div0_3args43" ; +"div0_3args13" [label="3: Return Stmt \n n$0=_fun_div(0:int ,2:int ,3:int ) [line 19]\n *&return:int =n$0 [line 19]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit div \n " color=yellow style=filled] + "div0_3args13" -> "div0_3args12" ; +"div0_3args12" [label="2: Exit div0_3args1 \n " color=yellow style=filled] -1 [label="1: Start div\nFormals: d:int \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"div0_3args11" [label="1: Start div0_3args1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 1 -> 3 ; + "div0_3args11" -> "div0_3args13" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/templates/method.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/templates/method.cpp.dot index 4afbfe8b2..77e53553e 100644 --- a/infer/tests/codetoanalyze/cpp/shared/templates/method.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/templates/method.cpp.dot @@ -1,281 +1,281 @@ /* @generated */ digraph iCFG { -75 [label="75: DeclStmt \n _fun_method::X1_X1(&x1_1:class method::X1 *) [line 73]\n " shape="box"] +"method::X2_get3" [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] - 75 -> 74 ; -74 [label="74: DeclStmt \n _fun_method::X1_X1(&x1_2:class method::X1 *) [line 74]\n " shape="box"] + "method::X2_get3" -> "method::X2_get2" ; +"method::X2_get2" [label="2: Exit method::X2_get \n " color=yellow style=filled] - 74 -> 73 ; -73 [label="73: DeclStmt \n _fun_method::GetterTempl_GetterTempl(&g:class method::GetterTempl *) [line 75]\n " shape="box"] +"method::X2_get1" [label="1: Start method::X2_get\nFormals: this:class method::X2 *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 73 -> 72 ; -72 [label="72: Return Stmt \n _=*&g:class method::GetterTempl [line 76]\n n$1=_fun_method::GetterTempl_get(&g:class method::GetterTempl &,&x1_1:class method::X1 &,&x1_2:class method::X1 &) [line 76]\n *&return:int =(1 / n$1) [line 76]\n " shape="box"] + "method::X2_get1" -> "method::X2_get3" ; +"method::GetterTempl_get3" [label="3: Return Stmt \n n$0=*&t:class method::X2 & [line 35]\n _=*n$0:class method::X2 [line 35]\n n$2=_fun_method::X2_get(n$0:class method::X2 &) [line 35]\n n$3=*&s:class method::X1 & [line 35]\n _=*n$3:class method::X1 [line 35]\n n$5=_fun_method::X1_get(n$3:class method::X1 &) [line 35]\n *&return:int =(n$2 + n$5) [line 35]\n " shape="box"] - 72 -> 71 ; -71 [label="71: Exit method::div1_getter_templ2 \n " color=yellow style=filled] + "method::GetterTempl_get3" -> "method::GetterTempl_get2" ; +"method::GetterTempl_get2" [label="2: Exit method::GetterTempl_get \n " color=yellow style=filled] -70 [label="70: Start method::div1_getter_templ2\nFormals: \nLocals: g:class method::GetterTempl x1_2:class method::X1 x1_1:class method::X1 \n DECLARE_LOCALS(&return,&g,&x1_2,&x1_1); [line 72]\n " color=yellow style=filled] +"method::GetterTempl_get1" [label="1: Start method::GetterTempl_get\nFormals: this:class method::GetterTempl * t:class method::X2 & s:class method::X1 &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 70 -> 75 ; -69 [label="69: DeclStmt \n _fun_method::X1_X1(&x1:class method::X1 *) [line 66]\n " shape="box"] + "method::GetterTempl_get1" -> "method::GetterTempl_get3" ; +"method::div1_getter_templ6" [label="6: DeclStmt \n _fun_method::X1_X1(&x1:class method::X1 *) [line 66]\n " shape="box"] - 69 -> 68 ; -68 [label="68: DeclStmt \n _fun_method::X2_X2(&x2:class method::X2 *) [line 67]\n " shape="box"] + "method::div1_getter_templ6" -> "method::div1_getter_templ5" ; +"method::div1_getter_templ5" [label="5: DeclStmt \n _fun_method::X2_X2(&x2:class method::X2 *) [line 67]\n " shape="box"] - 68 -> 67 ; -67 [label="67: DeclStmt \n _fun_method::GetterTempl_GetterTempl(&g:class method::GetterTempl *) [line 68]\n " shape="box"] + "method::div1_getter_templ5" -> "method::div1_getter_templ4" ; +"method::div1_getter_templ4" [label="4: DeclStmt \n _fun_method::GetterTempl_GetterTempl(&g:class method::GetterTempl *) [line 68]\n " shape="box"] - 67 -> 66 ; -66 [label="66: Return Stmt \n _=*&g:class method::GetterTempl [line 69]\n n$1=_fun_method::GetterTempl_get(&g:class method::GetterTempl &,&x2:class method::X2 &,&x1:class method::X1 &) [line 69]\n *&return:int =(1 / n$1) [line 69]\n " shape="box"] + "method::div1_getter_templ4" -> "method::div1_getter_templ3" ; +"method::div1_getter_templ3" [label="3: Return Stmt \n _=*&g:class method::GetterTempl [line 69]\n n$1=_fun_method::GetterTempl_get(&g:class method::GetterTempl &,&x2:class method::X2 &,&x1:class method::X1 &) [line 69]\n *&return:int =(1 / n$1) [line 69]\n " shape="box"] - 66 -> 65 ; -65 [label="65: Exit method::div1_getter_templ \n " color=yellow style=filled] + "method::div1_getter_templ3" -> "method::div1_getter_templ2" ; +"method::div1_getter_templ2" [label="2: Exit method::div1_getter_templ \n " color=yellow style=filled] -64 [label="64: Start method::div1_getter_templ\nFormals: \nLocals: g:class method::GetterTempl x2:class method::X2 x1:class method::X1 \n DECLARE_LOCALS(&return,&g,&x2,&x1); [line 65]\n " color=yellow style=filled] +"method::div1_getter_templ1" [label="1: Start method::div1_getter_templ\nFormals: \nLocals: g:class method::GetterTempl x2:class method::X2 x1:class method::X1 \n DECLARE_LOCALS(&return,&g,&x2,&x1); [line 65]\n " color=yellow style=filled] - 64 -> 69 ; -63 [label="63: DeclStmt \n _fun_method::X2_X2(&x2_1:class method::X2 *) [line 59]\n " shape="box"] + "method::div1_getter_templ1" -> "method::div1_getter_templ6" ; +"method::div0_getter5" [label="5: DeclStmt \n _fun_method::X2_X2(&x2:class method::X2 *) [line 40]\n " shape="box"] - 63 -> 62 ; -62 [label="62: DeclStmt \n _fun_method::X2_X2(&x2_2:class method::X2 *) [line 60]\n " shape="box"] + "method::div0_getter5" -> "method::div0_getter4" ; +"method::div0_getter4" [label="4: DeclStmt \n _fun_method::Getter_Getter(&g:class method::Getter *) [line 41]\n " shape="box"] - 62 -> 61 ; -61 [label="61: DeclStmt \n _fun_method::GetterTempl_GetterTempl(&g:class method::GetterTempl *) [line 61]\n " shape="box"] + "method::div0_getter4" -> "method::div0_getter3" ; +"method::div0_getter3" [label="3: Return Stmt \n _=*&g:class method::Getter [line 42]\n n$1=_fun_method::Getter_get(&g:class method::Getter &,&x2:class method::X2 &) [line 42]\n *&return:int =(1 / n$1) [line 42]\n " shape="box"] - 61 -> 60 ; -60 [label="60: Return Stmt \n _=*&g:class method::GetterTempl [line 62]\n n$1=_fun_method::GetterTempl_get(&g:class method::GetterTempl &,&x2_1:class method::X2 &,&x2_2:class method::X2 &) [line 62]\n *&return:int =(1 / n$1) [line 62]\n " shape="box"] + "method::div0_getter3" -> "method::div0_getter2" ; +"method::div0_getter2" [label="2: Exit method::div0_getter \n " color=yellow style=filled] - 60 -> 59 ; -59 [label="59: Exit method::div0_getter_templ2 \n " color=yellow style=filled] +"method::div0_getter1" [label="1: Start method::div0_getter\nFormals: \nLocals: g:class method::Getter x2:class method::X2 \n DECLARE_LOCALS(&return,&g,&x2); [line 39]\n " color=yellow style=filled] -58 [label="58: Start method::div0_getter_templ2\nFormals: \nLocals: g:class method::GetterTempl x2_2:class method::X2 x2_1:class method::X2 \n DECLARE_LOCALS(&return,&g,&x2_2,&x2_1); [line 58]\n " color=yellow style=filled] + "method::div0_getter1" -> "method::div0_getter5" ; +"method::Getter_get3" [label="3: Return Stmt \n n$0=*&s:class method::X1 & [line 27]\n _=*n$0:class method::X1 [line 27]\n n$2=_fun_method::X1_get(n$0:class method::X1 &) [line 27]\n *&return:int =n$2 [line 27]\n " shape="box"] - 58 -> 63 ; -57 [label="57: DeclStmt \n _fun_method::X2_X2(&x2:class method::X2 *) [line 52]\n " shape="box"] + "method::Getter_get3" -> "method::Getter_get2" ; +"method::Getter_get2" [label="2: Exit method::Getter_get \n " color=yellow style=filled] - 57 -> 56 ; -56 [label="56: DeclStmt \n _fun_method::X3_X3(&x3:class method::X3 *) [line 53]\n " shape="box"] +"method::Getter_get1" [label="1: Start method::Getter_get\nFormals: this:class method::Getter * s:class method::X1 &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 56 -> 55 ; -55 [label="55: DeclStmt \n _fun_method::GetterTempl_GetterTempl(&g:class method::GetterTempl *) [line 54]\n " shape="box"] + "method::Getter_get1" -> "method::Getter_get3" ; +"method::X1_get3" [label="3: Return Stmt \n *&return:int =1 [line 13]\n " shape="box"] - 55 -> 54 ; -54 [label="54: Return Stmt \n _=*&g:class method::GetterTempl [line 55]\n n$1=_fun_method::GetterTempl_get(&g:class method::GetterTempl &,&x3:class method::X3 &,&x2:class method::X2 &) [line 55]\n *&return:int =(1 / n$1) [line 55]\n " shape="box"] + "method::X1_get3" -> "method::X1_get2" ; +"method::X1_get2" [label="2: Exit method::X1_get \n " color=yellow style=filled] - 54 -> 53 ; -53 [label="53: Exit method::div0_getter_templ \n " color=yellow style=filled] +"method::X1_get1" [label="1: Start method::X1_get\nFormals: this:class method::X1 *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] -52 [label="52: Start method::div0_getter_templ\nFormals: \nLocals: g:class method::GetterTempl x3:class method::X3 x2:class method::X2 \n DECLARE_LOCALS(&return,&g,&x3,&x2); [line 51]\n " color=yellow style=filled] + "method::X1_get1" -> "method::X1_get3" ; +"method::X3_X32" [label="2: Exit method::X3_X3 \n " color=yellow style=filled] - 52 -> 57 ; -51 [label="51: DeclStmt \n _fun_method::X1_X1(&x1:class method::X1 *) [line 46]\n " shape="box"] +"method::X3_X31" [label="1: Start method::X3_X3\nFormals: this:class method::X3 *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 51 -> 50 ; -50 [label="50: DeclStmt \n _fun_method::Getter_Getter(&g:class method::Getter *) [line 47]\n " shape="box"] + "method::X3_X31" -> "method::X3_X32" ; +"method::GetterTempl_get3" [label="3: Return Stmt \n n$0=*&t:class method::X3 & [line 35]\n _=*n$0:class method::X3 [line 35]\n n$2=_fun_method::X3_get(n$0:class method::X3 &) [line 35]\n n$3=*&s:class method::X2 & [line 35]\n _=*n$3:class method::X2 [line 35]\n n$5=_fun_method::X2_get(n$3:class method::X2 &) [line 35]\n *&return:int =(n$2 + n$5) [line 35]\n " shape="box"] - 50 -> 49 ; -49 [label="49: Return Stmt \n _=*&g:class method::Getter [line 48]\n n$1=_fun_method::Getter_get(&g:class method::Getter &,&x1:class method::X1 &) [line 48]\n *&return:int =(1 / n$1) [line 48]\n " shape="box"] + "method::GetterTempl_get3" -> "method::GetterTempl_get2" ; +"method::GetterTempl_get2" [label="2: Exit method::GetterTempl_get \n " color=yellow style=filled] - 49 -> 48 ; -48 [label="48: Exit method::div1_getter \n " color=yellow style=filled] +"method::GetterTempl_get1" [label="1: Start method::GetterTempl_get\nFormals: this:class method::GetterTempl * t:class method::X3 & s:class method::X2 &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] -47 [label="47: Start method::div1_getter\nFormals: \nLocals: g:class method::Getter x1:class method::X1 \n DECLARE_LOCALS(&return,&g,&x1); [line 45]\n " color=yellow style=filled] + "method::GetterTempl_get1" -> "method::GetterTempl_get3" ; +"method::Getter_Getter2" [label="2: Exit method::Getter_Getter \n " color=yellow style=filled] - 47 -> 51 ; -46 [label="46: DeclStmt \n _fun_method::X2_X2(&x2:class method::X2 *) [line 40]\n " shape="box"] +"method::Getter_Getter1" [label="1: Start method::Getter_Getter\nFormals: this:class method::Getter *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 46 -> 45 ; -45 [label="45: DeclStmt \n _fun_method::Getter_Getter(&g:class method::Getter *) [line 41]\n " shape="box"] + "method::Getter_Getter1" -> "method::Getter_Getter2" ; +"method::X1_X12" [label="2: Exit method::X1_X1 \n " color=yellow style=filled] - 45 -> 44 ; -44 [label="44: Return Stmt \n _=*&g:class method::Getter [line 42]\n n$1=_fun_method::Getter_get(&g:class method::Getter &,&x2:class method::X2 &) [line 42]\n *&return:int =(1 / n$1) [line 42]\n " shape="box"] +"method::X1_X11" [label="1: Start method::X1_X1\nFormals: this:class method::X1 *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 44 -> 43 ; -43 [label="43: Exit method::div0_getter \n " color=yellow style=filled] + "method::X1_X11" -> "method::X1_X12" ; +"method::GetterTempl_GetterTempl2" [label="2: Exit method::GetterTempl_GetterTempl \n " color=yellow style=filled] -42 [label="42: Start method::div0_getter\nFormals: \nLocals: g:class method::Getter x2:class method::X2 \n DECLARE_LOCALS(&return,&g,&x2); [line 39]\n " color=yellow style=filled] +"method::GetterTempl_GetterTempl1" [label="1: Start method::GetterTempl_GetterTempl\nFormals: this:class method::GetterTempl *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 42 -> 46 ; -41 [label="41: Exit method::GetterTempl_GetterTempl \n " color=yellow style=filled] + "method::GetterTempl_GetterTempl1" -> "method::GetterTempl_GetterTempl2" ; +"method::GetterTempl_GetterTempl2" [label="2: Exit method::GetterTempl_GetterTempl \n " color=yellow style=filled] -40 [label="40: Start method::GetterTempl_GetterTempl\nFormals: this:class method::GetterTempl *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] +"method::GetterTempl_GetterTempl1" [label="1: Start method::GetterTempl_GetterTempl\nFormals: this:class method::GetterTempl *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 40 -> 41 ; -39 [label="39: Return Stmt \n n$0=*&t:class method::X1 & [line 35]\n _=*n$0:class method::X1 [line 35]\n n$2=_fun_method::X1_get(n$0:class method::X1 &) [line 35]\n n$3=*&s:class method::X1 & [line 35]\n _=*n$3:class method::X1 [line 35]\n n$5=_fun_method::X1_get(n$3:class method::X1 &) [line 35]\n *&return:int =(n$2 + n$5) [line 35]\n " shape="box"] + "method::GetterTempl_GetterTempl1" -> "method::GetterTempl_GetterTempl2" ; +"method::div1_getter_templ26" [label="6: DeclStmt \n _fun_method::X1_X1(&x1_1:class method::X1 *) [line 73]\n " shape="box"] - 39 -> 38 ; -38 [label="38: Exit method::GetterTempl_get \n " color=yellow style=filled] + "method::div1_getter_templ26" -> "method::div1_getter_templ25" ; +"method::div1_getter_templ25" [label="5: DeclStmt \n _fun_method::X1_X1(&x1_2:class method::X1 *) [line 74]\n " shape="box"] -37 [label="37: Start method::GetterTempl_get\nFormals: this:class method::GetterTempl * t:class method::X1 & s:class method::X1 &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] + "method::div1_getter_templ25" -> "method::div1_getter_templ24" ; +"method::div1_getter_templ24" [label="4: DeclStmt \n _fun_method::GetterTempl_GetterTempl(&g:class method::GetterTempl *) [line 75]\n " shape="box"] - 37 -> 39 ; -36 [label="36: Exit method::GetterTempl_GetterTempl \n " color=yellow style=filled] + "method::div1_getter_templ24" -> "method::div1_getter_templ23" ; +"method::div1_getter_templ23" [label="3: Return Stmt \n _=*&g:class method::GetterTempl [line 76]\n n$1=_fun_method::GetterTempl_get(&g:class method::GetterTempl &,&x1_1:class method::X1 &,&x1_2:class method::X1 &) [line 76]\n *&return:int =(1 / n$1) [line 76]\n " shape="box"] -35 [label="35: Start method::GetterTempl_GetterTempl\nFormals: this:class method::GetterTempl *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] + "method::div1_getter_templ23" -> "method::div1_getter_templ22" ; +"method::div1_getter_templ22" [label="2: Exit method::div1_getter_templ2 \n " color=yellow style=filled] - 35 -> 36 ; -34 [label="34: Return Stmt \n n$0=*&t:class method::X2 & [line 35]\n _=*n$0:class method::X2 [line 35]\n n$2=_fun_method::X2_get(n$0:class method::X2 &) [line 35]\n n$3=*&s:class method::X1 & [line 35]\n _=*n$3:class method::X1 [line 35]\n n$5=_fun_method::X1_get(n$3:class method::X1 &) [line 35]\n *&return:int =(n$2 + n$5) [line 35]\n " shape="box"] +"method::div1_getter_templ21" [label="1: Start method::div1_getter_templ2\nFormals: \nLocals: g:class method::GetterTempl x1_2:class method::X1 x1_1:class method::X1 \n DECLARE_LOCALS(&return,&g,&x1_2,&x1_1); [line 72]\n " color=yellow style=filled] - 34 -> 33 ; -33 [label="33: Exit method::GetterTempl_get \n " color=yellow style=filled] + "method::div1_getter_templ21" -> "method::div1_getter_templ26" ; +"method::GetterTempl_GetterTempl2" [label="2: Exit method::GetterTempl_GetterTempl \n " color=yellow style=filled] -32 [label="32: Start method::GetterTempl_get\nFormals: this:class method::GetterTempl * t:class method::X2 & s:class method::X1 &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] +"method::GetterTempl_GetterTempl1" [label="1: Start method::GetterTempl_GetterTempl\nFormals: this:class method::GetterTempl *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 32 -> 34 ; -31 [label="31: Return Stmt \n n$0=*&t:class method::X2 & [line 35]\n _=*n$0:class method::X2 [line 35]\n n$2=_fun_method::X2_get(n$0:class method::X2 &) [line 35]\n n$3=*&s:class method::X2 & [line 35]\n _=*n$3:class method::X2 [line 35]\n n$5=_fun_method::X2_get(n$3:class method::X2 &) [line 35]\n *&return:int =(n$2 + n$5) [line 35]\n " shape="box"] + "method::GetterTempl_GetterTempl1" -> "method::GetterTempl_GetterTempl2" ; +"method::div0_getter_templ6" [label="6: DeclStmt \n _fun_method::X2_X2(&x2:class method::X2 *) [line 52]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Exit method::GetterTempl_get \n " color=yellow style=filled] + "method::div0_getter_templ6" -> "method::div0_getter_templ5" ; +"method::div0_getter_templ5" [label="5: DeclStmt \n _fun_method::X3_X3(&x3:class method::X3 *) [line 53]\n " shape="box"] -29 [label="29: Start method::GetterTempl_get\nFormals: this:class method::GetterTempl * t:class method::X2 & s:class method::X2 &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] + "method::div0_getter_templ5" -> "method::div0_getter_templ4" ; +"method::div0_getter_templ4" [label="4: DeclStmt \n _fun_method::GetterTempl_GetterTempl(&g:class method::GetterTempl *) [line 54]\n " shape="box"] - 29 -> 31 ; -28 [label="28: Exit method::GetterTempl_GetterTempl \n " color=yellow style=filled] + "method::div0_getter_templ4" -> "method::div0_getter_templ3" ; +"method::div0_getter_templ3" [label="3: Return Stmt \n _=*&g:class method::GetterTempl [line 55]\n n$1=_fun_method::GetterTempl_get(&g:class method::GetterTempl &,&x3:class method::X3 &,&x2:class method::X2 &) [line 55]\n *&return:int =(1 / n$1) [line 55]\n " shape="box"] -27 [label="27: Start method::GetterTempl_GetterTempl\nFormals: this:class method::GetterTempl *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] + "method::div0_getter_templ3" -> "method::div0_getter_templ2" ; +"method::div0_getter_templ2" [label="2: Exit method::div0_getter_templ \n " color=yellow style=filled] - 27 -> 28 ; -26 [label="26: Return Stmt \n n$0=*&t:class method::X3 & [line 35]\n _=*n$0:class method::X3 [line 35]\n n$2=_fun_method::X3_get(n$0:class method::X3 &) [line 35]\n n$3=*&s:class method::X2 & [line 35]\n _=*n$3:class method::X2 [line 35]\n n$5=_fun_method::X2_get(n$3:class method::X2 &) [line 35]\n *&return:int =(n$2 + n$5) [line 35]\n " shape="box"] +"method::div0_getter_templ1" [label="1: Start method::div0_getter_templ\nFormals: \nLocals: g:class method::GetterTempl x3:class method::X3 x2:class method::X2 \n DECLARE_LOCALS(&return,&g,&x3,&x2); [line 51]\n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: Exit method::GetterTempl_get \n " color=yellow style=filled] + "method::div0_getter_templ1" -> "method::div0_getter_templ6" ; +"method::div1_getter5" [label="5: DeclStmt \n _fun_method::X1_X1(&x1:class method::X1 *) [line 46]\n " shape="box"] -24 [label="24: Start method::GetterTempl_get\nFormals: this:class method::GetterTempl * t:class method::X3 & s:class method::X2 &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] + "method::div1_getter5" -> "method::div1_getter4" ; +"method::div1_getter4" [label="4: DeclStmt \n _fun_method::Getter_Getter(&g:class method::Getter *) [line 47]\n " shape="box"] - 24 -> 26 ; -23 [label="23: Exit method::Getter_Getter \n " color=yellow style=filled] + "method::div1_getter4" -> "method::div1_getter3" ; +"method::div1_getter3" [label="3: Return Stmt \n _=*&g:class method::Getter [line 48]\n n$1=_fun_method::Getter_get(&g:class method::Getter &,&x1:class method::X1 &) [line 48]\n *&return:int =(1 / n$1) [line 48]\n " shape="box"] -22 [label="22: Start method::Getter_Getter\nFormals: this:class method::Getter *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] + "method::div1_getter3" -> "method::div1_getter2" ; +"method::div1_getter2" [label="2: Exit method::div1_getter \n " color=yellow style=filled] - 22 -> 23 ; -21 [label="21: Return Stmt \n n$0=*&s:class method::X1 & [line 27]\n _=*n$0:class method::X1 [line 27]\n n$2=_fun_method::X1_get(n$0:class method::X1 &) [line 27]\n *&return:int =n$2 [line 27]\n " shape="box"] +"method::div1_getter1" [label="1: Start method::div1_getter\nFormals: \nLocals: g:class method::Getter x1:class method::X1 \n DECLARE_LOCALS(&return,&g,&x1); [line 45]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit method::Getter_get \n " color=yellow style=filled] + "method::div1_getter1" -> "method::div1_getter5" ; +"method::X2_X22" [label="2: Exit method::X2_X2 \n " color=yellow style=filled] -19 [label="19: Start method::Getter_get\nFormals: this:class method::Getter * s:class method::X1 &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"method::X2_X21" [label="1: Start method::X2_X2\nFormals: this:class method::X2 *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 19 -> 21 ; -18 [label="18: Return Stmt \n n$0=*&s:class method::X2 & [line 27]\n _=*n$0:class method::X2 [line 27]\n n$2=_fun_method::X2_get(n$0:class method::X2 &) [line 27]\n *&return:int =n$2 [line 27]\n " shape="box"] + "method::X2_X21" -> "method::X2_X22" ; +"method::Getter_get3" [label="3: Return Stmt \n n$0=*&s:class method::X2 & [line 27]\n _=*n$0:class method::X2 [line 27]\n n$2=_fun_method::X2_get(n$0:class method::X2 &) [line 27]\n *&return:int =n$2 [line 27]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit method::Getter_get \n " color=yellow style=filled] + "method::Getter_get3" -> "method::Getter_get2" ; +"method::Getter_get2" [label="2: Exit method::Getter_get \n " color=yellow style=filled] -16 [label="16: Start method::Getter_get\nFormals: this:class method::Getter * s:class method::X2 &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"method::Getter_get1" [label="1: Start method::Getter_get\nFormals: this:class method::Getter * s:class method::X2 &\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 16 -> 18 ; -15 [label="15: Exit method::X3_X3 \n " color=yellow style=filled] + "method::Getter_get1" -> "method::Getter_get3" ; +"method::X3_get3" [label="3: Return Stmt \n *&return:int =0 [line 21]\n " shape="box"] -14 [label="14: Start method::X3_X3\nFormals: this:class method::X3 *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] + "method::X3_get3" -> "method::X3_get2" ; +"method::X3_get2" [label="2: Exit method::X3_get \n " color=yellow style=filled] - 14 -> 15 ; -13 [label="13: Return Stmt \n *&return:int =0 [line 21]\n " shape="box"] +"method::X3_get1" [label="1: Start method::X3_get\nFormals: this:class method::X3 *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit method::X3_get \n " color=yellow style=filled] + "method::X3_get1" -> "method::X3_get3" ; +"method::div0_getter_templ26" [label="6: DeclStmt \n _fun_method::X2_X2(&x2_1:class method::X2 *) [line 59]\n " shape="box"] -11 [label="11: Start method::X3_get\nFormals: this:class method::X3 *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] + "method::div0_getter_templ26" -> "method::div0_getter_templ25" ; +"method::div0_getter_templ25" [label="5: DeclStmt \n _fun_method::X2_X2(&x2_2:class method::X2 *) [line 60]\n " shape="box"] - 11 -> 13 ; -10 [label="10: Exit method::X2_X2 \n " color=yellow style=filled] + "method::div0_getter_templ25" -> "method::div0_getter_templ24" ; +"method::div0_getter_templ24" [label="4: DeclStmt \n _fun_method::GetterTempl_GetterTempl(&g:class method::GetterTempl *) [line 61]\n " shape="box"] -9 [label="9: Start method::X2_X2\nFormals: this:class method::X2 *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] + "method::div0_getter_templ24" -> "method::div0_getter_templ23" ; +"method::div0_getter_templ23" [label="3: Return Stmt \n _=*&g:class method::GetterTempl [line 62]\n n$1=_fun_method::GetterTempl_get(&g:class method::GetterTempl &,&x2_1:class method::X2 &,&x2_2:class method::X2 &) [line 62]\n *&return:int =(1 / n$1) [line 62]\n " shape="box"] - 9 -> 10 ; -8 [label="8: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] + "method::div0_getter_templ23" -> "method::div0_getter_templ22" ; +"method::div0_getter_templ22" [label="2: Exit method::div0_getter_templ2 \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit method::X2_get \n " color=yellow style=filled] +"method::div0_getter_templ21" [label="1: Start method::div0_getter_templ2\nFormals: \nLocals: g:class method::GetterTempl x2_2:class method::X2 x2_1:class method::X2 \n DECLARE_LOCALS(&return,&g,&x2_2,&x2_1); [line 58]\n " color=yellow style=filled] -6 [label="6: Start method::X2_get\nFormals: this:class method::X2 *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "method::div0_getter_templ21" -> "method::div0_getter_templ26" ; +"method::GetterTempl_get3" [label="3: Return Stmt \n n$0=*&t:class method::X1 & [line 35]\n _=*n$0:class method::X1 [line 35]\n n$2=_fun_method::X1_get(n$0:class method::X1 &) [line 35]\n n$3=*&s:class method::X1 & [line 35]\n _=*n$3:class method::X1 [line 35]\n n$5=_fun_method::X1_get(n$3:class method::X1 &) [line 35]\n *&return:int =(n$2 + n$5) [line 35]\n " shape="box"] - 6 -> 8 ; -5 [label="5: Exit method::X1_X1 \n " color=yellow style=filled] + "method::GetterTempl_get3" -> "method::GetterTempl_get2" ; +"method::GetterTempl_get2" [label="2: Exit method::GetterTempl_get \n " color=yellow style=filled] -4 [label="4: Start method::X1_X1\nFormals: this:class method::X1 *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"method::GetterTempl_get1" [label="1: Start method::GetterTempl_get\nFormals: this:class method::GetterTempl * t:class method::X1 & s:class method::X1 &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 4 -> 5 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 13]\n " shape="box"] + "method::GetterTempl_get1" -> "method::GetterTempl_get3" ; +"method::GetterTempl_get3" [label="3: Return Stmt \n n$0=*&t:class method::X2 & [line 35]\n _=*n$0:class method::X2 [line 35]\n n$2=_fun_method::X2_get(n$0:class method::X2 &) [line 35]\n n$3=*&s:class method::X2 & [line 35]\n _=*n$3:class method::X2 [line 35]\n n$5=_fun_method::X2_get(n$3:class method::X2 &) [line 35]\n *&return:int =(n$2 + n$5) [line 35]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit method::X1_get \n " color=yellow style=filled] + "method::GetterTempl_get3" -> "method::GetterTempl_get2" ; +"method::GetterTempl_get2" [label="2: Exit method::GetterTempl_get \n " color=yellow style=filled] -1 [label="1: Start method::X1_get\nFormals: this:class method::X1 *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"method::GetterTempl_get1" [label="1: Start method::GetterTempl_get\nFormals: this:class method::GetterTempl * t:class method::X2 & s:class method::X2 &\nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 1 -> 3 ; + "method::GetterTempl_get1" -> "method::GetterTempl_get3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/templates/simple.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/templates/simple.cpp.dot index 260f6139a..90bc56c1f 100644 --- a/infer/tests/codetoanalyze/cpp/shared/templates/simple.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/templates/simple.cpp.dot @@ -1,33 +1,33 @@ /* @generated */ digraph iCFG { -8 [label="8: BinaryOperatorStmt: Assign \n n$2=*&v:class X & [line 25]\n *n$2.field:int =0 [line 25]\n " shape="box"] +"div0_template_field4" [label="4: BinaryOperatorStmt: Assign \n n$2=*&v:class Container & [line 20]\n *n$2.field:int =0 [line 20]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Return Stmt \n n$0=*&v:class X & [line 26]\n n$1=*n$0.field:int [line 26]\n *&return:int =(1 / n$1) [line 26]\n " shape="box"] + "div0_template_field4" -> "div0_template_field3" ; +"div0_template_field3" [label="3: Return Stmt \n n$0=*&v:class Container & [line 21]\n n$1=*n$0.field:int [line 21]\n *&return:int =(1 / n$1) [line 21]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit div0_struct_field \n " color=yellow style=filled] + "div0_template_field3" -> "div0_template_field2" ; +"div0_template_field2" [label="2: Exit div0_template_field \n " color=yellow style=filled] -5 [label="5: Start div0_struct_field\nFormals: v:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +"div0_template_field1" [label="1: Start div0_template_field\nFormals: v:class Container &\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 5 -> 8 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$2=*&v:class Container & [line 20]\n *n$2.field:int =0 [line 20]\n " shape="box"] + "div0_template_field1" -> "div0_template_field4" ; +"div0_struct_field4" [label="4: BinaryOperatorStmt: Assign \n n$2=*&v:class X & [line 25]\n *n$2.field:int =0 [line 25]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&v:class Container & [line 21]\n n$1=*n$0.field:int [line 21]\n *&return:int =(1 / n$1) [line 21]\n " shape="box"] + "div0_struct_field4" -> "div0_struct_field3" ; +"div0_struct_field3" [label="3: Return Stmt \n n$0=*&v:class X & [line 26]\n n$1=*n$0.field:int [line 26]\n *&return:int =(1 / n$1) [line 26]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit div0_template_field \n " color=yellow style=filled] + "div0_struct_field3" -> "div0_struct_field2" ; +"div0_struct_field2" [label="2: Exit div0_struct_field \n " color=yellow style=filled] -1 [label="1: Start div0_template_field\nFormals: v:class Container &\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"div0_struct_field1" [label="1: Start div0_struct_field\nFormals: v:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 1 -> 4 ; + "div0_struct_field1" -> "div0_struct_field4" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/templates/sizeof_pack.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/templates/sizeof_pack.cpp.dot index 71de88f73..b8eee50c2 100644 --- a/infer/tests/codetoanalyze/cpp/shared/templates/sizeof_pack.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/templates/sizeof_pack.cpp.dot @@ -1,57 +1,57 @@ /* @generated */ digraph iCFG { -14 [label="14: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0:int =0 [line 23]\n *&0$?%__sil_tmpSIL_materialize_temp__n$1:int =0 [line 23]\n *&0$?%__sil_tmpSIL_materialize_temp__n$2:int =0 [line 23]\n n$3=_fun_hash_combine_generic(&0$?%__sil_tmpSIL_materialize_temp__n$0:int &,&0$?%__sil_tmpSIL_materialize_temp__n$1:int &,&0$?%__sil_tmpSIL_materialize_temp__n$2:int &) [line 23]\n *&#GB$test:int =n$3 [line 23]\n " shape="box"] +"MyHasher_hash3" [label="3: Return Stmt \n *&return:int =1 [line 11]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit __infer_globals_initializer_test \n " color=yellow style=filled] + "MyHasher_hash3" -> "MyHasher_hash2" ; +"MyHasher_hash2" [label="2: Exit MyHasher_hash \n " color=yellow style=filled] -12 [label="12: Start __infer_globals_initializer_test\nFormals: \nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$0:int 0$?%__sil_tmpSIL_materialize_temp__n$1:int 0$?%__sil_tmpSIL_materialize_temp__n$2:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_materialize_temp__n$0,&0$?%__sil_tmpSIL_materialize_temp__n$1,&0$?%__sil_tmpSIL_materialize_temp__n$2); [line 23]\n " color=yellow style=filled] +"MyHasher_hash1" [label="1: Start MyHasher_hash\nFormals: t:int \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: DeclStmt \n n$1=*&t:int & [line 16]\n n$2=*n$1:int [line 16]\n n$3=_fun_MyHasher_hash(n$2:int ) [line 16]\n *&seed:int =n$3 [line 16]\n " shape="box"] + "MyHasher_hash1" -> "MyHasher_hash3" ; +"__infer_globals_initializer_test3" [label="3: DeclStmt \n *&0$?%__sil_tmpSIL_materialize_temp__n$0:int =0 [line 23]\n *&0$?%__sil_tmpSIL_materialize_temp__n$1:int =0 [line 23]\n *&0$?%__sil_tmpSIL_materialize_temp__n$2:int =0 [line 23]\n n$3=_fun_hash_combine_generic(&0$?%__sil_tmpSIL_materialize_temp__n$0:int &,&0$?%__sil_tmpSIL_materialize_temp__n$1:int &,&0$?%__sil_tmpSIL_materialize_temp__n$2:int &) [line 23]\n *&#GB$test:int =n$3 [line 23]\n " shape="box"] - 11 -> 8 ; - 11 -> 9 ; -10 [label="10: Return Stmt \n n$0=*&seed:int [line 18]\n *&return:int =n$0 [line 18]\n " shape="box"] + "__infer_globals_initializer_test3" -> "__infer_globals_initializer_test2" ; +"__infer_globals_initializer_test2" [label="2: Exit __infer_globals_initializer_test \n " color=yellow style=filled] - 10 -> 5 ; -9 [label="9: Prune (false branch) \n PRUNE(((_t$0 == 0) == 0), false); [line 17]\n " shape="invhouse"] +"__infer_globals_initializer_test1" [label="1: Start __infer_globals_initializer_test\nFormals: \nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$0:int 0$?%__sil_tmpSIL_materialize_temp__n$1:int 0$?%__sil_tmpSIL_materialize_temp__n$2:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_materialize_temp__n$0,&0$?%__sil_tmpSIL_materialize_temp__n$1,&0$?%__sil_tmpSIL_materialize_temp__n$2); [line 23]\n " color=yellow style=filled] - 9 -> 7 ; -8 [label="8: Prune (true branch) \n PRUNE(((_t$0 == 0) != 0), true); [line 17]\n " shape="invhouse"] + "__infer_globals_initializer_test1" -> "__infer_globals_initializer_test3" ; +"hash_combine_generic8" [label="8: DeclStmt \n n$1=*&t:int & [line 16]\n n$2=*n$1:int [line 16]\n n$3=_fun_MyHasher_hash(n$2:int ) [line 16]\n *&seed:int =n$3 [line 16]\n " shape="box"] - 8 -> 10 ; -7 [label="7: + \n " ] + "hash_combine_generic8" -> "hash_combine_generic5" ; + "hash_combine_generic8" -> "hash_combine_generic6" ; +"hash_combine_generic7" [label="7: Return Stmt \n n$0=*&seed:int [line 18]\n *&return:int =n$0 [line 18]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Return Stmt \n *&return:int =0 [line 20]\n " shape="box"] + "hash_combine_generic7" -> "hash_combine_generic2" ; +"hash_combine_generic6" [label="6: Prune (false branch) \n PRUNE(((_t$0 == 0) == 0), false); [line 17]\n " shape="invhouse"] - 6 -> 5 ; -5 [label="5: Exit hash_combine_generic \n " color=yellow style=filled] + "hash_combine_generic6" -> "hash_combine_generic4" ; +"hash_combine_generic5" [label="5: Prune (true branch) \n PRUNE(((_t$0 == 0) != 0), true); [line 17]\n " shape="invhouse"] -4 [label="4: Start hash_combine_generic\nFormals: t:int & ts:int & ts:int &\nLocals: seed:int \n DECLARE_LOCALS(&return,&seed); [line 15]\n " color=yellow style=filled] + "hash_combine_generic5" -> "hash_combine_generic7" ; +"hash_combine_generic4" [label="4: + \n " ] - 4 -> 11 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 11]\n " shape="box"] + "hash_combine_generic4" -> "hash_combine_generic3" ; +"hash_combine_generic3" [label="3: Return Stmt \n *&return:int =0 [line 20]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit MyHasher_hash \n " color=yellow style=filled] + "hash_combine_generic3" -> "hash_combine_generic2" ; +"hash_combine_generic2" [label="2: Exit hash_combine_generic \n " color=yellow style=filled] -1 [label="1: Start MyHasher_hash\nFormals: t:int \nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled] +"hash_combine_generic1" [label="1: Start hash_combine_generic\nFormals: t:int & ts:int & ts:int &\nLocals: seed:int \n DECLARE_LOCALS(&return,&seed); [line 15]\n " color=yellow style=filled] - 1 -> 3 ; + "hash_combine_generic1" -> "hash_combine_generic8" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/casts.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/casts.cpp.dot index c854293b7..530055c22 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/casts.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/casts.cpp.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: DeclStmt \n *&a:int =(2 + 3.400000) [line 15]\n " shape="box"] +"functional_cast3" [label="3: DeclStmt \n *&a:int =(2 + 3.400000) [line 15]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit functional_cast \n " color=yellow style=filled] + "functional_cast3" -> "functional_cast2" ; +"functional_cast2" [label="2: Exit functional_cast \n " color=yellow style=filled] -4 [label="4: Start functional_cast\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 15]\n " color=yellow style=filled] +"functional_cast1" [label="1: Start functional_cast\nFormals: \nLocals: a:int \n DECLARE_LOCALS(&return,&a); [line 15]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: DeclStmt \n n$0=*&a:int [line 12]\n *&la:long long =n$0 [line 12]\n " shape="box"] + "functional_cast1" -> "functional_cast3" ; +"stat_cast3" [label="3: DeclStmt \n n$0=*&a:int [line 12]\n *&la:long long =n$0 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit stat_cast \n " color=yellow style=filled] + "stat_cast3" -> "stat_cast2" ; +"stat_cast2" [label="2: Exit stat_cast \n " color=yellow style=filled] -1 [label="1: Start stat_cast\nFormals: \nLocals: la:long long a:int \n DECLARE_LOCALS(&return,&la,&a); [line 10]\n " color=yellow style=filled] +"stat_cast1" [label="1: Start stat_cast\nFormals: \nLocals: la:long long a:int \n DECLARE_LOCALS(&return,&la,&a); [line 10]\n " color=yellow style=filled] - 1 -> 3 ; + "stat_cast1" -> "stat_cast3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/functions.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/functions.cpp.dot index a3f240d9f..5f9638bdd 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/functions.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/functions.cpp.dot @@ -1,74 +1,74 @@ /* @generated */ digraph iCFG { -19 [label="19: Call _fun_fun_ignore_param \n n$0=_fun_fun_ignore_param(1:int ,1:int ,1:int ) [line 27]\n " shape="box"] +"test7" [label="7: Call _fun_fun_default \n n$4=_fun_fun_default(1:int ,2:int ) [line 19]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit test2 \n " color=yellow style=filled] + "test7" -> "test6" ; +"test6" [label="6: Call _fun_fun_default \n n$3=_fun_fun_default(1:int ,5:int ) [line 20]\n " shape="box"] -17 [label="17: Start test2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] + "test6" -> "test5" ; +"test5" [label="5: Call _fun_fun_default \n n$2=_fun_fun_default(3:int ,5:int ) [line 21]\n " shape="box"] - 17 -> 19 ; -16 [label="16: Call _fun_fun_default \n n$4=_fun_fun_default(1:int ,2:int ) [line 19]\n " shape="box"] + "test5" -> "test4" ; +"test4" [label="4: Call _fun_fun_default_decl \n n$1=_fun_fun_default_decl(6:int ,5:int ) [line 23]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Call _fun_fun_default \n n$3=_fun_fun_default(1:int ,5:int ) [line 20]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: Call _fun_fun_default_decl \n n$0=_fun_fun_default_decl(6:int ,6:int ) [line 24]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Call _fun_fun_default \n n$2=_fun_fun_default(3:int ,5:int ) [line 21]\n " shape="box"] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Call _fun_fun_default_decl \n n$1=_fun_fun_default_decl(6:int ,5:int ) [line 23]\n " shape="box"] +"test1" [label="1: Start test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Call _fun_fun_default_decl \n n$0=_fun_fun_default_decl(6:int ,6:int ) [line 24]\n " shape="box"] + "test1" -> "test7" ; +"fun_default_decl3" [label="3: Return Stmt \n n$0=*&a:int [line 14]\n n$1=*&b:int [line 14]\n *&return:int =(n$0 + n$1) [line 14]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit test \n " color=yellow style=filled] + "fun_default_decl3" -> "fun_default_decl2" ; +"fun_default_decl2" [label="2: Exit fun_default_decl \n " color=yellow style=filled] -10 [label="10: Start test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"fun_default_decl1" [label="1: Start fun_default_decl\nFormals: a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 10 -> 16 ; -9 [label="9: Return Stmt \n n$0=*&a:int [line 16]\n *&return:int =n$0 [line 16]\n " shape="box"] + "fun_default_decl1" -> "fun_default_decl3" ; +"fun_default3" [label="3: Return Stmt \n n$0=*&a:int [line 10]\n n$1=*&b:int [line 10]\n *&return:int =(n$0 + n$1) [line 10]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit fun_ignore_param \n " color=yellow style=filled] + "fun_default3" -> "fun_default2" ; +"fun_default2" [label="2: Exit fun_default \n " color=yellow style=filled] -7 [label="7: Start fun_ignore_param\nFormals: a:int __param_1:int __param_2:int \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"fun_default1" [label="1: Start fun_default\nFormals: a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Return Stmt \n n$0=*&a:int [line 14]\n n$1=*&b:int [line 14]\n *&return:int =(n$0 + n$1) [line 14]\n " shape="box"] + "fun_default1" -> "fun_default3" ; +"test23" [label="3: Call _fun_fun_ignore_param \n n$0=_fun_fun_ignore_param(1:int ,1:int ,1:int ) [line 27]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit fun_default_decl \n " color=yellow style=filled] + "test23" -> "test22" ; +"test22" [label="2: Exit test2 \n " color=yellow style=filled] -4 [label="4: Start fun_default_decl\nFormals: a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"test21" [label="1: Start test2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&a:int [line 10]\n n$1=*&b:int [line 10]\n *&return:int =(n$0 + n$1) [line 10]\n " shape="box"] + "test21" -> "test23" ; +"fun_ignore_param3" [label="3: Return Stmt \n n$0=*&a:int [line 16]\n *&return:int =n$0 [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit fun_default \n " color=yellow style=filled] + "fun_ignore_param3" -> "fun_ignore_param2" ; +"fun_ignore_param2" [label="2: Exit fun_ignore_param \n " color=yellow style=filled] -1 [label="1: Start fun_default\nFormals: a:int b:int \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"fun_ignore_param1" [label="1: Start fun_ignore_param\nFormals: a:int __param_1:int __param_2:int \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 1 -> 3 ; + "fun_ignore_param1" -> "fun_ignore_param3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/inheritance.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/inheritance.cpp.dot index d2511e6cc..c6acefd24 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/inheritance.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/inheritance.cpp.dot @@ -1,97 +1,97 @@ /* @generated */ digraph iCFG { -25 [label="25: DeclStmt \n n$20=_fun___new(sizeof(class Base ):unsigned long ) [line 22]\n _fun_Base_Base(n$20:class Base *) [line 22]\n *&b:class Base *=n$20 [line 22]\n " shape="box"] +"Base_Base2" [label="2: Exit Base_Base \n " color=yellow style=filled] - 25 -> 24 ; -24 [label="24: DeclStmt \n n$19=_fun___new(sizeof(class Sub ):unsigned long ) [line 23]\n _fun_Sub_Sub(n$19:class Sub *) [line 23]\n *&s1:class Sub *=n$19 [line 23]\n " shape="box"] +"Base_Base1" [label="1: Start Base_Base\nFormals: this:class Base *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: DeclStmt \n n$18=_fun___new(sizeof(class Sub ):unsigned long ) [line 24]\n _fun_Sub_Sub(n$18:class Sub *) [line 24]\n *&s2:class Sub *=n$18 [line 24]\n " shape="box"] + "Base_Base1" -> "Base_Base2" ; +"Base_fun_redefine3" [label="3: Return Stmt \n *&return:int =10 [line 13]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Call _fun_Base_fun \n n$15=*&b:class Base * [line 26]\n _=*n$15:class Base [line 26]\n n$17=_fun_Base_fun(n$15:class Base *) [line 26]\n " shape="box"] + "Base_fun_redefine3" -> "Base_fun_redefine2" ; +"Base_fun_redefine2" [label="2: Exit Base_fun_redefine \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Call _fun_Base_fun \n n$12=*&s1:class Base * [line 27]\n _=*n$12:class Base [line 27]\n n$14=_fun_Base_fun(n$12:class Base *) [line 27]\n " shape="box"] +"Base_fun_redefine1" [label="1: Start Base_fun_redefine\nFormals: this:class Base *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Call _fun_Base_fun \n n$9=*&s2:class Sub * [line 28]\n _=*n$9:class Sub [line 28]\n n$11=_fun_Base_fun(n$9:class Sub *) [line 28]\n " shape="box"] + "Base_fun_redefine1" -> "Base_fun_redefine3" ; +"call_static_methods11" [label="11: DeclStmt \n n$20=_fun___new(sizeof(class Base ):unsigned long ) [line 22]\n _fun_Base_Base(n$20:class Base *) [line 22]\n *&b:class Base *=n$20 [line 22]\n " shape="box"] - 20 -> 19 ; -19 [label="19: Call _fun_Base_fun_redefine \n n$6=*&b:class Base * [line 30]\n _=*n$6:class Base [line 30]\n n$8=_fun_Base_fun_redefine(n$6:class Base *) [line 30]\n " shape="box"] + "call_static_methods11" -> "call_static_methods10" ; +"call_static_methods10" [label="10: DeclStmt \n n$19=_fun___new(sizeof(class Sub ):unsigned long ) [line 23]\n _fun_Sub_Sub(n$19:class Sub *) [line 23]\n *&s1:class Sub *=n$19 [line 23]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Call _fun_Base_fun_redefine \n n$3=*&s1:class Base * [line 31]\n _=*n$3:class Base [line 31]\n n$5=_fun_Base_fun_redefine(n$3:class Base *) [line 31]\n " shape="box"] + "call_static_methods10" -> "call_static_methods9" ; +"call_static_methods9" [label="9: DeclStmt \n n$18=_fun___new(sizeof(class Sub ):unsigned long ) [line 24]\n _fun_Sub_Sub(n$18:class Sub *) [line 24]\n *&s2:class Sub *=n$18 [line 24]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Call _fun_Sub_fun_redefine \n n$0=*&s2:class Sub * [line 32]\n _=*n$0:class Sub [line 32]\n n$2=_fun_Sub_fun_redefine(n$0:class Sub *) [line 32]\n " shape="box"] + "call_static_methods9" -> "call_static_methods8" ; +"call_static_methods8" [label="8: Call _fun_Base_fun \n n$15=*&b:class Base * [line 26]\n _=*n$15:class Base [line 26]\n n$17=_fun_Base_fun(n$15:class Base *) [line 26]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Exit call_static_methods \n " color=yellow style=filled] + "call_static_methods8" -> "call_static_methods7" ; +"call_static_methods7" [label="7: Call _fun_Base_fun \n n$12=*&s1:class Base * [line 27]\n _=*n$12:class Base [line 27]\n n$14=_fun_Base_fun(n$12:class Base *) [line 27]\n " shape="box"] -15 [label="15: Start call_static_methods\nFormals: \nLocals: s2:class Sub * s1:class Base * b:class Base * \n DECLARE_LOCALS(&return,&s2,&s1,&b); [line 21]\n " color=yellow style=filled] + "call_static_methods7" -> "call_static_methods6" ; +"call_static_methods6" [label="6: Call _fun_Base_fun \n n$9=*&s2:class Sub * [line 28]\n _=*n$9:class Sub [line 28]\n n$11=_fun_Base_fun(n$9:class Sub *) [line 28]\n " shape="box"] - 15 -> 25 ; -14 [label="14: Constructor Init \n n$0=*&this:class Sub * [line 16]\n _fun_Base_Base(n$0:class Sub *) [line 16]\n " shape="box"] + "call_static_methods6" -> "call_static_methods5" ; +"call_static_methods5" [label="5: Call _fun_Base_fun_redefine \n n$6=*&b:class Base * [line 30]\n _=*n$6:class Base [line 30]\n n$8=_fun_Base_fun_redefine(n$6:class Base *) [line 30]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit Sub_Sub \n " color=yellow style=filled] + "call_static_methods5" -> "call_static_methods4" ; +"call_static_methods4" [label="4: Call _fun_Base_fun_redefine \n n$3=*&s1:class Base * [line 31]\n _=*n$3:class Base [line 31]\n n$5=_fun_Base_fun_redefine(n$3:class Base *) [line 31]\n " shape="box"] -12 [label="12: Start Sub_Sub\nFormals: this:class Sub *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] + "call_static_methods4" -> "call_static_methods3" ; +"call_static_methods3" [label="3: Call _fun_Sub_fun_redefine \n n$0=*&s2:class Sub * [line 32]\n _=*n$0:class Sub [line 32]\n n$2=_fun_Sub_fun_redefine(n$0:class Sub *) [line 32]\n " shape="box"] - 12 -> 14 ; -11 [label="11: Return Stmt \n *&return:int =20 [line 18]\n " shape="box"] + "call_static_methods3" -> "call_static_methods2" ; +"call_static_methods2" [label="2: Exit call_static_methods \n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Exit Sub_fun_redefine \n " color=yellow style=filled] +"call_static_methods1" [label="1: Start call_static_methods\nFormals: \nLocals: s2:class Sub * s1:class Base * b:class Base * \n DECLARE_LOCALS(&return,&s2,&s1,&b); [line 21]\n " color=yellow style=filled] -9 [label="9: Start Sub_fun_redefine\nFormals: this:class Sub *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] + "call_static_methods1" -> "call_static_methods11" ; +"Sub_fun_redefine3" [label="3: Return Stmt \n *&return:int =20 [line 18]\n " shape="box"] - 9 -> 11 ; -8 [label="8: Exit Base_Base \n " color=yellow style=filled] + "Sub_fun_redefine3" -> "Sub_fun_redefine2" ; +"Sub_fun_redefine2" [label="2: Exit Sub_fun_redefine \n " color=yellow style=filled] -7 [label="7: Start Base_Base\nFormals: this:class Base *\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"Sub_fun_redefine1" [label="1: Start Sub_fun_redefine\nFormals: this:class Sub *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 7 -> 8 ; -6 [label="6: Return Stmt \n *&return:int =10 [line 13]\n " shape="box"] + "Sub_fun_redefine1" -> "Sub_fun_redefine3" ; +"Sub_Sub3" [label="3: Constructor Init \n n$0=*&this:class Sub * [line 16]\n _fun_Base_Base(n$0:class Sub *) [line 16]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit Base_fun_redefine \n " color=yellow style=filled] + "Sub_Sub3" -> "Sub_Sub2" ; +"Sub_Sub2" [label="2: Exit Sub_Sub \n " color=yellow style=filled] -4 [label="4: Start Base_fun_redefine\nFormals: this:class Base *\nLocals: \n DECLARE_LOCALS(&return); [line 13]\n " color=yellow style=filled] +"Sub_Sub1" [label="1: Start Sub_Sub\nFormals: this:class Sub *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 12]\n " shape="box"] + "Sub_Sub1" -> "Sub_Sub3" ; +"Base_fun3" [label="3: Return Stmt \n *&return:int =1 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Base_fun \n " color=yellow style=filled] + "Base_fun3" -> "Base_fun2" ; +"Base_fun2" [label="2: Exit Base_fun \n " color=yellow style=filled] -1 [label="1: Start Base_fun\nFormals: this:class Base *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"Base_fun1" [label="1: Start Base_fun\nFormals: this:class Base *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "Base_fun1" -> "Base_fun3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/inheritance_field.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/inheritance_field.cpp.dot index dbd606474..8f8976ec1 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/inheritance_field.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/inheritance_field.cpp.dot @@ -1,158 +1,158 @@ /* @generated */ digraph iCFG { -41 [label="41: BinaryOperatorStmt: Assign \n n$3=*&s:class Sub * [line 67]\n *n$3.b1:int =1 [line 67]\n " shape="box"] +"div1_b14" [label="4: BinaryOperatorStmt: Assign \n n$2=*&s:class Sub & [line 62]\n *n$2.b1:int =1 [line 62]\n " shape="box"] - 41 -> 40 ; -40 [label="40: DeclStmt \n n$2=*&s:class Sub * [line 68]\n *&b:class Sub *=n$2 [line 68]\n " shape="box"] + "div1_b14" -> "div1_b13" ; +"div1_b13" [label="3: Return Stmt \n n$0=*&s:class Sub & [line 63]\n n$1=*n$0.b1:int [line 63]\n *&return:int =(1 / n$1) [line 63]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Return Stmt \n n$0=*&b:class Base1 * [line 69]\n n$1=*n$0.b1:int [line 69]\n *&return:int =(1 / n$1) [line 69]\n " shape="box"] + "div1_b13" -> "div1_b12" ; +"div1_b12" [label="2: Exit div1_b1 \n " color=yellow style=filled] - 39 -> 38 ; -38 [label="38: Exit div1_cast \n " color=yellow style=filled] +"div1_b11" [label="1: Start div1_b1\nFormals: s:class Sub &\nLocals: \n DECLARE_LOCALS(&return); [line 61]\n " color=yellow style=filled] -37 [label="37: Start div1_cast\nFormals: s:class Sub *\nLocals: b:class Base1 * \n DECLARE_LOCALS(&return,&b); [line 66]\n " color=yellow style=filled] + "div1_b11" -> "div1_b14" ; +"div0_b14" [label="4: BinaryOperatorStmt: Assign \n n$2=*&s:class Sub & [line 23]\n *n$2.b1:int =0 [line 23]\n " shape="box"] - 37 -> 41 ; -36 [label="36: BinaryOperatorStmt: Assign \n n$2=*&s:class Sub & [line 62]\n *n$2.b1:int =1 [line 62]\n " shape="box"] + "div0_b14" -> "div0_b13" ; +"div0_b13" [label="3: Return Stmt \n n$0=*&s:class Sub & [line 24]\n n$1=*n$0.b1:int [line 24]\n *&return:int =(1 / n$1) [line 24]\n " shape="box"] - 36 -> 35 ; -35 [label="35: Return Stmt \n n$0=*&s:class Sub & [line 63]\n n$1=*n$0.b1:int [line 63]\n *&return:int =(1 / n$1) [line 63]\n " shape="box"] + "div0_b13" -> "div0_b12" ; +"div0_b12" [label="2: Exit div0_b1 \n " color=yellow style=filled] - 35 -> 34 ; -34 [label="34: Exit div1_b1 \n " color=yellow style=filled] +"div0_b11" [label="1: Start div0_b1\nFormals: s:class Sub &\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] -33 [label="33: Start div1_b1\nFormals: s:class Sub &\nLocals: \n DECLARE_LOCALS(&return); [line 61]\n " color=yellow style=filled] + "div0_b11" -> "div0_b14" ; +"div0_cast_ref5" [label="5: BinaryOperatorStmt: Assign \n n$3=*&s:class Sub & [line 44]\n *n$3.b1:int =0 [line 44]\n " shape="box"] - 33 -> 36 ; -32 [label="32: BinaryOperatorStmt: Assign \n n$5=*&s:class Sub * [line 56]\n *n$5.b1:int =1 [line 56]\n " shape="box"] + "div0_cast_ref5" -> "div0_cast_ref4" ; +"div0_cast_ref4" [label="4: DeclStmt \n n$2=*&s:class Sub & [line 45]\n *&b:class Sub &=n$2 [line 45]\n " shape="box"] - 32 -> 31 ; -31 [label="31: BinaryOperatorStmt: Assign \n n$4=*&s:class Sub * [line 57]\n *n$4.s:int =1 [line 57]\n " shape="box"] + "div0_cast_ref4" -> "div0_cast_ref3" ; +"div0_cast_ref3" [label="3: Return Stmt \n n$0=*&b:class Base1 & [line 46]\n n$1=*n$0.b1:int [line 46]\n *&return:int =(1 / n$1) [line 46]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Return Stmt \n n$0=*&s:class Sub * [line 58]\n n$1=*n$0.b1:int [line 58]\n n$2=*&s:class Sub * [line 58]\n n$3=*n$2.s:int [line 58]\n *&return:int =(1 / (n$1 - n$3)) [line 58]\n " shape="box"] + "div0_cast_ref3" -> "div0_cast_ref2" ; +"div0_cast_ref2" [label="2: Exit div0_cast_ref \n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: Exit div0_s_b1 \n " color=yellow style=filled] +"div0_cast_ref1" [label="1: Start div0_cast_ref\nFormals: s:class Sub &\nLocals: b:class Base1 & \n DECLARE_LOCALS(&return,&b); [line 43]\n " color=yellow style=filled] -28 [label="28: Start div0_s_b1\nFormals: s:class Sub *\nLocals: \n DECLARE_LOCALS(&return); [line 55]\n " color=yellow style=filled] + "div0_cast_ref1" -> "div0_cast_ref5" ; +"div0_cast5" [label="5: BinaryOperatorStmt: Assign \n n$3=*&s:class Sub * [line 38]\n *n$3.b1:int =0 [line 38]\n " shape="box"] - 28 -> 32 ; -27 [label="27: BinaryOperatorStmt: Assign \n n$5=*&s:class Sub * [line 50]\n *n$5.b1:int =1 [line 50]\n " shape="box"] + "div0_cast5" -> "div0_cast4" ; +"div0_cast4" [label="4: DeclStmt \n n$2=*&s:class Sub * [line 39]\n *&b:class Sub *=n$2 [line 39]\n " shape="box"] - 27 -> 26 ; -26 [label="26: BinaryOperatorStmt: Assign \n n$4=*&s:class Sub * [line 51]\n *n$4.s:int =1 [line 51]\n " shape="box"] + "div0_cast4" -> "div0_cast3" ; +"div0_cast3" [label="3: Return Stmt \n n$0=*&b:class Base1 * [line 40]\n n$1=*n$0.b1:int [line 40]\n *&return:int =(1 / n$1) [line 40]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Return Stmt \n n$0=*&s:class Sub * [line 52]\n n$1=*n$0.b1:int [line 52]\n n$2=*&s:class Sub * [line 52]\n n$3=*n$2.s:int [line 52]\n *&return:int =(1 / (n$1 - n$3)) [line 52]\n " shape="box"] + "div0_cast3" -> "div0_cast2" ; +"div0_cast2" [label="2: Exit div0_cast \n " color=yellow style=filled] - 25 -> 24 ; -24 [label="24: Exit div0_b1_s \n " color=yellow style=filled] +"div0_cast1" [label="1: Start div0_cast\nFormals: s:class Sub *\nLocals: b:class Base1 * \n DECLARE_LOCALS(&return,&b); [line 37]\n " color=yellow style=filled] -23 [label="23: Start div0_b1_s\nFormals: s:class Sub *\nLocals: \n DECLARE_LOCALS(&return); [line 49]\n " color=yellow style=filled] + "div0_cast1" -> "div0_cast5" ; +"div1_cast5" [label="5: BinaryOperatorStmt: Assign \n n$3=*&s:class Sub * [line 67]\n *n$3.b1:int =1 [line 67]\n " shape="box"] - 23 -> 27 ; -22 [label="22: BinaryOperatorStmt: Assign \n n$3=*&s:class Sub & [line 44]\n *n$3.b1:int =0 [line 44]\n " shape="box"] + "div1_cast5" -> "div1_cast4" ; +"div1_cast4" [label="4: DeclStmt \n n$2=*&s:class Sub * [line 68]\n *&b:class Sub *=n$2 [line 68]\n " shape="box"] - 22 -> 21 ; -21 [label="21: DeclStmt \n n$2=*&s:class Sub & [line 45]\n *&b:class Sub &=n$2 [line 45]\n " shape="box"] + "div1_cast4" -> "div1_cast3" ; +"div1_cast3" [label="3: Return Stmt \n n$0=*&b:class Base1 * [line 69]\n n$1=*n$0.b1:int [line 69]\n *&return:int =(1 / n$1) [line 69]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Return Stmt \n n$0=*&b:class Base1 & [line 46]\n n$1=*n$0.b1:int [line 46]\n *&return:int =(1 / n$1) [line 46]\n " shape="box"] + "div1_cast3" -> "div1_cast2" ; +"div1_cast2" [label="2: Exit div1_cast \n " color=yellow style=filled] - 20 -> 19 ; -19 [label="19: Exit div0_cast_ref \n " color=yellow style=filled] +"div1_cast1" [label="1: Start div1_cast\nFormals: s:class Sub *\nLocals: b:class Base1 * \n DECLARE_LOCALS(&return,&b); [line 66]\n " color=yellow style=filled] -18 [label="18: Start div0_cast_ref\nFormals: s:class Sub &\nLocals: b:class Base1 & \n DECLARE_LOCALS(&return,&b); [line 43]\n " color=yellow style=filled] + "div1_cast1" -> "div1_cast5" ; +"div0_s_b15" [label="5: BinaryOperatorStmt: Assign \n n$5=*&s:class Sub * [line 56]\n *n$5.b1:int =1 [line 56]\n " shape="box"] - 18 -> 22 ; -17 [label="17: BinaryOperatorStmt: Assign \n n$3=*&s:class Sub * [line 38]\n *n$3.b1:int =0 [line 38]\n " shape="box"] + "div0_s_b15" -> "div0_s_b14" ; +"div0_s_b14" [label="4: BinaryOperatorStmt: Assign \n n$4=*&s:class Sub * [line 57]\n *n$4.s:int =1 [line 57]\n " shape="box"] - 17 -> 16 ; -16 [label="16: DeclStmt \n n$2=*&s:class Sub * [line 39]\n *&b:class Sub *=n$2 [line 39]\n " shape="box"] + "div0_s_b14" -> "div0_s_b13" ; +"div0_s_b13" [label="3: Return Stmt \n n$0=*&s:class Sub * [line 58]\n n$1=*n$0.b1:int [line 58]\n n$2=*&s:class Sub * [line 58]\n n$3=*n$2.s:int [line 58]\n *&return:int =(1 / (n$1 - n$3)) [line 58]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Return Stmt \n n$0=*&b:class Base1 * [line 40]\n n$1=*n$0.b1:int [line 40]\n *&return:int =(1 / n$1) [line 40]\n " shape="box"] + "div0_s_b13" -> "div0_s_b12" ; +"div0_s_b12" [label="2: Exit div0_s_b1 \n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit div0_cast \n " color=yellow style=filled] +"div0_s_b11" [label="1: Start div0_s_b1\nFormals: s:class Sub *\nLocals: \n DECLARE_LOCALS(&return); [line 55]\n " color=yellow style=filled] -13 [label="13: Start div0_cast\nFormals: s:class Sub *\nLocals: b:class Base1 * \n DECLARE_LOCALS(&return,&b); [line 37]\n " color=yellow style=filled] + "div0_s_b11" -> "div0_s_b15" ; +"div0_s4" [label="4: BinaryOperatorStmt: Assign \n n$2=*&s:class Sub & [line 33]\n *n$2.s:int =0 [line 33]\n " shape="box"] - 13 -> 17 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$2=*&s:class Sub & [line 33]\n *n$2.s:int =0 [line 33]\n " shape="box"] + "div0_s4" -> "div0_s3" ; +"div0_s3" [label="3: Return Stmt \n n$0=*&s:class Sub & [line 34]\n n$1=*n$0.s:int [line 34]\n *&return:int =(1 / n$1) [line 34]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Return Stmt \n n$0=*&s:class Sub & [line 34]\n n$1=*n$0.s:int [line 34]\n *&return:int =(1 / n$1) [line 34]\n " shape="box"] + "div0_s3" -> "div0_s2" ; +"div0_s2" [label="2: Exit div0_s \n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Exit div0_s \n " color=yellow style=filled] +"div0_s1" [label="1: Start div0_s\nFormals: s:class Sub &\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] -9 [label="9: Start div0_s\nFormals: s:class Sub &\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] + "div0_s1" -> "div0_s4" ; +"div0_b1_s5" [label="5: BinaryOperatorStmt: Assign \n n$5=*&s:class Sub * [line 50]\n *n$5.b1:int =1 [line 50]\n " shape="box"] - 9 -> 12 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$2=*&s:class Sub & [line 28]\n *n$2.b2:int =0 [line 28]\n " shape="box"] + "div0_b1_s5" -> "div0_b1_s4" ; +"div0_b1_s4" [label="4: BinaryOperatorStmt: Assign \n n$4=*&s:class Sub * [line 51]\n *n$4.s:int =1 [line 51]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Return Stmt \n n$0=*&s:class Sub & [line 29]\n n$1=*n$0.b2:int [line 29]\n *&return:int =(1 / n$1) [line 29]\n " shape="box"] + "div0_b1_s4" -> "div0_b1_s3" ; +"div0_b1_s3" [label="3: Return Stmt \n n$0=*&s:class Sub * [line 52]\n n$1=*n$0.b1:int [line 52]\n n$2=*&s:class Sub * [line 52]\n n$3=*n$2.s:int [line 52]\n *&return:int =(1 / (n$1 - n$3)) [line 52]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit div0_b2 \n " color=yellow style=filled] + "div0_b1_s3" -> "div0_b1_s2" ; +"div0_b1_s2" [label="2: Exit div0_b1_s \n " color=yellow style=filled] -5 [label="5: Start div0_b2\nFormals: s:class Sub &\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] +"div0_b1_s1" [label="1: Start div0_b1_s\nFormals: s:class Sub *\nLocals: \n DECLARE_LOCALS(&return); [line 49]\n " color=yellow style=filled] - 5 -> 8 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$2=*&s:class Sub & [line 23]\n *n$2.b1:int =0 [line 23]\n " shape="box"] + "div0_b1_s1" -> "div0_b1_s5" ; +"div0_b24" [label="4: BinaryOperatorStmt: Assign \n n$2=*&s:class Sub & [line 28]\n *n$2.b2:int =0 [line 28]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&s:class Sub & [line 24]\n n$1=*n$0.b1:int [line 24]\n *&return:int =(1 / n$1) [line 24]\n " shape="box"] + "div0_b24" -> "div0_b23" ; +"div0_b23" [label="3: Return Stmt \n n$0=*&s:class Sub & [line 29]\n n$1=*n$0.b2:int [line 29]\n *&return:int =(1 / n$1) [line 29]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit div0_b1 \n " color=yellow style=filled] + "div0_b23" -> "div0_b22" ; +"div0_b22" [label="2: Exit div0_b2 \n " color=yellow style=filled] -1 [label="1: Start div0_b1\nFormals: s:class Sub &\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] +"div0_b21" [label="1: Start div0_b2\nFormals: s:class Sub &\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 1 -> 4 ; + "div0_b21" -> "div0_b24" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/operator_overload.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/operator_overload.cpp.dot index 5c72ed77e..06590916b 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/operator_overload.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/operator_overload.cpp.dot @@ -1,103 +1,103 @@ /* @generated */ digraph iCFG { -27 [label="27: Return Stmt \n n$0=*&x:class X & [line 45]\n n$1=_fun_X_operator[](n$0:class X &,1:int ) [line 45]\n *&return:int =(1 / n$1) [line 45]\n " shape="box"] +"div1_method_op3" [label="3: Return Stmt \n n$0=*&x:class X & [line 45]\n n$1=_fun_X_operator[](n$0:class X &,1:int ) [line 45]\n *&return:int =(1 / n$1) [line 45]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Exit div1_method_op \n " color=yellow style=filled] + "div1_method_op3" -> "div1_method_op2" ; +"div1_method_op2" [label="2: Exit div1_method_op \n " color=yellow style=filled] -25 [label="25: Start div1_method_op\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 45]\n " color=yellow style=filled] +"div1_method_op1" [label="1: Start div1_method_op\nFormals: x:class X &\nLocals: \n DECLARE_LOCALS(&return); [line 45]\n " color=yellow style=filled] - 25 -> 27 ; -24 [label="24: Return Stmt \n n$0=*&y:class Y & [line 42]\n n$1=_fun_X_operator[](n$0:class Y &,0:int ) [line 42]\n *&return:int =(1 / n$1) [line 42]\n " shape="box"] + "div1_method_op1" -> "div1_method_op3" ; +"div0_method4" [label="4: DeclStmt \n n$1=*&x:class X & [line 36]\n _=*n$1:class X [line 36]\n n$3=_fun_X_operator[](n$1:class X &,0:int ) [line 36]\n *&v:int =n$3 [line 36]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Exit div0_inheritted_op \n " color=yellow style=filled] + "div0_method4" -> "div0_method3" ; +"div0_method3" [label="3: Return Stmt \n n$0=*&v:int [line 37]\n *&return:int =(1 / n$0) [line 37]\n " shape="box"] -22 [label="22: Start div0_inheritted_op\nFormals: y:class Y &\nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] + "div0_method3" -> "div0_method2" ; +"div0_method2" [label="2: Exit div0_method \n " color=yellow style=filled] - 22 -> 24 ; -21 [label="21: DeclStmt \n n$1=*&x:class X & [line 36]\n _=*n$1:class X [line 36]\n n$3=_fun_X_operator[](n$1:class X &,0:int ) [line 36]\n *&v:int =n$3 [line 36]\n " shape="box"] +"div0_method1" [label="1: Start div0_method\nFormals: x:class X &\nLocals: v:int \n DECLARE_LOCALS(&return,&v); [line 34]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Return Stmt \n n$0=*&v:int [line 37]\n *&return:int =(1 / n$0) [line 37]\n " shape="box"] + "div0_method1" -> "div0_method4" ; +"div0_method_op_ptr3" [label="3: Return Stmt \n n$0=*&x:class X * [line 26]\n n$1=_fun_X_operator[](n$0:class X &,0:int ) [line 26]\n *&return:int =(1 / n$1) [line 26]\n " shape="box"] - 20 -> 19 ; -19 [label="19: Exit div0_method \n " color=yellow style=filled] + "div0_method_op_ptr3" -> "div0_method_op_ptr2" ; +"div0_method_op_ptr2" [label="2: Exit div0_method_op_ptr \n " color=yellow style=filled] -18 [label="18: Start div0_method\nFormals: x:class X &\nLocals: v:int \n DECLARE_LOCALS(&return,&v); [line 34]\n " color=yellow style=filled] +"div0_method_op_ptr1" [label="1: Start div0_method_op_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 18 -> 21 ; -17 [label="17: DeclStmt \n n$1=*&x:class X & [line 30]\n n$2=_fun_operator*(n$1:class X &,0:int ) [line 30]\n *&v:int =n$2 [line 30]\n " shape="box"] + "div0_method_op_ptr1" -> "div0_method_op_ptr3" ; +"div0_inheritted_op3" [label="3: Return Stmt \n n$0=*&y:class Y & [line 42]\n n$1=_fun_X_operator[](n$0:class Y &,0:int ) [line 42]\n *&return:int =(1 / n$1) [line 42]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Return Stmt \n n$0=*&v:int [line 31]\n *&return:int =(1 / n$0) [line 31]\n " shape="box"] + "div0_inheritted_op3" -> "div0_inheritted_op2" ; +"div0_inheritted_op2" [label="2: Exit div0_inheritted_op \n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Exit div0_function_op \n " color=yellow style=filled] +"div0_inheritted_op1" [label="1: Start div0_inheritted_op\nFormals: y:class Y &\nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] -14 [label="14: Start div0_function_op\nFormals: x:class X &\nLocals: v:int \n DECLARE_LOCALS(&return,&v); [line 28]\n " color=yellow style=filled] + "div0_inheritted_op1" -> "div0_inheritted_op3" ; +"div0_method_op4" [label="4: DeclStmt \n n$1=*&x:class X & [line 22]\n n$2=_fun_X_operator[](n$1:class X &,0:int ) [line 22]\n *&v:int =n$2 [line 22]\n " shape="box"] - 14 -> 17 ; -13 [label="13: Return Stmt \n n$0=*&x:class X * [line 26]\n n$1=_fun_X_operator[](n$0:class X &,0:int ) [line 26]\n *&return:int =(1 / n$1) [line 26]\n " shape="box"] + "div0_method_op4" -> "div0_method_op3" ; +"div0_method_op3" [label="3: Return Stmt \n n$0=*&v:int [line 23]\n *&return:int =(1 / n$0) [line 23]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit div0_method_op_ptr \n " color=yellow style=filled] + "div0_method_op3" -> "div0_method_op2" ; +"div0_method_op2" [label="2: Exit div0_method_op \n " color=yellow style=filled] -11 [label="11: Start div0_method_op_ptr\nFormals: x:class X *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"div0_method_op1" [label="1: Start div0_method_op\nFormals: x:class X &\nLocals: v:int \n DECLARE_LOCALS(&return,&v); [line 20]\n " color=yellow style=filled] - 11 -> 13 ; -10 [label="10: DeclStmt \n n$1=*&x:class X & [line 22]\n n$2=_fun_X_operator[](n$1:class X &,0:int ) [line 22]\n *&v:int =n$2 [line 22]\n " shape="box"] + "div0_method_op1" -> "div0_method_op4" ; +"operator*3" [label="3: Return Stmt \n n$0=*&v:int [line 18]\n *&return:int =n$0 [line 18]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Return Stmt \n n$0=*&v:int [line 23]\n *&return:int =(1 / n$0) [line 23]\n " shape="box"] + "operator*3" -> "operator*2" ; +"operator*2" [label="2: Exit operator* \n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit div0_method_op \n " color=yellow style=filled] +"operator*1" [label="1: Start operator*\nFormals: x1:class X & v:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] -7 [label="7: Start div0_method_op\nFormals: x:class X &\nLocals: v:int \n DECLARE_LOCALS(&return,&v); [line 20]\n " color=yellow style=filled] + "operator*1" -> "operator*3" ; +"div0_function_op4" [label="4: DeclStmt \n n$1=*&x:class X & [line 30]\n n$2=_fun_operator*(n$1:class X &,0:int ) [line 30]\n *&v:int =n$2 [line 30]\n " shape="box"] - 7 -> 10 ; -6 [label="6: Return Stmt \n n$0=*&v:int [line 18]\n *&return:int =n$0 [line 18]\n " shape="box"] + "div0_function_op4" -> "div0_function_op3" ; +"div0_function_op3" [label="3: Return Stmt \n n$0=*&v:int [line 31]\n *&return:int =(1 / n$0) [line 31]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit operator* \n " color=yellow style=filled] + "div0_function_op3" -> "div0_function_op2" ; +"div0_function_op2" [label="2: Exit div0_function_op \n " color=yellow style=filled] -4 [label="4: Start operator*\nFormals: x1:class X & v:int \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"div0_function_op1" [label="1: Start div0_function_op\nFormals: x:class X &\nLocals: v:int \n DECLARE_LOCALS(&return,&v); [line 28]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&x:int [line 12]\n *&return:int =n$0 [line 12]\n " shape="box"] + "div0_function_op1" -> "div0_function_op4" ; +"X_operator[]3" [label="3: Return Stmt \n n$0=*&x:int [line 12]\n *&return:int =n$0 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit X_operator[] \n " color=yellow style=filled] + "X_operator[]3" -> "X_operator[]2" ; +"X_operator[]2" [label="2: Exit X_operator[] \n " color=yellow style=filled] -1 [label="1: Start X_operator[]\nFormals: this:class X * x:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"X_operator[]1" [label="1: Start X_operator[]\nFormals: this:class X * x:int \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "X_operator[]1" -> "X_operator[]3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/return_struct.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/return_struct.cpp.dot index 0756ef1c7..4a0f0d7fe 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/return_struct.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/return_struct.cpp.dot @@ -1,133 +1,133 @@ /* @generated */ digraph iCFG { -35 [label="35: Return Stmt \n _fun_return_struct::get(1:int ,&0$?%__sil_tmp__temp_return_n$1:class return_struct::X *) [line 46]\n n$2=_fun_return_struct::X_div(&0$?%__sil_tmp__temp_return_n$1:class return_struct::X &) [line 46]\n *&return:int =n$2 [line 46]\n " shape="box"] +"return_struct::get_method_div13" [label="3: Return Stmt \n _fun_return_struct::get(1:int ,&0$?%__sil_tmp__temp_return_n$1:class return_struct::X *) [line 46]\n n$2=_fun_return_struct::X_div(&0$?%__sil_tmp__temp_return_n$1:class return_struct::X &) [line 46]\n *&return:int =n$2 [line 46]\n " shape="box"] - 35 -> 34 ; -34 [label="34: Exit return_struct::get_method_div1 \n " color=yellow style=filled] + "return_struct::get_method_div13" -> "return_struct::get_method_div12" ; +"return_struct::get_method_div12" [label="2: Exit return_struct::get_method_div1 \n " color=yellow style=filled] -33 [label="33: Start return_struct::get_method_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class return_struct::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 46]\n " color=yellow style=filled] +"return_struct::get_method_div11" [label="1: Start return_struct::get_method_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class return_struct::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 46]\n " color=yellow style=filled] - 33 -> 35 ; -32 [label="32: Return Stmt \n _fun_return_struct::get(1:int ,&0$?%__sil_tmp__temp_return_n$1:class return_struct::X *) [line 44]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 44]\n *&return:int =(1 / n$2) [line 44]\n " shape="box"] + "return_struct::get_method_div11" -> "return_struct::get_method_div13" ; +"return_struct::get_field_div13" [label="3: Return Stmt \n _fun_return_struct::get(1:int ,&0$?%__sil_tmp__temp_return_n$1:class return_struct::X *) [line 44]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 44]\n *&return:int =(1 / n$2) [line 44]\n " shape="box"] - 32 -> 31 ; -31 [label="31: Exit return_struct::get_field_div1 \n " color=yellow style=filled] + "return_struct::get_field_div13" -> "return_struct::get_field_div12" ; +"return_struct::get_field_div12" [label="2: Exit return_struct::get_field_div1 \n " color=yellow style=filled] -30 [label="30: Start return_struct::get_field_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class return_struct::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 44]\n " color=yellow style=filled] +"return_struct::get_field_div11" [label="1: Start return_struct::get_field_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class return_struct::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 44]\n " color=yellow style=filled] - 30 -> 32 ; -29 [label="29: DeclStmt \n _fun_return_struct::get(1:int ,&0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X *) [line 40]\n _fun_return_struct::X_X(&x:class return_struct::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X &) [line 40]\n " shape="box"] + "return_struct::get_field_div11" -> "return_struct::get_field_div13" ; +"return_struct::get5" [label="5: DeclStmt \n _fun_return_struct::X_X(&x:class return_struct::X *) [line 22]\n " shape="box"] - 29 -> 28 ; -28 [label="28: Return Stmt \n n$0=*&x.f:int [line 41]\n *&return:int =(1 / n$0) [line 41]\n " shape="box"] + "return_struct::get5" -> "return_struct::get4" ; +"return_struct::get4" [label="4: BinaryOperatorStmt: Assign \n n$1=*&a:int [line 23]\n *&x.f:int =n$1 [line 23]\n " shape="box"] - 28 -> 27 ; -27 [label="27: Exit return_struct::get_div1 \n " color=yellow style=filled] + "return_struct::get4" -> "return_struct::get3" ; +"return_struct::get3" [label="3: Return Stmt \n n$0=*&__return_param:class return_struct::X * [line 24]\n _fun_return_struct::X_X(n$0:class return_struct::X *,&x:class return_struct::X &) [line 24]\n " shape="box"] -26 [label="26: Start return_struct::get_div1\nFormals: \nLocals: x:class return_struct::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 39]\n " color=yellow style=filled] + "return_struct::get3" -> "return_struct::get2" ; +"return_struct::get2" [label="2: Exit return_struct::get \n " color=yellow style=filled] - 26 -> 29 ; -25 [label="25: Return Stmt \n _fun_return_struct::get(0:int ,&0$?%__sil_tmp__temp_return_n$1:class return_struct::X *) [line 37]\n n$2=_fun_return_struct::X_div(&0$?%__sil_tmp__temp_return_n$1:class return_struct::X &) [line 37]\n *&return:int =n$2 [line 37]\n " shape="box"] +"return_struct::get1" [label="1: Start return_struct::get\nFormals: a:int __return_param:class return_struct::X *\nLocals: x:class return_struct::X \n DECLARE_LOCALS(&return,&x); [line 21]\n " color=yellow style=filled] - 25 -> 24 ; -24 [label="24: Exit return_struct::get_method_div0 \n " color=yellow style=filled] + "return_struct::get1" -> "return_struct::get5" ; +"return_struct::get_field_div04" [label="4: Call _fun_return_struct::X_skip \n _fun_return_struct::get(0:int ,&0$?%__sil_tmp__temp_return_n$4:class return_struct::X *) [line 33]\n n$5=_fun_return_struct::X_skip(&0$?%__sil_tmp__temp_return_n$4:class return_struct::X &) [line 33]\n " shape="box"] -23 [label="23: Start return_struct::get_method_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class return_struct::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 37]\n " color=yellow style=filled] + "return_struct::get_field_div04" -> "return_struct::get_field_div03" ; +"return_struct::get_field_div03" [label="3: Return Stmt \n _fun_return_struct::get(0:int ,&0$?%__sil_tmp__temp_return_n$1:class return_struct::X *) [line 34]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 34]\n *&return:int =(1 / n$2) [line 34]\n " shape="box"] - 23 -> 25 ; -22 [label="22: Call _fun_return_struct::X_skip \n _fun_return_struct::get(0:int ,&0$?%__sil_tmp__temp_return_n$4:class return_struct::X *) [line 33]\n n$5=_fun_return_struct::X_skip(&0$?%__sil_tmp__temp_return_n$4:class return_struct::X &) [line 33]\n " shape="box"] + "return_struct::get_field_div03" -> "return_struct::get_field_div02" ; +"return_struct::get_field_div02" [label="2: Exit return_struct::get_field_div0 \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Return Stmt \n _fun_return_struct::get(0:int ,&0$?%__sil_tmp__temp_return_n$1:class return_struct::X *) [line 34]\n n$2=*&0$?%__sil_tmp__temp_return_n$1.f:int [line 34]\n *&return:int =(1 / n$2) [line 34]\n " shape="box"] +"return_struct::get_field_div01" [label="1: Start return_struct::get_field_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class return_struct::X 0$?%__sil_tmp__temp_return_n$4:class return_struct::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1,&0$?%__sil_tmp__temp_return_n$4); [line 32]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit return_struct::get_field_div0 \n " color=yellow style=filled] + "return_struct::get_field_div01" -> "return_struct::get_field_div04" ; +"return_struct::get_div14" [label="4: DeclStmt \n _fun_return_struct::get(1:int ,&0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X *) [line 40]\n _fun_return_struct::X_X(&x:class return_struct::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X &) [line 40]\n " shape="box"] -19 [label="19: Start return_struct::get_field_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class return_struct::X 0$?%__sil_tmp__temp_return_n$4:class return_struct::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1,&0$?%__sil_tmp__temp_return_n$4); [line 32]\n " color=yellow style=filled] + "return_struct::get_div14" -> "return_struct::get_div13" ; +"return_struct::get_div13" [label="3: Return Stmt \n n$0=*&x.f:int [line 41]\n *&return:int =(1 / n$0) [line 41]\n " shape="box"] - 19 -> 22 ; -18 [label="18: DeclStmt \n _fun_return_struct::get(0:int ,&0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X *) [line 28]\n _fun_return_struct::X_X(&x:class return_struct::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X &) [line 28]\n " shape="box"] + "return_struct::get_div13" -> "return_struct::get_div12" ; +"return_struct::get_div12" [label="2: Exit return_struct::get_div1 \n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Return Stmt \n n$0=*&x.f:int [line 29]\n *&return:int =(1 / n$0) [line 29]\n " shape="box"] +"return_struct::get_div11" [label="1: Start return_struct::get_div1\nFormals: \nLocals: x:class return_struct::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 39]\n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Exit return_struct::get_div0 \n " color=yellow style=filled] + "return_struct::get_div11" -> "return_struct::get_div14" ; +"return_struct::get_method_div03" [label="3: Return Stmt \n _fun_return_struct::get(0:int ,&0$?%__sil_tmp__temp_return_n$1:class return_struct::X *) [line 37]\n n$2=_fun_return_struct::X_div(&0$?%__sil_tmp__temp_return_n$1:class return_struct::X &) [line 37]\n *&return:int =n$2 [line 37]\n " shape="box"] -15 [label="15: Start return_struct::get_div0\nFormals: \nLocals: x:class return_struct::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 27]\n " color=yellow style=filled] + "return_struct::get_method_div03" -> "return_struct::get_method_div02" ; +"return_struct::get_method_div02" [label="2: Exit return_struct::get_method_div0 \n " color=yellow style=filled] - 15 -> 18 ; -14 [label="14: DeclStmt \n _fun_return_struct::X_X(&x:class return_struct::X *) [line 22]\n " shape="box"] +"return_struct::get_method_div01" [label="1: Start return_struct::get_method_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:class return_struct::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 37]\n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: BinaryOperatorStmt: Assign \n n$1=*&a:int [line 23]\n *&x.f:int =n$1 [line 23]\n " shape="box"] + "return_struct::get_method_div01" -> "return_struct::get_method_div03" ; +"return_struct::X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class return_struct::X * [line 15]\n n$1=*&x:class return_struct::X & [line 15]\n n$2=*n$1.f:int [line 15]\n *n$0.f:int =n$2 [line 15]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Return Stmt \n n$0=*&__return_param:class return_struct::X * [line 24]\n _fun_return_struct::X_X(n$0:class return_struct::X *,&x:class return_struct::X &) [line 24]\n " shape="box"] + "return_struct::X_X3" -> "return_struct::X_X2" ; +"return_struct::X_X2" [label="2: Exit return_struct::X_X \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: Exit return_struct::get \n " color=yellow style=filled] +"return_struct::X_X1" [label="1: Start return_struct::X_X\nFormals: this:class return_struct::X * x:class return_struct::X &\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] -10 [label="10: Start return_struct::get\nFormals: a:int __return_param:class return_struct::X *\nLocals: x:class return_struct::X \n DECLARE_LOCALS(&return,&x); [line 21]\n " color=yellow style=filled] + "return_struct::X_X1" -> "return_struct::X_X3" ; +"return_struct::X_div3" [label="3: Return Stmt \n n$0=*&this:class return_struct::X * [line 17]\n n$1=*n$0.f:int [line 17]\n *&return:int =(1 / n$1) [line 17]\n " shape="box"] - 10 -> 14 ; -9 [label="9: Return Stmt \n n$0=*&this:class return_struct::X * [line 17]\n n$1=*n$0.f:int [line 17]\n *&return:int =(1 / n$1) [line 17]\n " shape="box"] + "return_struct::X_div3" -> "return_struct::X_div2" ; +"return_struct::X_div2" [label="2: Exit return_struct::X_div \n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit return_struct::X_div \n " color=yellow style=filled] +"return_struct::X_div1" [label="1: Start return_struct::X_div\nFormals: this:class return_struct::X *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] -7 [label="7: Start return_struct::X_div\nFormals: this:class return_struct::X *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "return_struct::X_div1" -> "return_struct::X_div3" ; +"return_struct::get_div04" [label="4: DeclStmt \n _fun_return_struct::get(0:int ,&0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X *) [line 28]\n _fun_return_struct::X_X(&x:class return_struct::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X &) [line 28]\n " shape="box"] - 7 -> 9 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&this:class return_struct::X * [line 16]\n *n$0.f:int =1 [line 16]\n " shape="box"] + "return_struct::get_div04" -> "return_struct::get_div03" ; +"return_struct::get_div03" [label="3: Return Stmt \n n$0=*&x.f:int [line 29]\n *&return:int =(1 / n$0) [line 29]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit return_struct::X_X \n " color=yellow style=filled] + "return_struct::get_div03" -> "return_struct::get_div02" ; +"return_struct::get_div02" [label="2: Exit return_struct::get_div0 \n " color=yellow style=filled] -4 [label="4: Start return_struct::X_X\nFormals: this:class return_struct::X *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] +"return_struct::get_div01" [label="1: Start return_struct::get_div0\nFormals: \nLocals: x:class return_struct::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class return_struct::X \n DECLARE_LOCALS(&return,&x,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 27]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class return_struct::X * [line 15]\n n$1=*&x:class return_struct::X & [line 15]\n n$2=*n$1.f:int [line 15]\n *n$0.f:int =n$2 [line 15]\n " shape="box"] + "return_struct::get_div01" -> "return_struct::get_div04" ; +"return_struct::X_X3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&this:class return_struct::X * [line 16]\n *n$0.f:int =1 [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit return_struct::X_X \n " color=yellow style=filled] + "return_struct::X_X3" -> "return_struct::X_X2" ; +"return_struct::X_X2" [label="2: Exit return_struct::X_X \n " color=yellow style=filled] -1 [label="1: Start return_struct::X_X\nFormals: this:class return_struct::X * x:class return_struct::X &\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"return_struct::X_X1" [label="1: Start return_struct::X_X\nFormals: this:class return_struct::X *\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 1 -> 3 ; + "return_struct::X_X1" -> "return_struct::X_X3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/struct.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/struct.cpp.dot index c7a405a31..7d671c8f4 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/struct.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/struct.cpp.dot @@ -1,26 +1,26 @@ /* @generated */ digraph iCFG { -6 [label="6: BinaryOperatorStmt: Assign \n n$3=*&xs:class X_struct * [line 24]\n *n$3.a:int =10 [line 24]\n " shape="box"] +"test6" [label="6: BinaryOperatorStmt: Assign \n n$3=*&xs:class X_struct * [line 24]\n *n$3.a:int =10 [line 24]\n " shape="box"] - 6 -> 5 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$2=*&xs:class X_struct * [line 25]\n *n$2.b:int =20 [line 25]\n " shape="box"] + "test6" -> "test5" ; +"test5" [label="5: BinaryOperatorStmt: Assign \n n$2=*&xs:class X_struct * [line 25]\n *n$2.b:int =20 [line 25]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$1=*&xc:class X_class * [line 28]\n *n$1.a:int =10 [line 28]\n " shape="box"] + "test5" -> "test4" ; +"test4" [label="4: BinaryOperatorStmt: Assign \n n$1=*&xc:class X_class * [line 28]\n *n$1.a:int =10 [line 28]\n " shape="box"] - 4 -> 3 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&xc:class X_class * [line 29]\n *n$0.b:int =20 [line 29]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&xc:class X_class * [line 29]\n *n$0.b:int =20 [line 29]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit test \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start test\nFormals: \nLocals: xc:class X_class * xs:class X_struct * \n DECLARE_LOCALS(&return,&xc,&xs); [line 21]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: xc:class X_class * xs:class X_struct * \n DECLARE_LOCALS(&return,&xc,&xs); [line 21]\n " color=yellow style=filled] - 1 -> 6 ; + "test1" -> "test6" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/struct_forward_declare.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/struct_forward_declare.cpp.dot index c175c962f..6f771d697 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/struct_forward_declare.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/struct_forward_declare.cpp.dot @@ -1,158 +1,158 @@ /* @generated */ digraph iCFG { -41 [label="41: BinaryOperatorStmt: Assign \n n$3=*&z:class struct_forward_declare::Z * [line 67]\n *n$3.f:int =0 [line 67]\n " shape="box"] +"struct_forward_declare::Z_ptr_div04" [label="4: BinaryOperatorStmt: Assign \n n$3=*&z:class struct_forward_declare::Z * [line 67]\n *n$3.f:int =0 [line 67]\n " shape="box"] - 41 -> 40 ; -40 [label="40: Return Stmt \n n$0=*&z:class struct_forward_declare::Z * [line 68]\n _=*n$0:class struct_forward_declare::Z [line 68]\n n$2=_fun_struct_forward_declare::Z_getF(n$0:class struct_forward_declare::Z *) [line 68]\n *&return:int =(1 / n$2) [line 68]\n " shape="box"] + "struct_forward_declare::Z_ptr_div04" -> "struct_forward_declare::Z_ptr_div03" ; +"struct_forward_declare::Z_ptr_div03" [label="3: Return Stmt \n n$0=*&z:class struct_forward_declare::Z * [line 68]\n _=*n$0:class struct_forward_declare::Z [line 68]\n n$2=_fun_struct_forward_declare::Z_getF(n$0:class struct_forward_declare::Z *) [line 68]\n *&return:int =(1 / n$2) [line 68]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Exit struct_forward_declare::Z_ptr_div0 \n " color=yellow style=filled] + "struct_forward_declare::Z_ptr_div03" -> "struct_forward_declare::Z_ptr_div02" ; +"struct_forward_declare::Z_ptr_div02" [label="2: Exit struct_forward_declare::Z_ptr_div0 \n " color=yellow style=filled] -38 [label="38: Start struct_forward_declare::Z_ptr_div0\nFormals: z:class struct_forward_declare::Z *\nLocals: \n DECLARE_LOCALS(&return); [line 63]\n " color=yellow style=filled] +"struct_forward_declare::Z_ptr_div01" [label="1: Start struct_forward_declare::Z_ptr_div0\nFormals: z:class struct_forward_declare::Z *\nLocals: \n DECLARE_LOCALS(&return); [line 63]\n " color=yellow style=filled] - 38 -> 41 ; -37 [label="37: DeclStmt \n _fun_struct_forward_declare::Z_Z(&z:class struct_forward_declare::Z *) [line 58]\n " shape="box"] + "struct_forward_declare::Z_ptr_div01" -> "struct_forward_declare::Z_ptr_div04" ; +"struct_forward_declare::X_div05" [label="5: DeclStmt \n _fun_struct_forward_declare::X_X(&x:class struct_forward_declare::X *) [line 37]\n " shape="box"] - 37 -> 36 ; -36 [label="36: BinaryOperatorStmt: Assign \n *&z.f:int =0 [line 59]\n " shape="box"] + "struct_forward_declare::X_div05" -> "struct_forward_declare::X_div04" ; +"struct_forward_declare::X_div04" [label="4: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 38]\n " shape="box"] - 36 -> 35 ; -35 [label="35: Return Stmt \n _=*&z:class struct_forward_declare::Z [line 60]\n n$1=_fun_struct_forward_declare::Z_getF(&z:class struct_forward_declare::Z &) [line 60]\n *&return:int =(1 / n$1) [line 60]\n " shape="box"] + "struct_forward_declare::X_div04" -> "struct_forward_declare::X_div03" ; +"struct_forward_declare::X_div03" [label="3: Return Stmt \n _=*&x:class struct_forward_declare::X [line 39]\n n$1=_fun_struct_forward_declare::X_getF(&x:class struct_forward_declare::X &) [line 39]\n *&return:int =(1 / n$1) [line 39]\n " shape="box"] - 35 -> 34 ; -34 [label="34: Exit struct_forward_declare::Z_div0 \n " color=yellow style=filled] + "struct_forward_declare::X_div03" -> "struct_forward_declare::X_div02" ; +"struct_forward_declare::X_div02" [label="2: Exit struct_forward_declare::X_div0 \n " color=yellow style=filled] -33 [label="33: Start struct_forward_declare::Z_div0\nFormals: \nLocals: z:class struct_forward_declare::Z \n DECLARE_LOCALS(&return,&z); [line 57]\n " color=yellow style=filled] +"struct_forward_declare::X_div01" [label="1: Start struct_forward_declare::X_div0\nFormals: \nLocals: x:class struct_forward_declare::X \n DECLARE_LOCALS(&return,&x); [line 36]\n " color=yellow style=filled] - 33 -> 37 ; -32 [label="32: DeclStmt \n _fun_struct_forward_declare::X_X(&x:class struct_forward_declare::X *) [line 48]\n " shape="box"] + "struct_forward_declare::X_div01" -> "struct_forward_declare::X_div05" ; +"struct_forward_declare::Z_Z2" [label="2: Exit struct_forward_declare::Z_Z \n " color=yellow style=filled] - 32 -> 31 ; -31 [label="31: BinaryOperatorStmt: Assign \n *&x.y:class struct_forward_declare::Y *=null [line 49]\n " shape="box"] +"struct_forward_declare::Z_Z1" [label="1: Start struct_forward_declare::Z_Z\nFormals: this:class struct_forward_declare::Z *\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] - 31 -> 30 ; -30 [label="30: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 50]\n " shape="box"] + "struct_forward_declare::Z_Z1" -> "struct_forward_declare::Z_Z2" ; +"struct_forward_declare::fun_with_Z3" [label="3: DeclStmt \n n$0=*&z1:class struct_forward_declare::Z * [line 26]\n *&z2:class struct_forward_declare::Z *=n$0 [line 26]\n " shape="box"] - 30 -> 27 ; - 30 -> 28 ; -29 [label="29: Return Stmt \n *&return:int =1 [line 52]\n " shape="box"] + "struct_forward_declare::fun_with_Z3" -> "struct_forward_declare::fun_with_Z2" ; +"struct_forward_declare::fun_with_Z2" [label="2: Exit struct_forward_declare::fun_with_Z \n " color=yellow style=filled] - 29 -> 24 ; -28 [label="28: Prune (false branch) \n n$2=*&x.y:class struct_forward_declare::Y * [line 51]\n PRUNE((n$2 == 0), false); [line 51]\n " shape="invhouse"] +"struct_forward_declare::fun_with_Z1" [label="1: Start struct_forward_declare::fun_with_Z\nFormals: z1:class struct_forward_declare::Z *\nLocals: z2:class struct_forward_declare::Z * \n DECLARE_LOCALS(&return,&z2); [line 26]\n " color=yellow style=filled] - 28 -> 26 ; -27 [label="27: Prune (true branch) \n n$2=*&x.y:class struct_forward_declare::Y * [line 51]\n PRUNE((n$2 != 0), true); [line 51]\n " shape="invhouse"] + "struct_forward_declare::fun_with_Z1" -> "struct_forward_declare::fun_with_Z3" ; +"struct_forward_declare::X_X2" [label="2: Exit struct_forward_declare::X_X \n " color=yellow style=filled] - 27 -> 29 ; -26 [label="26: + \n " ] +"struct_forward_declare::X_X1" [label="1: Start struct_forward_declare::X_X\nFormals: this:class struct_forward_declare::X *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: Return Stmt \n _=*&x:class struct_forward_declare::X [line 54]\n n$1=_fun_struct_forward_declare::X_getF(&x:class struct_forward_declare::X &) [line 54]\n *&return:int =(1 / n$1) [line 54]\n " shape="box"] + "struct_forward_declare::X_X1" -> "struct_forward_declare::X_X2" ; +"struct_forward_declare::Z_getF3" [label="3: Return Stmt \n n$0=*&this:class struct_forward_declare::Z * [line 30]\n n$1=*n$0.f:int [line 30]\n *&return:int =n$1 [line 30]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit struct_forward_declare::X_Y_div0 \n " color=yellow style=filled] + "struct_forward_declare::Z_getF3" -> "struct_forward_declare::Z_getF2" ; +"struct_forward_declare::Z_getF2" [label="2: Exit struct_forward_declare::Z_getF \n " color=yellow style=filled] -23 [label="23: Start struct_forward_declare::X_Y_div0\nFormals: \nLocals: x:class struct_forward_declare::X \n DECLARE_LOCALS(&return,&x); [line 47]\n " color=yellow style=filled] +"struct_forward_declare::Z_getF1" [label="1: Start struct_forward_declare::Z_getF\nFormals: this:class struct_forward_declare::Z *\nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] - 23 -> 32 ; -22 [label="22: BinaryOperatorStmt: Assign \n n$3=*&x:class struct_forward_declare::X * [line 43]\n *n$3.f:int =0 [line 43]\n " shape="box"] + "struct_forward_declare::Z_getF1" -> "struct_forward_declare::Z_getF3" ; +"struct_forward_declare::X_Y_div010" [label="10: DeclStmt \n _fun_struct_forward_declare::X_X(&x:class struct_forward_declare::X *) [line 48]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Return Stmt \n n$0=*&x:class struct_forward_declare::X * [line 44]\n _=*n$0:class struct_forward_declare::X [line 44]\n n$2=_fun_struct_forward_declare::X_getF(n$0:class struct_forward_declare::X *) [line 44]\n *&return:int =(1 / n$2) [line 44]\n " shape="box"] + "struct_forward_declare::X_Y_div010" -> "struct_forward_declare::X_Y_div09" ; +"struct_forward_declare::X_Y_div09" [label="9: BinaryOperatorStmt: Assign \n *&x.y:class struct_forward_declare::Y *=null [line 49]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Exit struct_forward_declare::X_ptr_div0 \n " color=yellow style=filled] + "struct_forward_declare::X_Y_div09" -> "struct_forward_declare::X_Y_div08" ; +"struct_forward_declare::X_Y_div08" [label="8: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 50]\n " shape="box"] -19 [label="19: Start struct_forward_declare::X_ptr_div0\nFormals: x:class struct_forward_declare::X *\nLocals: \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] + "struct_forward_declare::X_Y_div08" -> "struct_forward_declare::X_Y_div05" ; + "struct_forward_declare::X_Y_div08" -> "struct_forward_declare::X_Y_div06" ; +"struct_forward_declare::X_Y_div07" [label="7: Return Stmt \n *&return:int =1 [line 52]\n " shape="box"] - 19 -> 22 ; -18 [label="18: DeclStmt \n _fun_struct_forward_declare::X_X(&x:class struct_forward_declare::X *) [line 37]\n " shape="box"] + "struct_forward_declare::X_Y_div07" -> "struct_forward_declare::X_Y_div02" ; +"struct_forward_declare::X_Y_div06" [label="6: Prune (false branch) \n n$2=*&x.y:class struct_forward_declare::Y * [line 51]\n PRUNE((n$2 == 0), false); [line 51]\n " shape="invhouse"] - 18 -> 17 ; -17 [label="17: BinaryOperatorStmt: Assign \n *&x.f:int =0 [line 38]\n " shape="box"] + "struct_forward_declare::X_Y_div06" -> "struct_forward_declare::X_Y_div04" ; +"struct_forward_declare::X_Y_div05" [label="5: Prune (true branch) \n n$2=*&x.y:class struct_forward_declare::Y * [line 51]\n PRUNE((n$2 != 0), true); [line 51]\n " shape="invhouse"] - 17 -> 16 ; -16 [label="16: Return Stmt \n _=*&x:class struct_forward_declare::X [line 39]\n n$1=_fun_struct_forward_declare::X_getF(&x:class struct_forward_declare::X &) [line 39]\n *&return:int =(1 / n$1) [line 39]\n " shape="box"] + "struct_forward_declare::X_Y_div05" -> "struct_forward_declare::X_Y_div07" ; +"struct_forward_declare::X_Y_div04" [label="4: + \n " ] - 16 -> 15 ; -15 [label="15: Exit struct_forward_declare::X_div0 \n " color=yellow style=filled] + "struct_forward_declare::X_Y_div04" -> "struct_forward_declare::X_Y_div03" ; +"struct_forward_declare::X_Y_div03" [label="3: Return Stmt \n _=*&x:class struct_forward_declare::X [line 54]\n n$1=_fun_struct_forward_declare::X_getF(&x:class struct_forward_declare::X &) [line 54]\n *&return:int =(1 / n$1) [line 54]\n " shape="box"] -14 [label="14: Start struct_forward_declare::X_div0\nFormals: \nLocals: x:class struct_forward_declare::X \n DECLARE_LOCALS(&return,&x); [line 36]\n " color=yellow style=filled] + "struct_forward_declare::X_Y_div03" -> "struct_forward_declare::X_Y_div02" ; +"struct_forward_declare::X_Y_div02" [label="2: Exit struct_forward_declare::X_Y_div0 \n " color=yellow style=filled] - 14 -> 18 ; -13 [label="13: Exit struct_forward_declare::Z_Z \n " color=yellow style=filled] +"struct_forward_declare::X_Y_div01" [label="1: Start struct_forward_declare::X_Y_div0\nFormals: \nLocals: x:class struct_forward_declare::X \n DECLARE_LOCALS(&return,&x); [line 47]\n " color=yellow style=filled] -12 [label="12: Start struct_forward_declare::Z_Z\nFormals: this:class struct_forward_declare::Z *\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] + "struct_forward_declare::X_Y_div01" -> "struct_forward_declare::X_Y_div010" ; +"struct_forward_declare::X_ptr_div04" [label="4: BinaryOperatorStmt: Assign \n n$3=*&x:class struct_forward_declare::X * [line 43]\n *n$3.f:int =0 [line 43]\n " shape="box"] - 12 -> 13 ; -11 [label="11: Return Stmt \n n$0=*&this:class struct_forward_declare::Z * [line 30]\n n$1=*n$0.f:int [line 30]\n *&return:int =n$1 [line 30]\n " shape="box"] + "struct_forward_declare::X_ptr_div04" -> "struct_forward_declare::X_ptr_div03" ; +"struct_forward_declare::X_ptr_div03" [label="3: Return Stmt \n n$0=*&x:class struct_forward_declare::X * [line 44]\n _=*n$0:class struct_forward_declare::X [line 44]\n n$2=_fun_struct_forward_declare::X_getF(n$0:class struct_forward_declare::X *) [line 44]\n *&return:int =(1 / n$2) [line 44]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit struct_forward_declare::Z_getF \n " color=yellow style=filled] + "struct_forward_declare::X_ptr_div03" -> "struct_forward_declare::X_ptr_div02" ; +"struct_forward_declare::X_ptr_div02" [label="2: Exit struct_forward_declare::X_ptr_div0 \n " color=yellow style=filled] -9 [label="9: Start struct_forward_declare::Z_getF\nFormals: this:class struct_forward_declare::Z *\nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] +"struct_forward_declare::X_ptr_div01" [label="1: Start struct_forward_declare::X_ptr_div0\nFormals: x:class struct_forward_declare::X *\nLocals: \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] - 9 -> 11 ; -8 [label="8: DeclStmt \n n$0=*&z1:class struct_forward_declare::Z * [line 26]\n *&z2:class struct_forward_declare::Z *=n$0 [line 26]\n " shape="box"] + "struct_forward_declare::X_ptr_div01" -> "struct_forward_declare::X_ptr_div04" ; +"struct_forward_declare::X_getF3" [label="3: Return Stmt \n n$0=*&this:class struct_forward_declare::X * [line 21]\n n$1=*n$0.f:int [line 21]\n *&return:int =n$1 [line 21]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit struct_forward_declare::fun_with_Z \n " color=yellow style=filled] + "struct_forward_declare::X_getF3" -> "struct_forward_declare::X_getF2" ; +"struct_forward_declare::X_getF2" [label="2: Exit struct_forward_declare::X_getF \n " color=yellow style=filled] -6 [label="6: Start struct_forward_declare::fun_with_Z\nFormals: z1:class struct_forward_declare::Z *\nLocals: z2:class struct_forward_declare::Z * \n DECLARE_LOCALS(&return,&z2); [line 26]\n " color=yellow style=filled] +"struct_forward_declare::X_getF1" [label="1: Start struct_forward_declare::X_getF\nFormals: this:class struct_forward_declare::X *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: Exit struct_forward_declare::X_X \n " color=yellow style=filled] + "struct_forward_declare::X_getF1" -> "struct_forward_declare::X_getF3" ; +"struct_forward_declare::Z_div05" [label="5: DeclStmt \n _fun_struct_forward_declare::Z_Z(&z:class struct_forward_declare::Z *) [line 58]\n " shape="box"] -4 [label="4: Start struct_forward_declare::X_X\nFormals: this:class struct_forward_declare::X *\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] + "struct_forward_declare::Z_div05" -> "struct_forward_declare::Z_div04" ; +"struct_forward_declare::Z_div04" [label="4: BinaryOperatorStmt: Assign \n *&z.f:int =0 [line 59]\n " shape="box"] - 4 -> 5 ; -3 [label="3: Return Stmt \n n$0=*&this:class struct_forward_declare::X * [line 21]\n n$1=*n$0.f:int [line 21]\n *&return:int =n$1 [line 21]\n " shape="box"] + "struct_forward_declare::Z_div04" -> "struct_forward_declare::Z_div03" ; +"struct_forward_declare::Z_div03" [label="3: Return Stmt \n _=*&z:class struct_forward_declare::Z [line 60]\n n$1=_fun_struct_forward_declare::Z_getF(&z:class struct_forward_declare::Z &) [line 60]\n *&return:int =(1 / n$1) [line 60]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit struct_forward_declare::X_getF \n " color=yellow style=filled] + "struct_forward_declare::Z_div03" -> "struct_forward_declare::Z_div02" ; +"struct_forward_declare::Z_div02" [label="2: Exit struct_forward_declare::Z_div0 \n " color=yellow style=filled] -1 [label="1: Start struct_forward_declare::X_getF\nFormals: this:class struct_forward_declare::X *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] +"struct_forward_declare::Z_div01" [label="1: Start struct_forward_declare::Z_div0\nFormals: \nLocals: z:class struct_forward_declare::Z \n DECLARE_LOCALS(&return,&z); [line 57]\n " color=yellow style=filled] - 1 -> 3 ; + "struct_forward_declare::Z_div01" -> "struct_forward_declare::Z_div05" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/struct_pass_by_value.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/struct_pass_by_value.cpp.dot index 995097051..6ef93ccec 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/struct_pass_by_value.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/struct_pass_by_value.cpp.dot @@ -1,178 +1,178 @@ /* @generated */ digraph iCFG { -47 [label="47: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,1:int ) [line 54]\n " shape="box"] +"struct_pass_by_value::temp_div13" [label="3: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X *,1:int ) [line 39]\n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X &) [line 39]\n n$2=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 39]\n *&return:int =(1 / n$2) [line 39]\n " shape="box"] - 47 -> 46 ; -46 [label="46: Call _fun_struct_pass_by_value::set_f \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X *,&x:class struct_pass_by_value::X &) [line 55]\n _fun_struct_pass_by_value::set_f(&0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X ,0:int ) [line 55]\n " shape="box"] + "struct_pass_by_value::temp_div13" -> "struct_pass_by_value::temp_div12" ; +"struct_pass_by_value::temp_div12" [label="2: Exit struct_pass_by_value::temp_div1 \n " color=yellow style=filled] - 46 -> 45 ; -45 [label="45: Return Stmt \n n$0=*&x.f:int [line 56]\n *&return:int =(1 / n$0) [line 56]\n " shape="box"] +"struct_pass_by_value::temp_div11" [label="1: Start struct_pass_by_value::temp_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 39]\n " color=yellow style=filled] - 45 -> 44 ; -44 [label="44: Exit struct_pass_by_value::param_get_copied_div1 \n " color=yellow style=filled] + "struct_pass_by_value::temp_div11" -> "struct_pass_by_value::temp_div13" ; +"struct_pass_by_value::var_div04" [label="4: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,0:int ) [line 28]\n " shape="box"] -43 [label="43: Start struct_pass_by_value::param_get_copied_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$1,&x); [line 53]\n " color=yellow style=filled] + "struct_pass_by_value::var_div04" -> "struct_pass_by_value::var_div03" ; +"struct_pass_by_value::var_div03" [label="3: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&x:class struct_pass_by_value::X &) [line 29]\n n$1=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 29]\n *&return:int =(1 / n$1) [line 29]\n " shape="box"] - 43 -> 47 ; -42 [label="42: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,0:int ) [line 48]\n " shape="box"] + "struct_pass_by_value::var_div03" -> "struct_pass_by_value::var_div02" ; +"struct_pass_by_value::var_div02" [label="2: Exit struct_pass_by_value::var_div0 \n " color=yellow style=filled] - 42 -> 41 ; -41 [label="41: Call _fun_struct_pass_by_value::set_f \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X *,&x:class struct_pass_by_value::X &) [line 49]\n _fun_struct_pass_by_value::set_f(&0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X ,1:int ) [line 49]\n " shape="box"] +"struct_pass_by_value::var_div01" [label="1: Start struct_pass_by_value::var_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&x); [line 27]\n " color=yellow style=filled] - 41 -> 40 ; -40 [label="40: Return Stmt \n n$0=*&x.f:int [line 50]\n *&return:int =(1 / n$0) [line 50]\n " shape="box"] + "struct_pass_by_value::var_div01" -> "struct_pass_by_value::var_div04" ; +"struct_pass_by_value::Y_Y3" [label="3: Constructor Init \n n$0=*&this:class struct_pass_by_value::Y * [line 18]\n n$1=*&x:class struct_pass_by_value::X & [line 18]\n _fun_struct_pass_by_value::X_X(n$0.x:class struct_pass_by_value::X *,n$1:class struct_pass_by_value::X &) [line 18]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Exit struct_pass_by_value::param_get_copied_div0 \n " color=yellow style=filled] + "struct_pass_by_value::Y_Y3" -> "struct_pass_by_value::Y_Y2" ; +"struct_pass_by_value::Y_Y2" [label="2: Exit struct_pass_by_value::Y_Y \n " color=yellow style=filled] -38 [label="38: Start struct_pass_by_value::param_get_copied_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$1,&x); [line 47]\n " color=yellow style=filled] +"struct_pass_by_value::Y_Y1" [label="1: Start struct_pass_by_value::Y_Y\nFormals: this:class struct_pass_by_value::Y * x:class struct_pass_by_value::X &\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 38 -> 42 ; -37 [label="37: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,0:int ) [line 42]\n " shape="box"] + "struct_pass_by_value::Y_Y1" -> "struct_pass_by_value::Y_Y3" ; +"struct_pass_by_value::X_X3" [label="3: Constructor Init \n n$0=*&this:class struct_pass_by_value::X * [line 12]\n n$1=*&__param_0:class struct_pass_by_value::X & [line 12]\n n$2=*n$1.f:int [line 12]\n *n$0.f:int =n$2 [line 12]\n " shape="box"] - 37 -> 36 ; -36 [label="36: DeclStmt \n _fun_struct_pass_by_value::Y_Y(&y:class struct_pass_by_value::Y *,&x:class struct_pass_by_value::X &) [line 43]\n " shape="box"] + "struct_pass_by_value::X_X3" -> "struct_pass_by_value::X_X2" ; +"struct_pass_by_value::X_X2" [label="2: Exit struct_pass_by_value::X_X \n " color=yellow style=filled] - 36 -> 35 ; -35 [label="35: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&y.x:class struct_pass_by_value::X &) [line 44]\n n$1=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 44]\n *&return:int =(1 / n$1) [line 44]\n " shape="box"] +"struct_pass_by_value::X_X1" [label="1: Start struct_pass_by_value::X_X\nFormals: this:class struct_pass_by_value::X * __param_0:class struct_pass_by_value::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 35 -> 34 ; -34 [label="34: Exit struct_pass_by_value::field_div0 \n " color=yellow style=filled] + "struct_pass_by_value::X_X1" -> "struct_pass_by_value::X_X3" ; +"struct_pass_by_value::param_get_copied_div05" [label="5: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,0:int ) [line 48]\n " shape="box"] -33 [label="33: Start struct_pass_by_value::field_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X y:class struct_pass_by_value::Y x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&y,&x); [line 41]\n " color=yellow style=filled] + "struct_pass_by_value::param_get_copied_div05" -> "struct_pass_by_value::param_get_copied_div04" ; +"struct_pass_by_value::param_get_copied_div04" [label="4: Call _fun_struct_pass_by_value::set_f \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X *,&x:class struct_pass_by_value::X &) [line 49]\n _fun_struct_pass_by_value::set_f(&0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X ,1:int ) [line 49]\n " shape="box"] - 33 -> 37 ; -32 [label="32: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X *,1:int ) [line 39]\n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X &) [line 39]\n n$2=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 39]\n *&return:int =(1 / n$2) [line 39]\n " shape="box"] + "struct_pass_by_value::param_get_copied_div04" -> "struct_pass_by_value::param_get_copied_div03" ; +"struct_pass_by_value::param_get_copied_div03" [label="3: Return Stmt \n n$0=*&x.f:int [line 50]\n *&return:int =(1 / n$0) [line 50]\n " shape="box"] - 32 -> 31 ; -31 [label="31: Exit struct_pass_by_value::temp_div1 \n " color=yellow style=filled] + "struct_pass_by_value::param_get_copied_div03" -> "struct_pass_by_value::param_get_copied_div02" ; +"struct_pass_by_value::param_get_copied_div02" [label="2: Exit struct_pass_by_value::param_get_copied_div0 \n " color=yellow style=filled] -30 [label="30: Start struct_pass_by_value::temp_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 39]\n " color=yellow style=filled] +"struct_pass_by_value::param_get_copied_div01" [label="1: Start struct_pass_by_value::param_get_copied_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$1,&x); [line 47]\n " color=yellow style=filled] - 30 -> 32 ; -29 [label="29: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X *,0:int ) [line 37]\n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X &) [line 37]\n n$2=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 37]\n *&return:int =(1 / n$2) [line 37]\n " shape="box"] + "struct_pass_by_value::param_get_copied_div01" -> "struct_pass_by_value::param_get_copied_div05" ; +"struct_pass_by_value::var_div14" [label="4: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,1:int ) [line 33]\n " shape="box"] - 29 -> 28 ; -28 [label="28: Exit struct_pass_by_value::temp_div0 \n " color=yellow style=filled] + "struct_pass_by_value::var_div14" -> "struct_pass_by_value::var_div13" ; +"struct_pass_by_value::var_div13" [label="3: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&x:class struct_pass_by_value::X &) [line 34]\n n$1=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 34]\n *&return:int =(1 / n$1) [line 34]\n " shape="box"] -27 [label="27: Start struct_pass_by_value::temp_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 37]\n " color=yellow style=filled] + "struct_pass_by_value::var_div13" -> "struct_pass_by_value::var_div12" ; +"struct_pass_by_value::var_div12" [label="2: Exit struct_pass_by_value::var_div1 \n " color=yellow style=filled] - 27 -> 29 ; -26 [label="26: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,1:int ) [line 33]\n " shape="box"] +"struct_pass_by_value::var_div11" [label="1: Start struct_pass_by_value::var_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&x); [line 32]\n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&x:class struct_pass_by_value::X &) [line 34]\n n$1=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 34]\n *&return:int =(1 / n$1) [line 34]\n " shape="box"] + "struct_pass_by_value::var_div11" -> "struct_pass_by_value::var_div14" ; +"struct_pass_by_value::set_f3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&val:class struct_pass_by_value::X & [line 25]\n n$1=*&f:int [line 25]\n *n$0.f:int =n$1 [line 25]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit struct_pass_by_value::var_div1 \n " color=yellow style=filled] + "struct_pass_by_value::set_f3" -> "struct_pass_by_value::set_f2" ; +"struct_pass_by_value::set_f2" [label="2: Exit struct_pass_by_value::set_f \n " color=yellow style=filled] -23 [label="23: Start struct_pass_by_value::var_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&x); [line 32]\n " color=yellow style=filled] +"struct_pass_by_value::set_f1" [label="1: Start struct_pass_by_value::set_f\nFormals: val:class struct_pass_by_value::X & f:int \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 23 -> 26 ; -22 [label="22: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,0:int ) [line 28]\n " shape="box"] + "struct_pass_by_value::set_f1" -> "struct_pass_by_value::set_f3" ; +"struct_pass_by_value::temp_div03" [label="3: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X *,0:int ) [line 37]\n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X &) [line 37]\n n$2=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 37]\n *&return:int =(1 / n$2) [line 37]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&x:class struct_pass_by_value::X &) [line 29]\n n$1=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 29]\n *&return:int =(1 / n$1) [line 29]\n " shape="box"] + "struct_pass_by_value::temp_div03" -> "struct_pass_by_value::temp_div02" ; +"struct_pass_by_value::temp_div02" [label="2: Exit struct_pass_by_value::temp_div0 \n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit struct_pass_by_value::var_div0 \n " color=yellow style=filled] +"struct_pass_by_value::temp_div01" [label="1: Start struct_pass_by_value::temp_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X 0$?%__sil_tmpSIL_materialize_temp__n$1:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 37]\n " color=yellow style=filled] -19 [label="19: Start struct_pass_by_value::var_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&x); [line 27]\n " color=yellow style=filled] + "struct_pass_by_value::temp_div01" -> "struct_pass_by_value::temp_div03" ; +"struct_pass_by_value::X_X3" [label="3: Constructor Init \n n$0=*&this:class struct_pass_by_value::X * [line 12]\n n$1=*&__param_0:class struct_pass_by_value::X & [line 12]\n n$2=*n$1.f:int [line 12]\n *n$0.f:int =n$2 [line 12]\n " shape="box"] - 19 -> 22 ; -18 [label="18: BinaryOperatorStmt: Assign \n n$0=*&val:class struct_pass_by_value::X & [line 25]\n n$1=*&f:int [line 25]\n *n$0.f:int =n$1 [line 25]\n " shape="box"] + "struct_pass_by_value::X_X3" -> "struct_pass_by_value::X_X2" ; +"struct_pass_by_value::X_X2" [label="2: Exit struct_pass_by_value::X_X \n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Exit struct_pass_by_value::set_f \n " color=yellow style=filled] +"struct_pass_by_value::X_X1" [label="1: Start struct_pass_by_value::X_X\nFormals: this:class struct_pass_by_value::X * __param_0:class struct_pass_by_value::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] -16 [label="16: Start struct_pass_by_value::set_f\nFormals: val:class struct_pass_by_value::X & f:int \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] + "struct_pass_by_value::X_X1" -> "struct_pass_by_value::X_X3" ; +"struct_pass_by_value::X_X3" [label="3: Constructor Init \n n$0=*&this:class struct_pass_by_value::X * [line 14]\n n$1=*&f:int [line 14]\n *n$0.f:int =n$1 [line 14]\n " shape="box"] - 16 -> 18 ; -15 [label="15: Return Stmt \n n$0=*&val:class struct_pass_by_value::X & [line 22]\n n$1=*n$0.f:int [line 22]\n *&return:int =n$1 [line 22]\n " shape="box"] + "struct_pass_by_value::X_X3" -> "struct_pass_by_value::X_X2" ; +"struct_pass_by_value::X_X2" [label="2: Exit struct_pass_by_value::X_X \n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit struct_pass_by_value::get_f \n " color=yellow style=filled] +"struct_pass_by_value::X_X1" [label="1: Start struct_pass_by_value::X_X\nFormals: this:class struct_pass_by_value::X * f:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] -13 [label="13: Start struct_pass_by_value::get_f\nFormals: val:class struct_pass_by_value::X &\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] + "struct_pass_by_value::X_X1" -> "struct_pass_by_value::X_X3" ; +"struct_pass_by_value::get_f3" [label="3: Return Stmt \n n$0=*&val:class struct_pass_by_value::X & [line 22]\n n$1=*n$0.f:int [line 22]\n *&return:int =n$1 [line 22]\n " shape="box"] - 13 -> 15 ; -12 [label="12: Constructor Init \n n$0=*&this:class struct_pass_by_value::Y * [line 18]\n n$1=*&x:class struct_pass_by_value::X & [line 18]\n _fun_struct_pass_by_value::X_X(n$0.x:class struct_pass_by_value::X *,n$1:class struct_pass_by_value::X &) [line 18]\n " shape="box"] + "struct_pass_by_value::get_f3" -> "struct_pass_by_value::get_f2" ; +"struct_pass_by_value::get_f2" [label="2: Exit struct_pass_by_value::get_f \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: Exit struct_pass_by_value::Y_Y \n " color=yellow style=filled] +"struct_pass_by_value::get_f1" [label="1: Start struct_pass_by_value::get_f\nFormals: val:class struct_pass_by_value::X &\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] -10 [label="10: Start struct_pass_by_value::Y_Y\nFormals: this:class struct_pass_by_value::Y * x:class struct_pass_by_value::X &\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] + "struct_pass_by_value::get_f1" -> "struct_pass_by_value::get_f3" ; +"struct_pass_by_value::param_get_copied_div15" [label="5: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,1:int ) [line 54]\n " shape="box"] - 10 -> 12 ; -9 [label="9: Constructor Init \n n$0=*&this:class struct_pass_by_value::X * [line 12]\n n$1=*&__param_0:class struct_pass_by_value::X & [line 12]\n n$2=*n$1.f:int [line 12]\n *n$0.f:int =n$2 [line 12]\n " shape="box"] + "struct_pass_by_value::param_get_copied_div15" -> "struct_pass_by_value::param_get_copied_div14" ; +"struct_pass_by_value::param_get_copied_div14" [label="4: Call _fun_struct_pass_by_value::set_f \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X *,&x:class struct_pass_by_value::X &) [line 55]\n _fun_struct_pass_by_value::set_f(&0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X ,0:int ) [line 55]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit struct_pass_by_value::X_X \n " color=yellow style=filled] + "struct_pass_by_value::param_get_copied_div14" -> "struct_pass_by_value::param_get_copied_div13" ; +"struct_pass_by_value::param_get_copied_div13" [label="3: Return Stmt \n n$0=*&x.f:int [line 56]\n *&return:int =(1 / n$0) [line 56]\n " shape="box"] -7 [label="7: Start struct_pass_by_value::X_X\nFormals: this:class struct_pass_by_value::X * __param_0:class struct_pass_by_value::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] + "struct_pass_by_value::param_get_copied_div13" -> "struct_pass_by_value::param_get_copied_div12" ; +"struct_pass_by_value::param_get_copied_div12" [label="2: Exit struct_pass_by_value::param_get_copied_div1 \n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Constructor Init \n n$0=*&this:class struct_pass_by_value::X * [line 12]\n n$1=*&__param_0:class struct_pass_by_value::X & [line 12]\n n$2=*n$1.f:int [line 12]\n *n$0.f:int =n$2 [line 12]\n " shape="box"] +"struct_pass_by_value::param_get_copied_div11" [label="1: Start struct_pass_by_value::param_get_copied_div1\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$1:class struct_pass_by_value::X x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$1,&x); [line 53]\n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit struct_pass_by_value::X_X \n " color=yellow style=filled] + "struct_pass_by_value::param_get_copied_div11" -> "struct_pass_by_value::param_get_copied_div15" ; +"struct_pass_by_value::field_div05" [label="5: DeclStmt \n _fun_struct_pass_by_value::X_X(&x:class struct_pass_by_value::X *,0:int ) [line 42]\n " shape="box"] -4 [label="4: Start struct_pass_by_value::X_X\nFormals: this:class struct_pass_by_value::X * __param_0:class struct_pass_by_value::X &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] + "struct_pass_by_value::field_div05" -> "struct_pass_by_value::field_div04" ; +"struct_pass_by_value::field_div04" [label="4: DeclStmt \n _fun_struct_pass_by_value::Y_Y(&y:class struct_pass_by_value::Y *,&x:class struct_pass_by_value::X &) [line 43]\n " shape="box"] - 4 -> 6 ; -3 [label="3: Constructor Init \n n$0=*&this:class struct_pass_by_value::X * [line 14]\n n$1=*&f:int [line 14]\n *n$0.f:int =n$1 [line 14]\n " shape="box"] + "struct_pass_by_value::field_div04" -> "struct_pass_by_value::field_div03" ; +"struct_pass_by_value::field_div03" [label="3: Return Stmt \n _fun_struct_pass_by_value::X_X(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X *,&y.x:class struct_pass_by_value::X &) [line 44]\n n$1=_fun_struct_pass_by_value::get_f(&0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X ) [line 44]\n *&return:int =(1 / n$1) [line 44]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit struct_pass_by_value::X_X \n " color=yellow style=filled] + "struct_pass_by_value::field_div03" -> "struct_pass_by_value::field_div02" ; +"struct_pass_by_value::field_div02" [label="2: Exit struct_pass_by_value::field_div0 \n " color=yellow style=filled] -1 [label="1: Start struct_pass_by_value::X_X\nFormals: this:class struct_pass_by_value::X * f:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"struct_pass_by_value::field_div01" [label="1: Start struct_pass_by_value::field_div0\nFormals: \nLocals: 0$?%__sil_tmp__temp_construct_n$0:class struct_pass_by_value::X y:class struct_pass_by_value::Y x:class struct_pass_by_value::X \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_construct_n$0,&y,&x); [line 41]\n " color=yellow style=filled] - 1 -> 3 ; + "struct_pass_by_value::field_div01" -> "struct_pass_by_value::field_div05" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/type_trait_expr.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/type_trait_expr.cpp.dot index 217d61448..aa952141a 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/type_trait_expr.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/type_trait_expr.cpp.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: Return Stmt \n *&return:int =0 [line 12]\n " shape="box"] +"is_trivial_example3" [label="3: Return Stmt \n *&return:int =1 [line 10]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit is_pointer_example \n " color=yellow style=filled] + "is_trivial_example3" -> "is_trivial_example2" ; +"is_trivial_example2" [label="2: Exit is_trivial_example \n " color=yellow style=filled] -4 [label="4: Start is_pointer_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"is_trivial_example1" [label="1: Start is_trivial_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 10]\n " shape="box"] + "is_trivial_example1" -> "is_trivial_example3" ; +"is_pointer_example3" [label="3: Return Stmt \n *&return:int =0 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit is_trivial_example \n " color=yellow style=filled] + "is_pointer_example3" -> "is_pointer_example2" ; +"is_pointer_example2" [label="2: Exit is_pointer_example \n " color=yellow style=filled] -1 [label="1: Start is_trivial_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"is_pointer_example1" [label="1: Start is_pointer_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "is_pointer_example1" -> "is_pointer_example3" ; } diff --git a/infer/tests/codetoanalyze/cpp/shared/types/typeid_expr.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/types/typeid_expr.cpp.dot index eff1164e6..e8eaa1511 100644 --- a/infer/tests/codetoanalyze/cpp/shared/types/typeid_expr.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/types/typeid_expr.cpp.dot @@ -1,484 +1,484 @@ /* @generated */ digraph iCFG { -134 [label="134: DeclStmt \n _fun_Person_Person(&person:class Person *) [line 63]\n " shape="box"] +"std::bad_exception_bad_exception3" [label="3: Constructor Init \n n$0=*&this:class std::bad_exception * [line 103]\n _fun_std::exception_exception(n$0:class std::bad_exception *) [line 103]\n " shape="box"] - 134 -> 129 ; -133 [label="133: Return Stmt \n *&return:int =(1 / 0) [line 67]\n " shape="box"] + "std::bad_exception_bad_exception3" -> "std::bad_exception_bad_exception2" ; +"std::bad_exception_bad_exception2" [label="2: Exit std::bad_exception_bad_exception \n " color=yellow style=filled] - 133 -> 126 ; -132 [label="132: Return Stmt \n *&return:int =1 [line 65]\n " shape="box"] +"std::bad_exception_bad_exception1" [label="1: Start std::bad_exception_bad_exception\nFormals: this:class std::bad_exception *\nLocals: \n DECLARE_LOCALS(&return); [line 103]\n " color=yellow style=filled] - 132 -> 126 ; -131 [label="131: Prune (false branch) \n PRUNE(((n$0 == n$3) == 0), false); [line 64]\n " shape="invhouse"] + "std::bad_exception_bad_exception1" -> "std::bad_exception_bad_exception3" ; +"std::__1::__convert_to_integral3" [label="3: Return Stmt \n n$0=*&__val:long long [line 4322]\n *&return:long long =n$0 [line 4322]\n " shape="box"] - 131 -> 133 ; -130 [label="130: Prune (true branch) \n PRUNE(((n$0 == n$3) != 0), true); [line 64]\n " shape="invhouse"] + "std::__1::__convert_to_integral3" -> "std::__1::__convert_to_integral2" ; +"std::__1::__convert_to_integral2" [label="2: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] - 130 -> 132 ; -129 [label="129: BinaryOperatorStmt: EQ \n n$0=_fun_template_typeid(&person:class Person &) [line 64]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,&person:class Person ) [line 64]\n _=*n$1:class std::type_info [line 64]\n n$3=_fun_std::type_info_name(n$1:class std::type_info &) [line 64]\n " shape="box"] +"std::__1::__convert_to_integral1" [label="1: Start std::__1::__convert_to_integral\nFormals: __val:long long \nLocals: \n DECLARE_LOCALS(&return); [line 4321]\n " color=yellow style=filled] - 129 -> 130 ; - 129 -> 131 ; -128 [label="128: between_join_and_exit \n " shape="box"] + "std::__1::__convert_to_integral1" -> "std::__1::__convert_to_integral3" ; +"template_typeid4" [label="4: DeclStmt \n n$4=*&value:class Person & [line 58]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person *,n$4:class Person &) [line 58]\n _fun_Person_Person(&result:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person &) [line 58]\n " shape="box"] - 128 -> 126 ; -127 [label="127: + \n " ] + "template_typeid4" -> "template_typeid3" ; +"template_typeid3" [label="3: Return Stmt \n n$0=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$0.__type_name:void ) [line 59]\n _=*n$0:class std::type_info [line 59]\n n$2=_fun_std::type_info_name(n$0:class std::type_info &) [line 59]\n *&return:char *=n$2 [line 59]\n " shape="box"] - 127 -> 128 ; -126 [label="126: Exit template_type_id_person \n " color=yellow style=filled] + "template_typeid3" -> "template_typeid2" ; +"template_typeid2" [label="2: Exit template_typeid \n " color=yellow style=filled] -125 [label="125: Start template_type_id_person\nFormals: \nLocals: person:class Person \n DECLARE_LOCALS(&return,&person); [line 62]\n " color=yellow style=filled] +"template_typeid1" [label="1: Start template_typeid\nFormals: value:class Person &\nLocals: result:class Person 0$?%__sil_tmpSIL_materialize_temp__n$3:class Person \n DECLARE_LOCALS(&return,&result,&0$?%__sil_tmpSIL_materialize_temp__n$3); [line 57]\n " color=yellow style=filled] - 125 -> 134 ; -124 [label="124: DeclStmt \n n$4=*&value:class Person & [line 58]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person *,n$4:class Person &) [line 58]\n _fun_Person_Person(&result:class Person *,&0$?%__sil_tmpSIL_materialize_temp__n$3:class Person &) [line 58]\n " shape="box"] + "template_typeid1" -> "template_typeid4" ; +"Person_Person2" [label="2: Exit Person_Person \n " color=yellow style=filled] - 124 -> 123 ; -123 [label="123: Return Stmt \n n$0=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$0.__type_name:void ) [line 59]\n _=*n$0:class std::type_info [line 59]\n n$2=_fun_std::type_info_name(n$0:class std::type_info &) [line 59]\n *&return:char *=n$2 [line 59]\n " shape="box"] +"Person_Person1" [label="1: Start Person_Person\nFormals: this:class Person * __param_0:class Person &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 123 -> 122 ; -122 [label="122: Exit template_typeid \n " color=yellow style=filled] + "Person_Person1" -> "Person_Person2" ; +"Person_~Person2" [label="2: Exit Person_~Person \n " color=yellow style=filled] -121 [label="121: Start template_typeid\nFormals: value:class Person &\nLocals: result:class Person 0$?%__sil_tmpSIL_materialize_temp__n$3:class Person \n DECLARE_LOCALS(&return,&result,&0$?%__sil_tmpSIL_materialize_temp__n$3); [line 57]\n " color=yellow style=filled] +"Person_~Person1" [label="1: Start Person_~Person\nFormals: this:class Person *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 121 -> 124 ; -120 [label="120: DeclStmt \n _fun_Person_Person(&person:class Person *) [line 49]\n " shape="box"] + "Person_~Person1" -> "Person_~Person2" ; +"std::nested_exception_nested_ptr3" [label="3: Return Stmt \n n$0=*&__return_param:class std::exception_ptr * [line 180]\n n$1=*&this:class std::nested_exception * [line 180]\n _fun_std::exception_ptr_exception_ptr(n$0:class std::exception_ptr *,n$1.__ptr_:class std::exception_ptr &) [line 180]\n " shape="box"] - 120 -> 115 ; -119 [label="119: Return Stmt \n *&return:int =0 [line 53]\n " shape="box"] + "std::nested_exception_nested_ptr3" -> "std::nested_exception_nested_ptr2" ; +"std::nested_exception_nested_ptr2" [label="2: Exit std::nested_exception_nested_ptr \n " color=yellow style=filled] - 119 -> 112 ; -118 [label="118: Return Stmt \n *&return:int =(1 / 0) [line 51]\n " shape="box"] +"std::nested_exception_nested_ptr1" [label="1: Start std::nested_exception_nested_ptr\nFormals: this:class std::nested_exception * __return_param:class std::exception_ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 180]\n " color=yellow style=filled] - 118 -> 112 ; -117 [label="117: Prune (false branch) \n PRUNE(((n$3 == n$6) == 0), false); [line 50]\n " shape="invhouse"] + "std::nested_exception_nested_ptr1" -> "std::nested_exception_nested_ptr3" ; +"std::exception_ptr_operator_bool3" [label="3: Return Stmt \n n$0=*&this:class std::exception_ptr * [line 138]\n n$1=*n$0.__ptr_:void * [line 138]\n *&return:_Bool =(n$1 != null) [line 138]\n " shape="box"] - 117 -> 119 ; -116 [label="116: Prune (true branch) \n PRUNE(((n$3 == n$6) != 0), true); [line 50]\n " shape="invhouse"] + "std::exception_ptr_operator_bool3" -> "std::exception_ptr_operator_bool2" ; +"std::exception_ptr_operator_bool2" [label="2: Exit std::exception_ptr_operator_bool \n " color=yellow style=filled] - 116 -> 118 ; -115 [label="115: BinaryOperatorStmt: EQ \n n$0=*&ptr:class Person * [line 50]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,n$0:class Person ) [line 50]\n _=*n$1:class std::type_info [line 50]\n n$3=_fun_std::type_info_name(n$1:class std::type_info &) [line 50]\n n$4=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$4.__type_name:void ,&person:class Person ) [line 50]\n _=*n$4:class std::type_info [line 50]\n n$6=_fun_std::type_info_name(n$4:class std::type_info &) [line 50]\n " shape="box"] +"std::exception_ptr_operator_bool1" [label="1: Start std::exception_ptr_operator_bool\nFormals: this:class std::exception_ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 136]\n " color=yellow style=filled] - 115 -> 116 ; - 115 -> 117 ; -114 [label="114: between_join_and_exit \n " shape="box"] + "std::exception_ptr_operator_bool1" -> "std::exception_ptr_operator_bool3" ; +"std::__1::__convert_to_integral3" [label="3: Return Stmt \n n$0=*&__val:int [line 4310]\n *&return:int =n$0 [line 4310]\n " shape="box"] - 114 -> 112 ; -113 [label="113: + \n " ] + "std::__1::__convert_to_integral3" -> "std::__1::__convert_to_integral2" ; +"std::__1::__convert_to_integral2" [label="2: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] - 113 -> 114 ; -112 [label="112: Exit person_ptr_typeid \n " color=yellow style=filled] +"std::__1::__convert_to_integral1" [label="1: Start std::__1::__convert_to_integral\nFormals: __val:int \nLocals: \n DECLARE_LOCALS(&return); [line 4309]\n " color=yellow style=filled] -111 [label="111: Start person_ptr_typeid\nFormals: ptr:class Person *\nLocals: person:class Person \n DECLARE_LOCALS(&return,&person); [line 48]\n " color=yellow style=filled] + "std::__1::__convert_to_integral1" -> "std::__1::__convert_to_integral3" ; +"std::type_info_name2" [label="2: Exit std::type_info_name \n " color=yellow style=filled] - 111 -> 120 ; -110 [label="110: DeclStmt \n _fun_Employee_Employee(&employee:class Employee *) [line 40]\n " shape="box"] +"std::type_info_name1" [label="1: Start std::type_info_name\nFormals: this:class std::type_info *\nLocals: \n " color=yellow style=filled] - 110 -> 109 ; -109 [label="109: DeclStmt \n *&ptr:class Employee *=&employee [line 41]\n " shape="box"] +"template_type_id_person10" [label="10: DeclStmt \n _fun_Person_Person(&person:class Person *) [line 63]\n " shape="box"] - 109 -> 104 ; -108 [label="108: Return Stmt \n *&return:int =0 [line 45]\n " shape="box"] + "template_type_id_person10" -> "template_type_id_person5" ; +"template_type_id_person9" [label="9: Return Stmt \n *&return:int =(1 / 0) [line 67]\n " shape="box"] - 108 -> 101 ; -107 [label="107: Return Stmt \n *&return:int =(1 / 0) [line 43]\n " shape="box"] + "template_type_id_person9" -> "template_type_id_person2" ; +"template_type_id_person8" [label="8: Return Stmt \n *&return:int =1 [line 65]\n " shape="box"] - 107 -> 101 ; -106 [label="106: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 42]\n " shape="invhouse"] + "template_type_id_person8" -> "template_type_id_person2" ; +"template_type_id_person7" [label="7: Prune (false branch) \n PRUNE(((n$0 == n$3) == 0), false); [line 64]\n " shape="invhouse"] - 106 -> 108 ; -105 [label="105: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 42]\n " shape="invhouse"] + "template_type_id_person7" -> "template_type_id_person9" ; +"template_type_id_person6" [label="6: Prune (true branch) \n PRUNE(((n$0 == n$3) != 0), true); [line 64]\n " shape="invhouse"] - 105 -> 107 ; -104 [label="104: Call _fun_std::type_info_operator== \n n$0=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$0.__type_name:void ,&employee:class Employee ) [line 42]\n n$1=*&ptr:class Person * [line 42]\n n$2=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$2.__type_name:void ,n$1:class Person ) [line 42]\n n$3=_fun_std::type_info_operator==(n$0:class std::type_info &,n$2:class std::type_info &) [line 42]\n " shape="box"] + "template_type_id_person6" -> "template_type_id_person8" ; +"template_type_id_person5" [label="5: BinaryOperatorStmt: EQ \n n$0=_fun_template_typeid(&person:class Person &) [line 64]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,&person:class Person ) [line 64]\n _=*n$1:class std::type_info [line 64]\n n$3=_fun_std::type_info_name(n$1:class std::type_info &) [line 64]\n " shape="box"] - 104 -> 105 ; - 104 -> 106 ; -103 [label="103: between_join_and_exit \n " shape="box"] + "template_type_id_person5" -> "template_type_id_person6" ; + "template_type_id_person5" -> "template_type_id_person7" ; +"template_type_id_person4" [label="4: between_join_and_exit \n " shape="box"] - 103 -> 101 ; -102 [label="102: + \n " ] + "template_type_id_person4" -> "template_type_id_person2" ; +"template_type_id_person3" [label="3: + \n " ] - 102 -> 103 ; -101 [label="101: Exit employee_typeid \n " color=yellow style=filled] + "template_type_id_person3" -> "template_type_id_person4" ; +"template_type_id_person2" [label="2: Exit template_type_id_person \n " color=yellow style=filled] -100 [label="100: Start employee_typeid\nFormals: \nLocals: ptr:class Person * employee:class Employee \n DECLARE_LOCALS(&return,&ptr,&employee); [line 39]\n " color=yellow style=filled] +"template_type_id_person1" [label="1: Start template_type_id_person\nFormals: \nLocals: person:class Person \n DECLARE_LOCALS(&return,&person); [line 62]\n " color=yellow style=filled] - 100 -> 110 ; -99 [label="99: DeclStmt \n _fun_Person_Person(&person:class Person *) [line 29]\n " shape="box"] + "template_type_id_person1" -> "template_type_id_person10" ; +"std::__1::__convert_to_integral3" [label="3: Return Stmt \n n$0=*&__val:long [line 4316]\n *&return:long =n$0 [line 4316]\n " shape="box"] - 99 -> 98 ; -98 [label="98: DeclStmt \n *&t:int =3 [line 30]\n " shape="box"] + "std::__1::__convert_to_integral3" -> "std::__1::__convert_to_integral2" ; +"std::__1::__convert_to_integral2" [label="2: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] - 98 -> 97 ; -97 [label="97: DeclStmt \n n$5=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$5.__type_name:void ,&t:int ) [line 31]\n _=*n$5:class std::type_info [line 31]\n n$7=_fun_std::type_info_name(n$5:class std::type_info &) [line 31]\n *&t_type_info:char *=n$7 [line 31]\n " shape="box"] +"std::__1::__convert_to_integral1" [label="1: Start std::__1::__convert_to_integral\nFormals: __val:long \nLocals: \n DECLARE_LOCALS(&return); [line 4315]\n " color=yellow style=filled] - 97 -> 96 ; -96 [label="96: DeclStmt \n n$2=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$2.__type_name:void ,&person:class Person ) [line 32]\n _=*n$2:class std::type_info [line 32]\n n$4=_fun_std::type_info_name(n$2:class std::type_info &) [line 32]\n *&person_type_info:char *=n$4 [line 32]\n " shape="box"] + "std::__1::__convert_to_integral1" -> "std::__1::__convert_to_integral3" ; +"std::__1::__convert_to_integral3" [label="3: Return Stmt \n n$0=*&__val:unsigned long long [line 4325]\n *&return:unsigned long long =n$0 [line 4325]\n " shape="box"] - 96 -> 91 ; -95 [label="95: Return Stmt \n *&return:int =(1 / 0) [line 36]\n " shape="box"] + "std::__1::__convert_to_integral3" -> "std::__1::__convert_to_integral2" ; +"std::__1::__convert_to_integral2" [label="2: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] - 95 -> 88 ; -94 [label="94: Return Stmt \n *&return:int =0 [line 34]\n " shape="box"] +"std::__1::__convert_to_integral1" [label="1: Start std::__1::__convert_to_integral\nFormals: __val:unsigned long long \nLocals: \n DECLARE_LOCALS(&return); [line 4324]\n " color=yellow style=filled] - 94 -> 88 ; -93 [label="93: Prune (false branch) \n PRUNE(((n$0 == n$1) == 0), false); [line 33]\n " shape="invhouse"] + "std::__1::__convert_to_integral1" -> "std::__1::__convert_to_integral3" ; +"std::exception_ptr_exception_ptr3" [label="3: Constructor Init \n n$0=*&this:class std::exception_ptr * [line 131]\n *n$0.__ptr_:void *=null [line 131]\n " shape="box"] - 93 -> 95 ; -92 [label="92: Prune (true branch) \n PRUNE(((n$0 == n$1) != 0), true); [line 33]\n " shape="invhouse"] + "std::exception_ptr_exception_ptr3" -> "std::exception_ptr_exception_ptr2" ; +"std::exception_ptr_exception_ptr2" [label="2: Exit std::exception_ptr_exception_ptr \n " color=yellow style=filled] - 92 -> 94 ; -91 [label="91: BinaryOperatorStmt: EQ \n n$0=*&t_type_info:char * [line 33]\n n$1=*&person_type_info:char * [line 33]\n " shape="box"] +"std::exception_ptr_exception_ptr1" [label="1: Start std::exception_ptr_exception_ptr\nFormals: this:class std::exception_ptr * __param_0:int \nLocals: \n DECLARE_LOCALS(&return); [line 131]\n " color=yellow style=filled] - 91 -> 92 ; - 91 -> 93 ; -90 [label="90: between_join_and_exit \n " shape="box"] + "std::exception_ptr_exception_ptr1" -> "std::exception_ptr_exception_ptr3" ; +"std::__1::__convert_to_integral3" [label="3: Return Stmt \n n$0=*&__val:unsigned int [line 4313]\n *&return:unsigned int =n$0 [line 4313]\n " shape="box"] - 90 -> 88 ; -89 [label="89: + \n " ] + "std::__1::__convert_to_integral3" -> "std::__1::__convert_to_integral2" ; +"std::__1::__convert_to_integral2" [label="2: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] - 89 -> 90 ; -88 [label="88: Exit person_typeid_name \n " color=yellow style=filled] +"std::__1::__convert_to_integral1" [label="1: Start std::__1::__convert_to_integral\nFormals: __val:unsigned int \nLocals: \n DECLARE_LOCALS(&return); [line 4312]\n " color=yellow style=filled] -87 [label="87: Start person_typeid_name\nFormals: \nLocals: person_type_info:char * t_type_info:char * t:int person:class Person \n DECLARE_LOCALS(&return,&person_type_info,&t_type_info,&t,&person); [line 28]\n " color=yellow style=filled] + "std::__1::__convert_to_integral1" -> "std::__1::__convert_to_integral3" ; +"person_typeid11" [label="11: DeclStmt \n _fun_Person_Person(&person:class Person *) [line 20]\n " shape="box"] - 87 -> 99 ; -86 [label="86: DeclStmt \n _fun_Person_Person(&person:class Person *) [line 20]\n " shape="box"] + "person_typeid11" -> "person_typeid10" ; +"person_typeid10" [label="10: DeclStmt \n *&t:int =3 [line 21]\n " shape="box"] - 86 -> 85 ; -85 [label="85: DeclStmt \n *&t:int =3 [line 21]\n " shape="box"] + "person_typeid10" -> "person_typeid5" ; +"person_typeid9" [label="9: Return Stmt \n *&return:int =(1 / 0) [line 25]\n " shape="box"] - 85 -> 80 ; -84 [label="84: Return Stmt \n *&return:int =(1 / 0) [line 25]\n " shape="box"] + "person_typeid9" -> "person_typeid2" ; +"person_typeid8" [label="8: Return Stmt \n *&return:int =1 [line 23]\n " shape="box"] - 84 -> 77 ; -83 [label="83: Return Stmt \n *&return:int =1 [line 23]\n " shape="box"] + "person_typeid8" -> "person_typeid2" ; +"person_typeid7" [label="7: Prune (false branch) \n PRUNE((n$2 == 0), false); [line 22]\n " shape="invhouse"] - 83 -> 77 ; -82 [label="82: Prune (false branch) \n PRUNE((n$2 == 0), false); [line 22]\n " shape="invhouse"] + "person_typeid7" -> "person_typeid9" ; +"person_typeid6" [label="6: Prune (true branch) \n PRUNE((n$2 != 0), true); [line 22]\n " shape="invhouse"] - 82 -> 84 ; -81 [label="81: Prune (true branch) \n PRUNE((n$2 != 0), true); [line 22]\n " shape="invhouse"] + "person_typeid6" -> "person_typeid8" ; +"person_typeid5" [label="5: Call _fun_std::type_info_operator== \n n$0=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$0.__type_name:void ,&t:int ) [line 22]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,&person:class Person ) [line 22]\n n$2=_fun_std::type_info_operator==(n$0:class std::type_info &,n$1:class std::type_info &) [line 22]\n " shape="box"] - 81 -> 83 ; -80 [label="80: Call _fun_std::type_info_operator== \n n$0=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$0.__type_name:void ,&t:int ) [line 22]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,&person:class Person ) [line 22]\n n$2=_fun_std::type_info_operator==(n$0:class std::type_info &,n$1:class std::type_info &) [line 22]\n " shape="box"] + "person_typeid5" -> "person_typeid6" ; + "person_typeid5" -> "person_typeid7" ; +"person_typeid4" [label="4: between_join_and_exit \n " shape="box"] - 80 -> 81 ; - 80 -> 82 ; -79 [label="79: between_join_and_exit \n " shape="box"] + "person_typeid4" -> "person_typeid2" ; +"person_typeid3" [label="3: + \n " ] - 79 -> 77 ; -78 [label="78: + \n " ] + "person_typeid3" -> "person_typeid4" ; +"person_typeid2" [label="2: Exit person_typeid \n " color=yellow style=filled] - 78 -> 79 ; -77 [label="77: Exit person_typeid \n " color=yellow style=filled] +"person_typeid1" [label="1: Start person_typeid\nFormals: \nLocals: t:int person:class Person \n DECLARE_LOCALS(&return,&t,&person); [line 19]\n " color=yellow style=filled] -76 [label="76: Start person_typeid\nFormals: \nLocals: t:int person:class Person \n DECLARE_LOCALS(&return,&t,&person); [line 19]\n " color=yellow style=filled] + "person_typeid1" -> "person_typeid11" ; +"std::type_info_before3" [label="3: Return Stmt \n n$0=*&this:class std::type_info * [line 106]\n n$1=*n$0.__type_name:char * [line 106]\n n$2=*&__arg:class std::type_info & [line 106]\n n$3=*n$2.__type_name:char * [line 106]\n *&return:_Bool =(n$1 < n$3) [line 106]\n " shape="box"] - 76 -> 86 ; -75 [label="75: Constructor Init \n n$0=*&this:class Employee * [line 17]\n _fun_Person_Person(n$0:class Employee *) [line 17]\n " shape="box"] + "std::type_info_before3" -> "std::type_info_before2" ; +"std::type_info_before2" [label="2: Exit std::type_info_before \n " color=yellow style=filled] - 75 -> 74 ; -74 [label="74: Exit Employee_Employee \n " color=yellow style=filled] +"std::type_info_before1" [label="1: Start std::type_info_before\nFormals: this:class std::type_info * __arg:class std::type_info &\nLocals: \n DECLARE_LOCALS(&return); [line 103]\n " color=yellow style=filled] -73 [label="73: Start Employee_Employee\nFormals: this:class Employee *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] + "std::type_info_before1" -> "std::type_info_before3" ; +"std::__1::__convert_to_integral3" [label="3: Return Stmt \n n$0=*&__val:unsigned long [line 4319]\n *&return:unsigned long =n$0 [line 4319]\n " shape="box"] - 73 -> 75 ; -72 [label="72: Exit Employee_~Employee \n " color=yellow style=filled] + "std::__1::__convert_to_integral3" -> "std::__1::__convert_to_integral2" ; +"std::__1::__convert_to_integral2" [label="2: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] -71 [label="71: Start Employee_~Employee\nFormals: this:class Employee *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] +"std::__1::__convert_to_integral1" [label="1: Start std::__1::__convert_to_integral\nFormals: __val:unsigned long \nLocals: \n DECLARE_LOCALS(&return); [line 4318]\n " color=yellow style=filled] - 71 -> 72 ; -70 [label="70: Exit Person_Person \n " color=yellow style=filled] + "std::__1::__convert_to_integral1" -> "std::__1::__convert_to_integral3" ; +"Employee_~Employee2" [label="2: Exit Employee_~Employee \n " color=yellow style=filled] -69 [label="69: Start Person_Person\nFormals: this:class Person *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"Employee_~Employee1" [label="1: Start Employee_~Employee\nFormals: this:class Employee *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 69 -> 70 ; -68 [label="68: Exit Person_Person \n " color=yellow style=filled] + "Employee_~Employee1" -> "Employee_~Employee2" ; +"__infer_globals_initializer_std::__1::__numeric_type::value3" [label="3: DeclStmt \n *&#GB$std::__1::__numeric_type::value:_Bool =1 [line 1697]\n " shape="box"] -67 [label="67: Start Person_Person\nFormals: this:class Person * __param_0:class Person &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] + "__infer_globals_initializer_std::__1::__numeric_type::value3" -> "__infer_globals_initializer_std::__1::__numeric_type::value2" ; +"__infer_globals_initializer_std::__1::__numeric_type::value2" [label="2: Exit __infer_globals_initializer_std::__1::__numeric_type::value \n " color=yellow style=filled] - 67 -> 68 ; -66 [label="66: Exit Person_~Person \n " color=yellow style=filled] +"__infer_globals_initializer_std::__1::__numeric_type::value1" [label="1: Start __infer_globals_initializer_std::__1::__numeric_type::value\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 1697]\n " color=yellow style=filled] -65 [label="65: Start Person_~Person\nFormals: this:class Person *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] + "__infer_globals_initializer_std::__1::__numeric_type::value1" -> "__infer_globals_initializer_std::__1::__numeric_type::value3" ; +"std::type_info_operator!=2" [label="2: Exit std::type_info_operator!= \n " color=yellow style=filled] - 65 -> 66 ; -64 [label="64: Exit std::type_info_operator!= \n " color=yellow style=filled] +"std::type_info_operator!=1" [label="1: Start std::type_info_operator!=\nFormals: this:class std::type_info * __arg:class std::type_info &\nLocals: \n " color=yellow style=filled] -63 [label="63: Start std::type_info_operator!=\nFormals: this:class std::type_info * __arg:class std::type_info &\nLocals: \n " color=yellow style=filled] +"employee_typeid11" [label="11: DeclStmt \n _fun_Employee_Employee(&employee:class Employee *) [line 40]\n " shape="box"] -62 [label="62: Exit std::type_info_operator== \n " color=yellow style=filled] + "employee_typeid11" -> "employee_typeid10" ; +"employee_typeid10" [label="10: DeclStmt \n *&ptr:class Employee *=&employee [line 41]\n " shape="box"] -61 [label="61: Start std::type_info_operator==\nFormals: this:class std::type_info * __arg:class std::type_info &\nLocals: \n " color=yellow style=filled] + "employee_typeid10" -> "employee_typeid5" ; +"employee_typeid9" [label="9: Return Stmt \n *&return:int =0 [line 45]\n " shape="box"] -60 [label="60: Return Stmt \n n$0=*&this:class std::type_info * [line 116]\n n$1=*n$0.__type_name:unsigned long [line 116]\n *&return:unsigned long =n$1 [line 116]\n " shape="box"] + "employee_typeid9" -> "employee_typeid2" ; +"employee_typeid8" [label="8: Return Stmt \n *&return:int =(1 / 0) [line 43]\n " shape="box"] - 60 -> 59 ; -59 [label="59: Exit std::type_info_hash_code \n " color=yellow style=filled] + "employee_typeid8" -> "employee_typeid2" ; +"employee_typeid7" [label="7: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 42]\n " shape="invhouse"] -58 [label="58: Start std::type_info_hash_code\nFormals: this:class std::type_info *\nLocals: \n DECLARE_LOCALS(&return); [line 113]\n " color=yellow style=filled] + "employee_typeid7" -> "employee_typeid9" ; +"employee_typeid6" [label="6: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 42]\n " shape="invhouse"] - 58 -> 60 ; -57 [label="57: Return Stmt \n n$0=*&this:class std::type_info * [line 106]\n n$1=*n$0.__type_name:char * [line 106]\n n$2=*&__arg:class std::type_info & [line 106]\n n$3=*n$2.__type_name:char * [line 106]\n *&return:_Bool =(n$1 < n$3) [line 106]\n " shape="box"] + "employee_typeid6" -> "employee_typeid8" ; +"employee_typeid5" [label="5: Call _fun_std::type_info_operator== \n n$0=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$0.__type_name:void ,&employee:class Employee ) [line 42]\n n$1=*&ptr:class Person * [line 42]\n n$2=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$2.__type_name:void ,n$1:class Person ) [line 42]\n n$3=_fun_std::type_info_operator==(n$0:class std::type_info &,n$2:class std::type_info &) [line 42]\n " shape="box"] - 57 -> 56 ; -56 [label="56: Exit std::type_info_before \n " color=yellow style=filled] + "employee_typeid5" -> "employee_typeid6" ; + "employee_typeid5" -> "employee_typeid7" ; +"employee_typeid4" [label="4: between_join_and_exit \n " shape="box"] -55 [label="55: Start std::type_info_before\nFormals: this:class std::type_info * __arg:class std::type_info &\nLocals: \n DECLARE_LOCALS(&return); [line 103]\n " color=yellow style=filled] + "employee_typeid4" -> "employee_typeid2" ; +"employee_typeid3" [label="3: + \n " ] - 55 -> 57 ; -54 [label="54: Exit std::type_info_name \n " color=yellow style=filled] + "employee_typeid3" -> "employee_typeid4" ; +"employee_typeid2" [label="2: Exit employee_typeid \n " color=yellow style=filled] -53 [label="53: Start std::type_info_name\nFormals: this:class std::type_info *\nLocals: \n " color=yellow style=filled] +"employee_typeid1" [label="1: Start employee_typeid\nFormals: \nLocals: ptr:class Person * employee:class Employee \n DECLARE_LOCALS(&return,&ptr,&employee); [line 39]\n " color=yellow style=filled] -52 [label="52: Exit std::type_info_type_info \n " color=yellow style=filled] + "employee_typeid1" -> "employee_typeid11" ; +"Person_Person2" [label="2: Exit Person_Person \n " color=yellow style=filled] -51 [label="51: Start std::type_info_type_info\nFormals: this:class std::type_info * __n:char *\nLocals: \n " color=yellow style=filled] +"Person_Person1" [label="1: Start Person_Person\nFormals: this:class Person *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] -50 [label="50: Return Stmt \n n$0=*&__return_param:class std::exception_ptr * [line 180]\n n$1=*&this:class std::nested_exception * [line 180]\n _fun_std::exception_ptr_exception_ptr(n$0:class std::exception_ptr *,n$1.__ptr_:class std::exception_ptr &) [line 180]\n " shape="box"] + "Person_Person1" -> "Person_Person2" ; +"std::__1::__convert_to_integral3" [label="3: Return Stmt \n n$0=*&__val:unsigned int [line 4332]\n *&return:unsigned int =n$0 [line 4332]\n " shape="box"] - 50 -> 49 ; -49 [label="49: Exit std::nested_exception_nested_ptr \n " color=yellow style=filled] + "std::__1::__convert_to_integral3" -> "std::__1::__convert_to_integral2" ; +"std::__1::__convert_to_integral2" [label="2: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] -48 [label="48: Start std::nested_exception_nested_ptr\nFormals: this:class std::nested_exception * __return_param:class std::exception_ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 180]\n " color=yellow style=filled] +"std::__1::__convert_to_integral1" [label="1: Start std::__1::__convert_to_integral\nFormals: __val:unsigned int \nLocals: \n DECLARE_LOCALS(&return); [line 4331]\n " color=yellow style=filled] - 48 -> 50 ; -47 [label="47: Return Stmt \n n$0=*&this:class std::exception_ptr * [line 138]\n n$1=*n$0.__ptr_:void * [line 138]\n *&return:_Bool =(n$1 != null) [line 138]\n " shape="box"] + "std::__1::__convert_to_integral1" -> "std::__1::__convert_to_integral3" ; +"std::exception_ptr_exception_ptr3" [label="3: Constructor Init \n n$0=*&this:class std::exception_ptr * [line 130]\n *n$0.__ptr_:void *=null [line 130]\n " shape="box"] - 47 -> 46 ; -46 [label="46: Exit std::exception_ptr_operator_bool \n " color=yellow style=filled] + "std::exception_ptr_exception_ptr3" -> "std::exception_ptr_exception_ptr2" ; +"std::exception_ptr_exception_ptr2" [label="2: Exit std::exception_ptr_exception_ptr \n " color=yellow style=filled] -45 [label="45: Start std::exception_ptr_operator_bool\nFormals: this:class std::exception_ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 136]\n " color=yellow style=filled] +"std::exception_ptr_exception_ptr1" [label="1: Start std::exception_ptr_exception_ptr\nFormals: this:class std::exception_ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 130]\n " color=yellow style=filled] - 45 -> 47 ; -44 [label="44: Constructor Init \n n$0=*&this:class std::exception_ptr * [line 131]\n *n$0.__ptr_:void *=null [line 131]\n " shape="box"] + "std::exception_ptr_exception_ptr1" -> "std::exception_ptr_exception_ptr3" ; +"Employee_Employee3" [label="3: Constructor Init \n n$0=*&this:class Employee * [line 17]\n _fun_Person_Person(n$0:class Employee *) [line 17]\n " shape="box"] - 44 -> 43 ; -43 [label="43: Exit std::exception_ptr_exception_ptr \n " color=yellow style=filled] + "Employee_Employee3" -> "Employee_Employee2" ; +"Employee_Employee2" [label="2: Exit Employee_Employee \n " color=yellow style=filled] -42 [label="42: Start std::exception_ptr_exception_ptr\nFormals: this:class std::exception_ptr * __param_0:int \nLocals: \n DECLARE_LOCALS(&return); [line 131]\n " color=yellow style=filled] +"Employee_Employee1" [label="1: Start Employee_Employee\nFormals: this:class Employee *\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 42 -> 44 ; -41 [label="41: Constructor Init \n n$0=*&this:class std::exception_ptr * [line 130]\n *n$0.__ptr_:void *=null [line 130]\n " shape="box"] + "Employee_Employee1" -> "Employee_Employee3" ; +"std::type_info_type_info2" [label="2: Exit std::type_info_type_info \n " color=yellow style=filled] - 41 -> 40 ; -40 [label="40: Exit std::exception_ptr_exception_ptr \n " color=yellow style=filled] +"std::type_info_type_info1" [label="1: Start std::type_info_type_info\nFormals: this:class std::type_info * __n:char *\nLocals: \n " color=yellow style=filled] -39 [label="39: Start std::exception_ptr_exception_ptr\nFormals: this:class std::exception_ptr *\nLocals: \n DECLARE_LOCALS(&return); [line 130]\n " color=yellow style=filled] +"std::type_info_hash_code3" [label="3: Return Stmt \n n$0=*&this:class std::type_info * [line 116]\n n$1=*n$0.__type_name:unsigned long [line 116]\n *&return:unsigned long =n$1 [line 116]\n " shape="box"] - 39 -> 41 ; -38 [label="38: Constructor Init \n n$0=*&this:class std::bad_exception * [line 103]\n _fun_std::exception_exception(n$0:class std::bad_exception *) [line 103]\n " shape="box"] + "std::type_info_hash_code3" -> "std::type_info_hash_code2" ; +"std::type_info_hash_code2" [label="2: Exit std::type_info_hash_code \n " color=yellow style=filled] - 38 -> 37 ; -37 [label="37: Exit std::bad_exception_bad_exception \n " color=yellow style=filled] +"std::type_info_hash_code1" [label="1: Start std::type_info_hash_code\nFormals: this:class std::type_info *\nLocals: \n DECLARE_LOCALS(&return); [line 113]\n " color=yellow style=filled] -36 [label="36: Start std::bad_exception_bad_exception\nFormals: this:class std::bad_exception *\nLocals: \n DECLARE_LOCALS(&return); [line 103]\n " color=yellow style=filled] + "std::type_info_hash_code1" -> "std::type_info_hash_code3" ; +"person_ptr_typeid10" [label="10: DeclStmt \n _fun_Person_Person(&person:class Person *) [line 49]\n " shape="box"] - 36 -> 38 ; -35 [label="35: Exit std::exception_exception \n " color=yellow style=filled] + "person_ptr_typeid10" -> "person_ptr_typeid5" ; +"person_ptr_typeid9" [label="9: Return Stmt \n *&return:int =0 [line 53]\n " shape="box"] -34 [label="34: Start std::exception_exception\nFormals: this:class std::exception *\nLocals: \n DECLARE_LOCALS(&return); [line 94]\n " color=yellow style=filled] + "person_ptr_typeid9" -> "person_ptr_typeid2" ; +"person_ptr_typeid8" [label="8: Return Stmt \n *&return:int =(1 / 0) [line 51]\n " shape="box"] - 34 -> 35 ; -33 [label="33: Return Stmt \n n$0=*&__val:unsigned int [line 4332]\n *&return:unsigned int =n$0 [line 4332]\n " shape="box"] + "person_ptr_typeid8" -> "person_ptr_typeid2" ; +"person_ptr_typeid7" [label="7: Prune (false branch) \n PRUNE(((n$3 == n$6) == 0), false); [line 50]\n " shape="invhouse"] - 33 -> 32 ; -32 [label="32: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] + "person_ptr_typeid7" -> "person_ptr_typeid9" ; +"person_ptr_typeid6" [label="6: Prune (true branch) \n PRUNE(((n$3 == n$6) != 0), true); [line 50]\n " shape="invhouse"] -31 [label="31: Start std::__1::__convert_to_integral\nFormals: __val:unsigned int \nLocals: \n DECLARE_LOCALS(&return); [line 4331]\n " color=yellow style=filled] + "person_ptr_typeid6" -> "person_ptr_typeid8" ; +"person_ptr_typeid5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&ptr:class Person * [line 50]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,n$0:class Person ) [line 50]\n _=*n$1:class std::type_info [line 50]\n n$3=_fun_std::type_info_name(n$1:class std::type_info &) [line 50]\n n$4=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$4.__type_name:void ,&person:class Person ) [line 50]\n _=*n$4:class std::type_info [line 50]\n n$6=_fun_std::type_info_name(n$4:class std::type_info &) [line 50]\n " shape="box"] - 31 -> 33 ; -30 [label="30: Return Stmt \n n$0=*&__val:int [line 4329]\n *&return:int =n$0 [line 4329]\n " shape="box"] + "person_ptr_typeid5" -> "person_ptr_typeid6" ; + "person_ptr_typeid5" -> "person_ptr_typeid7" ; +"person_ptr_typeid4" [label="4: between_join_and_exit \n " shape="box"] - 30 -> 29 ; -29 [label="29: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] + "person_ptr_typeid4" -> "person_ptr_typeid2" ; +"person_ptr_typeid3" [label="3: + \n " ] -28 [label="28: Start std::__1::__convert_to_integral\nFormals: __val:int \nLocals: \n DECLARE_LOCALS(&return); [line 4328]\n " color=yellow style=filled] + "person_ptr_typeid3" -> "person_ptr_typeid4" ; +"person_ptr_typeid2" [label="2: Exit person_ptr_typeid \n " color=yellow style=filled] - 28 -> 30 ; -27 [label="27: Return Stmt \n n$0=*&__val:unsigned long long [line 4325]\n *&return:unsigned long long =n$0 [line 4325]\n " shape="box"] +"person_ptr_typeid1" [label="1: Start person_ptr_typeid\nFormals: ptr:class Person *\nLocals: person:class Person \n DECLARE_LOCALS(&return,&person); [line 48]\n " color=yellow style=filled] - 27 -> 26 ; -26 [label="26: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] + "person_ptr_typeid1" -> "person_ptr_typeid10" ; +"std::__1::__convert_to_integral3" [label="3: Return Stmt \n n$0=*&__val:int [line 4329]\n *&return:int =n$0 [line 4329]\n " shape="box"] -25 [label="25: Start std::__1::__convert_to_integral\nFormals: __val:unsigned long long \nLocals: \n DECLARE_LOCALS(&return); [line 4324]\n " color=yellow style=filled] + "std::__1::__convert_to_integral3" -> "std::__1::__convert_to_integral2" ; +"std::__1::__convert_to_integral2" [label="2: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] - 25 -> 27 ; -24 [label="24: Return Stmt \n n$0=*&__val:long long [line 4322]\n *&return:long long =n$0 [line 4322]\n " shape="box"] +"std::__1::__convert_to_integral1" [label="1: Start std::__1::__convert_to_integral\nFormals: __val:int \nLocals: \n DECLARE_LOCALS(&return); [line 4328]\n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] + "std::__1::__convert_to_integral1" -> "std::__1::__convert_to_integral3" ; +"std::type_info_operator==2" [label="2: Exit std::type_info_operator== \n " color=yellow style=filled] -22 [label="22: Start std::__1::__convert_to_integral\nFormals: __val:long long \nLocals: \n DECLARE_LOCALS(&return); [line 4321]\n " color=yellow style=filled] +"std::type_info_operator==1" [label="1: Start std::type_info_operator==\nFormals: this:class std::type_info * __arg:class std::type_info &\nLocals: \n " color=yellow style=filled] - 22 -> 24 ; -21 [label="21: Return Stmt \n n$0=*&__val:unsigned long [line 4319]\n *&return:unsigned long =n$0 [line 4319]\n " shape="box"] +"person_typeid_name13" [label="13: DeclStmt \n _fun_Person_Person(&person:class Person *) [line 29]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] + "person_typeid_name13" -> "person_typeid_name12" ; +"person_typeid_name12" [label="12: DeclStmt \n *&t:int =3 [line 30]\n " shape="box"] -19 [label="19: Start std::__1::__convert_to_integral\nFormals: __val:unsigned long \nLocals: \n DECLARE_LOCALS(&return); [line 4318]\n " color=yellow style=filled] + "person_typeid_name12" -> "person_typeid_name11" ; +"person_typeid_name11" [label="11: DeclStmt \n n$5=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$5.__type_name:void ,&t:int ) [line 31]\n _=*n$5:class std::type_info [line 31]\n n$7=_fun_std::type_info_name(n$5:class std::type_info &) [line 31]\n *&t_type_info:char *=n$7 [line 31]\n " shape="box"] - 19 -> 21 ; -18 [label="18: Return Stmt \n n$0=*&__val:long [line 4316]\n *&return:long =n$0 [line 4316]\n " shape="box"] + "person_typeid_name11" -> "person_typeid_name10" ; +"person_typeid_name10" [label="10: DeclStmt \n n$2=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$2.__type_name:void ,&person:class Person ) [line 32]\n _=*n$2:class std::type_info [line 32]\n n$4=_fun_std::type_info_name(n$2:class std::type_info &) [line 32]\n *&person_type_info:char *=n$4 [line 32]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] + "person_typeid_name10" -> "person_typeid_name5" ; +"person_typeid_name9" [label="9: Return Stmt \n *&return:int =(1 / 0) [line 36]\n " shape="box"] -16 [label="16: Start std::__1::__convert_to_integral\nFormals: __val:long \nLocals: \n DECLARE_LOCALS(&return); [line 4315]\n " color=yellow style=filled] + "person_typeid_name9" -> "person_typeid_name2" ; +"person_typeid_name8" [label="8: Return Stmt \n *&return:int =0 [line 34]\n " shape="box"] - 16 -> 18 ; -15 [label="15: Return Stmt \n n$0=*&__val:unsigned int [line 4313]\n *&return:unsigned int =n$0 [line 4313]\n " shape="box"] + "person_typeid_name8" -> "person_typeid_name2" ; +"person_typeid_name7" [label="7: Prune (false branch) \n PRUNE(((n$0 == n$1) == 0), false); [line 33]\n " shape="invhouse"] - 15 -> 14 ; -14 [label="14: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] + "person_typeid_name7" -> "person_typeid_name9" ; +"person_typeid_name6" [label="6: Prune (true branch) \n PRUNE(((n$0 == n$1) != 0), true); [line 33]\n " shape="invhouse"] -13 [label="13: Start std::__1::__convert_to_integral\nFormals: __val:unsigned int \nLocals: \n DECLARE_LOCALS(&return); [line 4312]\n " color=yellow style=filled] + "person_typeid_name6" -> "person_typeid_name8" ; +"person_typeid_name5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&t_type_info:char * [line 33]\n n$1=*&person_type_info:char * [line 33]\n " shape="box"] - 13 -> 15 ; -12 [label="12: Return Stmt \n n$0=*&__val:int [line 4310]\n *&return:int =n$0 [line 4310]\n " shape="box"] + "person_typeid_name5" -> "person_typeid_name6" ; + "person_typeid_name5" -> "person_typeid_name7" ; +"person_typeid_name4" [label="4: between_join_and_exit \n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit std::__1::__convert_to_integral \n " color=yellow style=filled] + "person_typeid_name4" -> "person_typeid_name2" ; +"person_typeid_name3" [label="3: + \n " ] -10 [label="10: Start std::__1::__convert_to_integral\nFormals: __val:int \nLocals: \n DECLARE_LOCALS(&return); [line 4309]\n " color=yellow style=filled] + "person_typeid_name3" -> "person_typeid_name4" ; +"person_typeid_name2" [label="2: Exit person_typeid_name \n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: DeclStmt \n *&#GB$std::__1::__numeric_type::value:_Bool =1 [line 1697]\n " shape="box"] +"person_typeid_name1" [label="1: Start person_typeid_name\nFormals: \nLocals: person_type_info:char * t_type_info:char * t:int person:class Person \n DECLARE_LOCALS(&return,&person_type_info,&t_type_info,&t,&person); [line 28]\n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit __infer_globals_initializer_std::__1::__numeric_type::value \n " color=yellow style=filled] + "person_typeid_name1" -> "person_typeid_name13" ; +"std::exception_exception2" [label="2: Exit std::exception_exception \n " color=yellow style=filled] -7 [label="7: Start __infer_globals_initializer_std::__1::__numeric_type::value\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 1697]\n " color=yellow style=filled] +"std::exception_exception1" [label="1: Start std::exception_exception\nFormals: this:class std::exception *\nLocals: \n DECLARE_LOCALS(&return); [line 94]\n " color=yellow style=filled] - 7 -> 9 ; + "std::exception_exception1" -> "std::exception_exception2" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/block/retain_cycle.m.dot b/infer/tests/codetoanalyze/objc/frontend/block/retain_cycle.m.dot index 6706d870d..7946b99e9 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/retain_cycle.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/retain_cycle.m.dot @@ -1,74 +1,74 @@ /* @generated */ digraph iCFG { -19 [label="19: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 63]\n *&a:class A *=n$2 [line 63]\n " shape="box"] +"__objc_anonymous_block_A_capture______13" [label="3: BinaryOperatorStmt: Assign \n n$3=*&self:class A * [line 48]\n n$4=*&d:class D * [line 48]\n *n$3._data:class D *=n$4 [line 48]\n " shape="box"] - 19 -> 18 ; -18 [label="18: BinaryOperatorStmt: Assign \n n$0=*&a:class A * [line 65]\n n$1=_fun_foo(n$0:class A *) [line 65]\n *&a:class A *=n$1 [line 65]\n " shape="box"] + "__objc_anonymous_block_A_capture______13" -> "__objc_anonymous_block_A_capture______12" ; +"__objc_anonymous_block_A_capture______12" [label="2: Exit __objc_anonymous_block_A_capture______1 \n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Return Stmt \n *&return:int =0 [line 67]\n " shape="box"] +"__objc_anonymous_block_A_capture______11" [label="1: Start __objc_anonymous_block_A_capture______1\nFormals: self:class A * d:class D *\nLocals: \nCaptured: self:class A * \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Exit main \n " color=yellow style=filled] + "__objc_anonymous_block_A_capture______11" -> "__objc_anonymous_block_A_capture______13" ; +"A_capture4" [label="4: BinaryOperatorStmt: Assign \n n$8=*&self:class A * [line 46]\n n$9=_fun___objc_alloc_no_fail(sizeof(class B ):unsigned long ) [line 46]\n *n$8._b:class B *=n$9 [line 46]\n " shape="box"] -15 [label="15: Start main\nFormals: argc:int argv:char **\nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 61]\n " color=yellow style=filled] + "A_capture4" -> "A_capture3" ; +"A_capture3" [label="3: Message Call: sHandler: \n n$0=*&self:class A * [line 47]\n n$1=*n$0._b:class B * [line 47]\n DECLARE_LOCALS(&__objc_anonymous_block_A_capture______1); [line 47]\n n$5=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_capture______1 ):unsigned long ) [line 47]\n *&__objc_anonymous_block_A_capture______1:class __objc_anonymous_block_A_capture______1 =n$5 [line 47]\n n$6=*&self:class A * [line 47]\n *n$5.self:class A *=n$6 [line 47]\n n$2=*&self:class A * [line 47]\n n$7=*&__objc_anonymous_block_A_capture______1:_fn_ (*) [line 47]\n _fun_B_sHandler:(n$1:class B *,n$7:_fn_ (*),n$2:_fn_ (*)) virtual [line 47]\n " shape="box"] - 15 -> 19 ; -14 [label="14: Message Call: capture \n n$1=*&a:class A * [line 56]\n _fun_A_capture(n$1:class A *) virtual [line 56]\n " shape="box"] + "A_capture3" -> "A_capture2" ; +"A_capture2" [label="2: Exit A_capture \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Return Stmt \n n$0=*&a:class A * [line 58]\n *&return:class A *=n$0 [line 58]\n " shape="box"] +"A_capture1" [label="1: Start A_capture\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 45]\n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit foo \n " color=yellow style=filled] + "A_capture1" -> "A_capture4" ; +"B_sHandler:3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&self:class B * [line 30]\n n$1=*&h:_fn_ (*) [line 30]\n *n$0._h:_fn_ (*)=n$1 [line 30]\n " shape="box"] -11 [label="11: Start foo\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 54]\n " color=yellow style=filled] + "B_sHandler:3" -> "B_sHandler:2" ; +"B_sHandler:2" [label="2: Exit B_sHandler: \n " color=yellow style=filled] - 11 -> 14 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$8=*&self:class A * [line 46]\n n$9=_fun___objc_alloc_no_fail(sizeof(class B ):unsigned long ) [line 46]\n *n$8._b:class B *=n$9 [line 46]\n " shape="box"] +"B_sHandler:1" [label="1: Start B_sHandler:\nFormals: self:class B * h:_fn_ (*)\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Message Call: sHandler: \n n$0=*&self:class A * [line 47]\n n$1=*n$0._b:class B * [line 47]\n DECLARE_LOCALS(&__objc_anonymous_block_A_capture______1); [line 47]\n n$5=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_capture______1 ):unsigned long ) [line 47]\n *&__objc_anonymous_block_A_capture______1:class __objc_anonymous_block_A_capture______1 =n$5 [line 47]\n n$6=*&self:class A * [line 47]\n *n$5.self:class A *=n$6 [line 47]\n n$2=*&self:class A * [line 47]\n n$7=*&__objc_anonymous_block_A_capture______1:_fn_ (*) [line 47]\n _fun_B_sHandler:(n$1:class B *,n$7:_fn_ (*),n$2:_fn_ (*)) virtual [line 47]\n " shape="box"] + "B_sHandler:1" -> "B_sHandler:3" ; +"main5" [label="5: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 63]\n *&a:class A *=n$2 [line 63]\n " shape="box"] - 9 -> 5 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$3=*&self:class A * [line 48]\n n$4=*&d:class D * [line 48]\n *n$3._data:class D *=n$4 [line 48]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: Assign \n n$0=*&a:class A * [line 65]\n n$1=_fun_foo(n$0:class A *) [line 65]\n *&a:class A *=n$1 [line 65]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit __objc_anonymous_block_A_capture______1 \n " color=yellow style=filled] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 67]\n " shape="box"] -6 [label="6: Start __objc_anonymous_block_A_capture______1\nFormals: self:class A * d:class D *\nLocals: \nCaptured: self:class A * \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: Exit A_capture \n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: argc:int argv:char **\nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 61]\n " color=yellow style=filled] -4 [label="4: Start A_capture\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 45]\n " color=yellow style=filled] + "main1" -> "main5" ; +"foo4" [label="4: Message Call: capture \n n$1=*&a:class A * [line 56]\n _fun_A_capture(n$1:class A *) virtual [line 56]\n " shape="box"] - 4 -> 10 ; -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&self:class B * [line 30]\n n$1=*&h:_fn_ (*) [line 30]\n *n$0._h:_fn_ (*)=n$1 [line 30]\n " shape="box"] + "foo4" -> "foo3" ; +"foo3" [label="3: Return Stmt \n n$0=*&a:class A * [line 58]\n *&return:class A *=n$0 [line 58]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit B_sHandler: \n " color=yellow style=filled] + "foo3" -> "foo2" ; +"foo2" [label="2: Exit foo \n " color=yellow style=filled] -1 [label="1: Start B_sHandler:\nFormals: self:class B * h:_fn_ (*)\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] +"foo1" [label="1: Start foo\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 54]\n " color=yellow style=filled] - 1 -> 3 ; + "foo1" -> "foo4" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/block/static.m.dot b/infer/tests/codetoanalyze/objc/frontend/block/static.m.dot index eee90f977..bfe017d0c 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/static.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/static.m.dot @@ -1,118 +1,118 @@ /* @generated */ digraph iCFG { -31 [label="31: Return Stmt \n *&return:int =0 [line 60]\n " shape="box"] +"__objc_anonymous_block_A_test______13" [label="3: BinaryOperatorStmt: Assign \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 21]\n n$2=_fun_A_init(n$1:class A *) virtual [line 21]\n *&#GB$A_test_sharedInstance:struct objc_object *=n$2 [line 21]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Exit main \n " color=yellow style=filled] + "__objc_anonymous_block_A_test______13" -> "__objc_anonymous_block_A_test______12" ; +"__objc_anonymous_block_A_test______12" [label="2: Exit __objc_anonymous_block_A_test______1 \n " color=yellow style=filled] -29 [label="29: Start main\nFormals: argc:int argv:char **\nLocals: \n DECLARE_LOCALS(&return); [line 60]\n " color=yellow style=filled] +"__objc_anonymous_block_A_test______11" [label="1: Start __objc_anonymous_block_A_test______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 29 -> 31 ; -28 [label="28: Call (_fun___objc_anonymous_block_A_test3______4) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test3______4); [line 50]\n n$17=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test3______4 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_A_test3______4:class __objc_anonymous_block_A_test3______4 =n$17 [line 50]\n n$18=*&#GB$A_test3_i:int [line 50]\n *n$17.A_test3_i:int =n$18 [line 50]\n (_fun___objc_anonymous_block_A_test3______4)() [line 50]\n " shape="box"] + "__objc_anonymous_block_A_test______11" -> "__objc_anonymous_block_A_test______13" ; +"A_test4" [label="4: Call (_fun___objc_anonymous_block_A_test______1) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test______1); [line 20]\n n$3=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test______1 ):unsigned long ) [line 20]\n *&__objc_anonymous_block_A_test______1:class __objc_anonymous_block_A_test______1 =n$3 [line 20]\n n$4=*&#GB$A_test_sharedInstance:struct objc_object * [line 20]\n *n$3.A_test_sharedInstance:struct objc_object *=n$4 [line 20]\n (_fun___objc_anonymous_block_A_test______1)() [line 20]\n " shape="box"] - 28 -> 24 ; -27 [label="27: UnaryOperator \n n$16=*&#GB$A_test3_i:int [line 52]\n *&#GB$A_test3_i:int =(n$16 + 1) [line 52]\n " shape="box"] + "A_test4" -> "A_test3" ; +"A_test3" [label="3: Return Stmt \n n$0=*&#GB$A_test_sharedInstance:struct objc_object * [line 25]\n *&return:struct objc_object *=n$0 [line 25]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Exit __objc_anonymous_block_A_test3______4 \n " color=yellow style=filled] + "A_test3" -> "A_test2" ; +"A_test2" [label="2: Exit A_test \n " color=yellow style=filled] -25 [label="25: Start __objc_anonymous_block_A_test3______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] +"A_test1" [label="1: Start A_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 25 -> 27 ; -24 [label="24: Return Stmt \n n$15=*&#GB$A_test3_i:int [line 55]\n *&return:int =n$15 [line 55]\n " shape="box"] + "A_test1" -> "A_test4" ; +"__objc_anonymous_block_A_test3______43" [label="3: UnaryOperator \n n$16=*&#GB$A_test3_i:int [line 52]\n *&#GB$A_test3_i:int =(n$16 + 1) [line 52]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Exit A_test3 \n " color=yellow style=filled] + "__objc_anonymous_block_A_test3______43" -> "__objc_anonymous_block_A_test3______42" ; +"__objc_anonymous_block_A_test3______42" [label="2: Exit __objc_anonymous_block_A_test3______4 \n " color=yellow style=filled] -22 [label="22: Start A_test3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] +"__objc_anonymous_block_A_test3______41" [label="1: Start __objc_anonymous_block_A_test3______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] - 22 -> 28 ; -21 [label="21: BinaryOperatorStmt: Assign \n n$13=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 38]\n n$14=_fun_A_init(n$13:class A *) virtual [line 38]\n *&#GB$A_test2_sharedInstance:struct objc_object *=n$14 [line 38]\n " shape="box"] + "__objc_anonymous_block_A_test3______41" -> "__objc_anonymous_block_A_test3______43" ; +"__objc_anonymous_block_A_test_leak______23" [label="3: BinaryOperatorStmt: Assign \n n$5=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 31]\n n$6=_fun_A_init(n$5:class A *) virtual [line 31]\n *&#GB$A_test_leak_sharedInstance:struct objc_object *=n$6 [line 31]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Call (_fun___objc_anonymous_block_A_test2______3) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test2______3); [line 39]\n n$11=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test2______3 ):unsigned long ) [line 39]\n *&__objc_anonymous_block_A_test2______3:class __objc_anonymous_block_A_test2______3 =n$11 [line 39]\n n$12=*&#GB$A_test2_sharedInstance:struct objc_object * [line 39]\n *n$11.A_test2_sharedInstance:struct objc_object *=n$12 [line 39]\n (_fun___objc_anonymous_block_A_test2______3)() [line 39]\n " shape="box"] + "__objc_anonymous_block_A_test_leak______23" -> "__objc_anonymous_block_A_test_leak______22" ; +"__objc_anonymous_block_A_test_leak______22" [label="2: Exit __objc_anonymous_block_A_test_leak______2 \n " color=yellow style=filled] - 20 -> 16 ; -19 [label="19: DeclStmt \n n$10=*&#GB$A_test2_sharedInstance:struct objc_object * [line 41]\n *&p:struct objc_object *=n$10 [line 41]\n " shape="box"] +"__objc_anonymous_block_A_test_leak______21" [label="1: Start __objc_anonymous_block_A_test_leak______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] - 19 -> 18 ; -18 [label="18: Exit __objc_anonymous_block_A_test2______3 \n " color=yellow style=filled] + "__objc_anonymous_block_A_test_leak______21" -> "__objc_anonymous_block_A_test_leak______23" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 60]\n " shape="box"] -17 [label="17: Start __objc_anonymous_block_A_test2______3\nFormals: \nLocals: p:struct objc_object * \n DECLARE_LOCALS(&return,&p); [line 39]\n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] - 17 -> 19 ; -16 [label="16: Return Stmt \n n$9=*&#GB$A_test2_sharedInstance:struct objc_object * [line 44]\n *&return:struct objc_object *=n$9 [line 44]\n " shape="box"] +"main1" [label="1: Start main\nFormals: argc:int argv:char **\nLocals: \n DECLARE_LOCALS(&return); [line 60]\n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Exit A_test2 \n " color=yellow style=filled] + "main1" -> "main3" ; +"A_test25" [label="5: BinaryOperatorStmt: Assign \n n$13=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 38]\n n$14=_fun_A_init(n$13:class A *) virtual [line 38]\n *&#GB$A_test2_sharedInstance:struct objc_object *=n$14 [line 38]\n " shape="box"] -14 [label="14: Start A_test2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] + "A_test25" -> "A_test24" ; +"A_test24" [label="4: Call (_fun___objc_anonymous_block_A_test2______3) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test2______3); [line 39]\n n$11=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test2______3 ):unsigned long ) [line 39]\n *&__objc_anonymous_block_A_test2______3:class __objc_anonymous_block_A_test2______3 =n$11 [line 39]\n n$12=*&#GB$A_test2_sharedInstance:struct objc_object * [line 39]\n *n$11.A_test2_sharedInstance:struct objc_object *=n$12 [line 39]\n (_fun___objc_anonymous_block_A_test2______3)() [line 39]\n " shape="box"] - 14 -> 21 ; -13 [label="13: Call (_fun___objc_anonymous_block_A_test_leak______2) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test_leak______2); [line 30]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test_leak______2 ):unsigned long ) [line 30]\n *&__objc_anonymous_block_A_test_leak______2:class __objc_anonymous_block_A_test_leak______2 =n$7 [line 30]\n n$8=*&#GB$A_test_leak_sharedInstance:struct objc_object * [line 30]\n *n$7.A_test_leak_sharedInstance:struct objc_object *=n$8 [line 30]\n (_fun___objc_anonymous_block_A_test_leak______2)() [line 30]\n " shape="box"] + "A_test24" -> "A_test23" ; +"A_test23" [label="3: Return Stmt \n n$9=*&#GB$A_test2_sharedInstance:struct objc_object * [line 44]\n *&return:struct objc_object *=n$9 [line 44]\n " shape="box"] - 13 -> 9 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$5=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 31]\n n$6=_fun_A_init(n$5:class A *) virtual [line 31]\n *&#GB$A_test_leak_sharedInstance:struct objc_object *=n$6 [line 31]\n " shape="box"] + "A_test23" -> "A_test22" ; +"A_test22" [label="2: Exit A_test2 \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: Exit __objc_anonymous_block_A_test_leak______2 \n " color=yellow style=filled] +"A_test21" [label="1: Start A_test2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] -10 [label="10: Start __objc_anonymous_block_A_test_leak______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] + "A_test21" -> "A_test25" ; +"A_test_leak3" [label="3: Call (_fun___objc_anonymous_block_A_test_leak______2) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test_leak______2); [line 30]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test_leak______2 ):unsigned long ) [line 30]\n *&__objc_anonymous_block_A_test_leak______2:class __objc_anonymous_block_A_test_leak______2 =n$7 [line 30]\n n$8=*&#GB$A_test_leak_sharedInstance:struct objc_object * [line 30]\n *n$7.A_test_leak_sharedInstance:struct objc_object *=n$8 [line 30]\n (_fun___objc_anonymous_block_A_test_leak______2)() [line 30]\n " shape="box"] - 10 -> 12 ; -9 [label="9: Exit A_test_leak \n " color=yellow style=filled] + "A_test_leak3" -> "A_test_leak2" ; +"A_test_leak2" [label="2: Exit A_test_leak \n " color=yellow style=filled] -8 [label="8: Start A_test_leak\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] +"A_test_leak1" [label="1: Start A_test_leak\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] - 8 -> 13 ; -7 [label="7: Call (_fun___objc_anonymous_block_A_test______1) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test______1); [line 20]\n n$3=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test______1 ):unsigned long ) [line 20]\n *&__objc_anonymous_block_A_test______1:class __objc_anonymous_block_A_test______1 =n$3 [line 20]\n n$4=*&#GB$A_test_sharedInstance:struct objc_object * [line 20]\n *n$3.A_test_sharedInstance:struct objc_object *=n$4 [line 20]\n (_fun___objc_anonymous_block_A_test______1)() [line 20]\n " shape="box"] + "A_test_leak1" -> "A_test_leak3" ; +"__objc_anonymous_block_A_test2______33" [label="3: DeclStmt \n n$10=*&#GB$A_test2_sharedInstance:struct objc_object * [line 41]\n *&p:struct objc_object *=n$10 [line 41]\n " shape="box"] - 7 -> 3 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 21]\n n$2=_fun_A_init(n$1:class A *) virtual [line 21]\n *&#GB$A_test_sharedInstance:struct objc_object *=n$2 [line 21]\n " shape="box"] + "__objc_anonymous_block_A_test2______33" -> "__objc_anonymous_block_A_test2______32" ; +"__objc_anonymous_block_A_test2______32" [label="2: Exit __objc_anonymous_block_A_test2______3 \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit __objc_anonymous_block_A_test______1 \n " color=yellow style=filled] +"__objc_anonymous_block_A_test2______31" [label="1: Start __objc_anonymous_block_A_test2______3\nFormals: \nLocals: p:struct objc_object * \n DECLARE_LOCALS(&return,&p); [line 39]\n " color=yellow style=filled] -4 [label="4: Start __objc_anonymous_block_A_test______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] + "__objc_anonymous_block_A_test2______31" -> "__objc_anonymous_block_A_test2______33" ; +"A_test34" [label="4: Call (_fun___objc_anonymous_block_A_test3______4) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test3______4); [line 50]\n n$17=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test3______4 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_A_test3______4:class __objc_anonymous_block_A_test3______4 =n$17 [line 50]\n n$18=*&#GB$A_test3_i:int [line 50]\n *n$17.A_test3_i:int =n$18 [line 50]\n (_fun___objc_anonymous_block_A_test3______4)() [line 50]\n " shape="box"] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&#GB$A_test_sharedInstance:struct objc_object * [line 25]\n *&return:struct objc_object *=n$0 [line 25]\n " shape="box"] + "A_test34" -> "A_test33" ; +"A_test33" [label="3: Return Stmt \n n$15=*&#GB$A_test3_i:int [line 55]\n *&return:int =n$15 [line 55]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_test \n " color=yellow style=filled] + "A_test33" -> "A_test32" ; +"A_test32" [label="2: Exit A_test3 \n " color=yellow style=filled] -1 [label="1: Start A_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"A_test31" [label="1: Start A_test3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] - 1 -> 7 ; + "A_test31" -> "A_test34" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/Boxing.m.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/Boxing.m.dot index 0fdc197eb..7a7099631 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/Boxing.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/Boxing.m.dot @@ -1,101 +1,101 @@ /* @generated */ digraph iCFG { -26 [label="26: DeclStmt \n n$15=_fun_strdup(\"hello world\":char *) [line 42]\n n$16=_fun_NSString_stringWithUTF8String:(n$15:char *) [line 42]\n *&s:class NSString *=n$16 [line 42]\n " shape="box"] +"Boxing_getBool4" [label="4: DeclStmt \n n$13=_fun_NSNumber_numberWithBool:(1:_Bool ) [line 37]\n *&n:class NSNumber *=n$13 [line 37]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Return Stmt \n n$14=_fun_NSString_stringWithUTF8String:(\"hello world\":char *) [line 43]\n *&return:class NSString *=n$14 [line 43]\n " shape="box"] + "Boxing_getBool4" -> "Boxing_getBool3" ; +"Boxing_getBool3" [label="3: Return Stmt \n n$12=_fun_NSNumber_numberWithBool:(1:_Bool ) [line 38]\n *&return:class NSNumber *=n$12 [line 38]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit Boxing_getS \n " color=yellow style=filled] + "Boxing_getBool3" -> "Boxing_getBool2" ; +"Boxing_getBool2" [label="2: Exit Boxing_getBool \n " color=yellow style=filled] -23 [label="23: Start Boxing_getS\nFormals: self:class Boxing *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 41]\n " color=yellow style=filled] +"Boxing_getBool1" [label="1: Start Boxing_getBool\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 36]\n " color=yellow style=filled] - 23 -> 26 ; -22 [label="22: DeclStmt \n n$13=_fun_NSNumber_numberWithBool:(1:_Bool ) [line 37]\n *&n:class NSNumber *=n$13 [line 37]\n " shape="box"] + "Boxing_getBool1" -> "Boxing_getBool4" ; +"Boxing_getIntExp6" [label="6: DeclStmt \n *&x:int =4 [line 15]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Return Stmt \n n$12=_fun_NSNumber_numberWithBool:(1:_Bool ) [line 38]\n *&return:class NSNumber *=n$12 [line 38]\n " shape="box"] + "Boxing_getIntExp6" -> "Boxing_getIntExp5" ; +"Boxing_getIntExp5" [label="5: DeclStmt \n *&y:int =5 [line 16]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Exit Boxing_getBool \n " color=yellow style=filled] + "Boxing_getIntExp5" -> "Boxing_getIntExp4" ; +"Boxing_getIntExp4" [label="4: DeclStmt \n n$3=*&x:int [line 17]\n n$4=*&y:int [line 17]\n n$5=_fun_NSNumber_numberWithInt:((n$3 + n$4):int ) [line 17]\n *&n:class NSNumber *=n$5 [line 17]\n " shape="box"] -19 [label="19: Start Boxing_getBool\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 36]\n " color=yellow style=filled] + "Boxing_getIntExp4" -> "Boxing_getIntExp3" ; +"Boxing_getIntExp3" [label="3: Return Stmt \n n$0=*&x:int [line 18]\n n$1=*&y:int [line 18]\n n$2=_fun_NSNumber_numberWithInt:((n$0 + n$1):int ) [line 18]\n *&return:class NSNumber *=n$2 [line 18]\n " shape="box"] - 19 -> 22 ; -18 [label="18: DeclStmt \n n$11=_fun_NSNumber_numberWithDouble:(1.500000:double ) [line 32]\n *&n:class NSNumber *=n$11 [line 32]\n " shape="box"] + "Boxing_getIntExp3" -> "Boxing_getIntExp2" ; +"Boxing_getIntExp2" [label="2: Exit Boxing_getIntExp \n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Return Stmt \n n$10=_fun_NSNumber_numberWithDouble:(1.500000:double ) [line 33]\n *&return:class NSNumber *=n$10 [line 33]\n " shape="box"] +"Boxing_getIntExp1" [label="1: Start Boxing_getIntExp\nFormals: self:class Boxing *\nLocals: n:class NSNumber * y:int x:int \n DECLARE_LOCALS(&return,&n,&y,&x); [line 14]\n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Exit Boxing_getDouble \n " color=yellow style=filled] + "Boxing_getIntExp1" -> "Boxing_getIntExp6" ; +"Boxing_getDouble4" [label="4: DeclStmt \n n$11=_fun_NSNumber_numberWithDouble:(1.500000:double ) [line 32]\n *&n:class NSNumber *=n$11 [line 32]\n " shape="box"] -15 [label="15: Start Boxing_getDouble\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 31]\n " color=yellow style=filled] + "Boxing_getDouble4" -> "Boxing_getDouble3" ; +"Boxing_getDouble3" [label="3: Return Stmt \n n$10=_fun_NSNumber_numberWithDouble:(1.500000:double ) [line 33]\n *&return:class NSNumber *=n$10 [line 33]\n " shape="box"] - 15 -> 18 ; -14 [label="14: DeclStmt \n n$9=_fun_NSNumber_numberWithFloat:(1.500000:float ) [line 27]\n *&n:class NSNumber *=n$9 [line 27]\n " shape="box"] + "Boxing_getDouble3" -> "Boxing_getDouble2" ; +"Boxing_getDouble2" [label="2: Exit Boxing_getDouble \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Return Stmt \n n$8=_fun_NSNumber_numberWithFloat:(1.500000:float ) [line 28]\n *&return:class NSNumber *=n$8 [line 28]\n " shape="box"] +"Boxing_getDouble1" [label="1: Start Boxing_getDouble\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 31]\n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit Boxing_getFloat \n " color=yellow style=filled] + "Boxing_getDouble1" -> "Boxing_getDouble4" ; +"Boxing_getFloat4" [label="4: DeclStmt \n n$9=_fun_NSNumber_numberWithFloat:(1.500000:float ) [line 27]\n *&n:class NSNumber *=n$9 [line 27]\n " shape="box"] -11 [label="11: Start Boxing_getFloat\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 26]\n " color=yellow style=filled] + "Boxing_getFloat4" -> "Boxing_getFloat3" ; +"Boxing_getFloat3" [label="3: Return Stmt \n n$8=_fun_NSNumber_numberWithFloat:(1.500000:float ) [line 28]\n *&return:class NSNumber *=n$8 [line 28]\n " shape="box"] - 11 -> 14 ; -10 [label="10: DeclStmt \n n$7=_fun_NSNumber_numberWithInt:(5:int ) [line 22]\n *&n:class NSNumber *=n$7 [line 22]\n " shape="box"] + "Boxing_getFloat3" -> "Boxing_getFloat2" ; +"Boxing_getFloat2" [label="2: Exit Boxing_getFloat \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Return Stmt \n n$6=_fun_NSNumber_numberWithInt:(5:int ) [line 23]\n *&return:class NSNumber *=n$6 [line 23]\n " shape="box"] +"Boxing_getFloat1" [label="1: Start Boxing_getFloat\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 26]\n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit Boxing_getInt \n " color=yellow style=filled] + "Boxing_getFloat1" -> "Boxing_getFloat4" ; +"Boxing_getS4" [label="4: DeclStmt \n n$15=_fun_strdup(\"hello world\":char *) [line 42]\n n$16=_fun_NSString_stringWithUTF8String:(n$15:char *) [line 42]\n *&s:class NSString *=n$16 [line 42]\n " shape="box"] -7 [label="7: Start Boxing_getInt\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 21]\n " color=yellow style=filled] + "Boxing_getS4" -> "Boxing_getS3" ; +"Boxing_getS3" [label="3: Return Stmt \n n$14=_fun_NSString_stringWithUTF8String:(\"hello world\":char *) [line 43]\n *&return:class NSString *=n$14 [line 43]\n " shape="box"] - 7 -> 10 ; -6 [label="6: DeclStmt \n *&x:int =4 [line 15]\n " shape="box"] + "Boxing_getS3" -> "Boxing_getS2" ; +"Boxing_getS2" [label="2: Exit Boxing_getS \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: DeclStmt \n *&y:int =5 [line 16]\n " shape="box"] +"Boxing_getS1" [label="1: Start Boxing_getS\nFormals: self:class Boxing *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 41]\n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: DeclStmt \n n$3=*&x:int [line 17]\n n$4=*&y:int [line 17]\n n$5=_fun_NSNumber_numberWithInt:((n$3 + n$4):int ) [line 17]\n *&n:class NSNumber *=n$5 [line 17]\n " shape="box"] + "Boxing_getS1" -> "Boxing_getS4" ; +"Boxing_getInt4" [label="4: DeclStmt \n n$7=_fun_NSNumber_numberWithInt:(5:int ) [line 22]\n *&n:class NSNumber *=n$7 [line 22]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&x:int [line 18]\n n$1=*&y:int [line 18]\n n$2=_fun_NSNumber_numberWithInt:((n$0 + n$1):int ) [line 18]\n *&return:class NSNumber *=n$2 [line 18]\n " shape="box"] + "Boxing_getInt4" -> "Boxing_getInt3" ; +"Boxing_getInt3" [label="3: Return Stmt \n n$6=_fun_NSNumber_numberWithInt:(5:int ) [line 23]\n *&return:class NSNumber *=n$6 [line 23]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Boxing_getIntExp \n " color=yellow style=filled] + "Boxing_getInt3" -> "Boxing_getInt2" ; +"Boxing_getInt2" [label="2: Exit Boxing_getInt \n " color=yellow style=filled] -1 [label="1: Start Boxing_getIntExp\nFormals: self:class Boxing *\nLocals: n:class NSNumber * y:int x:int \n DECLARE_LOCALS(&return,&n,&y,&x); [line 14]\n " color=yellow style=filled] +"Boxing_getInt1" [label="1: Start Boxing_getInt\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 21]\n " color=yellow style=filled] - 1 -> 6 ; + "Boxing_getInt1" -> "Boxing_getInt4" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/array.m.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/array.m.dot index 2585c9f20..bd3abfe9d 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/array.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/array.m.dot @@ -1,51 +1,51 @@ /* @generated */ digraph iCFG { -12 [label="12: DeclStmt \n n$9=_fun_NSString_stringWithUTF8String:(\"Mercedes-Benz\":char *) [line 17]\n n$10=_fun_NSString_stringWithUTF8String:(\"BMW\":char *) [line 18]\n n$11=_fun_NSString_stringWithUTF8String:(\"Porsche\":char *) [line 19]\n n$12=_fun_NSString_stringWithUTF8String:(\"Opel\":char *) [line 20]\n n$13=_fun_NSString_stringWithUTF8String:(\"Volkswagen\":char *) [line 21]\n n$14=_fun_NSString_stringWithUTF8String:(\"Audi\":char *) [line 22]\n n$15=_fun_NSArray_arrayWithObjects:count:(n$9:struct objc_object *,n$10:struct objc_object *,n$11:struct objc_object *,n$12:struct objc_object *,n$13:struct objc_object *,n$14:struct objc_object *,0:struct objc_object *) [line 16]\n *&germanCars:class NSArray *=n$15 [line 16]\n " shape="box"] +"main12" [label="12: DeclStmt \n n$9=_fun_NSString_stringWithUTF8String:(\"Mercedes-Benz\":char *) [line 17]\n n$10=_fun_NSString_stringWithUTF8String:(\"BMW\":char *) [line 18]\n n$11=_fun_NSString_stringWithUTF8String:(\"Porsche\":char *) [line 19]\n n$12=_fun_NSString_stringWithUTF8String:(\"Opel\":char *) [line 20]\n n$13=_fun_NSString_stringWithUTF8String:(\"Volkswagen\":char *) [line 21]\n n$14=_fun_NSString_stringWithUTF8String:(\"Audi\":char *) [line 22]\n n$15=_fun_NSArray_arrayWithObjects:count:(n$9:struct objc_object *,n$10:struct objc_object *,n$11:struct objc_object *,n$12:struct objc_object *,n$13:struct objc_object *,n$14:struct objc_object *,0:struct objc_object *) [line 16]\n *&germanCars:class NSArray *=n$15 [line 16]\n " shape="box"] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$7=*&germanCars:class NSArray * [line 24]\n n$8=_fun_NSArray_objectAtIndexedSubscript:(n$7:class NSArray *,3:unsigned long ) virtual [line 24]\n *&s:class NSString *=n$8 [line 24]\n " shape="box"] + "main12" -> "main11" ; +"main11" [label="11: BinaryOperatorStmt: Assign \n n$7=*&germanCars:class NSArray * [line 24]\n n$8=_fun_NSArray_objectAtIndexedSubscript:(n$7:class NSArray *,3:unsigned long ) virtual [line 24]\n *&s:class NSString *=n$8 [line 24]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$5=*&germanCars:class NSArray * [line 26]\n n$6=_fun_NSArray_nextObject(n$5:class NSArray *) virtual [line 26]\n *&item:class NSString *=n$6 [line 26]\n " shape="box"] + "main11" -> "main10" ; +"main10" [label="10: BinaryOperatorStmt: Assign \n n$5=*&germanCars:class NSArray * [line 26]\n n$6=_fun_NSArray_nextObject(n$5:class NSArray *) virtual [line 26]\n *&item:class NSString *=n$6 [line 26]\n " shape="box"] - 10 -> 4 ; -9 [label="9: Call _fun_NSLog \n n$3=_fun_NSString_stringWithUTF8String:(\"%@\":char *) [line 27]\n n$4=*&item:class NSString * [line 27]\n _fun_NSLog(n$3:struct objc_object *,n$4:class NSString *) [line 27]\n " shape="box"] + "main10" -> "main4" ; +"main9" [label="9: Call _fun_NSLog \n n$3=_fun_NSString_stringWithUTF8String:(\"%@\":char *) [line 27]\n n$4=*&item:class NSString * [line 27]\n _fun_NSLog(n$3:struct objc_object *,n$4:class NSString *) [line 27]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$1=*&germanCars:class NSArray * [line 26]\n n$2=_fun_NSArray_nextObject(n$1:class NSArray *) virtual [line 26]\n *&item:class NSString *=n$2 [line 26]\n " shape="box"] + "main9" -> "main8" ; +"main8" [label="8: BinaryOperatorStmt: Assign \n n$1=*&germanCars:class NSArray * [line 26]\n n$2=_fun_NSArray_nextObject(n$1:class NSArray *) virtual [line 26]\n *&item:class NSString *=n$2 [line 26]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 != 0) == 0), false); [line 26]\n " shape="invhouse"] + "main8" -> "main4" ; +"main7" [label="7: Prune (false branch) \n PRUNE(((n$0 != 0) == 0), false); [line 26]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 != 0) != 0), true); [line 26]\n " shape="invhouse"] + "main7" -> "main3" ; +"main6" [label="6: Prune (true branch) \n PRUNE(((n$0 != 0) != 0), true); [line 26]\n " shape="invhouse"] - 6 -> 9 ; -5 [label="5: BinaryOperatorStmt: NE \n n$0=*&item:class NSString * [line 26]\n " shape="box"] + "main6" -> "main9" ; +"main5" [label="5: BinaryOperatorStmt: NE \n n$0=*&item:class NSString * [line 26]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "main5" -> "main6" ; + "main5" -> "main7" ; +"main4" [label="4: + \n " ] - 4 -> 5 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 30]\n " shape="box"] + "main4" -> "main5" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 30]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: item:class NSString * germanCars:class NSArray * s:class NSString * \n DECLARE_LOCALS(&return,&item,&germanCars,&s); [line 12]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: item:class NSString * germanCars:class NSArray * s:class NSString * \n DECLARE_LOCALS(&return,&item,&germanCars,&s); [line 12]\n " color=yellow style=filled] - 1 -> 12 ; + "main1" -> "main12" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/array_literal.c.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/array_literal.c.dot index 6cfa0881d..756ca61d2 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/array_literal.c.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/array_literal.c.dot @@ -1,18 +1,18 @@ /* @generated */ digraph iCFG { -4 [label="4: DeclStmt \n n$3=_fun_NSString_stringWithUTF8String:(\"cat\":char *) [line 13]\n n$4=_fun_NSString_stringWithUTF8String:(\"dog\":char *) [line 13]\n n$5=_fun_NSArray_arrayWithObjects:(n$3:struct objc_object *,n$4:class NSString *,0:void *) [line 13]\n *&animals:class NSArray *=n$5 [line 13]\n " shape="box"] +"get_array4" [label="4: DeclStmt \n n$3=_fun_NSString_stringWithUTF8String:(\"cat\":char *) [line 13]\n n$4=_fun_NSString_stringWithUTF8String:(\"dog\":char *) [line 13]\n n$5=_fun_NSArray_arrayWithObjects:(n$3:struct objc_object *,n$4:class NSString *,0:void *) [line 13]\n *&animals:class NSArray *=n$5 [line 13]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"cat\":char *) [line 14]\n n$1=_fun_NSString_stringWithUTF8String:(\"dog\":char *) [line 14]\n n$2=_fun_NSArray_arrayWithObjects:count:(n$0:struct objc_object *,n$1:struct objc_object *,0:struct objc_object *) [line 14]\n *&return:class NSArray *=n$2 [line 14]\n " shape="box"] + "get_array4" -> "get_array3" ; +"get_array3" [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"cat\":char *) [line 14]\n n$1=_fun_NSString_stringWithUTF8String:(\"dog\":char *) [line 14]\n n$2=_fun_NSArray_arrayWithObjects:count:(n$0:struct objc_object *,n$1:struct objc_object *,0:struct objc_object *) [line 14]\n *&return:class NSArray *=n$2 [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit get_array \n " color=yellow style=filled] + "get_array3" -> "get_array2" ; +"get_array2" [label="2: Exit get_array \n " color=yellow style=filled] -1 [label="1: Start get_array\nFormals: \nLocals: animals:class NSArray * \n DECLARE_LOCALS(&return,&animals); [line 12]\n " color=yellow style=filled] +"get_array1" [label="1: Start get_array\nFormals: \nLocals: animals:class NSArray * \n DECLARE_LOCALS(&return,&animals); [line 12]\n " color=yellow style=filled] - 1 -> 4 ; + "get_array1" -> "get_array4" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/dict_literal.c.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/dict_literal.c.dot index 65d967aab..78814ef3b 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/dict_literal.c.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/dict_literal.c.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Matt\":char *) [line 25]\n n$1=_fun_NSString_stringWithUTF8String:(\"firstName\":char *) [line 25]\n n$2=_fun_NSString_stringWithUTF8String:(\"Galloway\":char *) [line 25]\n n$3=_fun_NSString_stringWithUTF8String:(\"lastName\":char *) [line 25]\n n$4=_fun_NSNumber_numberWithInt:(28:int ) [line 25]\n n$5=_fun_NSString_stringWithUTF8String:(\"age\":char *) [line 25]\n n$6=_fun_NSDictionary_dictionaryWithObjects:forKeys:count:(n$0:struct objc_object *,n$1:struct objc_object *,n$2:struct objc_object *,n$3:struct objc_object *,n$4:struct objc_object *,n$5:struct objc_object *,0:struct objc_object *) [line 25]\n *&return:class NSDictionary *=n$6 [line 25]\n " shape="box"] +"get_array13" [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Matt\":char *) [line 14]\n n$1=_fun_NSString_stringWithUTF8String:(\"firstName\":char *) [line 15]\n n$2=_fun_NSString_stringWithUTF8String:(\"Galloway\":char *) [line 16]\n n$3=_fun_NSString_stringWithUTF8String:(\"lastName\":char *) [line 17]\n n$4=_fun_NSNumber_numberWithInt:(28:int ) [line 18]\n n$5=_fun_NSString_stringWithUTF8String:(\"age\":char *) [line 19]\n n$6=_fun_NSDictionary_dictionaryWithObjectsAndKeys:(n$0:struct objc_object *,n$1:class NSString *,n$2:class NSString *,n$3:class NSString *,n$4:class NSNumber *,n$5:class NSString *,0:void *) [line 14]\n *&return:class NSDictionary *=n$6 [line 14]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit get_array2 \n " color=yellow style=filled] + "get_array13" -> "get_array12" ; +"get_array12" [label="2: Exit get_array1 \n " color=yellow style=filled] -4 [label="4: Start get_array2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] +"get_array11" [label="1: Start get_array1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Matt\":char *) [line 14]\n n$1=_fun_NSString_stringWithUTF8String:(\"firstName\":char *) [line 15]\n n$2=_fun_NSString_stringWithUTF8String:(\"Galloway\":char *) [line 16]\n n$3=_fun_NSString_stringWithUTF8String:(\"lastName\":char *) [line 17]\n n$4=_fun_NSNumber_numberWithInt:(28:int ) [line 18]\n n$5=_fun_NSString_stringWithUTF8String:(\"age\":char *) [line 19]\n n$6=_fun_NSDictionary_dictionaryWithObjectsAndKeys:(n$0:struct objc_object *,n$1:class NSString *,n$2:class NSString *,n$3:class NSString *,n$4:class NSNumber *,n$5:class NSString *,0:void *) [line 14]\n *&return:class NSDictionary *=n$6 [line 14]\n " shape="box"] + "get_array11" -> "get_array13" ; +"get_array23" [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Matt\":char *) [line 25]\n n$1=_fun_NSString_stringWithUTF8String:(\"firstName\":char *) [line 25]\n n$2=_fun_NSString_stringWithUTF8String:(\"Galloway\":char *) [line 25]\n n$3=_fun_NSString_stringWithUTF8String:(\"lastName\":char *) [line 25]\n n$4=_fun_NSNumber_numberWithInt:(28:int ) [line 25]\n n$5=_fun_NSString_stringWithUTF8String:(\"age\":char *) [line 25]\n n$6=_fun_NSDictionary_dictionaryWithObjects:forKeys:count:(n$0:struct objc_object *,n$1:struct objc_object *,n$2:struct objc_object *,n$3:struct objc_object *,n$4:struct objc_object *,n$5:struct objc_object *,0:struct objc_object *) [line 25]\n *&return:class NSDictionary *=n$6 [line 25]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit get_array1 \n " color=yellow style=filled] + "get_array23" -> "get_array22" ; +"get_array22" [label="2: Exit get_array2 \n " color=yellow style=filled] -1 [label="1: Start get_array1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"get_array21" [label="1: Start get_array2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 1 -> 3 ; + "get_array21" -> "get_array23" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/string_literal.c.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/string_literal.c.dot index b7690c9fd..ecdfbd14a 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/string_literal.c.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/string_literal.c.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Hello World!\":char *) [line 17]\n *&return:class NSString *=n$0 [line 17]\n " shape="box"] +"get_string13" [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Hello World!\":char *) [line 14]\n *&return:class NSString *=n$0 [line 14]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit get_string2 \n " color=yellow style=filled] + "get_string13" -> "get_string12" ; +"get_string12" [label="2: Exit get_string1 \n " color=yellow style=filled] -4 [label="4: Start get_string2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] +"get_string11" [label="1: Start get_string1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Hello World!\":char *) [line 14]\n *&return:class NSString *=n$0 [line 14]\n " shape="box"] + "get_string11" -> "get_string13" ; +"get_string23" [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Hello World!\":char *) [line 17]\n *&return:class NSString *=n$0 [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit get_string1 \n " color=yellow style=filled] + "get_string23" -> "get_string22" ; +"get_string22" [label="2: Exit get_string2 \n " color=yellow style=filled] -1 [label="1: Start get_string1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"get_string21" [label="1: Start get_string2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 1 -> 3 ; + "get_string21" -> "get_string23" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/conditional_operation/ConditionalOperation.m.dot b/infer/tests/codetoanalyze/objc/frontend/conditional_operation/ConditionalOperation.m.dot index 010669f9b..291086b50 100644 --- a/infer/tests/codetoanalyze/objc/frontend/conditional_operation/ConditionalOperation.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/conditional_operation/ConditionalOperation.m.dot @@ -1,46 +1,46 @@ /* @generated */ digraph iCFG { -11 [label="11: Return Stmt \n n$1=*&self:class A * [line 24]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 24]\n n$6=_fun_A_test4:(n$1:class A *,n$5:int ) virtual [line 24]\n *&return:int =n$6 [line 24]\n " shape="box"] +"A_test5:8" [label="8: Return Stmt \n n$1=*&self:class A * [line 24]\n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 24]\n n$6=_fun_A_test4:(n$1:class A *,n$5:int ) virtual [line 24]\n *&return:int =n$6 [line 24]\n " shape="box"] - 11 -> 5 ; -10 [label="10: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 24]\n " shape="box"] + "A_test5:8" -> "A_test5:2" ; +"A_test5:7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 24]\n " shape="box"] - 10 -> 6 ; -9 [label="9: ConditinalStmt Branch \n n$4=*&b:_Bool [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =n$4 [line 24]\n " shape="box"] + "A_test5:7" -> "A_test5:3" ; +"A_test5:6" [label="6: ConditinalStmt Branch \n n$4=*&b:_Bool [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =n$4 [line 24]\n " shape="box"] - 9 -> 6 ; -8 [label="8: Prune (false branch) \n n$3=*&b:_Bool [line 24]\n PRUNE((n$3 == 0), false); [line 24]\n " shape="invhouse"] + "A_test5:6" -> "A_test5:3" ; +"A_test5:5" [label="5: Prune (false branch) \n n$3=*&b:_Bool [line 24]\n PRUNE((n$3 == 0), false); [line 24]\n " shape="invhouse"] - 8 -> 10 ; -7 [label="7: Prune (true branch) \n n$3=*&b:_Bool [line 24]\n PRUNE((n$3 != 0), true); [line 24]\n " shape="invhouse"] + "A_test5:5" -> "A_test5:7" ; +"A_test5:4" [label="4: Prune (true branch) \n n$3=*&b:_Bool [line 24]\n PRUNE((n$3 != 0), true); [line 24]\n " shape="invhouse"] - 7 -> 9 ; -6 [label="6: + \n " ] + "A_test5:4" -> "A_test5:6" ; +"A_test5:3" [label="3: + \n " ] - 6 -> 11 ; -5 [label="5: Exit A_test5: \n " color=yellow style=filled] + "A_test5:3" -> "A_test5:8" ; +"A_test5:2" [label="2: Exit A_test5: \n " color=yellow style=filled] -4 [label="4: Start A_test5:\nFormals: self:class A * b:_Bool \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2); [line 23]\n " color=yellow style=filled] +"A_test5:1" [label="1: Start A_test5:\nFormals: self:class A * b:_Bool \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2); [line 23]\n " color=yellow style=filled] - 4 -> 7 ; - 4 -> 8 ; -3 [label="3: Return Stmt \n n$0=*&x:int [line 20]\n *&return:int =n$0 [line 20]\n " shape="box"] + "A_test5:1" -> "A_test5:4" ; + "A_test5:1" -> "A_test5:5" ; +"A_test4:3" [label="3: Return Stmt \n n$0=*&x:int [line 20]\n *&return:int =n$0 [line 20]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_test4: \n " color=yellow style=filled] + "A_test4:3" -> "A_test4:2" ; +"A_test4:2" [label="2: Exit A_test4: \n " color=yellow style=filled] -1 [label="1: Start A_test4:\nFormals: self:class A * x:int \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] +"A_test4:1" [label="1: Start A_test4:\nFormals: self:class A * x:int \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled] - 1 -> 3 ; + "A_test4:1" -> "A_test4:3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/exceptions/ExceptionExample.m.dot b/infer/tests/codetoanalyze/objc/frontend/exceptions/ExceptionExample.m.dot index a66150c7e..eb0cb6e2a 100644 --- a/infer/tests/codetoanalyze/objc/frontend/exceptions/ExceptionExample.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/exceptions/ExceptionExample.m.dot @@ -1,50 +1,50 @@ /* @generated */ digraph iCFG { -12 [label="12: DeclStmt \n n$7=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 28]\n *&s:class NSString *=n$7 [line 28]\n " shape="box"] +"ExceptionExample_test18" [label="8: DeclStmt \n n$7=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 28]\n *&s:class NSString *=n$7 [line 28]\n " shape="box"] - 12 -> 9 ; - 12 -> 10 ; -11 [label="11: ObjCCPPThrow \n n$4=_fun_NSString_stringWithUTF8String:(\"Something is not right exception\":char *) [line 31]\n n$5=_fun_NSString_stringWithUTF8String:(\"Can't perform this operation because of this or that\":char *) [line 33]\n n$6=_fun_NSException_exceptionWithName:reason:userInfo:(n$4:class NSString *,n$5:class NSString *,0:class NSDictionary *) [line 30]\n _fun___infer_objc_cpp_throw(n$6:class NSException *) [line 30]\n " shape="box"] + "ExceptionExample_test18" -> "ExceptionExample_test15" ; + "ExceptionExample_test18" -> "ExceptionExample_test16" ; +"ExceptionExample_test17" [label="7: ObjCCPPThrow \n n$4=_fun_NSString_stringWithUTF8String:(\"Something is not right exception\":char *) [line 31]\n n$5=_fun_NSString_stringWithUTF8String:(\"Can't perform this operation because of this or that\":char *) [line 33]\n n$6=_fun_NSException_exceptionWithName:reason:userInfo:(n$4:class NSString *,n$5:class NSString *,0:class NSDictionary *) [line 30]\n _fun___infer_objc_cpp_throw(n$6:class NSException *) [line 30]\n " shape="box"] - 11 -> 7 ; -10 [label="10: Prune (false branch) \n n$3=*&s:class NSString * [line 29]\n PRUNE((n$3 == 0), false); [line 29]\n " shape="invhouse"] + "ExceptionExample_test17" -> "ExceptionExample_test13" ; +"ExceptionExample_test16" [label="6: Prune (false branch) \n n$3=*&s:class NSString * [line 29]\n PRUNE((n$3 == 0), false); [line 29]\n " shape="invhouse"] - 10 -> 7 ; -9 [label="9: Prune (true branch) \n n$3=*&s:class NSString * [line 29]\n PRUNE((n$3 != 0), true); [line 29]\n " shape="invhouse"] + "ExceptionExample_test16" -> "ExceptionExample_test13" ; +"ExceptionExample_test15" [label="5: Prune (true branch) \n n$3=*&s:class NSString * [line 29]\n PRUNE((n$3 != 0), true); [line 29]\n " shape="invhouse"] - 9 -> 11 ; -8 [label="8: between_join_and_exit \n " shape="box"] + "ExceptionExample_test15" -> "ExceptionExample_test17" ; +"ExceptionExample_test14" [label="4: between_join_and_exit \n " shape="box"] - 8 -> 6 ; -7 [label="7: + \n " ] + "ExceptionExample_test14" -> "ExceptionExample_test12" ; +"ExceptionExample_test13" [label="3: + \n " ] - 7 -> 8 ; -6 [label="6: Exit ExceptionExample_test1 \n " color=yellow style=filled] + "ExceptionExample_test13" -> "ExceptionExample_test14" ; +"ExceptionExample_test12" [label="2: Exit ExceptionExample_test1 \n " color=yellow style=filled] -5 [label="5: Start ExceptionExample_test1\nFormals: self:class ExceptionExample *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 27]\n " color=yellow style=filled] +"ExceptionExample_test11" [label="1: Start ExceptionExample_test1\nFormals: self:class ExceptionExample *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 27]\n " color=yellow style=filled] - 5 -> 12 ; -4 [label="4: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 20]\n *&s:class NSString *=n$2 [line 20]\n " shape="box"] + "ExceptionExample_test11" -> "ExceptionExample_test18" ; +"ExceptionExample_test4" [label="4: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 20]\n *&s:class NSString *=n$2 [line 20]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Message Call: description \n n$0=*&self:class ExceptionExample * [line 23]\n n$1=_fun_ExceptionExample_description(n$0:class ExceptionExample *) [line 23]\n " shape="box"] + "ExceptionExample_test4" -> "ExceptionExample_test3" ; +"ExceptionExample_test3" [label="3: Message Call: description \n n$0=*&self:class ExceptionExample * [line 23]\n n$1=_fun_ExceptionExample_description(n$0:class ExceptionExample *) [line 23]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit ExceptionExample_test \n " color=yellow style=filled] + "ExceptionExample_test3" -> "ExceptionExample_test2" ; +"ExceptionExample_test2" [label="2: Exit ExceptionExample_test \n " color=yellow style=filled] -1 [label="1: Start ExceptionExample_test\nFormals: self:class ExceptionExample *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 18]\n " color=yellow style=filled] +"ExceptionExample_test1" [label="1: Start ExceptionExample_test\nFormals: self:class ExceptionExample *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 18]\n " color=yellow style=filled] - 1 -> 4 ; + "ExceptionExample_test1" -> "ExceptionExample_test4" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/fast_enumeration/Fast_enumeration.m.dot b/infer/tests/codetoanalyze/objc/frontend/fast_enumeration/Fast_enumeration.m.dot index 628798e3d..b6960f794 100644 --- a/infer/tests/codetoanalyze/objc/frontend/fast_enumeration/Fast_enumeration.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/fast_enumeration/Fast_enumeration.m.dot @@ -1,87 +1,87 @@ /* @generated */ digraph iCFG { -21 [label="21: DeclStmt \n *&size:int =0 [line 26]\n " shape="box"] +"A_while_loop:10" [label="10: DeclStmt \n *&size:int =0 [line 26]\n " shape="box"] - 21 -> 20 ; -20 [label="20: DeclStmt \n *&item:class NSArray *=0 [line 27]\n " shape="box"] + "A_while_loop:10" -> "A_while_loop:9" ; +"A_while_loop:9" [label="9: DeclStmt \n *&item:class NSArray *=0 [line 27]\n " shape="box"] - 20 -> 15 ; -19 [label="19: BinaryOperatorStmt: AddAssign \n n$13=*&item:class NSArray * [line 29]\n n$14=_fun_NSArray_count(n$13:class NSArray *) [line 29]\n n$15=*&size:int [line 29]\n *&size:int =(n$15 + n$14) [line 29]\n " shape="box"] + "A_while_loop:9" -> "A_while_loop:4" ; +"A_while_loop:8" [label="8: BinaryOperatorStmt: AddAssign \n n$13=*&item:class NSArray * [line 29]\n n$14=_fun_NSArray_count(n$13:class NSArray *) [line 29]\n n$15=*&size:int [line 29]\n *&size:int =(n$15 + n$14) [line 29]\n " shape="box"] - 19 -> 15 ; -18 [label="18: Prune (false branch) \n PRUNE((n$12 == 0), false); [line 28]\n " shape="invhouse"] + "A_while_loop:8" -> "A_while_loop:4" ; +"A_while_loop:7" [label="7: Prune (false branch) \n PRUNE((n$12 == 0), false); [line 28]\n " shape="invhouse"] - 18 -> 14 ; -17 [label="17: Prune (true branch) \n PRUNE((n$12 != 0), true); [line 28]\n " shape="invhouse"] + "A_while_loop:7" -> "A_while_loop:3" ; +"A_while_loop:6" [label="6: Prune (true branch) \n PRUNE((n$12 != 0), true); [line 28]\n " shape="invhouse"] - 17 -> 19 ; -16 [label="16: BinaryOperatorStmt: Assign \n n$10=*&items:class NSArray * [line 28]\n n$11=_fun_NSArray_objectAtIndex:(n$10:class NSArray *,3:unsigned long ) virtual [line 28]\n *&item:class NSArray *=n$11 [line 28]\n n$12=*&item:class NSArray * [line 28]\n " shape="box"] + "A_while_loop:6" -> "A_while_loop:8" ; +"A_while_loop:5" [label="5: BinaryOperatorStmt: Assign \n n$10=*&items:class NSArray * [line 28]\n n$11=_fun_NSArray_objectAtIndex:(n$10:class NSArray *,3:unsigned long ) virtual [line 28]\n *&item:class NSArray *=n$11 [line 28]\n n$12=*&item:class NSArray * [line 28]\n " shape="box"] - 16 -> 17 ; - 16 -> 18 ; -15 [label="15: + \n " ] + "A_while_loop:5" -> "A_while_loop:6" ; + "A_while_loop:5" -> "A_while_loop:7" ; +"A_while_loop:4" [label="4: + \n " ] - 15 -> 16 ; -14 [label="14: Return Stmt \n n$9=*&size:int [line 31]\n *&return:int =n$9 [line 31]\n " shape="box"] + "A_while_loop:4" -> "A_while_loop:5" ; +"A_while_loop:3" [label="3: Return Stmt \n n$9=*&size:int [line 31]\n *&return:int =n$9 [line 31]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit A_while_loop: \n " color=yellow style=filled] + "A_while_loop:3" -> "A_while_loop:2" ; +"A_while_loop:2" [label="2: Exit A_while_loop: \n " color=yellow style=filled] -12 [label="12: Start A_while_loop:\nFormals: self:class A * items:class NSArray *\nLocals: item:class NSArray * size:int \n DECLARE_LOCALS(&return,&item,&size); [line 25]\n " color=yellow style=filled] +"A_while_loop:1" [label="1: Start A_while_loop:\nFormals: self:class A * items:class NSArray *\nLocals: item:class NSArray * size:int \n DECLARE_LOCALS(&return,&item,&size); [line 25]\n " color=yellow style=filled] - 12 -> 21 ; -11 [label="11: DeclStmt \n *&size:int =0 [line 18]\n " shape="box"] + "A_while_loop:1" -> "A_while_loop:10" ; +"A_fast_loop:11" [label="11: DeclStmt \n *&size:int =0 [line 18]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$7=*&items:class NSArray * [line 19]\n n$8=_fun_NSArray_nextObject(n$7:class NSArray *) virtual [line 19]\n *&item:class NSArray *=n$8 [line 19]\n " shape="box"] + "A_fast_loop:11" -> "A_fast_loop:10" ; +"A_fast_loop:10" [label="10: BinaryOperatorStmt: Assign \n n$7=*&items:class NSArray * [line 19]\n n$8=_fun_NSArray_nextObject(n$7:class NSArray *) virtual [line 19]\n *&item:class NSArray *=n$8 [line 19]\n " shape="box"] - 10 -> 4 ; -9 [label="9: BinaryOperatorStmt: AddAssign \n n$4=*&item:class NSArray * [line 20]\n n$5=_fun_NSArray_count(n$4:class NSArray *) [line 20]\n n$6=*&size:int [line 20]\n *&size:int =(n$6 + n$5) [line 20]\n " shape="box"] + "A_fast_loop:10" -> "A_fast_loop:4" ; +"A_fast_loop:9" [label="9: BinaryOperatorStmt: AddAssign \n n$4=*&item:class NSArray * [line 20]\n n$5=_fun_NSArray_count(n$4:class NSArray *) [line 20]\n n$6=*&size:int [line 20]\n *&size:int =(n$6 + n$5) [line 20]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$2=*&items:class NSArray * [line 19]\n n$3=_fun_NSArray_nextObject(n$2:class NSArray *) virtual [line 19]\n *&item:class NSArray *=n$3 [line 19]\n " shape="box"] + "A_fast_loop:9" -> "A_fast_loop:8" ; +"A_fast_loop:8" [label="8: BinaryOperatorStmt: Assign \n n$2=*&items:class NSArray * [line 19]\n n$3=_fun_NSArray_nextObject(n$2:class NSArray *) virtual [line 19]\n *&item:class NSArray *=n$3 [line 19]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$1 != 0) == 0), false); [line 19]\n " shape="invhouse"] + "A_fast_loop:8" -> "A_fast_loop:4" ; +"A_fast_loop:7" [label="7: Prune (false branch) \n PRUNE(((n$1 != 0) == 0), false); [line 19]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$1 != 0) != 0), true); [line 19]\n " shape="invhouse"] + "A_fast_loop:7" -> "A_fast_loop:3" ; +"A_fast_loop:6" [label="6: Prune (true branch) \n PRUNE(((n$1 != 0) != 0), true); [line 19]\n " shape="invhouse"] - 6 -> 9 ; -5 [label="5: BinaryOperatorStmt: NE \n n$1=*&item:class NSArray * [line 19]\n " shape="box"] + "A_fast_loop:6" -> "A_fast_loop:9" ; +"A_fast_loop:5" [label="5: BinaryOperatorStmt: NE \n n$1=*&item:class NSArray * [line 19]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] + "A_fast_loop:5" -> "A_fast_loop:6" ; + "A_fast_loop:5" -> "A_fast_loop:7" ; +"A_fast_loop:4" [label="4: + \n " ] - 4 -> 5 ; -3 [label="3: Return Stmt \n n$0=*&size:int [line 22]\n *&return:int =n$0 [line 22]\n " shape="box"] + "A_fast_loop:4" -> "A_fast_loop:5" ; +"A_fast_loop:3" [label="3: Return Stmt \n n$0=*&size:int [line 22]\n *&return:int =n$0 [line 22]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_fast_loop: \n " color=yellow style=filled] + "A_fast_loop:3" -> "A_fast_loop:2" ; +"A_fast_loop:2" [label="2: Exit A_fast_loop: \n " color=yellow style=filled] -1 [label="1: Start A_fast_loop:\nFormals: self:class A * items:class NSArray *\nLocals: item:class NSArray * size:int \n DECLARE_LOCALS(&return,&item,&size); [line 17]\n " color=yellow style=filled] +"A_fast_loop:1" [label="1: Start A_fast_loop:\nFormals: self:class A * items:class NSArray *\nLocals: item:class NSArray * size:int \n DECLARE_LOCALS(&return,&item,&size); [line 17]\n " color=yellow style=filled] - 1 -> 11 ; + "A_fast_loop:1" -> "A_fast_loop:11" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/predefined_expr/PredefinedExprExample.m.dot b/infer/tests/codetoanalyze/objc/frontend/predefined_expr/PredefinedExprExample.m.dot index 9c76270e6..6f99f4d1a 100644 --- a/infer/tests/codetoanalyze/objc/frontend/predefined_expr/PredefinedExprExample.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/predefined_expr/PredefinedExprExample.m.dot @@ -1,36 +1,36 @@ /* @generated */ digraph iCFG { -9 [label="9: Call _fun_NSLog \n n$2=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 27]\n _fun_NSLog(n$2:struct objc_object *,\"\":char *) [line 27]\n " shape="box"] +"A_testFunct3" [label="3: Call _fun_NSLog \n n$2=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 27]\n _fun_NSLog(n$2:struct objc_object *,\"\":char *) [line 27]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit A_testFunct \n " color=yellow style=filled] + "A_testFunct3" -> "A_testFunct2" ; +"A_testFunct2" [label="2: Exit A_testFunct \n " color=yellow style=filled] -7 [label="7: Start A_testFunct\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"A_testFunct1" [label="1: Start A_testFunct\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 23]\n _fun_NSLog(n$1:struct objc_object *,\"\":char *) [line 23]\n " shape="box"] + "A_testFunct1" -> "A_testFunct3" ; +"A_testPrettyFunction3" [label="3: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 19]\n _fun_NSLog(n$0:struct objc_object *,\"\":char *) [line 19]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit A_testFunction \n " color=yellow style=filled] + "A_testPrettyFunction3" -> "A_testPrettyFunction2" ; +"A_testPrettyFunction2" [label="2: Exit A_testPrettyFunction \n " color=yellow style=filled] -4 [label="4: Start A_testFunction\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] +"A_testPrettyFunction1" [label="1: Start A_testPrettyFunction\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 19]\n _fun_NSLog(n$0:struct objc_object *,\"\":char *) [line 19]\n " shape="box"] + "A_testPrettyFunction1" -> "A_testPrettyFunction3" ; +"A_testFunction3" [label="3: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 23]\n _fun_NSLog(n$1:struct objc_object *,\"\":char *) [line 23]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_testPrettyFunction \n " color=yellow style=filled] + "A_testFunction3" -> "A_testFunction2" ; +"A_testFunction2" [label="2: Exit A_testFunction \n " color=yellow style=filled] -1 [label="1: Start A_testPrettyFunction\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"A_testFunction1" [label="1: Start A_testFunction\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] - 1 -> 3 ; + "A_testFunction1" -> "A_testFunction3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/property/PropertyImplSetter.m.dot b/infer/tests/codetoanalyze/objc/frontend/property/PropertyImplSetter.m.dot index 8b558747b..d72be5a29 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/PropertyImplSetter.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/PropertyImplSetter.m.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: BinaryOperatorStmt: Assign \n n$0=*&self:class PropertyImplSetter * [line 15]\n *n$0._maximumFileSize:int =0 [line 15]\n " shape="box"] +"PropertyImplSetter_setMaximumFileSize:3" [label="3: BinaryOperatorStmt: Assign \n n$0=*&self:class PropertyImplSetter * [line 15]\n *n$0._maximumFileSize:int =0 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit PropertyImplSetter_setMaximumFileSize: \n " color=yellow style=filled] + "PropertyImplSetter_setMaximumFileSize:3" -> "PropertyImplSetter_setMaximumFileSize:2" ; +"PropertyImplSetter_setMaximumFileSize:2" [label="2: Exit PropertyImplSetter_setMaximumFileSize: \n " color=yellow style=filled] -1 [label="1: Start PropertyImplSetter_setMaximumFileSize:\nFormals: self:class PropertyImplSetter * newMaximumFileSize:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"PropertyImplSetter_setMaximumFileSize:1" [label="1: Start PropertyImplSetter_setMaximumFileSize:\nFormals: self:class PropertyImplSetter * newMaximumFileSize:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 1 -> 3 ; + "PropertyImplSetter_setMaximumFileSize:1" -> "PropertyImplSetter_setMaximumFileSize:3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/property/Property_getter.m.dot b/infer/tests/codetoanalyze/objc/frontend/property/Property_getter.m.dot index 7535a0091..888a243a7 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/Property_getter.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/Property_getter.m.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: Return Stmt \n n$0=*&target:class A * [line 19]\n n$1=_fun_A_x(n$0:class A *) [line 19]\n *&return:int =n$1 [line 19]\n " shape="box"] +"A_addTarget:3" [label="3: Return Stmt \n n$0=*&target:class A * [line 19]\n n$1=_fun_A_x(n$0:class A *) [line 19]\n *&return:int =n$1 [line 19]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit A_addTarget: \n " color=yellow style=filled] + "A_addTarget:3" -> "A_addTarget:2" ; +"A_addTarget:2" [label="2: Exit A_addTarget: \n " color=yellow style=filled] -1 [label="1: Start A_addTarget:\nFormals: self:class A * target:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"A_addTarget:1" [label="1: Start A_addTarget:\nFormals: self:class A * target:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 1 -> 3 ; + "A_addTarget:1" -> "A_addTarget:3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/property/main_car.m.dot b/infer/tests/codetoanalyze/objc/frontend/property/main_car.m.dot index 1e14ed733..25ec5ac3a 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/main_car.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/main_car.m.dot @@ -1,26 +1,26 @@ /* @generated */ digraph iCFG { -6 [label="6: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class Car ):unsigned long ) [line 13]\n n$5=_fun_NSObject_init(n$4:class Car *) virtual [line 13]\n *&honda:class Car *=n$5 [line 13]\n " shape="box"] +"main6" [label="6: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class Car ):unsigned long ) [line 13]\n n$5=_fun_NSObject_init(n$4:class Car *) virtual [line 13]\n *&honda:class Car *=n$5 [line 13]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Message Call: setRunning: \n n$3=*&honda:class Car * [line 14]\n _fun_Car_setRunning:(n$3:class Car *,1:_Bool ) [line 14]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: Message Call: setRunning: \n n$3=*&honda:class Car * [line 14]\n _fun_Car_setRunning:(n$3:class Car *,1:_Bool ) [line 14]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"%d\":char *) [line 15]\n n$1=*&honda:class Car * [line 15]\n n$2=_fun_Car_running(n$1:class Car *) [line 15]\n _fun_NSLog(n$0:struct objc_object *,n$2:int ) [line 15]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"%d\":char *) [line 15]\n n$1=*&honda:class Car * [line 15]\n n$2=_fun_Car_running(n$1:class Car *) [line 15]\n _fun_NSLog(n$0:struct objc_object *,n$2:int ) [line 15]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: honda:class Car * \n DECLARE_LOCALS(&return,&honda); [line 12]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: honda:class Car * \n DECLARE_LOCALS(&return,&honda); [line 12]\n " color=yellow style=filled] - 1 -> 6 ; + "main1" -> "main6" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/protocol/protocol.m.dot b/infer/tests/codetoanalyze/objc/frontend/protocol/protocol.m.dot index 0c0deb2d2..adc45ac7f 100644 --- a/infer/tests/codetoanalyze/objc/frontend/protocol/protocol.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/protocol/protocol.m.dot @@ -1,35 +1,35 @@ /* @generated */ digraph iCFG { -8 [label="8: Return Stmt \n " shape="box"] +"Bla_fooMethod8" [label="8: Return Stmt \n " shape="box"] - 8 -> 2 ; -7 [label="7: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 25]\n " shape="invhouse"] + "Bla_fooMethod8" -> "Bla_fooMethod2" ; +"Bla_fooMethod7" [label="7: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 25]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 25]\n " shape="invhouse"] + "Bla_fooMethod7" -> "Bla_fooMethod3" ; +"Bla_fooMethod6" [label="6: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 25]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: Message Call: conformsToProtocol: \n n$0=*&self:class Bla * [line 25]\n n$1=_fun_Bla_conformsToProtocol:(n$0:class Bla *,\"Foo\":class Protocol *) virtual [line 25]\n " shape="box"] + "Bla_fooMethod6" -> "Bla_fooMethod8" ; +"Bla_fooMethod5" [label="5: Message Call: conformsToProtocol: \n n$0=*&self:class Bla * [line 25]\n n$1=_fun_Bla_conformsToProtocol:(n$0:class Bla *,\"Foo\":class Protocol *) virtual [line 25]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: between_join_and_exit \n " shape="box"] + "Bla_fooMethod5" -> "Bla_fooMethod6" ; + "Bla_fooMethod5" -> "Bla_fooMethod7" ; +"Bla_fooMethod4" [label="4: between_join_and_exit \n " shape="box"] - 4 -> 2 ; -3 [label="3: + \n " ] + "Bla_fooMethod4" -> "Bla_fooMethod2" ; +"Bla_fooMethod3" [label="3: + \n " ] - 3 -> 4 ; -2 [label="2: Exit Bla_fooMethod \n " color=yellow style=filled] + "Bla_fooMethod3" -> "Bla_fooMethod4" ; +"Bla_fooMethod2" [label="2: Exit Bla_fooMethod \n " color=yellow style=filled] -1 [label="1: Start Bla_fooMethod\nFormals: self:class Bla *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +"Bla_fooMethod1" [label="1: Start Bla_fooMethod\nFormals: self:class Bla *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 1 -> 5 ; + "Bla_fooMethod1" -> "Bla_fooMethod5" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/returnstmt/void_return.m.dot b/infer/tests/codetoanalyze/objc/frontend/returnstmt/void_return.m.dot index dd54cb4b3..d65c10ef1 100644 --- a/infer/tests/codetoanalyze/objc/frontend/returnstmt/void_return.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/returnstmt/void_return.m.dot @@ -1,64 +1,64 @@ /* @generated */ digraph iCFG { -15 [label="15: DeclStmt \n *&i:int =0 [line 19]\n " shape="box"] +"MyClass_aMethod15" [label="15: DeclStmt \n *&i:int =0 [line 19]\n " shape="box"] - 15 -> 14 ; -14 [label="14: DeclStmt \n *&j:int =0 [line 20]\n " shape="box"] + "MyClass_aMethod15" -> "MyClass_aMethod14" ; +"MyClass_aMethod14" [label="14: DeclStmt \n *&j:int =0 [line 20]\n " shape="box"] - 14 -> 10 ; -13 [label="13: Return Stmt \n " shape="box"] + "MyClass_aMethod14" -> "MyClass_aMethod10" ; +"MyClass_aMethod13" [label="13: Return Stmt \n " shape="box"] - 13 -> 2 ; -12 [label="12: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 21]\n " shape="invhouse"] + "MyClass_aMethod13" -> "MyClass_aMethod2" ; +"MyClass_aMethod12" [label="12: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 21]\n " shape="invhouse"] - 12 -> 9 ; -11 [label="11: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 21]\n " shape="invhouse"] + "MyClass_aMethod12" -> "MyClass_aMethod9" ; +"MyClass_aMethod11" [label="11: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 21]\n " shape="invhouse"] - 11 -> 13 ; -10 [label="10: BinaryOperatorStmt: EQ \n n$2=*&i:int [line 21]\n " shape="box"] + "MyClass_aMethod11" -> "MyClass_aMethod13" ; +"MyClass_aMethod10" [label="10: BinaryOperatorStmt: EQ \n n$2=*&i:int [line 21]\n " shape="box"] - 10 -> 11 ; - 10 -> 12 ; -9 [label="9: + \n " ] + "MyClass_aMethod10" -> "MyClass_aMethod11" ; + "MyClass_aMethod10" -> "MyClass_aMethod12" ; +"MyClass_aMethod9" [label="9: + \n " ] - 9 -> 5 ; -8 [label="8: UnaryOperator \n n$1=*&i:int [line 26]\n *&i:int =(n$1 + 1) [line 26]\n " shape="box"] + "MyClass_aMethod9" -> "MyClass_aMethod5" ; +"MyClass_aMethod8" [label="8: UnaryOperator \n n$1=*&i:int [line 26]\n *&i:int =(n$1 + 1) [line 26]\n " shape="box"] - 8 -> 3 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 25]\n " shape="invhouse"] + "MyClass_aMethod8" -> "MyClass_aMethod3" ; +"MyClass_aMethod7" [label="7: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 25]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 25]\n " shape="invhouse"] + "MyClass_aMethod7" -> "MyClass_aMethod3" ; +"MyClass_aMethod6" [label="6: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 25]\n " shape="invhouse"] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: EQ \n n$0=*&j:int [line 25]\n " shape="box"] + "MyClass_aMethod6" -> "MyClass_aMethod8" ; +"MyClass_aMethod5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&j:int [line 25]\n " shape="box"] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: between_join_and_exit \n " shape="box"] + "MyClass_aMethod5" -> "MyClass_aMethod6" ; + "MyClass_aMethod5" -> "MyClass_aMethod7" ; +"MyClass_aMethod4" [label="4: between_join_and_exit \n " shape="box"] - 4 -> 2 ; -3 [label="3: + \n " ] + "MyClass_aMethod4" -> "MyClass_aMethod2" ; +"MyClass_aMethod3" [label="3: + \n " ] - 3 -> 4 ; -2 [label="2: Exit MyClass_aMethod \n " color=yellow style=filled] + "MyClass_aMethod3" -> "MyClass_aMethod4" ; +"MyClass_aMethod2" [label="2: Exit MyClass_aMethod \n " color=yellow style=filled] -1 [label="1: Start MyClass_aMethod\nFormals: self:class MyClass *\nLocals: j:int i:int \n DECLARE_LOCALS(&return,&j,&i); [line 18]\n " color=yellow style=filled] +"MyClass_aMethod1" [label="1: Start MyClass_aMethod\nFormals: self:class MyClass *\nLocals: j:int i:int \n DECLARE_LOCALS(&return,&j,&i); [line 18]\n " color=yellow style=filled] - 1 -> 15 ; + "MyClass_aMethod1" -> "MyClass_aMethod15" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/self_static/Self.m.dot b/infer/tests/codetoanalyze/objc/frontend/self_static/Self.m.dot index 97589b569..f609b539e 100644 --- a/infer/tests/codetoanalyze/objc/frontend/self_static/Self.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/self_static/Self.m.dot @@ -1,196 +1,196 @@ /* @generated */ digraph iCFG { -52 [label="52: Return Stmt \n *&return:int =0 [line 98]\n " shape="box"] +"A_loggerName3" [label="3: Return Stmt \n n$14=_fun_NSStringFromClass(sizeof(class A ):unsigned long ) [line 91]\n *&return:class NSString *=n$14 [line 91]\n " shape="box"] - 52 -> 45 ; -51 [label="51: Return Stmt \n *&return:int =1 [line 96]\n " shape="box"] + "A_loggerName3" -> "A_loggerName2" ; +"A_loggerName2" [label="2: Exit A_loggerName \n " color=yellow style=filled] - 51 -> 45 ; -50 [label="50: Prune (false branch) \n PRUNE(((sizeof(class A ) != n$15) == 0), false); [line 95]\n " shape="invhouse"] +"A_loggerName1" [label="1: Start A_loggerName\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 90]\n " color=yellow style=filled] - 50 -> 52 ; -49 [label="49: Prune (true branch) \n PRUNE(((sizeof(class A ) != n$15) != 0), true); [line 95]\n " shape="invhouse"] + "A_loggerName1" -> "A_loggerName3" ; +"A_calling_super3" [label="3: Message Call: test_class \n _fun_C_test_class() [line 83]\n " shape="box"] - 49 -> 51 ; -48 [label="48: BinaryOperatorStmt: NE \n n$15=*&c:struct objc_class * [line 95]\n " shape="box"] + "A_calling_super3" -> "A_calling_super2" ; +"A_calling_super2" [label="2: Exit A_calling_super \n " color=yellow style=filled] - 48 -> 49 ; - 48 -> 50 ; -47 [label="47: between_join_and_exit \n " shape="box"] +"A_calling_super1" [label="1: Start A_calling_super\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 82]\n " color=yellow style=filled] - 47 -> 45 ; -46 [label="46: + \n " ] + "A_calling_super1" -> "A_calling_super3" ; +"A_use_class_in_other_ways:3" [label="3: Return Stmt \n n$8=*&object:class B * [line 79]\n n$10=_fun_B_isC:(n$8:class B *,sizeof(class A ):unsigned long ) virtual [line 79]\n *&return:_Bool =n$10 [line 79]\n " shape="box"] - 46 -> 47 ; -45 [label="45: Exit A_used_in_binary_op: \n " color=yellow style=filled] + "A_use_class_in_other_ways:3" -> "A_use_class_in_other_ways:2" ; +"A_use_class_in_other_ways:2" [label="2: Exit A_use_class_in_other_ways: \n " color=yellow style=filled] -44 [label="44: Start A_used_in_binary_op:\nFormals: c:struct objc_class *\nLocals: \n DECLARE_LOCALS(&return); [line 94]\n " color=yellow style=filled] +"A_use_class_in_other_ways:1" [label="1: Start A_use_class_in_other_ways:\nFormals: self:class A * object:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 78]\n " color=yellow style=filled] - 44 -> 48 ; -43 [label="43: Return Stmt \n n$14=_fun_NSStringFromClass(sizeof(class A ):unsigned long ) [line 91]\n *&return:class NSString *=n$14 [line 91]\n " shape="box"] + "A_use_class_in_other_ways:1" -> "A_use_class_in_other_ways:3" ; +"A_test_class2" [label="2: Exit A_test_class \n " color=yellow style=filled] - 43 -> 42 ; -42 [label="42: Exit A_loggerName \n " color=yellow style=filled] +"A_test_class1" [label="1: Start A_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] -41 [label="41: Start A_loggerName\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 90]\n " color=yellow style=filled] + "A_test_class1" -> "A_test_class2" ; +"A_t4" [label="4: DeclStmt \n n$6=_fun___objc_alloc_no_fail(sizeof(class B ):unsigned long ) [line 74]\n n$7=_fun_NSObject_init(n$6:class B *) virtual [line 74]\n *&b:class B *=n$7 [line 74]\n " shape="box"] - 41 -> 43 ; -40 [label="40: Message Call: init \n n$11=*&self:class A * [line 87]\n n$12=_fun_NSObject_init(n$11:class A *) [line 87]\n " shape="box"] + "A_t4" -> "A_t3" ; +"A_t3" [label="3: Message Call: b_m \n _fun_B_b_m() [line 75]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Exit A_init \n " color=yellow style=filled] + "A_t3" -> "A_t2" ; +"A_t2" [label="2: Exit A_t \n " color=yellow style=filled] -38 [label="38: Start A_init\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 86]\n " color=yellow style=filled] +"A_t1" [label="1: Start A_t\nFormals: self:class A *\nLocals: b:class B * \n DECLARE_LOCALS(&return,&b); [line 73]\n " color=yellow style=filled] - 38 -> 40 ; -37 [label="37: Message Call: test_class \n _fun_C_test_class() [line 83]\n " shape="box"] + "A_t1" -> "A_t4" ; +"A_call_class_instance3" [label="3: Message Call: test_class \n _fun_A_test_class() [line 66]\n " shape="box"] - 37 -> 36 ; -36 [label="36: Exit A_calling_super \n " color=yellow style=filled] + "A_call_class_instance3" -> "A_call_class_instance2" ; +"A_call_class_instance2" [label="2: Exit A_call_class_instance \n " color=yellow style=filled] -35 [label="35: Start A_calling_super\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 82]\n " color=yellow style=filled] +"A_call_class_instance1" [label="1: Start A_call_class_instance\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 65]\n " color=yellow style=filled] - 35 -> 37 ; -34 [label="34: Return Stmt \n n$8=*&object:class B * [line 79]\n n$10=_fun_B_isC:(n$8:class B *,sizeof(class A ):unsigned long ) virtual [line 79]\n *&return:_Bool =n$10 [line 79]\n " shape="box"] + "A_call_class_instance1" -> "A_call_class_instance3" ; +"A_call_test_class3" [label="3: Message Call: test_class \n _fun_A_test_class() [line 54]\n " shape="box"] - 34 -> 33 ; -33 [label="33: Exit A_use_class_in_other_ways: \n " color=yellow style=filled] + "A_call_test_class3" -> "A_call_test_class2" ; +"A_call_test_class2" [label="2: Exit A_call_test_class \n " color=yellow style=filled] -32 [label="32: Start A_use_class_in_other_ways:\nFormals: self:class A * object:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 78]\n " color=yellow style=filled] +"A_call_test_class1" [label="1: Start A_call_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 53]\n " color=yellow style=filled] - 32 -> 34 ; -31 [label="31: DeclStmt \n n$6=_fun___objc_alloc_no_fail(sizeof(class B ):unsigned long ) [line 74]\n n$7=_fun_NSObject_init(n$6:class B *) virtual [line 74]\n *&b:class B *=n$7 [line 74]\n " shape="box"] + "A_call_test_class1" -> "A_call_test_class3" ; +"A_init3" [label="3: Message Call: init \n n$11=*&self:class A * [line 87]\n n$12=_fun_NSObject_init(n$11:class A *) [line 87]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Message Call: b_m \n _fun_B_b_m() [line 75]\n " shape="box"] + "A_init3" -> "A_init2" ; +"A_init2" [label="2: Exit A_init \n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: Exit A_t \n " color=yellow style=filled] +"A_init1" [label="1: Start A_init\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 86]\n " color=yellow style=filled] -28 [label="28: Start A_t\nFormals: self:class A *\nLocals: b:class B * \n DECLARE_LOCALS(&return,&b); [line 73]\n " color=yellow style=filled] + "A_init1" -> "A_init3" ; +"A_call_test3" [label="3: Message Call: test \n n$0=*&self:class A * [line 47]\n _fun_A_test(n$0:class A *) virtual [line 47]\n " shape="box"] - 28 -> 31 ; -27 [label="27: Message Call: test_class \n _fun_A_test_class() [line 70]\n " shape="box"] + "A_call_test3" -> "A_call_test2" ; +"A_call_test2" [label="2: Exit A_call_test \n " color=yellow style=filled] - 27 -> 26 ; -26 [label="26: Exit A_call_class_instance_with_class_name \n " color=yellow style=filled] +"A_call_test1" [label="1: Start A_call_test\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] -25 [label="25: Start A_call_class_instance_with_class_name\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 69]\n " color=yellow style=filled] + "A_call_test1" -> "A_call_test3" ; +"B_b_m2" [label="2: Exit B_b_m \n " color=yellow style=filled] - 25 -> 27 ; -24 [label="24: Message Call: test_class \n _fun_A_test_class() [line 66]\n " shape="box"] +"B_b_m1" [label="1: Start B_b_m\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Exit A_call_class_instance \n " color=yellow style=filled] + "B_b_m1" -> "B_b_m2" ; +"A_call_class_instance_with_class_name3" [label="3: Message Call: test_class \n _fun_A_test_class() [line 70]\n " shape="box"] -22 [label="22: Start A_call_class_instance\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 65]\n " color=yellow style=filled] + "A_call_class_instance_with_class_name3" -> "A_call_class_instance_with_class_name2" ; +"A_call_class_instance_with_class_name2" [label="2: Exit A_call_class_instance_with_class_name \n " color=yellow style=filled] - 22 -> 24 ; -21 [label="21: Call alloc \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 62]\n " shape="box"] +"A_call_class_instance_with_class_name1" [label="1: Start A_call_class_instance_with_class_name\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 69]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit A_call_alloc_instance \n " color=yellow style=filled] + "A_call_class_instance_with_class_name1" -> "A_call_class_instance_with_class_name3" ; +"B_isC:3" [label="3: Return Stmt \n *&return:_Bool =1 [line 24]\n " shape="box"] -19 [label="19: Start A_call_alloc_instance\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 61]\n " color=yellow style=filled] + "B_isC:3" -> "B_isC:2" ; +"B_isC:2" [label="2: Exit B_isC: \n " color=yellow style=filled] - 19 -> 21 ; -18 [label="18: Call alloc \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 58]\n " shape="box"] +"B_isC:1" [label="1: Start B_isC:\nFormals: self:class B * aClass:struct objc_class *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Exit A_call_alloc_class \n " color=yellow style=filled] + "B_isC:1" -> "B_isC:3" ; +"A_call_alloc_instance3" [label="3: Call alloc \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 62]\n " shape="box"] -16 [label="16: Start A_call_alloc_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 57]\n " color=yellow style=filled] + "A_call_alloc_instance3" -> "A_call_alloc_instance2" ; +"A_call_alloc_instance2" [label="2: Exit A_call_alloc_instance \n " color=yellow style=filled] - 16 -> 18 ; -15 [label="15: Message Call: test_class \n _fun_A_test_class() [line 54]\n " shape="box"] +"A_call_alloc_instance1" [label="1: Start A_call_alloc_instance\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 61]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit A_call_test_class \n " color=yellow style=filled] + "A_call_alloc_instance1" -> "A_call_alloc_instance3" ; +"A_used_in_binary_op:9" [label="9: Return Stmt \n *&return:int =0 [line 98]\n " shape="box"] -13 [label="13: Start A_call_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 53]\n " color=yellow style=filled] + "A_used_in_binary_op:9" -> "A_used_in_binary_op:2" ; +"A_used_in_binary_op:8" [label="8: Return Stmt \n *&return:int =1 [line 96]\n " shape="box"] - 13 -> 15 ; -12 [label="12: Exit A_test_class \n " color=yellow style=filled] + "A_used_in_binary_op:8" -> "A_used_in_binary_op:2" ; +"A_used_in_binary_op:7" [label="7: Prune (false branch) \n PRUNE(((sizeof(class A ) != n$15) == 0), false); [line 95]\n " shape="invhouse"] -11 [label="11: Start A_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] + "A_used_in_binary_op:7" -> "A_used_in_binary_op:9" ; +"A_used_in_binary_op:6" [label="6: Prune (true branch) \n PRUNE(((sizeof(class A ) != n$15) != 0), true); [line 95]\n " shape="invhouse"] - 11 -> 12 ; -10 [label="10: Message Call: test \n n$0=*&self:class A * [line 47]\n _fun_A_test(n$0:class A *) virtual [line 47]\n " shape="box"] + "A_used_in_binary_op:6" -> "A_used_in_binary_op:8" ; +"A_used_in_binary_op:5" [label="5: BinaryOperatorStmt: NE \n n$15=*&c:struct objc_class * [line 95]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Exit A_call_test \n " color=yellow style=filled] + "A_used_in_binary_op:5" -> "A_used_in_binary_op:6" ; + "A_used_in_binary_op:5" -> "A_used_in_binary_op:7" ; +"A_used_in_binary_op:4" [label="4: between_join_and_exit \n " shape="box"] -8 [label="8: Start A_call_test\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] + "A_used_in_binary_op:4" -> "A_used_in_binary_op:2" ; +"A_used_in_binary_op:3" [label="3: + \n " ] - 8 -> 10 ; -7 [label="7: Exit A_test \n " color=yellow style=filled] + "A_used_in_binary_op:3" -> "A_used_in_binary_op:4" ; +"A_used_in_binary_op:2" [label="2: Exit A_used_in_binary_op: \n " color=yellow style=filled] -6 [label="6: Start A_test\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 43]\n " color=yellow style=filled] +"A_used_in_binary_op:1" [label="1: Start A_used_in_binary_op:\nFormals: c:struct objc_class *\nLocals: \n DECLARE_LOCALS(&return); [line 94]\n " color=yellow style=filled] - 6 -> 7 ; -5 [label="5: Return Stmt \n *&return:_Bool =1 [line 24]\n " shape="box"] + "A_used_in_binary_op:1" -> "A_used_in_binary_op:5" ; +"A_call_alloc_class3" [label="3: Call alloc \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 58]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit B_isC: \n " color=yellow style=filled] + "A_call_alloc_class3" -> "A_call_alloc_class2" ; +"A_call_alloc_class2" [label="2: Exit A_call_alloc_class \n " color=yellow style=filled] -3 [label="3: Start B_isC:\nFormals: self:class B * aClass:struct objc_class *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] +"A_call_alloc_class1" [label="1: Start A_call_alloc_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 57]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit B_b_m \n " color=yellow style=filled] + "A_call_alloc_class1" -> "A_call_alloc_class3" ; +"A_test2" [label="2: Exit A_test \n " color=yellow style=filled] -1 [label="1: Start B_b_m\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +"A_test1" [label="1: Start A_test\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 43]\n " color=yellow style=filled] - 1 -> 2 ; + "A_test1" -> "A_test2" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/self_static/static.m.dot b/infer/tests/codetoanalyze/objc/frontend/self_static/static.m.dot index 9eb84bf0c..46b1a6b68 100644 --- a/infer/tests/codetoanalyze/objc/frontend/self_static/static.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/self_static/static.m.dot @@ -1,58 +1,58 @@ /* @generated */ digraph iCFG { -15 [label="15: Message Call: getX \n n$1=*&self:class MyClass * [line 37]\n n$2=_fun_MyClass_getX(n$1:class MyClass *) virtual [line 37]\n " shape="box"] +"MyClass_getX3" [label="3: Return Stmt \n *&return:int =0 [line 33]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit MyClass_anInstanceMethod2 \n " color=yellow style=filled] + "MyClass_getX3" -> "MyClass_getX2" ; +"MyClass_getX2" [label="2: Exit MyClass_getX \n " color=yellow style=filled] -13 [label="13: Start MyClass_anInstanceMethod2\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] +"MyClass_getX1" [label="1: Start MyClass_getX\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Return Stmt \n *&return:int =0 [line 33]\n " shape="box"] + "MyClass_getX1" -> "MyClass_getX3" ; +"MyClass_anInstanceMethod23" [label="3: Message Call: getX \n n$1=*&self:class MyClass * [line 37]\n n$2=_fun_MyClass_getX(n$1:class MyClass *) virtual [line 37]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit MyClass_getX \n " color=yellow style=filled] + "MyClass_anInstanceMethod23" -> "MyClass_anInstanceMethod22" ; +"MyClass_anInstanceMethod22" [label="2: Exit MyClass_anInstanceMethod2 \n " color=yellow style=filled] -10 [label="10: Start MyClass_getX\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] +"MyClass_anInstanceMethod21" [label="1: Start MyClass_anInstanceMethod2\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Message Call: aClassMethod \n _fun_MyClass_aClassMethod() [line 29]\n " shape="box"] + "MyClass_anInstanceMethod21" -> "MyClass_anInstanceMethod23" ; +"MyClass_aClassMethod3" [label="3: DeclStmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class MyClass ):unsigned long ) [line 21]\n *&myClass:class MyClass *=n$0 [line 21]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit MyClass_aClassMethod2 \n " color=yellow style=filled] + "MyClass_aClassMethod3" -> "MyClass_aClassMethod2" ; +"MyClass_aClassMethod2" [label="2: Exit MyClass_aClassMethod \n " color=yellow style=filled] -7 [label="7: Start MyClass_aClassMethod2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] +"MyClass_aClassMethod1" [label="1: Start MyClass_aClassMethod\nFormals: \nLocals: myClass:class MyClass * \n DECLARE_LOCALS(&return,&myClass); [line 20]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Message Call: aClassMethod \n _fun_MyClass_aClassMethod() [line 25]\n " shape="box"] + "MyClass_aClassMethod1" -> "MyClass_aClassMethod3" ; +"MyClass_anInstanceMethod3" [label="3: Message Call: aClassMethod \n _fun_MyClass_aClassMethod() [line 25]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit MyClass_anInstanceMethod \n " color=yellow style=filled] + "MyClass_anInstanceMethod3" -> "MyClass_anInstanceMethod2" ; +"MyClass_anInstanceMethod2" [label="2: Exit MyClass_anInstanceMethod \n " color=yellow style=filled] -4 [label="4: Start MyClass_anInstanceMethod\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +"MyClass_anInstanceMethod1" [label="1: Start MyClass_anInstanceMethod\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: DeclStmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class MyClass ):unsigned long ) [line 21]\n *&myClass:class MyClass *=n$0 [line 21]\n " shape="box"] + "MyClass_anInstanceMethod1" -> "MyClass_anInstanceMethod3" ; +"MyClass_aClassMethod23" [label="3: Message Call: aClassMethod \n _fun_MyClass_aClassMethod() [line 29]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit MyClass_aClassMethod \n " color=yellow style=filled] + "MyClass_aClassMethod23" -> "MyClass_aClassMethod22" ; +"MyClass_aClassMethod22" [label="2: Exit MyClass_aClassMethod2 \n " color=yellow style=filled] -1 [label="1: Start MyClass_aClassMethod\nFormals: \nLocals: myClass:class MyClass * \n DECLARE_LOCALS(&return,&myClass); [line 20]\n " color=yellow style=filled] +"MyClass_aClassMethod21" [label="1: Start MyClass_aClassMethod2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] - 1 -> 3 ; + "MyClass_aClassMethod21" -> "MyClass_aClassMethod23" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/strings/global_string_literal.m.dot b/infer/tests/codetoanalyze/objc/frontend/strings/global_string_literal.m.dot index 9de39af84..0cbcbd573 100644 --- a/infer/tests/codetoanalyze/objc/frontend/strings/global_string_literal.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/strings/global_string_literal.m.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] +"main3" [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -4 [label="4: Start main\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: DeclStmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Rodriguez\":char *) [line 12]\n *&#GB$lastName:class NSString *=n$0 [line 12]\n " shape="box"] + "main1" -> "main3" ; +"__infer_globals_initializer_lastName3" [label="3: DeclStmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Rodriguez\":char *) [line 12]\n *&#GB$lastName:class NSString *=n$0 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit __infer_globals_initializer_lastName \n " color=yellow style=filled] + "__infer_globals_initializer_lastName3" -> "__infer_globals_initializer_lastName2" ; +"__infer_globals_initializer_lastName2" [label="2: Exit __infer_globals_initializer_lastName \n " color=yellow style=filled] -1 [label="1: Start __infer_globals_initializer_lastName\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"__infer_globals_initializer_lastName1" [label="1: Start __infer_globals_initializer_lastName\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "__infer_globals_initializer_lastName1" -> "__infer_globals_initializer_lastName3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/strings/string_literal.m.dot b/infer/tests/codetoanalyze/objc/frontend/strings/string_literal.m.dot index d95a01358..f33e81730 100644 --- a/infer/tests/codetoanalyze/objc/frontend/strings/string_literal.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/strings/string_literal.m.dot @@ -1,18 +1,18 @@ /* @generated */ digraph iCFG { -4 [label="4: DeclStmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Rodriguez\":char *) [line 13]\n *&lastName:class NSString *=n$0 [line 13]\n " shape="box"] +"main4" [label="4: DeclStmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Rodriguez\":char *) [line 13]\n *&lastName:class NSString *=n$0 [line 13]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: lastName:class NSString * \n DECLARE_LOCALS(&return,&lastName); [line 12]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: lastName:class NSString * \n DECLARE_LOCALS(&return,&lastName); [line 12]\n " color=yellow style=filled] - 1 -> 4 ; + "main1" -> "main4" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/subclass/MyClass.m.dot b/infer/tests/codetoanalyze/objc/frontend/subclass/MyClass.m.dot index 59fb707b6..76a6e9345 100644 --- a/infer/tests/codetoanalyze/objc/frontend/subclass/MyClass.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/subclass/MyClass.m.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: Return Stmt \n *&return:int =1 [line 15]\n " shape="box"] +"MyClass_myNumber3" [label="3: Return Stmt \n *&return:int =1 [line 15]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit MyClass_myNumber \n " color=yellow style=filled] + "MyClass_myNumber3" -> "MyClass_myNumber2" ; +"MyClass_myNumber2" [label="2: Exit MyClass_myNumber \n " color=yellow style=filled] -1 [label="1: Start MyClass_myNumber\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"MyClass_myNumber1" [label="1: Start MyClass_myNumber\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 1 -> 3 ; + "MyClass_myNumber1" -> "MyClass_myNumber3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/subclass/MySubClass.m.dot b/infer/tests/codetoanalyze/objc/frontend/subclass/MySubClass.m.dot index 635f7b1bc..ca31771b4 100644 --- a/infer/tests/codetoanalyze/objc/frontend/subclass/MySubClass.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/subclass/MySubClass.m.dot @@ -1,18 +1,18 @@ /* @generated */ digraph iCFG { -4 [label="4: DeclStmt \n n$1=*&self:class MySubclass * [line 17]\n n$2=_fun_MyClass_myNumber(n$1:class MySubclass *) [line 17]\n *&subclassNumber:int =(n$2 + 1) [line 17]\n " shape="box"] +"MySubclass_myNumber4" [label="4: DeclStmt \n n$1=*&self:class MySubclass * [line 17]\n n$2=_fun_MyClass_myNumber(n$1:class MySubclass *) [line 17]\n *&subclassNumber:int =(n$2 + 1) [line 17]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&subclassNumber:int [line 18]\n *&return:int =n$0 [line 18]\n " shape="box"] + "MySubclass_myNumber4" -> "MySubclass_myNumber3" ; +"MySubclass_myNumber3" [label="3: Return Stmt \n n$0=*&subclassNumber:int [line 18]\n *&return:int =n$0 [line 18]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit MySubclass_myNumber \n " color=yellow style=filled] + "MySubclass_myNumber3" -> "MySubclass_myNumber2" ; +"MySubclass_myNumber2" [label="2: Exit MySubclass_myNumber \n " color=yellow style=filled] -1 [label="1: Start MySubclass_myNumber\nFormals: self:class MySubclass *\nLocals: subclassNumber:int \n DECLARE_LOCALS(&return,&subclassNumber); [line 15]\n " color=yellow style=filled] +"MySubclass_myNumber1" [label="1: Start MySubclass_myNumber\nFormals: self:class MySubclass *\nLocals: subclassNumber:int \n DECLARE_LOCALS(&return,&subclassNumber); [line 15]\n " color=yellow style=filled] - 1 -> 4 ; + "MySubclass_myNumber1" -> "MySubclass_myNumber4" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/subclass/main.c.dot b/infer/tests/codetoanalyze/objc/frontend/subclass/main.c.dot index 542006659..4f63478c4 100644 --- a/infer/tests/codetoanalyze/objc/frontend/subclass/main.c.dot +++ b/infer/tests/codetoanalyze/objc/frontend/subclass/main.c.dot @@ -1,18 +1,18 @@ /* @generated */ digraph iCFG { -4 [label="4: DeclStmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 13]\n n$1=_fun_NSObject_init(n$0:class A *) virtual [line 13]\n *&a:class A *=n$1 [line 13]\n " shape="box"] +"main4" [label="4: DeclStmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 13]\n n$1=_fun_NSObject_init(n$0:class A *) virtual [line 13]\n *&a:class A *=n$1 [line 13]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 12]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 12]\n " color=yellow style=filled] - 1 -> 4 ; + "main1" -> "main4" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/types/attributes.m.dot b/infer/tests/codetoanalyze/objc/frontend/types/attributes.m.dot index 9eb9eb2f5..7cd55314c 100644 --- a/infer/tests/codetoanalyze/objc/frontend/types/attributes.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/types/attributes.m.dot @@ -1,58 +1,58 @@ /* @generated */ digraph iCFG { -14 [label="14: DeclStmt \n *&aWeakRef:class A __weak *=0 [line 22]\n " shape="box"] +"main14" [label="14: DeclStmt \n *&aWeakRef:class A __weak *=0 [line 22]\n " shape="box"] - 14 -> 13 ; -13 [label="13: DeclStmt \n _fun___objc_retain(0:class A *) [line 23]\n *&aStrongRef:class A *=0 [line 23]\n " shape="box"] + "main14" -> "main13" ; +"main13" [label="13: DeclStmt \n _fun___objc_retain(0:class A *) [line 23]\n *&aStrongRef:class A *=0 [line 23]\n " shape="box"] - 13 -> 12 ; -12 [label="12: DeclStmt \n *&anUnsafeUnretRef:class A __unsafe_unretained *=0 [line 24]\n " shape="box"] + "main13" -> "main12" ; +"main12" [label="12: DeclStmt \n *&anUnsafeUnretRef:class A __unsafe_unretained *=0 [line 24]\n " shape="box"] - 12 -> 11 ; -11 [label="11: DeclStmt \n _fun___objc_retain(0:class A __autoreleasing *) [line 25]\n _fun___set_autorelease_attribute(0:class A __autoreleasing *) [line 25]\n *&anAutoRelRef:class A __autoreleasing *=0 [line 25]\n " shape="box"] + "main12" -> "main11" ; +"main11" [label="11: DeclStmt \n _fun___objc_retain(0:class A __autoreleasing *) [line 25]\n _fun___set_autorelease_attribute(0:class A __autoreleasing *) [line 25]\n *&anAutoRelRef:class A __autoreleasing *=0 [line 25]\n " shape="box"] - 11 -> 10 ; -10 [label="10: DeclStmt \n _fun___objc_retain(0:class A *) [line 26]\n *&aStdRef:class A *=0 [line 26]\n " shape="box"] + "main11" -> "main10" ; +"main10" [label="10: DeclStmt \n _fun___objc_retain(0:class A *) [line 26]\n *&aStdRef:class A *=0 [line 26]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$9=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 29]\n *&aStrongRef:class A *=n$9 [line 29]\n " shape="box"] + "main10" -> "main9" ; +"main9" [label="9: BinaryOperatorStmt: Assign \n n$9=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 29]\n *&aStrongRef:class A *=n$9 [line 29]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$7=*&aStrongRef:class A * [line 31]\n _fun___objc_retain(n$7:class A *) [line 31]\n n$8=*&aStdRef:class A * [line 31]\n *&aStdRef:class A *=n$7 [line 31]\n _fun___objc_release(n$8:class A *) [line 31]\n " shape="box"] + "main9" -> "main8" ; +"main8" [label="8: BinaryOperatorStmt: Assign \n n$7=*&aStrongRef:class A * [line 31]\n _fun___objc_retain(n$7:class A *) [line 31]\n n$8=*&aStdRef:class A * [line 31]\n *&aStdRef:class A *=n$7 [line 31]\n _fun___objc_release(n$8:class A *) [line 31]\n " shape="box"] - 8 -> 7 ; -7 [label="7: BinaryOperatorStmt: Assign \n _fun___objc_retain(0:class A *) [line 33]\n n$6=*&aStrongRef:class A * [line 33]\n *&aStrongRef:class A *=0 [line 33]\n _fun___objc_release(n$6:class A *) [line 33]\n " shape="box"] + "main8" -> "main7" ; +"main7" [label="7: BinaryOperatorStmt: Assign \n _fun___objc_retain(0:class A *) [line 33]\n n$6=*&aStrongRef:class A * [line 33]\n *&aStrongRef:class A *=0 [line 33]\n _fun___objc_release(n$6:class A *) [line 33]\n " shape="box"] - 7 -> 6 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$4=*&aStdRef:class A * [line 35]\n _fun___objc_retain(n$4:class A *) [line 35]\n n$5=*&aWeakRef:class A * [line 35]\n *&aWeakRef:class A *=n$4 [line 35]\n _fun___objc_release(n$5:class A *) [line 35]\n " shape="box"] + "main7" -> "main6" ; +"main6" [label="6: BinaryOperatorStmt: Assign \n n$4=*&aStdRef:class A * [line 35]\n _fun___objc_retain(n$4:class A *) [line 35]\n n$5=*&aWeakRef:class A * [line 35]\n *&aWeakRef:class A *=n$4 [line 35]\n _fun___objc_release(n$5:class A *) [line 35]\n " shape="box"] - 6 -> 5 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$2=*&aStdRef:class A * [line 37]\n _fun___objc_retain(n$2:class A *) [line 37]\n n$3=*&anAutoRelRef:class A * [line 37]\n *&anAutoRelRef:class A *=n$2 [line 37]\n _fun___objc_release(n$3:class A *) [line 37]\n " shape="box"] + "main6" -> "main5" ; +"main5" [label="5: BinaryOperatorStmt: Assign \n n$2=*&aStdRef:class A * [line 37]\n _fun___objc_retain(n$2:class A *) [line 37]\n n$3=*&anAutoRelRef:class A * [line 37]\n *&anAutoRelRef:class A *=n$2 [line 37]\n _fun___objc_release(n$3:class A *) [line 37]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$0=*&aStdRef:class A * [line 39]\n _fun___objc_retain(n$0:class A *) [line 39]\n n$1=*&anUnsafeUnretRef:class A * [line 39]\n *&anUnsafeUnretRef:class A *=n$0 [line 39]\n _fun___objc_release(n$1:class A *) [line 39]\n " shape="box"] + "main5" -> "main4" ; +"main4" [label="4: BinaryOperatorStmt: Assign \n n$0=*&aStdRef:class A * [line 39]\n _fun___objc_retain(n$0:class A *) [line 39]\n n$1=*&anUnsafeUnretRef:class A * [line 39]\n *&anUnsafeUnretRef:class A *=n$0 [line 39]\n _fun___objc_release(n$1:class A *) [line 39]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 42]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 42]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: aStdRef:class A * anAutoRelRef:class A __autoreleasing * anUnsafeUnretRef:class A __unsafe_unretained * aStrongRef:class A * aWeakRef:class A __weak * \n DECLARE_LOCALS(&return,&aStdRef,&anAutoRelRef,&anUnsafeUnretRef,&aStrongRef,&aWeakRef); [line 20]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: aStdRef:class A * anAutoRelRef:class A __autoreleasing * anUnsafeUnretRef:class A __unsafe_unretained * aStrongRef:class A * aWeakRef:class A __weak * \n DECLARE_LOCALS(&return,&aStdRef,&anAutoRelRef,&anUnsafeUnretRef,&aStrongRef,&aWeakRef); [line 20]\n " color=yellow style=filled] - 1 -> 14 ; + "main1" -> "main14" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/types/testloop.m.dot b/infer/tests/codetoanalyze/objc/frontend/types/testloop.m.dot index 83a20972c..58a9c20d5 100644 --- a/infer/tests/codetoanalyze/objc/frontend/types/testloop.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/types/testloop.m.dot @@ -1,36 +1,36 @@ /* @generated */ digraph iCFG { -9 [label="9: DeclStmt \n *&#GB$__iPhoneVideoAdLayout.placeHolderWidth:float =244 [line 35]\n *&#GB$__iPhoneVideoAdLayout.placeHolderHeight:float =175 [line 35]\n *&#GB$__iPhoneVideoAdLayout.contentLeftSidePadding:float =20 [line 35]\n *&#GB$__iPhoneVideoAdLayout.contentRightSidePadding:float =20 [line 35]\n *&#GB$__iPhoneVideoAdLayout.additionalPlaceholderOffset:float =0 [line 35]\n *&#GB$__iPhoneVideoAdLayout.contentGap:float =7 [line 35]\n " shape="box"] +"FBScrollViewDelegateProxy_layoutToUse3" [label="3: Return Stmt \n n$0=*&#GB$__iPhoneVideoAdLayout:struct FBVideoAdLayout [line 45]\n *&return:struct FBVideoAdLayout =n$0 [line 45]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit __infer_globals_initializer___iPhoneVideoAdLayout \n " color=yellow style=filled] + "FBScrollViewDelegateProxy_layoutToUse3" -> "FBScrollViewDelegateProxy_layoutToUse2" ; +"FBScrollViewDelegateProxy_layoutToUse2" [label="2: Exit FBScrollViewDelegateProxy_layoutToUse \n " color=yellow style=filled] -7 [label="7: Start __infer_globals_initializer___iPhoneVideoAdLayout\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] +"FBScrollViewDelegateProxy_layoutToUse1" [label="1: Start FBScrollViewDelegateProxy_layoutToUse\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: DeclStmt \n *&#GB$__iPadVideoAdLayout.placeHolderWidth:float =554 [line 26]\n *&#GB$__iPadVideoAdLayout.placeHolderHeight:float =350 [line 26]\n *&#GB$__iPadVideoAdLayout.contentLeftSidePadding:float =140 [line 26]\n *&#GB$__iPadVideoAdLayout.contentRightSidePadding:float =60 [line 26]\n *&#GB$__iPadVideoAdLayout.additionalPlaceholderOffset:float =40 [line 26]\n *&#GB$__iPadVideoAdLayout.contentGap:float =11 [line 26]\n " shape="box"] + "FBScrollViewDelegateProxy_layoutToUse1" -> "FBScrollViewDelegateProxy_layoutToUse3" ; +"__infer_globals_initializer___iPhoneVideoAdLayout3" [label="3: DeclStmt \n *&#GB$__iPhoneVideoAdLayout.placeHolderWidth:float =244 [line 35]\n *&#GB$__iPhoneVideoAdLayout.placeHolderHeight:float =175 [line 35]\n *&#GB$__iPhoneVideoAdLayout.contentLeftSidePadding:float =20 [line 35]\n *&#GB$__iPhoneVideoAdLayout.contentRightSidePadding:float =20 [line 35]\n *&#GB$__iPhoneVideoAdLayout.additionalPlaceholderOffset:float =0 [line 35]\n *&#GB$__iPhoneVideoAdLayout.contentGap:float =7 [line 35]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit __infer_globals_initializer___iPadVideoAdLayout \n " color=yellow style=filled] + "__infer_globals_initializer___iPhoneVideoAdLayout3" -> "__infer_globals_initializer___iPhoneVideoAdLayout2" ; +"__infer_globals_initializer___iPhoneVideoAdLayout2" [label="2: Exit __infer_globals_initializer___iPhoneVideoAdLayout \n " color=yellow style=filled] -4 [label="4: Start __infer_globals_initializer___iPadVideoAdLayout\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"__infer_globals_initializer___iPhoneVideoAdLayout1" [label="1: Start __infer_globals_initializer___iPhoneVideoAdLayout\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=*&#GB$__iPhoneVideoAdLayout:struct FBVideoAdLayout [line 45]\n *&return:struct FBVideoAdLayout =n$0 [line 45]\n " shape="box"] + "__infer_globals_initializer___iPhoneVideoAdLayout1" -> "__infer_globals_initializer___iPhoneVideoAdLayout3" ; +"__infer_globals_initializer___iPadVideoAdLayout3" [label="3: DeclStmt \n *&#GB$__iPadVideoAdLayout.placeHolderWidth:float =554 [line 26]\n *&#GB$__iPadVideoAdLayout.placeHolderHeight:float =350 [line 26]\n *&#GB$__iPadVideoAdLayout.contentLeftSidePadding:float =140 [line 26]\n *&#GB$__iPadVideoAdLayout.contentRightSidePadding:float =60 [line 26]\n *&#GB$__iPadVideoAdLayout.additionalPlaceholderOffset:float =40 [line 26]\n *&#GB$__iPadVideoAdLayout.contentGap:float =11 [line 26]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit FBScrollViewDelegateProxy_layoutToUse \n " color=yellow style=filled] + "__infer_globals_initializer___iPadVideoAdLayout3" -> "__infer_globals_initializer___iPadVideoAdLayout2" ; +"__infer_globals_initializer___iPadVideoAdLayout2" [label="2: Exit __infer_globals_initializer___iPadVideoAdLayout \n " color=yellow style=filled] -1 [label="1: Start FBScrollViewDelegateProxy_layoutToUse\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] +"__infer_globals_initializer___iPadVideoAdLayout1" [label="1: Start __infer_globals_initializer___iPadVideoAdLayout\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 1 -> 3 ; + "__infer_globals_initializer___iPadVideoAdLayout1" -> "__infer_globals_initializer___iPadVideoAdLayout3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/types/void_call.m.dot b/infer/tests/codetoanalyze/objc/frontend/types/void_call.m.dot index 34ca109b2..aa95a1dd9 100644 --- a/infer/tests/codetoanalyze/objc/frontend/types/void_call.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/types/void_call.m.dot @@ -1,95 +1,95 @@ /* @generated */ digraph iCFG { -24 [label="24: DeclStmt \n *&x:int =1 [line 35]\n " shape="box"] +"bar13" [label="3: Return Stmt \n n$0=*&a:int [line 31]\n *&a:int =(n$0 + 1) [line 31]\n *&return:int =n$0 [line 31]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Call _fun_foo1 \n n$9=*&x:int [line 36]\n _fun_foo1(n$9:int ) [line 36]\n " shape="box"] + "bar13" -> "bar12" ; +"bar12" [label="2: Exit bar1 \n " color=yellow style=filled] - 23 -> 22 ; -22 [label="22: BinaryOperatorStmt: Assign \n n$7=*&x:int [line 38]\n n$8=_fun_bar1(n$7:int ) [line 38]\n *&x:int =n$8 [line 38]\n " shape="box"] +"bar11" [label="1: Start bar1\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: DeclStmt \n n$6=_fun___objc_alloc_no_fail(sizeof(class AClass ):unsigned long ) [line 40]\n *&o:class AClass *=n$6 [line 40]\n " shape="box"] + "bar11" -> "bar13" ; +"foo13" [label="3: UnaryOperator \n n$0=*&a:int [line 29]\n *&a:int =(n$0 + 1) [line 29]\n " shape="box"] - 21 -> 17 ; - 21 -> 18 ; -20 [label="20: Message Call: foo: \n n$4=*&o:class AClass * [line 44]\n n$5=*&x:int [line 44]\n _fun_AClass_foo:(n$4:class AClass *,n$5:int ) virtual [line 44]\n " shape="box"] + "foo13" -> "foo12" ; +"foo12" [label="2: Exit foo1 \n " color=yellow style=filled] - 20 -> 19 ; -19 [label="19: BinaryOperatorStmt: Assign \n n$1=*&o:class AClass * [line 45]\n n$2=*&x:int [line 45]\n n$3=_fun_AClass_bar:(n$1:class AClass *,n$2:int ) virtual [line 45]\n *&x:int =n$3 [line 45]\n " shape="box"] +"foo11" [label="1: Start foo1\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] - 19 -> 16 ; -18 [label="18: Prune (false branch) \n n$0=*&o:class AClass * [line 42]\n PRUNE((n$0 == 0), false); [line 42]\n " shape="invhouse"] + "foo11" -> "foo13" ; +"main12" [label="12: DeclStmt \n *&x:int =1 [line 35]\n " shape="box"] - 18 -> 16 ; -17 [label="17: Prune (true branch) \n n$0=*&o:class AClass * [line 42]\n PRUNE((n$0 != 0), true); [line 42]\n " shape="invhouse"] + "main12" -> "main11" ; +"main11" [label="11: Call _fun_foo1 \n n$9=*&x:int [line 36]\n _fun_foo1(n$9:int ) [line 36]\n " shape="box"] - 17 -> 20 ; -16 [label="16: + \n " ] + "main11" -> "main10" ; +"main10" [label="10: BinaryOperatorStmt: Assign \n n$7=*&x:int [line 38]\n n$8=_fun_bar1(n$7:int ) [line 38]\n *&x:int =n$8 [line 38]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Return Stmt \n *&return:int =0 [line 48]\n " shape="box"] + "main10" -> "main9" ; +"main9" [label="9: DeclStmt \n n$6=_fun___objc_alloc_no_fail(sizeof(class AClass ):unsigned long ) [line 40]\n *&o:class AClass *=n$6 [line 40]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit main \n " color=yellow style=filled] + "main9" -> "main5" ; + "main9" -> "main6" ; +"main8" [label="8: Message Call: foo: \n n$4=*&o:class AClass * [line 44]\n n$5=*&x:int [line 44]\n _fun_AClass_foo:(n$4:class AClass *,n$5:int ) virtual [line 44]\n " shape="box"] -13 [label="13: Start main\nFormals: \nLocals: o:class AClass * x:int \n DECLARE_LOCALS(&return,&o,&x); [line 33]\n " color=yellow style=filled] + "main8" -> "main7" ; +"main7" [label="7: BinaryOperatorStmt: Assign \n n$1=*&o:class AClass * [line 45]\n n$2=*&x:int [line 45]\n n$3=_fun_AClass_bar:(n$1:class AClass *,n$2:int ) virtual [line 45]\n *&x:int =n$3 [line 45]\n " shape="box"] - 13 -> 24 ; -12 [label="12: Return Stmt \n n$0=*&a:int [line 31]\n *&a:int =(n$0 + 1) [line 31]\n *&return:int =n$0 [line 31]\n " shape="box"] + "main7" -> "main4" ; +"main6" [label="6: Prune (false branch) \n n$0=*&o:class AClass * [line 42]\n PRUNE((n$0 == 0), false); [line 42]\n " shape="invhouse"] - 12 -> 11 ; -11 [label="11: Exit bar1 \n " color=yellow style=filled] + "main6" -> "main4" ; +"main5" [label="5: Prune (true branch) \n n$0=*&o:class AClass * [line 42]\n PRUNE((n$0 != 0), true); [line 42]\n " shape="invhouse"] -10 [label="10: Start bar1\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] + "main5" -> "main8" ; +"main4" [label="4: + \n " ] - 10 -> 12 ; -9 [label="9: UnaryOperator \n n$0=*&a:int [line 29]\n *&a:int =(n$0 + 1) [line 29]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: Return Stmt \n *&return:int =0 [line 48]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit foo1 \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -7 [label="7: Start foo1\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: o:class AClass * x:int \n DECLARE_LOCALS(&return,&o,&x); [line 33]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Return Stmt \n n$1=*&a:int [line 24]\n *&a:int =(n$1 + 1) [line 24]\n *&return:int =n$1 [line 24]\n " shape="box"] + "main1" -> "main12" ; +"AClass_bar:3" [label="3: Return Stmt \n n$1=*&a:int [line 24]\n *&a:int =(n$1 + 1) [line 24]\n *&return:int =n$1 [line 24]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit AClass_bar: \n " color=yellow style=filled] + "AClass_bar:3" -> "AClass_bar:2" ; +"AClass_bar:2" [label="2: Exit AClass_bar: \n " color=yellow style=filled] -4 [label="4: Start AClass_bar:\nFormals: self:class AClass * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] +"AClass_bar:1" [label="1: Start AClass_bar:\nFormals: self:class AClass * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: UnaryOperator \n n$0=*&a:int [line 21]\n *&a:int =(n$0 + 1) [line 21]\n " shape="box"] + "AClass_bar:1" -> "AClass_bar:3" ; +"AClass_foo:3" [label="3: UnaryOperator \n n$0=*&a:int [line 21]\n *&a:int =(n$0 + 1) [line 21]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit AClass_foo: \n " color=yellow style=filled] + "AClass_foo:3" -> "AClass_foo:2" ; +"AClass_foo:2" [label="2: Exit AClass_foo: \n " color=yellow style=filled] -1 [label="1: Start AClass_foo:\nFormals: self:class AClass * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +"AClass_foo:1" [label="1: Start AClass_foo:\nFormals: self:class AClass * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 1 -> 3 ; + "AClass_foo:1" -> "AClass_foo:3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass.m.dot b/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass.m.dot index 2a6db5df3..ce818aa1e 100644 --- a/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass.m.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: Return Stmt \n n$0=*&#GB$aVariable:class NSObject * [line 21]\n *&return:class NSObject *=n$0 [line 21]\n " shape="box"] +"AClass_sharedInstance3" [label="3: Return Stmt \n n$0=*&#GB$aVariable:class NSObject * [line 21]\n *&return:class NSObject *=n$0 [line 21]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit AClass_sharedInstance \n " color=yellow style=filled] + "AClass_sharedInstance3" -> "AClass_sharedInstance2" ; +"AClass_sharedInstance2" [label="2: Exit AClass_sharedInstance \n " color=yellow style=filled] -1 [label="1: Start AClass_sharedInstance\nFormals: self:class AClass *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +"AClass_sharedInstance1" [label="1: Start AClass_sharedInstance\nFormals: self:class AClass *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 1 -> 3 ; + "AClass_sharedInstance1" -> "AClass_sharedInstance3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass_2.m.dot b/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass_2.m.dot index 1521f025d..fcba036f0 100644 --- a/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass_2.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass_2.m.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -3 [label="3: Return Stmt \n n$0=*&#GB$aVariable:class NSObject * [line 21]\n *&return:class NSObject *=n$0 [line 21]\n " shape="box"] +"AClass_sharedInstance3" [label="3: Return Stmt \n n$0=*&#GB$aVariable:class NSObject * [line 21]\n *&return:class NSObject *=n$0 [line 21]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit AClass_sharedInstance \n " color=yellow style=filled] + "AClass_sharedInstance3" -> "AClass_sharedInstance2" ; +"AClass_sharedInstance2" [label="2: Exit AClass_sharedInstance \n " color=yellow style=filled] -1 [label="1: Start AClass_sharedInstance\nFormals: self:class AClass *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +"AClass_sharedInstance1" [label="1: Start AClass_sharedInstance\nFormals: self:class AClass *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 1 -> 3 ; + "AClass_sharedInstance1" -> "AClass_sharedInstance3" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/vardecl/initlist.m.dot b/infer/tests/codetoanalyze/objc/frontend/vardecl/initlist.m.dot index 44b42c8e1..d10fd5968 100644 --- a/infer/tests/codetoanalyze/objc/frontend/vardecl/initlist.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/vardecl/initlist.m.dot @@ -1,33 +1,33 @@ /* @generated */ digraph iCFG { -8 [label="8: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class C ):unsigned long ) [line 22]\n *&c1:class C *=n$5 [line 22]\n " shape="box"] +"main3" [label="3: DeclStmt \n n$0=*&z:int [line 14]\n *&a[0][0]:int =(n$0 + 1) [line 14]\n *&a[0][1]:int =2 [line 14]\n *&a[0][2]:int =3 [line 14]\n *&a[1][0]:int =5 [line 14]\n *&a[1][1]:int =6 [line 14]\n *&a[1][2]:int =7 [line 14]\n " shape="box"] - 8 -> 7 ; -7 [label="7: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class C ):unsigned long ) [line 23]\n *&c2:class C *=n$4 [line 23]\n " shape="box"] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: DeclStmt \n n$2=*&c1:class C * [line 24]\n n$3=_fun_NSObject_init(n$2:class C *) virtual [line 24]\n n$1=*&c1:class C * [line 24]\n n$0=*&c2:class C * [line 24]\n *&a[0]:class C *=n$3 [line 24]\n *&a[1]:class C *=n$1 [line 24]\n *&a[2]:class C *=n$0 [line 24]\n " shape="box"] +"main1" [label="1: Start main\nFormals: \nLocals: a:int [2][3] z:int \n DECLARE_LOCALS(&return,&a,&z); [line 12]\n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit test \n " color=yellow style=filled] + "main1" -> "main3" ; +"test5" [label="5: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class C ):unsigned long ) [line 22]\n *&c1:class C *=n$5 [line 22]\n " shape="box"] -4 [label="4: Start test\nFormals: \nLocals: a:class C *[3] c2:class C * c1:class C * \n DECLARE_LOCALS(&return,&a,&c2,&c1); [line 21]\n " color=yellow style=filled] + "test5" -> "test4" ; +"test4" [label="4: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class C ):unsigned long ) [line 23]\n *&c2:class C *=n$4 [line 23]\n " shape="box"] - 4 -> 8 ; -3 [label="3: DeclStmt \n n$0=*&z:int [line 14]\n *&a[0][0]:int =(n$0 + 1) [line 14]\n *&a[0][1]:int =2 [line 14]\n *&a[0][2]:int =3 [line 14]\n *&a[1][0]:int =5 [line 14]\n *&a[1][1]:int =6 [line 14]\n *&a[1][2]:int =7 [line 14]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: DeclStmt \n n$2=*&c1:class C * [line 24]\n n$3=_fun_NSObject_init(n$2:class C *) virtual [line 24]\n n$1=*&c1:class C * [line 24]\n n$0=*&c2:class C * [line 24]\n *&a[0]:class C *=n$3 [line 24]\n *&a[1]:class C *=n$1 [line 24]\n *&a[2]:class C *=n$0 [line 24]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: a:int [2][3] z:int \n DECLARE_LOCALS(&return,&a,&z); [line 12]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: \nLocals: a:class C *[3] c2:class C * c1:class C * \n DECLARE_LOCALS(&return,&a,&c2,&c1); [line 21]\n " color=yellow style=filled] - 1 -> 3 ; + "test1" -> "test5" ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/vardecl/last_af.m.dot b/infer/tests/codetoanalyze/objc/frontend/vardecl/last_af.m.dot index 518b7b762..419f35133 100644 --- a/infer/tests/codetoanalyze/objc/frontend/vardecl/last_af.m.dot +++ b/infer/tests/codetoanalyze/objc/frontend/vardecl/last_af.m.dot @@ -1,18 +1,18 @@ /* @generated */ digraph iCFG { -4 [label="4: DeclStmt \n *&a:int =0 [line 10]\n " shape="box"] +"main4" [label="4: DeclStmt \n *&a:int =0 [line 10]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n n$0=*&a:int [line 10]\n *&b:int =(n$0 + 2) [line 10]\n " shape="box"] + "main4" -> "main3" ; +"main3" [label="3: DeclStmt \n n$0=*&a:int [line 10]\n *&b:int =(n$0 + 2) [line 10]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + "main3" -> "main2" ; +"main2" [label="2: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: b:int a:int \n DECLARE_LOCALS(&return,&b,&a); [line 10]\n " color=yellow style=filled] +"main1" [label="1: Start main\nFormals: \nLocals: b:int a:int \n DECLARE_LOCALS(&return,&b,&a); [line 10]\n " color=yellow style=filled] - 1 -> 4 ; + "main1" -> "main4" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/assertions/NSAssert_example.m.dot b/infer/tests/codetoanalyze/objc/shared/assertions/NSAssert_example.m.dot index 2fcde68a3..00591b1fb 100644 --- a/infer/tests/codetoanalyze/objc/shared/assertions/NSAssert_example.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/assertions/NSAssert_example.m.dot @@ -1,437 +1,437 @@ /* @generated */ digraph iCFG { -105 [label="105: DeclStmt \n n$23=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n _fun___objc_retain(n$23:class NSString *) [line 36]\n *&__assert_fn__:class NSString *=n$23 [line 36]\n " shape="box"] +"NSAssert_initWithRequest:23" [label="23: DeclStmt \n n$33=_fun_NSString_stringWithUTF8String:(\"shared/assertions/NSAssert_example.m\":char *) [line 24]\n _fun___objc_retain(n$33:class NSString *) [line 24]\n *&__assert_file__:class NSString *=n$33 [line 24]\n " shape="box"] - 105 -> 100 ; - 105 -> 101 ; -104 [label="104: BinaryOperatorStmt: Assign \n n$21=*&0$?%__sil_tmpSIL_temp_conditional___n$17:class NSString * [line 36]\n _fun___objc_retain(n$21:class NSString *) [line 36]\n n$22=*&__assert_fn__:class NSString * [line 36]\n *&__assert_fn__:class NSString *=n$21 [line 36]\n _fun___objc_release(n$22:class NSString *) [line 36]\n " shape="box"] + "NSAssert_initWithRequest:23" -> "NSAssert_initWithRequest:18" ; + "NSAssert_initWithRequest:23" -> "NSAssert_initWithRequest:19" ; +"NSAssert_initWithRequest:22" [label="22: BinaryOperatorStmt: Assign \n n$31=*&0$?%__sil_tmpSIL_temp_conditional___n$27:class NSString * [line 24]\n _fun___objc_retain(n$31:class NSString *) [line 24]\n n$32=*&__assert_file__:class NSString * [line 24]\n *&__assert_file__:class NSString *=n$31 [line 24]\n _fun___objc_release(n$32:class NSString *) [line 24]\n " shape="box"] - 104 -> 98 ; -103 [label="103: ConditinalStmt Branch \n n$20=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n *&0$?%__sil_tmpSIL_temp_conditional___n$17:class NSString *=n$20 [line 36]\n " shape="box"] + "NSAssert_initWithRequest:22" -> "NSAssert_initWithRequest:16" ; +"NSAssert_initWithRequest:21" [label="21: ConditinalStmt Branch \n n$30=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$27:class NSString *=n$30 [line 24]\n " shape="box"] - 103 -> 99 ; -102 [label="102: ConditinalStmt Branch \n n$19=*&__assert_fn__:class NSString * [line 36]\n *&0$?%__sil_tmpSIL_temp_conditional___n$17:class NSString *=n$19 [line 36]\n " shape="box"] + "NSAssert_initWithRequest:21" -> "NSAssert_initWithRequest:17" ; +"NSAssert_initWithRequest:20" [label="20: ConditinalStmt Branch \n n$29=*&__assert_file__:class NSString * [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$27:class NSString *=n$29 [line 24]\n " shape="box"] - 102 -> 99 ; -101 [label="101: Prune (false branch) \n n$18=*&__assert_fn__:class NSString * [line 36]\n PRUNE((n$18 == 0), false); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:20" -> "NSAssert_initWithRequest:17" ; +"NSAssert_initWithRequest:19" [label="19: Prune (false branch) \n n$28=*&__assert_file__:class NSString * [line 24]\n PRUNE((n$28 == 0), false); [line 24]\n " shape="invhouse"] - 101 -> 103 ; -100 [label="100: Prune (true branch) \n n$18=*&__assert_fn__:class NSString * [line 36]\n PRUNE((n$18 != 0), true); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:19" -> "NSAssert_initWithRequest:21" ; +"NSAssert_initWithRequest:18" [label="18: Prune (true branch) \n n$28=*&__assert_file__:class NSString * [line 24]\n PRUNE((n$28 != 0), true); [line 24]\n " shape="invhouse"] - 100 -> 102 ; -99 [label="99: + \n " ] + "NSAssert_initWithRequest:18" -> "NSAssert_initWithRequest:20" ; +"NSAssert_initWithRequest:17" [label="17: + \n " ] - 99 -> 104 ; -98 [label="98: DeclStmt \n n$16=_fun_NSString_stringWithUTF8String:(\"shared/assertions/NSAssert_example.m\":char *) [line 36]\n _fun___objc_retain(n$16:class NSString *) [line 36]\n *&__assert_file__:class NSString *=n$16 [line 36]\n " shape="box"] + "NSAssert_initWithRequest:17" -> "NSAssert_initWithRequest:22" ; +"NSAssert_initWithRequest:16" [label="16: Prune (true branch) \n PRUNE(0, true); [line 24]\n " shape="invhouse"] - 98 -> 93 ; - 98 -> 94 ; -97 [label="97: BinaryOperatorStmt: Assign \n n$14=*&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString * [line 36]\n _fun___objc_retain(n$14:class NSString *) [line 36]\n n$15=*&__assert_file__:class NSString * [line 36]\n *&__assert_file__:class NSString *=n$14 [line 36]\n _fun___objc_release(n$15:class NSString *) [line 36]\n " shape="box"] + "NSAssert_initWithRequest:16" -> "NSAssert_initWithRequest:7" ; +"NSAssert_initWithRequest:15" [label="15: Prune (false branch) \n n$21=*&0$?%__sil_tmpSIL_temp_conditional___n$19:int [line 24]\n PRUNE((n$21 == 0), false); [line 24]\n " shape="invhouse"] - 97 -> 91 ; -96 [label="96: ConditinalStmt Branch \n n$13=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString *=n$13 [line 36]\n " shape="box"] + "NSAssert_initWithRequest:15" -> "NSAssert_initWithRequest:7" ; +"NSAssert_initWithRequest:14" [label="14: Prune (true branch) \n n$21=*&0$?%__sil_tmpSIL_temp_conditional___n$19:int [line 24]\n PRUNE((n$21 != 0), true); [line 24]\n " shape="invhouse"] - 96 -> 92 ; -95 [label="95: ConditinalStmt Branch \n n$12=*&__assert_file__:class NSString * [line 36]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString *=n$12 [line 36]\n " shape="box"] + "NSAssert_initWithRequest:14" -> "NSAssert_initWithRequest:23" ; +"NSAssert_initWithRequest:13" [label="13: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$19:int =1 [line 24]\n " shape="box"] - 95 -> 92 ; -94 [label="94: Prune (false branch) \n n$11=*&__assert_file__:class NSString * [line 36]\n PRUNE((n$11 == 0), false); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:13" -> "NSAssert_initWithRequest:8" ; +"NSAssert_initWithRequest:12" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$19:int =0 [line 24]\n " shape="box"] - 94 -> 96 ; -93 [label="93: Prune (true branch) \n n$11=*&__assert_file__:class NSString * [line 36]\n PRUNE((n$11 != 0), true); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:12" -> "NSAssert_initWithRequest:8" ; +"NSAssert_initWithRequest:11" [label="11: Prune (false branch) \n PRUNE(((n$20 != 0) == 0), false); [line 24]\n " shape="invhouse"] - 93 -> 95 ; -92 [label="92: + \n " ] + "NSAssert_initWithRequest:11" -> "NSAssert_initWithRequest:13" ; +"NSAssert_initWithRequest:10" [label="10: Prune (true branch) \n PRUNE(((n$20 != 0) != 0), true); [line 24]\n " shape="invhouse"] - 92 -> 97 ; -91 [label="91: Prune (true branch) \n PRUNE(0, true); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:10" -> "NSAssert_initWithRequest:12" ; +"NSAssert_initWithRequest:9" [label="9: BinaryOperatorStmt: NE \n n$20=*&a:class NSAssert * [line 24]\n " shape="box"] - 91 -> 83 ; -90 [label="90: Prune (false branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 36]\n PRUNE((n$4 == 0), false); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:9" -> "NSAssert_initWithRequest:10" ; + "NSAssert_initWithRequest:9" -> "NSAssert_initWithRequest:11" ; +"NSAssert_initWithRequest:8" [label="8: + \n " ] - 90 -> 83 ; -89 [label="89: Prune (true branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 36]\n PRUNE((n$4 != 0), true); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:8" -> "NSAssert_initWithRequest:14" ; + "NSAssert_initWithRequest:8" -> "NSAssert_initWithRequest:15" ; +"NSAssert_initWithRequest:7" [label="7: + \n " ] - 89 -> 105 ; -88 [label="88: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 36]\n " shape="box"] + "NSAssert_initWithRequest:7" -> "NSAssert_initWithRequest:5" ; + "NSAssert_initWithRequest:7" -> "NSAssert_initWithRequest:6" ; +"NSAssert_initWithRequest:6" [label="6: Prune (false branch) \n PRUNE((0 == 0), false); [line 24]\n " shape="invhouse"] - 88 -> 84 ; -87 [label="87: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =0 [line 36]\n " shape="box"] + "NSAssert_initWithRequest:6" -> "NSAssert_initWithRequest:3" ; +"NSAssert_initWithRequest:5" [label="5: Prune (true branch) \n PRUNE((0 != 0), true); [line 24]\n " shape="invhouse"] - 87 -> 84 ; -86 [label="86: Prune (false branch) \n n$3=*&target:class NSAssert * [line 36]\n PRUNE((n$3 == 0), false); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:5" -> "NSAssert_initWithRequest:4" ; +"NSAssert_initWithRequest:4" [label="4: + \n " ] - 86 -> 88 ; -85 [label="85: Prune (true branch) \n n$3=*&target:class NSAssert * [line 36]\n PRUNE((n$3 != 0), true); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:4" -> "NSAssert_initWithRequest:9" ; +"NSAssert_initWithRequest:3" [label="3: Return Stmt \n n$17=*&a:class NSAssert * [line 25]\n n$18=_fun_NSAssert_x(n$17:class NSAssert *) [line 25]\n *&return:int =n$18 [line 25]\n " shape="box"] - 85 -> 87 ; -84 [label="84: + \n " ] + "NSAssert_initWithRequest:3" -> "NSAssert_initWithRequest:2" ; +"NSAssert_initWithRequest:2" [label="2: Exit NSAssert_initWithRequest: \n " color=yellow style=filled] - 84 -> 89 ; - 84 -> 90 ; -83 [label="83: + \n " ] +"NSAssert_initWithRequest:1" [label="1: Start NSAssert_initWithRequest:\nFormals: self:class NSAssert * a:class NSAssert *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$19:int 0$?%__sil_tmpSIL_temp_conditional___n$27:class NSString * __assert_file__:class NSString * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$19,&0$?%__sil_tmpSIL_temp_conditional___n$27,&__assert_file__); [line 23]\n " color=yellow style=filled] - 83 -> 81 ; - 83 -> 82 ; -82 [label="82: Prune (false branch) \n PRUNE((0 == 0), false); [line 36]\n " shape="invhouse"] + "NSAssert_initWithRequest:1" -> "NSAssert_initWithRequest:4" ; +"test229" [label="29: DeclStmt \n n$23=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n _fun___objc_retain(n$23:class NSString *) [line 36]\n *&__assert_fn__:class NSString *=n$23 [line 36]\n " shape="box"] - 82 -> 79 ; -81 [label="81: Prune (true branch) \n PRUNE((0 != 0), true); [line 36]\n " shape="invhouse"] + "test229" -> "test224" ; + "test229" -> "test225" ; +"test228" [label="28: BinaryOperatorStmt: Assign \n n$21=*&0$?%__sil_tmpSIL_temp_conditional___n$17:class NSString * [line 36]\n _fun___objc_retain(n$21:class NSString *) [line 36]\n n$22=*&__assert_fn__:class NSString * [line 36]\n *&__assert_fn__:class NSString *=n$21 [line 36]\n _fun___objc_release(n$22:class NSString *) [line 36]\n " shape="box"] - 81 -> 80 ; -80 [label="80: + \n " ] + "test228" -> "test222" ; +"test227" [label="27: ConditinalStmt Branch \n n$20=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n *&0$?%__sil_tmpSIL_temp_conditional___n$17:class NSString *=n$20 [line 36]\n " shape="box"] - 80 -> 85 ; - 80 -> 86 ; -79 [label="79: Return Stmt \n n$0=*&target:class NSAssert * [line 37]\n n$1=_fun_NSAssert_x(n$0:class NSAssert *) [line 37]\n *&return:int =n$1 [line 37]\n " shape="box"] + "test227" -> "test223" ; +"test226" [label="26: ConditinalStmt Branch \n n$19=*&__assert_fn__:class NSString * [line 36]\n *&0$?%__sil_tmpSIL_temp_conditional___n$17:class NSString *=n$19 [line 36]\n " shape="box"] - 79 -> 78 ; -78 [label="78: Exit test2 \n " color=yellow style=filled] + "test226" -> "test223" ; +"test225" [label="25: Prune (false branch) \n n$18=*&__assert_fn__:class NSString * [line 36]\n PRUNE((n$18 == 0), false); [line 36]\n " shape="invhouse"] -77 [label="77: Start test2\nFormals: target:class NSAssert *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString * __assert_file__:class NSString * 0$?%__sil_tmpSIL_temp_conditional___n$17:class NSString * __assert_fn__:class NSString * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$10,&__assert_file__,&0$?%__sil_tmpSIL_temp_conditional___n$17,&__assert_fn__); [line 35]\n " color=yellow style=filled] + "test225" -> "test227" ; +"test224" [label="24: Prune (true branch) \n n$18=*&__assert_fn__:class NSString * [line 36]\n PRUNE((n$18 != 0), true); [line 36]\n " shape="invhouse"] - 77 -> 80 ; -76 [label="76: DeclStmt \n n$22=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n _fun___objc_retain(n$22:class NSString *) [line 31]\n *&__assert_fn__:class NSString *=n$22 [line 31]\n " shape="box"] + "test224" -> "test226" ; +"test223" [label="23: + \n " ] - 76 -> 71 ; - 76 -> 72 ; -75 [label="75: BinaryOperatorStmt: Assign \n n$20=*&0$?%__sil_tmpSIL_temp_conditional___n$16:class NSString * [line 31]\n _fun___objc_retain(n$20:class NSString *) [line 31]\n n$21=*&__assert_fn__:class NSString * [line 31]\n *&__assert_fn__:class NSString *=n$20 [line 31]\n _fun___objc_release(n$21:class NSString *) [line 31]\n " shape="box"] + "test223" -> "test228" ; +"test222" [label="22: DeclStmt \n n$16=_fun_NSString_stringWithUTF8String:(\"shared/assertions/NSAssert_example.m\":char *) [line 36]\n _fun___objc_retain(n$16:class NSString *) [line 36]\n *&__assert_file__:class NSString *=n$16 [line 36]\n " shape="box"] - 75 -> 69 ; -74 [label="74: ConditinalStmt Branch \n n$19=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$16:class NSString *=n$19 [line 31]\n " shape="box"] + "test222" -> "test217" ; + "test222" -> "test218" ; +"test221" [label="21: BinaryOperatorStmt: Assign \n n$14=*&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString * [line 36]\n _fun___objc_retain(n$14:class NSString *) [line 36]\n n$15=*&__assert_file__:class NSString * [line 36]\n *&__assert_file__:class NSString *=n$14 [line 36]\n _fun___objc_release(n$15:class NSString *) [line 36]\n " shape="box"] - 74 -> 70 ; -73 [label="73: ConditinalStmt Branch \n n$18=*&__assert_fn__:class NSString * [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$16:class NSString *=n$18 [line 31]\n " shape="box"] + "test221" -> "test215" ; +"test220" [label="20: ConditinalStmt Branch \n n$13=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString *=n$13 [line 36]\n " shape="box"] - 73 -> 70 ; -72 [label="72: Prune (false branch) \n n$17=*&__assert_fn__:class NSString * [line 31]\n PRUNE((n$17 == 0), false); [line 31]\n " shape="invhouse"] + "test220" -> "test216" ; +"test219" [label="19: ConditinalStmt Branch \n n$12=*&__assert_file__:class NSString * [line 36]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString *=n$12 [line 36]\n " shape="box"] - 72 -> 74 ; -71 [label="71: Prune (true branch) \n n$17=*&__assert_fn__:class NSString * [line 31]\n PRUNE((n$17 != 0), true); [line 31]\n " shape="invhouse"] + "test219" -> "test216" ; +"test218" [label="18: Prune (false branch) \n n$11=*&__assert_file__:class NSString * [line 36]\n PRUNE((n$11 == 0), false); [line 36]\n " shape="invhouse"] - 71 -> 73 ; -70 [label="70: + \n " ] + "test218" -> "test220" ; +"test217" [label="17: Prune (true branch) \n n$11=*&__assert_file__:class NSString * [line 36]\n PRUNE((n$11 != 0), true); [line 36]\n " shape="invhouse"] - 70 -> 75 ; -69 [label="69: DeclStmt \n n$15=_fun_NSString_stringWithUTF8String:(\"shared/assertions/NSAssert_example.m\":char *) [line 31]\n _fun___objc_retain(n$15:class NSString *) [line 31]\n *&__assert_file__:class NSString *=n$15 [line 31]\n " shape="box"] + "test217" -> "test219" ; +"test216" [label="16: + \n " ] - 69 -> 64 ; - 69 -> 65 ; -68 [label="68: BinaryOperatorStmt: Assign \n n$13=*&0$?%__sil_tmpSIL_temp_conditional___n$9:class NSString * [line 31]\n _fun___objc_retain(n$13:class NSString *) [line 31]\n n$14=*&__assert_file__:class NSString * [line 31]\n *&__assert_file__:class NSString *=n$13 [line 31]\n _fun___objc_release(n$14:class NSString *) [line 31]\n " shape="box"] + "test216" -> "test221" ; +"test215" [label="15: Prune (true branch) \n PRUNE(0, true); [line 36]\n " shape="invhouse"] - 68 -> 62 ; -67 [label="67: ConditinalStmt Branch \n n$12=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$9:class NSString *=n$12 [line 31]\n " shape="box"] + "test215" -> "test27" ; +"test214" [label="14: Prune (false branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 36]\n PRUNE((n$4 == 0), false); [line 36]\n " shape="invhouse"] - 67 -> 63 ; -66 [label="66: ConditinalStmt Branch \n n$11=*&__assert_file__:class NSString * [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$9:class NSString *=n$11 [line 31]\n " shape="box"] + "test214" -> "test27" ; +"test213" [label="13: Prune (true branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 36]\n PRUNE((n$4 != 0), true); [line 36]\n " shape="invhouse"] - 66 -> 63 ; -65 [label="65: Prune (false branch) \n n$10=*&__assert_file__:class NSString * [line 31]\n PRUNE((n$10 == 0), false); [line 31]\n " shape="invhouse"] + "test213" -> "test229" ; +"test212" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 36]\n " shape="box"] - 65 -> 67 ; -64 [label="64: Prune (true branch) \n n$10=*&__assert_file__:class NSString * [line 31]\n PRUNE((n$10 != 0), true); [line 31]\n " shape="invhouse"] + "test212" -> "test28" ; +"test211" [label="11: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =0 [line 36]\n " shape="box"] - 64 -> 66 ; -63 [label="63: + \n " ] + "test211" -> "test28" ; +"test210" [label="10: Prune (false branch) \n n$3=*&target:class NSAssert * [line 36]\n PRUNE((n$3 == 0), false); [line 36]\n " shape="invhouse"] - 63 -> 68 ; -62 [label="62: Prune (true branch) \n PRUNE(0, true); [line 31]\n " shape="invhouse"] + "test210" -> "test212" ; +"test29" [label="9: Prune (true branch) \n n$3=*&target:class NSAssert * [line 36]\n PRUNE((n$3 != 0), true); [line 36]\n " shape="invhouse"] - 62 -> 53 ; -61 [label="61: Prune (false branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 31]\n PRUNE((n$4 == 0), false); [line 31]\n " shape="invhouse"] + "test29" -> "test211" ; +"test28" [label="8: + \n " ] - 61 -> 53 ; -60 [label="60: Prune (true branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 31]\n PRUNE((n$4 != 0), true); [line 31]\n " shape="invhouse"] + "test28" -> "test213" ; + "test28" -> "test214" ; +"test27" [label="7: + \n " ] - 60 -> 76 ; -59 [label="59: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 31]\n " shape="box"] + "test27" -> "test25" ; + "test27" -> "test26" ; +"test26" [label="6: Prune (false branch) \n PRUNE((0 == 0), false); [line 36]\n " shape="invhouse"] - 59 -> 54 ; -58 [label="58: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =0 [line 31]\n " shape="box"] + "test26" -> "test23" ; +"test25" [label="5: Prune (true branch) \n PRUNE((0 != 0), true); [line 36]\n " shape="invhouse"] - 58 -> 54 ; -57 [label="57: Prune (false branch) \n PRUNE(((n$3 != 0) == 0), false); [line 31]\n " shape="invhouse"] + "test25" -> "test24" ; +"test24" [label="4: + \n " ] - 57 -> 59 ; -56 [label="56: Prune (true branch) \n PRUNE(((n$3 != 0) != 0), true); [line 31]\n " shape="invhouse"] + "test24" -> "test29" ; + "test24" -> "test210" ; +"test23" [label="3: Return Stmt \n n$0=*&target:class NSAssert * [line 37]\n n$1=_fun_NSAssert_x(n$0:class NSAssert *) [line 37]\n *&return:int =n$1 [line 37]\n " shape="box"] - 56 -> 58 ; -55 [label="55: BinaryOperatorStmt: NE \n n$3=*&target:class NSAssert * [line 31]\n " shape="box"] + "test23" -> "test22" ; +"test22" [label="2: Exit test2 \n " color=yellow style=filled] - 55 -> 56 ; - 55 -> 57 ; -54 [label="54: + \n " ] +"test21" [label="1: Start test2\nFormals: target:class NSAssert *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString * __assert_file__:class NSString * 0$?%__sil_tmpSIL_temp_conditional___n$17:class NSString * __assert_fn__:class NSString * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$10,&__assert_file__,&0$?%__sil_tmpSIL_temp_conditional___n$17,&__assert_fn__); [line 35]\n " color=yellow style=filled] - 54 -> 60 ; - 54 -> 61 ; -53 [label="53: + \n " ] + "test21" -> "test24" ; +"test130" [label="30: DeclStmt \n n$22=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n _fun___objc_retain(n$22:class NSString *) [line 31]\n *&__assert_fn__:class NSString *=n$22 [line 31]\n " shape="box"] - 53 -> 51 ; - 53 -> 52 ; -52 [label="52: Prune (false branch) \n PRUNE((0 == 0), false); [line 31]\n " shape="invhouse"] + "test130" -> "test125" ; + "test130" -> "test126" ; +"test129" [label="29: BinaryOperatorStmt: Assign \n n$20=*&0$?%__sil_tmpSIL_temp_conditional___n$16:class NSString * [line 31]\n _fun___objc_retain(n$20:class NSString *) [line 31]\n n$21=*&__assert_fn__:class NSString * [line 31]\n *&__assert_fn__:class NSString *=n$20 [line 31]\n _fun___objc_release(n$21:class NSString *) [line 31]\n " shape="box"] - 52 -> 49 ; -51 [label="51: Prune (true branch) \n PRUNE((0 != 0), true); [line 31]\n " shape="invhouse"] + "test129" -> "test123" ; +"test128" [label="28: ConditinalStmt Branch \n n$19=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$16:class NSString *=n$19 [line 31]\n " shape="box"] - 51 -> 50 ; -50 [label="50: + \n " ] + "test128" -> "test124" ; +"test127" [label="27: ConditinalStmt Branch \n n$18=*&__assert_fn__:class NSString * [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$16:class NSString *=n$18 [line 31]\n " shape="box"] - 50 -> 55 ; -49 [label="49: Return Stmt \n n$0=*&target:class NSAssert * [line 32]\n n$1=_fun_NSAssert_x(n$0:class NSAssert *) [line 32]\n *&return:int =n$1 [line 32]\n " shape="box"] + "test127" -> "test124" ; +"test126" [label="26: Prune (false branch) \n n$17=*&__assert_fn__:class NSString * [line 31]\n PRUNE((n$17 == 0), false); [line 31]\n " shape="invhouse"] - 49 -> 48 ; -48 [label="48: Exit test1 \n " color=yellow style=filled] + "test126" -> "test128" ; +"test125" [label="25: Prune (true branch) \n n$17=*&__assert_fn__:class NSString * [line 31]\n PRUNE((n$17 != 0), true); [line 31]\n " shape="invhouse"] -47 [label="47: Start test1\nFormals: target:class NSAssert *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$9:class NSString * __assert_file__:class NSString * 0$?%__sil_tmpSIL_temp_conditional___n$16:class NSString * __assert_fn__:class NSString * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$9,&__assert_file__,&0$?%__sil_tmpSIL_temp_conditional___n$16,&__assert_fn__); [line 30]\n " color=yellow style=filled] + "test125" -> "test127" ; +"test124" [label="24: + \n " ] - 47 -> 50 ; -46 [label="46: DeclStmt \n n$33=_fun_NSString_stringWithUTF8String:(\"shared/assertions/NSAssert_example.m\":char *) [line 24]\n _fun___objc_retain(n$33:class NSString *) [line 24]\n *&__assert_file__:class NSString *=n$33 [line 24]\n " shape="box"] + "test124" -> "test129" ; +"test123" [label="23: DeclStmt \n n$15=_fun_NSString_stringWithUTF8String:(\"shared/assertions/NSAssert_example.m\":char *) [line 31]\n _fun___objc_retain(n$15:class NSString *) [line 31]\n *&__assert_file__:class NSString *=n$15 [line 31]\n " shape="box"] - 46 -> 41 ; - 46 -> 42 ; -45 [label="45: BinaryOperatorStmt: Assign \n n$31=*&0$?%__sil_tmpSIL_temp_conditional___n$27:class NSString * [line 24]\n _fun___objc_retain(n$31:class NSString *) [line 24]\n n$32=*&__assert_file__:class NSString * [line 24]\n *&__assert_file__:class NSString *=n$31 [line 24]\n _fun___objc_release(n$32:class NSString *) [line 24]\n " shape="box"] + "test123" -> "test118" ; + "test123" -> "test119" ; +"test122" [label="22: BinaryOperatorStmt: Assign \n n$13=*&0$?%__sil_tmpSIL_temp_conditional___n$9:class NSString * [line 31]\n _fun___objc_retain(n$13:class NSString *) [line 31]\n n$14=*&__assert_file__:class NSString * [line 31]\n *&__assert_file__:class NSString *=n$13 [line 31]\n _fun___objc_release(n$14:class NSString *) [line 31]\n " shape="box"] - 45 -> 39 ; -44 [label="44: ConditinalStmt Branch \n n$30=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$27:class NSString *=n$30 [line 24]\n " shape="box"] + "test122" -> "test116" ; +"test121" [label="21: ConditinalStmt Branch \n n$12=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$9:class NSString *=n$12 [line 31]\n " shape="box"] - 44 -> 40 ; -43 [label="43: ConditinalStmt Branch \n n$29=*&__assert_file__:class NSString * [line 24]\n *&0$?%__sil_tmpSIL_temp_conditional___n$27:class NSString *=n$29 [line 24]\n " shape="box"] + "test121" -> "test117" ; +"test120" [label="20: ConditinalStmt Branch \n n$11=*&__assert_file__:class NSString * [line 31]\n *&0$?%__sil_tmpSIL_temp_conditional___n$9:class NSString *=n$11 [line 31]\n " shape="box"] - 43 -> 40 ; -42 [label="42: Prune (false branch) \n n$28=*&__assert_file__:class NSString * [line 24]\n PRUNE((n$28 == 0), false); [line 24]\n " shape="invhouse"] + "test120" -> "test117" ; +"test119" [label="19: Prune (false branch) \n n$10=*&__assert_file__:class NSString * [line 31]\n PRUNE((n$10 == 0), false); [line 31]\n " shape="invhouse"] - 42 -> 44 ; -41 [label="41: Prune (true branch) \n n$28=*&__assert_file__:class NSString * [line 24]\n PRUNE((n$28 != 0), true); [line 24]\n " shape="invhouse"] + "test119" -> "test121" ; +"test118" [label="18: Prune (true branch) \n n$10=*&__assert_file__:class NSString * [line 31]\n PRUNE((n$10 != 0), true); [line 31]\n " shape="invhouse"] - 41 -> 43 ; -40 [label="40: + \n " ] + "test118" -> "test120" ; +"test117" [label="17: + \n " ] - 40 -> 45 ; -39 [label="39: Prune (true branch) \n PRUNE(0, true); [line 24]\n " shape="invhouse"] + "test117" -> "test122" ; +"test116" [label="16: Prune (true branch) \n PRUNE(0, true); [line 31]\n " shape="invhouse"] - 39 -> 30 ; -38 [label="38: Prune (false branch) \n n$21=*&0$?%__sil_tmpSIL_temp_conditional___n$19:int [line 24]\n PRUNE((n$21 == 0), false); [line 24]\n " shape="invhouse"] + "test116" -> "test17" ; +"test115" [label="15: Prune (false branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 31]\n PRUNE((n$4 == 0), false); [line 31]\n " shape="invhouse"] - 38 -> 30 ; -37 [label="37: Prune (true branch) \n n$21=*&0$?%__sil_tmpSIL_temp_conditional___n$19:int [line 24]\n PRUNE((n$21 != 0), true); [line 24]\n " shape="invhouse"] + "test115" -> "test17" ; +"test114" [label="14: Prune (true branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 31]\n PRUNE((n$4 != 0), true); [line 31]\n " shape="invhouse"] - 37 -> 46 ; -36 [label="36: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$19:int =1 [line 24]\n " shape="box"] + "test114" -> "test130" ; +"test113" [label="13: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 31]\n " shape="box"] - 36 -> 31 ; -35 [label="35: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$19:int =0 [line 24]\n " shape="box"] + "test113" -> "test18" ; +"test112" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =0 [line 31]\n " shape="box"] - 35 -> 31 ; -34 [label="34: Prune (false branch) \n PRUNE(((n$20 != 0) == 0), false); [line 24]\n " shape="invhouse"] + "test112" -> "test18" ; +"test111" [label="11: Prune (false branch) \n PRUNE(((n$3 != 0) == 0), false); [line 31]\n " shape="invhouse"] - 34 -> 36 ; -33 [label="33: Prune (true branch) \n PRUNE(((n$20 != 0) != 0), true); [line 24]\n " shape="invhouse"] + "test111" -> "test113" ; +"test110" [label="10: Prune (true branch) \n PRUNE(((n$3 != 0) != 0), true); [line 31]\n " shape="invhouse"] - 33 -> 35 ; -32 [label="32: BinaryOperatorStmt: NE \n n$20=*&a:class NSAssert * [line 24]\n " shape="box"] + "test110" -> "test112" ; +"test19" [label="9: BinaryOperatorStmt: NE \n n$3=*&target:class NSAssert * [line 31]\n " shape="box"] - 32 -> 33 ; - 32 -> 34 ; -31 [label="31: + \n " ] + "test19" -> "test110" ; + "test19" -> "test111" ; +"test18" [label="8: + \n " ] - 31 -> 37 ; - 31 -> 38 ; -30 [label="30: + \n " ] + "test18" -> "test114" ; + "test18" -> "test115" ; +"test17" [label="7: + \n " ] - 30 -> 28 ; - 30 -> 29 ; -29 [label="29: Prune (false branch) \n PRUNE((0 == 0), false); [line 24]\n " shape="invhouse"] + "test17" -> "test15" ; + "test17" -> "test16" ; +"test16" [label="6: Prune (false branch) \n PRUNE((0 == 0), false); [line 31]\n " shape="invhouse"] - 29 -> 26 ; -28 [label="28: Prune (true branch) \n PRUNE((0 != 0), true); [line 24]\n " shape="invhouse"] + "test16" -> "test13" ; +"test15" [label="5: Prune (true branch) \n PRUNE((0 != 0), true); [line 31]\n " shape="invhouse"] - 28 -> 27 ; -27 [label="27: + \n " ] + "test15" -> "test14" ; +"test14" [label="4: + \n " ] - 27 -> 32 ; -26 [label="26: Return Stmt \n n$17=*&a:class NSAssert * [line 25]\n n$18=_fun_NSAssert_x(n$17:class NSAssert *) [line 25]\n *&return:int =n$18 [line 25]\n " shape="box"] + "test14" -> "test19" ; +"test13" [label="3: Return Stmt \n n$0=*&target:class NSAssert * [line 32]\n n$1=_fun_NSAssert_x(n$0:class NSAssert *) [line 32]\n *&return:int =n$1 [line 32]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Exit NSAssert_initWithRequest: \n " color=yellow style=filled] + "test13" -> "test12" ; +"test12" [label="2: Exit test1 \n " color=yellow style=filled] -24 [label="24: Start NSAssert_initWithRequest:\nFormals: self:class NSAssert * a:class NSAssert *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$19:int 0$?%__sil_tmpSIL_temp_conditional___n$27:class NSString * __assert_file__:class NSString * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$19,&0$?%__sil_tmpSIL_temp_conditional___n$27,&__assert_file__); [line 23]\n " color=yellow style=filled] +"test11" [label="1: Start test1\nFormals: target:class NSAssert *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$9:class NSString * __assert_file__:class NSString * 0$?%__sil_tmpSIL_temp_conditional___n$16:class NSString * __assert_fn__:class NSString * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$9,&__assert_file__,&0$?%__sil_tmpSIL_temp_conditional___n$16,&__assert_fn__); [line 30]\n " color=yellow style=filled] - 24 -> 27 ; -23 [label="23: DeclStmt \n n$16=_fun_NSString_stringWithUTF8String:(\"shared/assertions/NSAssert_example.m\":char *) [line 19]\n _fun___objc_retain(n$16:class NSString *) [line 19]\n *&__assert_file__:class NSString *=n$16 [line 19]\n " shape="box"] + "test11" -> "test14" ; +"NSAssert_addTarget:23" [label="23: DeclStmt \n n$16=_fun_NSString_stringWithUTF8String:(\"shared/assertions/NSAssert_example.m\":char *) [line 19]\n _fun___objc_retain(n$16:class NSString *) [line 19]\n *&__assert_file__:class NSString *=n$16 [line 19]\n " shape="box"] - 23 -> 18 ; - 23 -> 19 ; -22 [label="22: BinaryOperatorStmt: Assign \n n$14=*&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString * [line 19]\n _fun___objc_retain(n$14:class NSString *) [line 19]\n n$15=*&__assert_file__:class NSString * [line 19]\n *&__assert_file__:class NSString *=n$14 [line 19]\n _fun___objc_release(n$15:class NSString *) [line 19]\n " shape="box"] + "NSAssert_addTarget:23" -> "NSAssert_addTarget:18" ; + "NSAssert_addTarget:23" -> "NSAssert_addTarget:19" ; +"NSAssert_addTarget:22" [label="22: BinaryOperatorStmt: Assign \n n$14=*&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString * [line 19]\n _fun___objc_retain(n$14:class NSString *) [line 19]\n n$15=*&__assert_file__:class NSString * [line 19]\n *&__assert_file__:class NSString *=n$14 [line 19]\n _fun___objc_release(n$15:class NSString *) [line 19]\n " shape="box"] - 22 -> 16 ; -21 [label="21: ConditinalStmt Branch \n n$13=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString *=n$13 [line 19]\n " shape="box"] + "NSAssert_addTarget:22" -> "NSAssert_addTarget:16" ; +"NSAssert_addTarget:21" [label="21: ConditinalStmt Branch \n n$13=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString *=n$13 [line 19]\n " shape="box"] - 21 -> 17 ; -20 [label="20: ConditinalStmt Branch \n n$12=*&__assert_file__:class NSString * [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString *=n$12 [line 19]\n " shape="box"] + "NSAssert_addTarget:21" -> "NSAssert_addTarget:17" ; +"NSAssert_addTarget:20" [label="20: ConditinalStmt Branch \n n$12=*&__assert_file__:class NSString * [line 19]\n *&0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString *=n$12 [line 19]\n " shape="box"] - 20 -> 17 ; -19 [label="19: Prune (false branch) \n n$11=*&__assert_file__:class NSString * [line 19]\n PRUNE((n$11 == 0), false); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:20" -> "NSAssert_addTarget:17" ; +"NSAssert_addTarget:19" [label="19: Prune (false branch) \n n$11=*&__assert_file__:class NSString * [line 19]\n PRUNE((n$11 == 0), false); [line 19]\n " shape="invhouse"] - 19 -> 21 ; -18 [label="18: Prune (true branch) \n n$11=*&__assert_file__:class NSString * [line 19]\n PRUNE((n$11 != 0), true); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:19" -> "NSAssert_addTarget:21" ; +"NSAssert_addTarget:18" [label="18: Prune (true branch) \n n$11=*&__assert_file__:class NSString * [line 19]\n PRUNE((n$11 != 0), true); [line 19]\n " shape="invhouse"] - 18 -> 20 ; -17 [label="17: + \n " ] + "NSAssert_addTarget:18" -> "NSAssert_addTarget:20" ; +"NSAssert_addTarget:17" [label="17: + \n " ] - 17 -> 22 ; -16 [label="16: Prune (true branch) \n PRUNE(0, true); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:17" -> "NSAssert_addTarget:22" ; +"NSAssert_addTarget:16" [label="16: Prune (true branch) \n PRUNE(0, true); [line 19]\n " shape="invhouse"] - 16 -> 7 ; -15 [label="15: Prune (false branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 19]\n PRUNE((n$4 == 0), false); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:16" -> "NSAssert_addTarget:7" ; +"NSAssert_addTarget:15" [label="15: Prune (false branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 19]\n PRUNE((n$4 == 0), false); [line 19]\n " shape="invhouse"] - 15 -> 7 ; -14 [label="14: Prune (true branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 19]\n PRUNE((n$4 != 0), true); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:15" -> "NSAssert_addTarget:7" ; +"NSAssert_addTarget:14" [label="14: Prune (true branch) \n n$4=*&0$?%__sil_tmpSIL_temp_conditional___n$2:int [line 19]\n PRUNE((n$4 != 0), true); [line 19]\n " shape="invhouse"] - 14 -> 23 ; -13 [label="13: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 19]\n " shape="box"] + "NSAssert_addTarget:14" -> "NSAssert_addTarget:23" ; +"NSAssert_addTarget:13" [label="13: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =1 [line 19]\n " shape="box"] - 13 -> 8 ; -12 [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =0 [line 19]\n " shape="box"] + "NSAssert_addTarget:13" -> "NSAssert_addTarget:8" ; +"NSAssert_addTarget:12" [label="12: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$2:int =0 [line 19]\n " shape="box"] - 12 -> 8 ; -11 [label="11: Prune (false branch) \n PRUNE(((n$3 != 0) == 0), false); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:12" -> "NSAssert_addTarget:8" ; +"NSAssert_addTarget:11" [label="11: Prune (false branch) \n PRUNE(((n$3 != 0) == 0), false); [line 19]\n " shape="invhouse"] - 11 -> 13 ; -10 [label="10: Prune (true branch) \n PRUNE(((n$3 != 0) != 0), true); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:11" -> "NSAssert_addTarget:13" ; +"NSAssert_addTarget:10" [label="10: Prune (true branch) \n PRUNE(((n$3 != 0) != 0), true); [line 19]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: BinaryOperatorStmt: NE \n n$3=*&target:class NSAssert * [line 19]\n " shape="box"] + "NSAssert_addTarget:10" -> "NSAssert_addTarget:12" ; +"NSAssert_addTarget:9" [label="9: BinaryOperatorStmt: NE \n n$3=*&target:class NSAssert * [line 19]\n " shape="box"] - 9 -> 10 ; - 9 -> 11 ; -8 [label="8: + \n " ] + "NSAssert_addTarget:9" -> "NSAssert_addTarget:10" ; + "NSAssert_addTarget:9" -> "NSAssert_addTarget:11" ; +"NSAssert_addTarget:8" [label="8: + \n " ] - 8 -> 14 ; - 8 -> 15 ; -7 [label="7: + \n " ] + "NSAssert_addTarget:8" -> "NSAssert_addTarget:14" ; + "NSAssert_addTarget:8" -> "NSAssert_addTarget:15" ; +"NSAssert_addTarget:7" [label="7: + \n " ] - 7 -> 5 ; - 7 -> 6 ; -6 [label="6: Prune (false branch) \n PRUNE((0 == 0), false); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:7" -> "NSAssert_addTarget:5" ; + "NSAssert_addTarget:7" -> "NSAssert_addTarget:6" ; +"NSAssert_addTarget:6" [label="6: Prune (false branch) \n PRUNE((0 == 0), false); [line 19]\n " shape="invhouse"] - 6 -> 3 ; -5 [label="5: Prune (true branch) \n PRUNE((0 != 0), true); [line 19]\n " shape="invhouse"] + "NSAssert_addTarget:6" -> "NSAssert_addTarget:3" ; +"NSAssert_addTarget:5" [label="5: Prune (true branch) \n PRUNE((0 != 0), true); [line 19]\n " shape="invhouse"] - 5 -> 4 ; -4 [label="4: + \n " ] + "NSAssert_addTarget:5" -> "NSAssert_addTarget:4" ; +"NSAssert_addTarget:4" [label="4: + \n " ] - 4 -> 9 ; -3 [label="3: Return Stmt \n n$0=*&target:class NSAssert * [line 20]\n n$1=_fun_NSAssert_x(n$0:class NSAssert *) [line 20]\n *&return:int =n$1 [line 20]\n " shape="box"] + "NSAssert_addTarget:4" -> "NSAssert_addTarget:9" ; +"NSAssert_addTarget:3" [label="3: Return Stmt \n n$0=*&target:class NSAssert * [line 20]\n n$1=_fun_NSAssert_x(n$0:class NSAssert *) [line 20]\n *&return:int =n$1 [line 20]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit NSAssert_addTarget: \n " color=yellow style=filled] + "NSAssert_addTarget:3" -> "NSAssert_addTarget:2" ; +"NSAssert_addTarget:2" [label="2: Exit NSAssert_addTarget: \n " color=yellow style=filled] -1 [label="1: Start NSAssert_addTarget:\nFormals: self:class NSAssert * target:class NSAssert *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString * __assert_file__:class NSString * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$10,&__assert_file__); [line 18]\n " color=yellow style=filled] +"NSAssert_addTarget:1" [label="1: Start NSAssert_addTarget:\nFormals: self:class NSAssert * target:class NSAssert *\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$2:int 0$?%__sil_tmpSIL_temp_conditional___n$10:class NSString * __assert_file__:class NSString * \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$2,&0$?%__sil_tmpSIL_temp_conditional___n$10,&__assert_file__); [line 18]\n " color=yellow style=filled] - 1 -> 4 ; + "NSAssert_addTarget:1" -> "NSAssert_addTarget:4" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/block/BlockVar.m.dot b/infer/tests/codetoanalyze/objc/shared/block/BlockVar.m.dot index c25ba1977..507aaf2bd 100644 --- a/infer/tests/codetoanalyze/objc/shared/block/BlockVar.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/block/BlockVar.m.dot @@ -1,209 +1,209 @@ /* @generated */ digraph iCFG { -54 [label="54: DeclStmt \n *&i:int =5 [line 57]\n " shape="box"] +"__objc_anonymous_block_BlockVar_blockPostOk______33" [label="3: Return Stmt \n n$22=*&x:int * [line 43]\n *&return:int *=n$22 [line 43]\n " shape="box"] - 54 -> 53 ; -53 [label="53: DeclStmt \n *&x:int *=&i [line 58]\n " shape="box"] + "__objc_anonymous_block_BlockVar_blockPostOk______33" -> "__objc_anonymous_block_BlockVar_blockPostOk______32" ; +"__objc_anonymous_block_BlockVar_blockPostOk______32" [label="2: Exit __objc_anonymous_block_BlockVar_blockPostOk______3 \n " color=yellow style=filled] - 53 -> 52 ; -52 [label="52: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5); [line 59]\n n$37=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 ):unsigned long ) [line 59]\n *&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5:class __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 =n$37 [line 59]\n n$38=*&x:int * [line 59]\n *n$37.x:int *=n$38 [line 59]\n n$34=*&x:int * [line 59]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_capturedNoNullDeref______5,n$34) [line 59]\n " shape="box"] +"__objc_anonymous_block_BlockVar_blockPostOk______31" [label="1: Start __objc_anonymous_block_BlockVar_blockPostOk______3\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] - 52 -> 48 ; -51 [label="51: Return Stmt \n n$35=*&x:int * [line 60]\n n$36=*n$35:int [line 60]\n *&return:int =n$36 [line 60]\n " shape="box"] + "__objc_anonymous_block_BlockVar_blockPostOk______31" -> "__objc_anonymous_block_BlockVar_blockPostOk______33" ; +"BlockVar_blockPostBad5" [label="5: DeclStmt \n *&x:int *=0 [line 32]\n " shape="box"] - 51 -> 50 ; -50 [label="50: Exit __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 \n " color=yellow style=filled] + "BlockVar_blockPostBad5" -> "BlockVar_blockPostBad4" ; +"BlockVar_blockPostBad4" [label="4: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_blockPostBad______2); [line 33]\n n$16=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_blockPostBad______2 ):unsigned long ) [line 33]\n *&__objc_anonymous_block_BlockVar_blockPostBad______2:class __objc_anonymous_block_BlockVar_blockPostBad______2 =n$16 [line 33]\n n$17=*&x:int * [line 33]\n *n$16.x:int *=n$17 [line 33]\n n$14=*&x:int * [line 33]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_blockPostBad______2,n$14) [line 33]\n " shape="box"] -49 [label="49: Start __objc_anonymous_block_BlockVar_capturedNoNullDeref______5\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 59]\n " color=yellow style=filled] + "BlockVar_blockPostBad4" -> "BlockVar_blockPostBad3" ; +"BlockVar_blockPostBad3" [label="3: Return Stmt \n n$11=*&my_block:_fn_ (*) [line 36]\n n$12=n$11() [line 36]\n n$13=*n$12:int [line 36]\n *&return:int =n$13 [line 36]\n " shape="box"] - 49 -> 51 ; -48 [label="48: BinaryOperatorStmt: Assign \n *&x:int *=0 [line 62]\n " shape="box"] + "BlockVar_blockPostBad3" -> "BlockVar_blockPostBad2" ; +"BlockVar_blockPostBad2" [label="2: Exit BlockVar_blockPostBad \n " color=yellow style=filled] - 48 -> 47 ; -47 [label="47: Return Stmt \n n$32=*&my_block:_fn_ (*) [line 63]\n n$33=n$32() [line 63]\n *&return:int =n$33 [line 63]\n " shape="box"] +"BlockVar_blockPostBad1" [label="1: Start BlockVar_blockPostBad\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&my_block,&x); [line 31]\n " color=yellow style=filled] - 47 -> 46 ; -46 [label="46: Exit BlockVar_capturedNoNullDeref \n " color=yellow style=filled] + "BlockVar_blockPostBad1" -> "BlockVar_blockPostBad5" ; +"BlockVar_navigateToURLInBackground12" [label="12: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1); [line 19]\n n$10=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 ):unsigned long ) [line 19]\n *&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1:class __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 =n$10 [line 19]\n *&addBlock:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_navigateToURLInBackground______1) [line 19]\n " shape="box"] -45 [label="45: Start BlockVar_capturedNoNullDeref\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * i:int \n DECLARE_LOCALS(&return,&my_block,&x,&i); [line 56]\n " color=yellow style=filled] + "BlockVar_navigateToURLInBackground12" -> "BlockVar_navigateToURLInBackground11" ; +"BlockVar_navigateToURLInBackground11" [label="11: DeclStmt \n n$4=*&addBlock:_fn_ (*) [line 23]\n n$5=n$4(1:int ,2:int ) [line 23]\n *&x:int =n$5 [line 23]\n " shape="box"] - 45 -> 54 ; -44 [label="44: DeclStmt \n *&x:int *=0 [line 49]\n " shape="box"] + "BlockVar_navigateToURLInBackground11" -> "BlockVar_navigateToURLInBackground10" ; +"BlockVar_navigateToURLInBackground10" [label="10: DeclStmt \n *&p:int *=0 [line 24]\n " shape="box"] - 44 -> 43 ; -43 [label="43: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_capturedNullDeref______4); [line 50]\n n$30=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_capturedNullDeref______4 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_BlockVar_capturedNullDeref______4:class __objc_anonymous_block_BlockVar_capturedNullDeref______4 =n$30 [line 50]\n n$31=*&x:int * [line 50]\n *n$30.x:int *=n$31 [line 50]\n n$27=*&x:int * [line 50]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_capturedNullDeref______4,n$27) [line 50]\n " shape="box"] + "BlockVar_navigateToURLInBackground10" -> "BlockVar_navigateToURLInBackground5" ; +"BlockVar_navigateToURLInBackground9" [label="9: Return Stmt \n n$3=*&x:int [line 28]\n *&return:int =n$3 [line 28]\n " shape="box"] - 43 -> 39 ; -42 [label="42: Return Stmt \n n$28=*&x:int * [line 51]\n n$29=*n$28:int [line 51]\n *&return:int =n$29 [line 51]\n " shape="box"] + "BlockVar_navigateToURLInBackground9" -> "BlockVar_navigateToURLInBackground2" ; +"BlockVar_navigateToURLInBackground8" [label="8: Return Stmt \n n$1=*&p:int * [line 26]\n n$2=*n$1:int [line 26]\n *&return:int =n$2 [line 26]\n " shape="box"] - 42 -> 41 ; -41 [label="41: Exit __objc_anonymous_block_BlockVar_capturedNullDeref______4 \n " color=yellow style=filled] + "BlockVar_navigateToURLInBackground8" -> "BlockVar_navigateToURLInBackground2" ; +"BlockVar_navigateToURLInBackground7" [label="7: Prune (false branch) \n PRUNE(((n$0 == 8) == 0), false); [line 25]\n " shape="invhouse"] -40 [label="40: Start __objc_anonymous_block_BlockVar_capturedNullDeref______4\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] + "BlockVar_navigateToURLInBackground7" -> "BlockVar_navigateToURLInBackground9" ; +"BlockVar_navigateToURLInBackground6" [label="6: Prune (true branch) \n PRUNE(((n$0 == 8) != 0), true); [line 25]\n " shape="invhouse"] - 40 -> 42 ; -39 [label="39: Return Stmt \n n$25=*&my_block:_fn_ (*) [line 53]\n n$26=n$25() [line 53]\n *&return:int =n$26 [line 53]\n " shape="box"] + "BlockVar_navigateToURLInBackground6" -> "BlockVar_navigateToURLInBackground8" ; +"BlockVar_navigateToURLInBackground5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&x:int [line 25]\n " shape="box"] - 39 -> 38 ; -38 [label="38: Exit BlockVar_capturedNullDeref \n " color=yellow style=filled] + "BlockVar_navigateToURLInBackground5" -> "BlockVar_navigateToURLInBackground6" ; + "BlockVar_navigateToURLInBackground5" -> "BlockVar_navigateToURLInBackground7" ; +"BlockVar_navigateToURLInBackground4" [label="4: between_join_and_exit \n " shape="box"] -37 [label="37: Start BlockVar_capturedNullDeref\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&my_block,&x); [line 48]\n " color=yellow style=filled] + "BlockVar_navigateToURLInBackground4" -> "BlockVar_navigateToURLInBackground2" ; +"BlockVar_navigateToURLInBackground3" [label="3: + \n " ] - 37 -> 44 ; -36 [label="36: DeclStmt \n *&i:int =7 [line 40]\n " shape="box"] + "BlockVar_navigateToURLInBackground3" -> "BlockVar_navigateToURLInBackground4" ; +"BlockVar_navigateToURLInBackground2" [label="2: Exit BlockVar_navigateToURLInBackground \n " color=yellow style=filled] - 36 -> 35 ; -35 [label="35: DeclStmt \n *&x:int *=&i [line 41]\n " shape="box"] +"BlockVar_navigateToURLInBackground1" [label="1: Start BlockVar_navigateToURLInBackground\nFormals: \nLocals: p:int * x:int addBlock:_fn_ (*) \n DECLARE_LOCALS(&return,&p,&x,&addBlock); [line 18]\n " color=yellow style=filled] - 35 -> 34 ; -34 [label="34: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_blockPostOk______3); [line 42]\n n$23=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_blockPostOk______3 ):unsigned long ) [line 42]\n *&__objc_anonymous_block_BlockVar_blockPostOk______3:class __objc_anonymous_block_BlockVar_blockPostOk______3 =n$23 [line 42]\n n$24=*&x:int * [line 42]\n *n$23.x:int *=n$24 [line 42]\n n$21=*&x:int * [line 42]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_blockPostOk______3,n$21) [line 42]\n " shape="box"] + "BlockVar_navigateToURLInBackground1" -> "BlockVar_navigateToURLInBackground12" ; +"BlockVar_capturedNullDeref5" [label="5: DeclStmt \n *&x:int *=0 [line 49]\n " shape="box"] - 34 -> 30 ; -33 [label="33: Return Stmt \n n$22=*&x:int * [line 43]\n *&return:int *=n$22 [line 43]\n " shape="box"] + "BlockVar_capturedNullDeref5" -> "BlockVar_capturedNullDeref4" ; +"BlockVar_capturedNullDeref4" [label="4: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_capturedNullDeref______4); [line 50]\n n$30=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_capturedNullDeref______4 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_BlockVar_capturedNullDeref______4:class __objc_anonymous_block_BlockVar_capturedNullDeref______4 =n$30 [line 50]\n n$31=*&x:int * [line 50]\n *n$30.x:int *=n$31 [line 50]\n n$27=*&x:int * [line 50]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_capturedNullDeref______4,n$27) [line 50]\n " shape="box"] - 33 -> 32 ; -32 [label="32: Exit __objc_anonymous_block_BlockVar_blockPostOk______3 \n " color=yellow style=filled] + "BlockVar_capturedNullDeref4" -> "BlockVar_capturedNullDeref3" ; +"BlockVar_capturedNullDeref3" [label="3: Return Stmt \n n$25=*&my_block:_fn_ (*) [line 53]\n n$26=n$25() [line 53]\n *&return:int =n$26 [line 53]\n " shape="box"] -31 [label="31: Start __objc_anonymous_block_BlockVar_blockPostOk______3\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] + "BlockVar_capturedNullDeref3" -> "BlockVar_capturedNullDeref2" ; +"BlockVar_capturedNullDeref2" [label="2: Exit BlockVar_capturedNullDeref \n " color=yellow style=filled] - 31 -> 33 ; -30 [label="30: Return Stmt \n n$18=*&my_block:_fn_ (*) [line 45]\n n$19=n$18() [line 45]\n n$20=*n$19:int [line 45]\n *&return:int =n$20 [line 45]\n " shape="box"] +"BlockVar_capturedNullDeref1" [label="1: Start BlockVar_capturedNullDeref\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&my_block,&x); [line 48]\n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: Exit BlockVar_blockPostOk \n " color=yellow style=filled] + "BlockVar_capturedNullDeref1" -> "BlockVar_capturedNullDeref5" ; +"__objc_anonymous_block_BlockVar_capturedNoNullDeref______53" [label="3: Return Stmt \n n$35=*&x:int * [line 60]\n n$36=*n$35:int [line 60]\n *&return:int =n$36 [line 60]\n " shape="box"] -28 [label="28: Start BlockVar_blockPostOk\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * i:int \n DECLARE_LOCALS(&return,&my_block,&x,&i); [line 39]\n " color=yellow style=filled] + "__objc_anonymous_block_BlockVar_capturedNoNullDeref______53" -> "__objc_anonymous_block_BlockVar_capturedNoNullDeref______52" ; +"__objc_anonymous_block_BlockVar_capturedNoNullDeref______52" [label="2: Exit __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 \n " color=yellow style=filled] - 28 -> 36 ; -27 [label="27: DeclStmt \n *&x:int *=0 [line 32]\n " shape="box"] +"__objc_anonymous_block_BlockVar_capturedNoNullDeref______51" [label="1: Start __objc_anonymous_block_BlockVar_capturedNoNullDeref______5\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 59]\n " color=yellow style=filled] - 27 -> 26 ; -26 [label="26: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_blockPostBad______2); [line 33]\n n$16=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_blockPostBad______2 ):unsigned long ) [line 33]\n *&__objc_anonymous_block_BlockVar_blockPostBad______2:class __objc_anonymous_block_BlockVar_blockPostBad______2 =n$16 [line 33]\n n$17=*&x:int * [line 33]\n *n$16.x:int *=n$17 [line 33]\n n$14=*&x:int * [line 33]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_blockPostBad______2,n$14) [line 33]\n " shape="box"] + "__objc_anonymous_block_BlockVar_capturedNoNullDeref______51" -> "__objc_anonymous_block_BlockVar_capturedNoNullDeref______53" ; +"BlockVar_capturedNoNullDeref7" [label="7: DeclStmt \n *&i:int =5 [line 57]\n " shape="box"] - 26 -> 22 ; -25 [label="25: Return Stmt \n n$15=*&x:int * [line 34]\n *&return:int *=n$15 [line 34]\n " shape="box"] + "BlockVar_capturedNoNullDeref7" -> "BlockVar_capturedNoNullDeref6" ; +"BlockVar_capturedNoNullDeref6" [label="6: DeclStmt \n *&x:int *=&i [line 58]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit __objc_anonymous_block_BlockVar_blockPostBad______2 \n " color=yellow style=filled] + "BlockVar_capturedNoNullDeref6" -> "BlockVar_capturedNoNullDeref5" ; +"BlockVar_capturedNoNullDeref5" [label="5: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5); [line 59]\n n$37=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 ):unsigned long ) [line 59]\n *&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5:class __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 =n$37 [line 59]\n n$38=*&x:int * [line 59]\n *n$37.x:int *=n$38 [line 59]\n n$34=*&x:int * [line 59]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_capturedNoNullDeref______5,n$34) [line 59]\n " shape="box"] -23 [label="23: Start __objc_anonymous_block_BlockVar_blockPostBad______2\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 33]\n " color=yellow style=filled] + "BlockVar_capturedNoNullDeref5" -> "BlockVar_capturedNoNullDeref4" ; +"BlockVar_capturedNoNullDeref4" [label="4: BinaryOperatorStmt: Assign \n *&x:int *=0 [line 62]\n " shape="box"] - 23 -> 25 ; -22 [label="22: Return Stmt \n n$11=*&my_block:_fn_ (*) [line 36]\n n$12=n$11() [line 36]\n n$13=*n$12:int [line 36]\n *&return:int =n$13 [line 36]\n " shape="box"] + "BlockVar_capturedNoNullDeref4" -> "BlockVar_capturedNoNullDeref3" ; +"BlockVar_capturedNoNullDeref3" [label="3: Return Stmt \n n$32=*&my_block:_fn_ (*) [line 63]\n n$33=n$32() [line 63]\n *&return:int =n$33 [line 63]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Exit BlockVar_blockPostBad \n " color=yellow style=filled] + "BlockVar_capturedNoNullDeref3" -> "BlockVar_capturedNoNullDeref2" ; +"BlockVar_capturedNoNullDeref2" [label="2: Exit BlockVar_capturedNoNullDeref \n " color=yellow style=filled] -20 [label="20: Start BlockVar_blockPostBad\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&my_block,&x); [line 31]\n " color=yellow style=filled] +"BlockVar_capturedNoNullDeref1" [label="1: Start BlockVar_capturedNoNullDeref\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * i:int \n DECLARE_LOCALS(&return,&my_block,&x,&i); [line 56]\n " color=yellow style=filled] - 20 -> 27 ; -19 [label="19: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1); [line 19]\n n$10=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 ):unsigned long ) [line 19]\n *&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1:class __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 =n$10 [line 19]\n *&addBlock:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_navigateToURLInBackground______1) [line 19]\n " shape="box"] + "BlockVar_capturedNoNullDeref1" -> "BlockVar_capturedNoNullDeref7" ; +"BlockVar_blockPostOk6" [label="6: DeclStmt \n *&i:int =7 [line 40]\n " shape="box"] - 19 -> 14 ; -18 [label="18: DeclStmt \n n$9=_fun_BlockVar_test() [line 20]\n *&res:int =n$9 [line 20]\n " shape="box"] + "BlockVar_blockPostOk6" -> "BlockVar_blockPostOk5" ; +"BlockVar_blockPostOk5" [label="5: DeclStmt \n *&x:int *=&i [line 41]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Return Stmt \n n$6=*&a:int [line 21]\n n$7=*&b:int [line 21]\n n$8=*&res:int [line 21]\n *&return:int =((n$6 + n$7) + n$8) [line 21]\n " shape="box"] + "BlockVar_blockPostOk5" -> "BlockVar_blockPostOk4" ; +"BlockVar_blockPostOk4" [label="4: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_blockPostOk______3); [line 42]\n n$23=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_blockPostOk______3 ):unsigned long ) [line 42]\n *&__objc_anonymous_block_BlockVar_blockPostOk______3:class __objc_anonymous_block_BlockVar_blockPostOk______3 =n$23 [line 42]\n n$24=*&x:int * [line 42]\n *n$23.x:int *=n$24 [line 42]\n n$21=*&x:int * [line 42]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_blockPostOk______3,n$21) [line 42]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Exit __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 \n " color=yellow style=filled] + "BlockVar_blockPostOk4" -> "BlockVar_blockPostOk3" ; +"BlockVar_blockPostOk3" [label="3: Return Stmt \n n$18=*&my_block:_fn_ (*) [line 45]\n n$19=n$18() [line 45]\n n$20=*n$19:int [line 45]\n *&return:int =n$20 [line 45]\n " shape="box"] -15 [label="15: Start __objc_anonymous_block_BlockVar_navigateToURLInBackground______1\nFormals: a:int b:int \nLocals: res:int \n DECLARE_LOCALS(&return,&res); [line 19]\n " color=yellow style=filled] + "BlockVar_blockPostOk3" -> "BlockVar_blockPostOk2" ; +"BlockVar_blockPostOk2" [label="2: Exit BlockVar_blockPostOk \n " color=yellow style=filled] - 15 -> 18 ; -14 [label="14: DeclStmt \n n$4=*&addBlock:_fn_ (*) [line 23]\n n$5=n$4(1:int ,2:int ) [line 23]\n *&x:int =n$5 [line 23]\n " shape="box"] +"BlockVar_blockPostOk1" [label="1: Start BlockVar_blockPostOk\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * i:int \n DECLARE_LOCALS(&return,&my_block,&x,&i); [line 39]\n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: DeclStmt \n *&p:int *=0 [line 24]\n " shape="box"] + "BlockVar_blockPostOk1" -> "BlockVar_blockPostOk6" ; +"__objc_anonymous_block_BlockVar_navigateToURLInBackground______14" [label="4: DeclStmt \n n$9=_fun_BlockVar_test() [line 20]\n *&res:int =n$9 [line 20]\n " shape="box"] - 13 -> 8 ; -12 [label="12: Return Stmt \n n$3=*&x:int [line 28]\n *&return:int =n$3 [line 28]\n " shape="box"] + "__objc_anonymous_block_BlockVar_navigateToURLInBackground______14" -> "__objc_anonymous_block_BlockVar_navigateToURLInBackground______13" ; +"__objc_anonymous_block_BlockVar_navigateToURLInBackground______13" [label="3: Return Stmt \n n$6=*&a:int [line 21]\n n$7=*&b:int [line 21]\n n$8=*&res:int [line 21]\n *&return:int =((n$6 + n$7) + n$8) [line 21]\n " shape="box"] - 12 -> 5 ; -11 [label="11: Return Stmt \n n$1=*&p:int * [line 26]\n n$2=*n$1:int [line 26]\n *&return:int =n$2 [line 26]\n " shape="box"] + "__objc_anonymous_block_BlockVar_navigateToURLInBackground______13" -> "__objc_anonymous_block_BlockVar_navigateToURLInBackground______12" ; +"__objc_anonymous_block_BlockVar_navigateToURLInBackground______12" [label="2: Exit __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 \n " color=yellow style=filled] - 11 -> 5 ; -10 [label="10: Prune (false branch) \n PRUNE(((n$0 == 8) == 0), false); [line 25]\n " shape="invhouse"] +"__objc_anonymous_block_BlockVar_navigateToURLInBackground______11" [label="1: Start __objc_anonymous_block_BlockVar_navigateToURLInBackground______1\nFormals: a:int b:int \nLocals: res:int \n DECLARE_LOCALS(&return,&res); [line 19]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Prune (true branch) \n PRUNE(((n$0 == 8) != 0), true); [line 25]\n " shape="invhouse"] + "__objc_anonymous_block_BlockVar_navigateToURLInBackground______11" -> "__objc_anonymous_block_BlockVar_navigateToURLInBackground______14" ; +"BlockVar_test3" [label="3: Return Stmt \n *&return:int =5 [line 15]\n " shape="box"] - 9 -> 11 ; -8 [label="8: BinaryOperatorStmt: EQ \n n$0=*&x:int [line 25]\n " shape="box"] + "BlockVar_test3" -> "BlockVar_test2" ; +"BlockVar_test2" [label="2: Exit BlockVar_test \n " color=yellow style=filled] - 8 -> 9 ; - 8 -> 10 ; -7 [label="7: between_join_and_exit \n " shape="box"] +"BlockVar_test1" [label="1: Start BlockVar_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 7 -> 5 ; -6 [label="6: + \n " ] + "BlockVar_test1" -> "BlockVar_test3" ; +"__objc_anonymous_block_BlockVar_blockPostBad______23" [label="3: Return Stmt \n n$15=*&x:int * [line 34]\n *&return:int *=n$15 [line 34]\n " shape="box"] - 6 -> 7 ; -5 [label="5: Exit BlockVar_navigateToURLInBackground \n " color=yellow style=filled] + "__objc_anonymous_block_BlockVar_blockPostBad______23" -> "__objc_anonymous_block_BlockVar_blockPostBad______22" ; +"__objc_anonymous_block_BlockVar_blockPostBad______22" [label="2: Exit __objc_anonymous_block_BlockVar_blockPostBad______2 \n " color=yellow style=filled] -4 [label="4: Start BlockVar_navigateToURLInBackground\nFormals: \nLocals: p:int * x:int addBlock:_fn_ (*) \n DECLARE_LOCALS(&return,&p,&x,&addBlock); [line 18]\n " color=yellow style=filled] +"__objc_anonymous_block_BlockVar_blockPostBad______21" [label="1: Start __objc_anonymous_block_BlockVar_blockPostBad______2\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 33]\n " color=yellow style=filled] - 4 -> 19 ; -3 [label="3: Return Stmt \n *&return:int =5 [line 15]\n " shape="box"] + "__objc_anonymous_block_BlockVar_blockPostBad______21" -> "__objc_anonymous_block_BlockVar_blockPostBad______23" ; +"__objc_anonymous_block_BlockVar_capturedNullDeref______43" [label="3: Return Stmt \n n$28=*&x:int * [line 51]\n n$29=*n$28:int [line 51]\n *&return:int =n$29 [line 51]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit BlockVar_test \n " color=yellow style=filled] + "__objc_anonymous_block_BlockVar_capturedNullDeref______43" -> "__objc_anonymous_block_BlockVar_capturedNullDeref______42" ; +"__objc_anonymous_block_BlockVar_capturedNullDeref______42" [label="2: Exit __objc_anonymous_block_BlockVar_capturedNullDeref______4 \n " color=yellow style=filled] -1 [label="1: Start BlockVar_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"__objc_anonymous_block_BlockVar_capturedNullDeref______41" [label="1: Start __objc_anonymous_block_BlockVar_capturedNullDeref______4\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] - 1 -> 3 ; + "__objc_anonymous_block_BlockVar_capturedNullDeref______41" -> "__objc_anonymous_block_BlockVar_capturedNullDeref______43" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/block/block-it.m.dot b/infer/tests/codetoanalyze/objc/shared/block/block-it.m.dot index 4575de9d9..37bf984f6 100644 --- a/infer/tests/codetoanalyze/objc/shared/block/block-it.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/block/block-it.m.dot @@ -1,221 +1,221 @@ /* @generated */ digraph iCFG { -54 [label="54: DeclStmt \n n$45=_fun___objc_alloc_no_fail(sizeof(class NSArray ):unsigned long ) [line 34]\n n$46=_fun_NSArray_init(n$45:class NSArray *) virtual [line 34]\n *&a:class NSArray *=n$46 [line 34]\n " shape="box"] +"MyBlock_array_trans20" [label="20: DeclStmt \n n$45=_fun___objc_alloc_no_fail(sizeof(class NSArray ):unsigned long ) [line 34]\n n$46=_fun_NSArray_init(n$45:class NSArray *) virtual [line 34]\n *&a:class NSArray *=n$46 [line 34]\n " shape="box"] - 54 -> 53 ; -53 [label="53: DeclStmt \n n$44=*&a:class NSArray * [line 36]\n *&objects:class NSArray *=n$44 [line 36]\n " shape="box"] + "MyBlock_array_trans20" -> "MyBlock_array_trans19" ; +"MyBlock_array_trans19" [label="19: DeclStmt \n n$44=*&a:class NSArray * [line 36]\n *&objects:class NSArray *=n$44 [line 36]\n " shape="box"] - 53 -> 52 ; -52 [label="52: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MyBlock_array_trans______2); [line 40]\n n$43=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MyBlock_array_trans______2 ):unsigned long ) [line 40]\n *&__objc_anonymous_block_MyBlock_array_trans______2:class __objc_anonymous_block_MyBlock_array_trans______2 =n$43 [line 40]\n *&enumerateObjectsUsingBlock:_fn_ (*)=(_fun___objc_anonymous_block_MyBlock_array_trans______2) [line 39]\n " shape="box"] + "MyBlock_array_trans19" -> "MyBlock_array_trans18" ; +"MyBlock_array_trans18" [label="18: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MyBlock_array_trans______2); [line 40]\n n$43=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MyBlock_array_trans______2 ):unsigned long ) [line 40]\n *&__objc_anonymous_block_MyBlock_array_trans______2:class __objc_anonymous_block_MyBlock_array_trans______2 =n$43 [line 40]\n *&enumerateObjectsUsingBlock:_fn_ (*)=(_fun___objc_anonymous_block_MyBlock_array_trans______2) [line 39]\n " shape="box"] - 52 -> 44 ; -51 [label="51: BinaryOperatorStmt: Assign \n n$42=*&stop:_Bool * [line 45]\n *n$42:_Bool =1 [line 45]\n " shape="box"] + "MyBlock_array_trans18" -> "MyBlock_array_trans17" ; +"MyBlock_array_trans17" [label="17: DeclStmt \n n$40=_fun_malloc_no_fail(sizeof(_Bool ):_Bool ) [line 48]\n *&stop:_Bool *=n$40 [line 48]\n " shape="box"] - 51 -> 47 ; -50 [label="50: Prune (false branch) \n n$41=*&ShouldStop:int [line 44]\n PRUNE((n$41 == 0), false); [line 44]\n " shape="invhouse"] + "MyBlock_array_trans17" -> "MyBlock_array_trans16" ; +"MyBlock_array_trans16" [label="16: BinaryOperatorStmt: Assign \n n$39=*&stop:_Bool * [line 49]\n *n$39:_Bool =0 [line 49]\n " shape="box"] - 50 -> 47 ; -49 [label="49: Prune (true branch) \n n$41=*&ShouldStop:int [line 44]\n PRUNE((n$41 != 0), true); [line 44]\n " shape="invhouse"] + "MyBlock_array_trans16" -> "MyBlock_array_trans5" ; +"MyBlock_array_trans15" [label="15: DeclStmt \n n$36=*&objects:class NSArray * [line 53]\n n$37=*&idx:unsigned long [line 53]\n n$38=_fun_NSArray_objectAtIndexedSubscript:(n$36:class NSArray *,n$37:unsigned long ) virtual [line 53]\n *&object:struct objc_object *=n$38 [line 53]\n " shape="box"] - 49 -> 51 ; -48 [label="48: between_join_and_exit \n " shape="box"] + "MyBlock_array_trans15" -> "MyBlock_array_trans14" ; +"MyBlock_array_trans14" [label="14: Call n$32 \n n$32=*&enumerateObjectsUsingBlock:_fn_ (*) [line 54]\n n$33=*&object:struct objc_object * [line 54]\n n$34=*&idx:unsigned long [line 54]\n n$35=*&stop:_Bool * [line 54]\n n$32(n$33:struct objc_object *,n$34:unsigned long ,n$35:_Bool *) [line 54]\n " shape="box"] - 48 -> 46 ; -47 [label="47: + \n " ] + "MyBlock_array_trans14" -> "MyBlock_array_trans11" ; +"MyBlock_array_trans13" [label="13: Prune (false branch) \n PRUNE(((n$31 == 1) == 0), false); [line 55]\n " shape="invhouse"] - 47 -> 48 ; -46 [label="46: Exit __objc_anonymous_block_MyBlock_array_trans______2 \n " color=yellow style=filled] + "MyBlock_array_trans13" -> "MyBlock_array_trans10" ; +"MyBlock_array_trans12" [label="12: Prune (true branch) \n PRUNE(((n$31 == 1) != 0), true); [line 55]\n " shape="invhouse"] -45 [label="45: Start __objc_anonymous_block_MyBlock_array_trans______2\nFormals: object:struct objc_object * idx:unsigned long stop:_Bool *\nLocals: ShouldStop:int \n DECLARE_LOCALS(&return,&ShouldStop); [line 40]\n " color=yellow style=filled] + "MyBlock_array_trans12" -> "MyBlock_array_trans3" ; +"MyBlock_array_trans11" [label="11: BinaryOperatorStmt: EQ \n n$30=*&stop:_Bool * [line 55]\n n$31=*n$30:_Bool [line 55]\n " shape="box"] - 45 -> 49 ; - 45 -> 50 ; -44 [label="44: DeclStmt \n n$40=_fun_malloc_no_fail(sizeof(_Bool ):_Bool ) [line 48]\n *&stop:_Bool *=n$40 [line 48]\n " shape="box"] + "MyBlock_array_trans11" -> "MyBlock_array_trans12" ; + "MyBlock_array_trans11" -> "MyBlock_array_trans13" ; +"MyBlock_array_trans10" [label="10: + \n " ] - 44 -> 43 ; -43 [label="43: BinaryOperatorStmt: Assign \n n$39=*&stop:_Bool * [line 49]\n *n$39:_Bool =0 [line 49]\n " shape="box"] + "MyBlock_array_trans10" -> "MyBlock_array_trans6" ; +"MyBlock_array_trans9" [label="9: Prune (false branch) \n PRUNE(((n$27 < n$29) == 0), false); [line 51]\n " shape="invhouse"] - 43 -> 32 ; -42 [label="42: DeclStmt \n n$36=*&objects:class NSArray * [line 53]\n n$37=*&idx:unsigned long [line 53]\n n$38=_fun_NSArray_objectAtIndexedSubscript:(n$36:class NSArray *,n$37:unsigned long ) virtual [line 53]\n *&object:struct objc_object *=n$38 [line 53]\n " shape="box"] + "MyBlock_array_trans9" -> "MyBlock_array_trans3" ; +"MyBlock_array_trans8" [label="8: Prune (true branch) \n PRUNE(((n$27 < n$29) != 0), true); [line 51]\n " shape="invhouse"] - 42 -> 41 ; -41 [label="41: Call n$32 \n n$32=*&enumerateObjectsUsingBlock:_fn_ (*) [line 54]\n n$33=*&object:struct objc_object * [line 54]\n n$34=*&idx:unsigned long [line 54]\n n$35=*&stop:_Bool * [line 54]\n n$32(n$33:struct objc_object *,n$34:unsigned long ,n$35:_Bool *) [line 54]\n " shape="box"] + "MyBlock_array_trans8" -> "MyBlock_array_trans15" ; +"MyBlock_array_trans7" [label="7: BinaryOperatorStmt: LT \n n$27=*&idx:unsigned long [line 51]\n n$28=*&objects:class NSArray * [line 51]\n n$29=_fun_NSArray_count(n$28:class NSArray *) [line 51]\n " shape="box"] - 41 -> 38 ; -40 [label="40: Prune (false branch) \n PRUNE(((n$31 == 1) == 0), false); [line 55]\n " shape="invhouse"] + "MyBlock_array_trans7" -> "MyBlock_array_trans8" ; + "MyBlock_array_trans7" -> "MyBlock_array_trans9" ; +"MyBlock_array_trans6" [label="6: UnaryOperator \n n$26=*&idx:unsigned long [line 51]\n *&idx:unsigned long =(n$26 + 1) [line 51]\n " shape="box"] - 40 -> 37 ; -39 [label="39: Prune (true branch) \n PRUNE(((n$31 == 1) != 0), true); [line 55]\n " shape="invhouse"] + "MyBlock_array_trans6" -> "MyBlock_array_trans4" ; +"MyBlock_array_trans5" [label="5: DeclStmt \n *&idx:unsigned long =0 [line 51]\n " shape="box"] - 39 -> 30 ; -38 [label="38: BinaryOperatorStmt: EQ \n n$30=*&stop:_Bool * [line 55]\n n$31=*n$30:_Bool [line 55]\n " shape="box"] + "MyBlock_array_trans5" -> "MyBlock_array_trans4" ; +"MyBlock_array_trans4" [label="4: + \n " ] - 38 -> 39 ; - 38 -> 40 ; -37 [label="37: + \n " ] + "MyBlock_array_trans4" -> "MyBlock_array_trans7" ; +"MyBlock_array_trans3" [label="3: Call _fun_free \n n$25=*&stop:_Bool * [line 58]\n _fun_free(n$25:void *) [line 58]\n " shape="box"] - 37 -> 33 ; -36 [label="36: Prune (false branch) \n PRUNE(((n$27 < n$29) == 0), false); [line 51]\n " shape="invhouse"] + "MyBlock_array_trans3" -> "MyBlock_array_trans2" ; +"MyBlock_array_trans2" [label="2: Exit MyBlock_array_trans \n " color=yellow style=filled] - 36 -> 30 ; -35 [label="35: Prune (true branch) \n PRUNE(((n$27 < n$29) != 0), true); [line 51]\n " shape="invhouse"] +"MyBlock_array_trans1" [label="1: Start MyBlock_array_trans\nFormals: self:class MyBlock *\nLocals: idx:unsigned long object:struct objc_object * stop:_Bool * enumerateObjectsUsingBlock:_fn_ (*) objects:class NSArray * a:class NSArray * \n DECLARE_LOCALS(&return,&idx,&object,&stop,&enumerateObjectsUsingBlock,&objects,&a); [line 32]\n " color=yellow style=filled] - 35 -> 42 ; -34 [label="34: BinaryOperatorStmt: LT \n n$27=*&idx:unsigned long [line 51]\n n$28=*&objects:class NSArray * [line 51]\n n$29=_fun_NSArray_count(n$28:class NSArray *) [line 51]\n " shape="box"] + "MyBlock_array_trans1" -> "MyBlock_array_trans20" ; +"__objc_anonymous_block_MyBlock_array_trans______27" [label="7: BinaryOperatorStmt: Assign \n n$42=*&stop:_Bool * [line 45]\n *n$42:_Bool =1 [line 45]\n " shape="box"] - 34 -> 35 ; - 34 -> 36 ; -33 [label="33: UnaryOperator \n n$26=*&idx:unsigned long [line 51]\n *&idx:unsigned long =(n$26 + 1) [line 51]\n " shape="box"] + "__objc_anonymous_block_MyBlock_array_trans______27" -> "__objc_anonymous_block_MyBlock_array_trans______23" ; +"__objc_anonymous_block_MyBlock_array_trans______26" [label="6: Prune (false branch) \n n$41=*&ShouldStop:int [line 44]\n PRUNE((n$41 == 0), false); [line 44]\n " shape="invhouse"] - 33 -> 31 ; -32 [label="32: DeclStmt \n *&idx:unsigned long =0 [line 51]\n " shape="box"] + "__objc_anonymous_block_MyBlock_array_trans______26" -> "__objc_anonymous_block_MyBlock_array_trans______23" ; +"__objc_anonymous_block_MyBlock_array_trans______25" [label="5: Prune (true branch) \n n$41=*&ShouldStop:int [line 44]\n PRUNE((n$41 != 0), true); [line 44]\n " shape="invhouse"] - 32 -> 31 ; -31 [label="31: + \n " ] + "__objc_anonymous_block_MyBlock_array_trans______25" -> "__objc_anonymous_block_MyBlock_array_trans______27" ; +"__objc_anonymous_block_MyBlock_array_trans______24" [label="4: between_join_and_exit \n " shape="box"] - 31 -> 34 ; -30 [label="30: Call _fun_free \n n$25=*&stop:_Bool * [line 58]\n _fun_free(n$25:void *) [line 58]\n " shape="box"] + "__objc_anonymous_block_MyBlock_array_trans______24" -> "__objc_anonymous_block_MyBlock_array_trans______22" ; +"__objc_anonymous_block_MyBlock_array_trans______23" [label="3: + \n " ] - 30 -> 29 ; -29 [label="29: Exit MyBlock_array_trans \n " color=yellow style=filled] + "__objc_anonymous_block_MyBlock_array_trans______23" -> "__objc_anonymous_block_MyBlock_array_trans______24" ; +"__objc_anonymous_block_MyBlock_array_trans______22" [label="2: Exit __objc_anonymous_block_MyBlock_array_trans______2 \n " color=yellow style=filled] -28 [label="28: Start MyBlock_array_trans\nFormals: self:class MyBlock *\nLocals: idx:unsigned long object:struct objc_object * stop:_Bool * enumerateObjectsUsingBlock:_fn_ (*) objects:class NSArray * a:class NSArray * \n DECLARE_LOCALS(&return,&idx,&object,&stop,&enumerateObjectsUsingBlock,&objects,&a); [line 32]\n " color=yellow style=filled] +"__objc_anonymous_block_MyBlock_array_trans______21" [label="1: Start __objc_anonymous_block_MyBlock_array_trans______2\nFormals: object:struct objc_object * idx:unsigned long stop:_Bool *\nLocals: ShouldStop:int \n DECLARE_LOCALS(&return,&ShouldStop); [line 40]\n " color=yellow style=filled] - 28 -> 54 ; -27 [label="27: DeclStmt \n n$23=_fun___objc_alloc_no_fail(sizeof(class NSArray ):unsigned long ) [line 20]\n n$24=_fun_NSArray_init(n$23:class NSArray *) virtual [line 20]\n *&a:class NSArray *=n$24 [line 20]\n " shape="box"] + "__objc_anonymous_block_MyBlock_array_trans______21" -> "__objc_anonymous_block_MyBlock_array_trans______25" ; + "__objc_anonymous_block_MyBlock_array_trans______21" -> "__objc_anonymous_block_MyBlock_array_trans______26" ; +"__objc_anonymous_block_MyBlock_array______17" [label="7: BinaryOperatorStmt: Assign \n n$20=*&stop:_Bool * [line 27]\n *n$20:_Bool =1 [line 27]\n " shape="box"] - 27 -> 26 ; -26 [label="26: DeclStmt \n n$22=*&a:class NSArray * [line 21]\n *&objects:class NSArray *=n$22 [line 21]\n " shape="box"] + "__objc_anonymous_block_MyBlock_array______17" -> "__objc_anonymous_block_MyBlock_array______13" ; +"__objc_anonymous_block_MyBlock_array______16" [label="6: Prune (false branch) \n n$19=*&ShouldStop:int [line 26]\n PRUNE((n$19 == 0), false); [line 26]\n " shape="invhouse"] - 26 -> 25 ; -25 [label="25: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MyBlock_array______1); [line 21]\n n$21=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MyBlock_array______1 ):unsigned long ) [line 21]\n *&__objc_anonymous_block_MyBlock_array______1:class __objc_anonymous_block_MyBlock_array______1 =n$21 [line 21]\n *&0$?%__sil_tmp__objc_anonymous_block_MyBlock_array______1n$0:_fn_ (*)=(_fun___objc_anonymous_block_MyBlock_array______1) [line 21]\n " shape="box"] + "__objc_anonymous_block_MyBlock_array______16" -> "__objc_anonymous_block_MyBlock_array______13" ; +"__objc_anonymous_block_MyBlock_array______15" [label="5: Prune (true branch) \n n$19=*&ShouldStop:int [line 26]\n PRUNE((n$19 != 0), true); [line 26]\n " shape="invhouse"] - 25 -> 17 ; -24 [label="24: BinaryOperatorStmt: Assign \n n$20=*&stop:_Bool * [line 27]\n *n$20:_Bool =1 [line 27]\n " shape="box"] + "__objc_anonymous_block_MyBlock_array______15" -> "__objc_anonymous_block_MyBlock_array______17" ; +"__objc_anonymous_block_MyBlock_array______14" [label="4: between_join_and_exit \n " shape="box"] - 24 -> 20 ; -23 [label="23: Prune (false branch) \n n$19=*&ShouldStop:int [line 26]\n PRUNE((n$19 == 0), false); [line 26]\n " shape="invhouse"] + "__objc_anonymous_block_MyBlock_array______14" -> "__objc_anonymous_block_MyBlock_array______12" ; +"__objc_anonymous_block_MyBlock_array______13" [label="3: + \n " ] - 23 -> 20 ; -22 [label="22: Prune (true branch) \n n$19=*&ShouldStop:int [line 26]\n PRUNE((n$19 != 0), true); [line 26]\n " shape="invhouse"] + "__objc_anonymous_block_MyBlock_array______13" -> "__objc_anonymous_block_MyBlock_array______14" ; +"__objc_anonymous_block_MyBlock_array______12" [label="2: Exit __objc_anonymous_block_MyBlock_array______1 \n " color=yellow style=filled] - 22 -> 24 ; -21 [label="21: between_join_and_exit \n " shape="box"] +"__objc_anonymous_block_MyBlock_array______11" [label="1: Start __objc_anonymous_block_MyBlock_array______1\nFormals: object:struct objc_object * idx:unsigned long stop:_Bool *\nLocals: ShouldStop:int \n DECLARE_LOCALS(&return,&ShouldStop); [line 21]\n " color=yellow style=filled] - 21 -> 19 ; -20 [label="20: + \n " ] + "__objc_anonymous_block_MyBlock_array______11" -> "__objc_anonymous_block_MyBlock_array______15" ; + "__objc_anonymous_block_MyBlock_array______11" -> "__objc_anonymous_block_MyBlock_array______16" ; +"MyBlock_array20" [label="20: DeclStmt \n n$23=_fun___objc_alloc_no_fail(sizeof(class NSArray ):unsigned long ) [line 20]\n n$24=_fun_NSArray_init(n$23:class NSArray *) virtual [line 20]\n *&a:class NSArray *=n$24 [line 20]\n " shape="box"] - 20 -> 21 ; -19 [label="19: Exit __objc_anonymous_block_MyBlock_array______1 \n " color=yellow style=filled] + "MyBlock_array20" -> "MyBlock_array19" ; +"MyBlock_array19" [label="19: DeclStmt \n n$22=*&a:class NSArray * [line 21]\n *&objects:class NSArray *=n$22 [line 21]\n " shape="box"] -18 [label="18: Start __objc_anonymous_block_MyBlock_array______1\nFormals: object:struct objc_object * idx:unsigned long stop:_Bool *\nLocals: ShouldStop:int \n DECLARE_LOCALS(&return,&ShouldStop); [line 21]\n " color=yellow style=filled] + "MyBlock_array19" -> "MyBlock_array18" ; +"MyBlock_array18" [label="18: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MyBlock_array______1); [line 21]\n n$21=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MyBlock_array______1 ):unsigned long ) [line 21]\n *&__objc_anonymous_block_MyBlock_array______1:class __objc_anonymous_block_MyBlock_array______1 =n$21 [line 21]\n *&0$?%__sil_tmp__objc_anonymous_block_MyBlock_array______1n$0:_fn_ (*)=(_fun___objc_anonymous_block_MyBlock_array______1) [line 21]\n " shape="box"] - 18 -> 22 ; - 18 -> 23 ; -17 [label="17: DeclStmt \n n$18=_fun_malloc_no_fail(sizeof(signed char ):signed char ) [line 21]\n *&stop:_Bool *=n$18 [line 21]\n " shape="box"] + "MyBlock_array18" -> "MyBlock_array17" ; +"MyBlock_array17" [label="17: DeclStmt \n n$18=_fun_malloc_no_fail(sizeof(signed char ):signed char ) [line 21]\n *&stop:_Bool *=n$18 [line 21]\n " shape="box"] - 17 -> 16 ; -16 [label="16: BinaryOperatorStmt: Assign \n n$17=*&stop:_Bool * [line 21]\n *n$17:void =0 [line 21]\n " shape="box"] + "MyBlock_array17" -> "MyBlock_array16" ; +"MyBlock_array16" [label="16: BinaryOperatorStmt: Assign \n n$17=*&stop:_Bool * [line 21]\n *n$17:void =0 [line 21]\n " shape="box"] - 16 -> 5 ; -15 [label="15: DeclStmt \n n$14=*&objects:class NSArray * [line 21]\n n$15=*&idx:unsigned long [line 21]\n n$16=_fun_NSArray_objectAtIndexedSubscript:(n$14:class NSArray *,n$15:unsigned long ) virtual [line 21]\n *&object:struct objc_object *=n$16 [line 21]\n " shape="box"] + "MyBlock_array16" -> "MyBlock_array5" ; +"MyBlock_array15" [label="15: DeclStmt \n n$14=*&objects:class NSArray * [line 21]\n n$15=*&idx:unsigned long [line 21]\n n$16=_fun_NSArray_objectAtIndexedSubscript:(n$14:class NSArray *,n$15:unsigned long ) virtual [line 21]\n *&object:struct objc_object *=n$16 [line 21]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Call n$9 \n n$9=*&0$?%__sil_tmp__objc_anonymous_block_MyBlock_array______1n$0:_fn_ (*) [line 21]\n n$10=*&object:struct objc_object * [line 21]\n n$11=*&idx:unsigned long [line 21]\n n$12=*&stop:_Bool * [line 21]\n n$13=n$9(n$10:struct objc_object *,n$11:unsigned long ,n$12:_Bool *) [line 21]\n " shape="box"] + "MyBlock_array15" -> "MyBlock_array14" ; +"MyBlock_array14" [label="14: Call n$9 \n n$9=*&0$?%__sil_tmp__objc_anonymous_block_MyBlock_array______1n$0:_fn_ (*) [line 21]\n n$10=*&object:struct objc_object * [line 21]\n n$11=*&idx:unsigned long [line 21]\n n$12=*&stop:_Bool * [line 21]\n n$13=n$9(n$10:struct objc_object *,n$11:unsigned long ,n$12:_Bool *) [line 21]\n " shape="box"] - 14 -> 11 ; -13 [label="13: Prune (false branch) \n n$8=*n$7:signed char [line 21]\n PRUNE((n$8 == 0), false); [line 21]\n " shape="invhouse"] + "MyBlock_array14" -> "MyBlock_array11" ; +"MyBlock_array13" [label="13: Prune (false branch) \n n$8=*n$7:signed char [line 21]\n PRUNE((n$8 == 0), false); [line 21]\n " shape="invhouse"] - 13 -> 10 ; -12 [label="12: Prune (true branch) \n n$8=*n$7:signed char [line 21]\n PRUNE((n$8 != 0), true); [line 21]\n " shape="invhouse"] + "MyBlock_array13" -> "MyBlock_array10" ; +"MyBlock_array12" [label="12: Prune (true branch) \n n$8=*n$7:signed char [line 21]\n PRUNE((n$8 != 0), true); [line 21]\n " shape="invhouse"] - 12 -> 3 ; -11 [label="11: UnaryOperator \n n$7=*&stop:_Bool * [line 21]\n " shape="box"] + "MyBlock_array12" -> "MyBlock_array3" ; +"MyBlock_array11" [label="11: UnaryOperator \n n$7=*&stop:_Bool * [line 21]\n " shape="box"] - 11 -> 12 ; - 11 -> 13 ; -10 [label="10: + \n " ] + "MyBlock_array11" -> "MyBlock_array12" ; + "MyBlock_array11" -> "MyBlock_array13" ; +"MyBlock_array10" [label="10: + \n " ] - 10 -> 6 ; -9 [label="9: Prune (false branch) \n PRUNE(((n$4 < n$6) == 0), false); [line 21]\n " shape="invhouse"] + "MyBlock_array10" -> "MyBlock_array6" ; +"MyBlock_array9" [label="9: Prune (false branch) \n PRUNE(((n$4 < n$6) == 0), false); [line 21]\n " shape="invhouse"] - 9 -> 3 ; -8 [label="8: Prune (true branch) \n PRUNE(((n$4 < n$6) != 0), true); [line 21]\n " shape="invhouse"] + "MyBlock_array9" -> "MyBlock_array3" ; +"MyBlock_array8" [label="8: Prune (true branch) \n PRUNE(((n$4 < n$6) != 0), true); [line 21]\n " shape="invhouse"] - 8 -> 15 ; -7 [label="7: BinaryOperatorStmt: LT \n n$4=*&idx:unsigned long [line 21]\n n$5=*&objects:class NSArray * [line 21]\n n$6=_fun_NSArray_count(n$5:class NSArray *) virtual [line 21]\n " shape="box"] + "MyBlock_array8" -> "MyBlock_array15" ; +"MyBlock_array7" [label="7: BinaryOperatorStmt: LT \n n$4=*&idx:unsigned long [line 21]\n n$5=*&objects:class NSArray * [line 21]\n n$6=_fun_NSArray_count(n$5:class NSArray *) virtual [line 21]\n " shape="box"] - 7 -> 8 ; - 7 -> 9 ; -6 [label="6: UnaryOperator \n n$3=*&idx:unsigned long [line 21]\n *&idx:unsigned long =(n$3 + 1) [line 21]\n " shape="box"] + "MyBlock_array7" -> "MyBlock_array8" ; + "MyBlock_array7" -> "MyBlock_array9" ; +"MyBlock_array6" [label="6: UnaryOperator \n n$3=*&idx:unsigned long [line 21]\n *&idx:unsigned long =(n$3 + 1) [line 21]\n " shape="box"] - 6 -> 4 ; -5 [label="5: DeclStmt \n *&idx:unsigned long =0 [line 21]\n " shape="box"] + "MyBlock_array6" -> "MyBlock_array4" ; +"MyBlock_array5" [label="5: DeclStmt \n *&idx:unsigned long =0 [line 21]\n " shape="box"] - 5 -> 4 ; -4 [label="4: + \n " ] + "MyBlock_array5" -> "MyBlock_array4" ; +"MyBlock_array4" [label="4: + \n " ] - 4 -> 7 ; -3 [label="3: Call _fun_free \n n$1=*&stop:_Bool * [line 21]\n n$2=_fun_free(n$1:void *) [line 21]\n " shape="box"] + "MyBlock_array4" -> "MyBlock_array7" ; +"MyBlock_array3" [label="3: Call _fun_free \n n$1=*&stop:_Bool * [line 21]\n n$2=_fun_free(n$1:void *) [line 21]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit MyBlock_array \n " color=yellow style=filled] + "MyBlock_array3" -> "MyBlock_array2" ; +"MyBlock_array2" [label="2: Exit MyBlock_array \n " color=yellow style=filled] -1 [label="1: Start MyBlock_array\nFormals: self:class MyBlock *\nLocals: idx:unsigned long object:struct objc_object * stop:_Bool * 0$?%__sil_tmp__objc_anonymous_block_MyBlock_array______1n$0:_fn_ (*) objects:class NSArray * a:class NSArray * \n DECLARE_LOCALS(&return,&idx,&object,&stop,&0$?%__sil_tmp__objc_anonymous_block_MyBlock_array______1n$0,&objects,&a); [line 18]\n " color=yellow style=filled] +"MyBlock_array1" [label="1: Start MyBlock_array\nFormals: self:class MyBlock *\nLocals: idx:unsigned long object:struct objc_object * stop:_Bool * 0$?%__sil_tmp__objc_anonymous_block_MyBlock_array______1n$0:_fn_ (*) objects:class NSArray * a:class NSArray * \n DECLARE_LOCALS(&return,&idx,&object,&stop,&0$?%__sil_tmp__objc_anonymous_block_MyBlock_array______1n$0,&objects,&a); [line 18]\n " color=yellow style=filled] - 1 -> 27 ; + "MyBlock_array1" -> "MyBlock_array20" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/block/block.m.dot b/infer/tests/codetoanalyze/objc/shared/block/block.m.dot index df2f7b47d..8b6780af1 100644 --- a/infer/tests/codetoanalyze/objc/shared/block/block.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/block/block.m.dot @@ -1,98 +1,98 @@ /* @generated */ digraph iCFG { -25 [label="25: Return Stmt \n n$0=_fun_main1(4:int ) [line 46]\n *&return:int =n$0 [line 46]\n " shape="box"] +"__objc_anonymous_block___objc_anonymous_block_main1______2______33" [label="3: Return Stmt \n n$19=*&z:int [line 25]\n n$20=*&#GB$main1_s:int [line 25]\n n$21=*&x:int [line 25]\n n$22=*&bla:int [line 25]\n *&return:int =(((n$19 + n$20) + n$21) + n$22) [line 25]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit BlockMain \n " color=yellow style=filled] + "__objc_anonymous_block___objc_anonymous_block_main1______2______33" -> "__objc_anonymous_block___objc_anonymous_block_main1______2______32" ; +"__objc_anonymous_block___objc_anonymous_block_main1______2______32" [label="2: Exit __objc_anonymous_block___objc_anonymous_block_main1______2______3 \n " color=yellow style=filled] -23 [label="23: Start BlockMain\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] +"__objc_anonymous_block___objc_anonymous_block_main1______2______31" [label="1: Start __objc_anonymous_block___objc_anonymous_block_main1______2______3\nFormals: x:int bla:int z:int \nLocals: \nCaptured: x:int bla:int \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 23 -> 25 ; -22 [label="22: DeclStmt \n *&#GB$main1_s:int =3 [line 12]\n " shape="box"] + "__objc_anonymous_block___objc_anonymous_block_main1______2______31" -> "__objc_anonymous_block___objc_anonymous_block_main1______2______33" ; +"__objc_anonymous_block_main1______26" [label="6: DeclStmt \n *&bla:int =3 [line 22]\n " shape="box"] - 22 -> 21 ; -21 [label="21: DeclStmt \n *&x:int =7 [line 13]\n " shape="box"] + "__objc_anonymous_block_main1______26" -> "__objc_anonymous_block_main1______25" ; +"__objc_anonymous_block_main1______25" [label="5: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block___objc_anonymous_block_main1______2______3); [line 24]\n n$23=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block___objc_anonymous_block_main1______2______3 ):unsigned long ) [line 24]\n *&__objc_anonymous_block___objc_anonymous_block_main1______2______3:class __objc_anonymous_block___objc_anonymous_block_main1______2______3 =n$23 [line 24]\n n$24=*&x:int [line 24]\n n$25=*&bla:int [line 24]\n n$26=*&#GB$main1_s:int [line 24]\n *n$23.x:int =n$24 [line 24]\n *n$23.bla:int =n$25 [line 24]\n *n$23.main1_s:int =n$26 [line 24]\n n$17=*&x:int [line 24]\n n$18=*&bla:int [line 24]\n *&addblock2:_fn_ (*)=(_fun___objc_anonymous_block___objc_anonymous_block_main1______2______3,n$17,n$18) [line 24]\n " shape="box"] - 21 -> 20 ; -20 [label="20: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_main1______2); [line 18]\n n$27=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_main1______2 ):unsigned long ) [line 18]\n *&__objc_anonymous_block_main1______2:class __objc_anonymous_block_main1______2 =n$27 [line 18]\n n$28=*&x:int [line 18]\n *n$27.x:int =n$28 [line 18]\n n$11=*&x:int [line 18]\n *&addblock:_fn_ (*)=(_fun___objc_anonymous_block_main1______2,n$11) [line 18]\n " shape="box"] + "__objc_anonymous_block_main1______25" -> "__objc_anonymous_block_main1______24" ; +"__objc_anonymous_block_main1______24" [label="4: BinaryOperatorStmt: Assign \n n$15=*&addblock2:_fn_ (*) [line 28]\n n$16=n$15(1:int ) [line 28]\n *&add2:int =n$16 [line 28]\n " shape="box"] - 20 -> 10 ; -19 [label="19: DeclStmt \n *&bla:int =3 [line 22]\n " shape="box"] + "__objc_anonymous_block_main1______24" -> "__objc_anonymous_block_main1______23" ; +"__objc_anonymous_block_main1______23" [label="3: Return Stmt \n n$12=*&c:int [line 29]\n n$13=*&add2:int [line 29]\n n$14=*&bla:int [line 29]\n *&return:int =((n$12 + n$13) + n$14) [line 29]\n " shape="box"] - 19 -> 18 ; -18 [label="18: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block___objc_anonymous_block_main1______2______3); [line 24]\n n$23=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block___objc_anonymous_block_main1______2______3 ):unsigned long ) [line 24]\n *&__objc_anonymous_block___objc_anonymous_block_main1______2______3:class __objc_anonymous_block___objc_anonymous_block_main1______2______3 =n$23 [line 24]\n n$24=*&x:int [line 24]\n n$25=*&bla:int [line 24]\n n$26=*&#GB$main1_s:int [line 24]\n *n$23.x:int =n$24 [line 24]\n *n$23.bla:int =n$25 [line 24]\n *n$23.main1_s:int =n$26 [line 24]\n n$17=*&x:int [line 24]\n n$18=*&bla:int [line 24]\n *&addblock2:_fn_ (*)=(_fun___objc_anonymous_block___objc_anonymous_block_main1______2______3,n$17,n$18) [line 24]\n " shape="box"] + "__objc_anonymous_block_main1______23" -> "__objc_anonymous_block_main1______22" ; +"__objc_anonymous_block_main1______22" [label="2: Exit __objc_anonymous_block_main1______2 \n " color=yellow style=filled] - 18 -> 14 ; -17 [label="17: Return Stmt \n n$19=*&z:int [line 25]\n n$20=*&#GB$main1_s:int [line 25]\n n$21=*&x:int [line 25]\n n$22=*&bla:int [line 25]\n *&return:int =(((n$19 + n$20) + n$21) + n$22) [line 25]\n " shape="box"] +"__objc_anonymous_block_main1______21" [label="1: Start __objc_anonymous_block_main1______2\nFormals: x:int c:int d:int \nLocals: bla:int add2:int addblock2:_fn_ (*)\nCaptured: x:int \n DECLARE_LOCALS(&return,&bla,&add2,&addblock2); [line 18]\n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Exit __objc_anonymous_block___objc_anonymous_block_main1______2______3 \n " color=yellow style=filled] + "__objc_anonymous_block_main1______21" -> "__objc_anonymous_block_main1______26" ; +"BlockMain3" [label="3: Return Stmt \n n$0=_fun_main1(4:int ) [line 46]\n *&return:int =n$0 [line 46]\n " shape="box"] -15 [label="15: Start __objc_anonymous_block___objc_anonymous_block_main1______2______3\nFormals: x:int bla:int z:int \nLocals: \nCaptured: x:int bla:int \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] + "BlockMain3" -> "BlockMain2" ; +"BlockMain2" [label="2: Exit BlockMain \n " color=yellow style=filled] - 15 -> 17 ; -14 [label="14: BinaryOperatorStmt: Assign \n n$15=*&addblock2:_fn_ (*) [line 28]\n n$16=n$15(1:int ) [line 28]\n *&add2:int =n$16 [line 28]\n " shape="box"] +"BlockMain1" [label="1: Start BlockMain\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Return Stmt \n n$12=*&c:int [line 29]\n n$13=*&add2:int [line 29]\n n$14=*&bla:int [line 29]\n *&return:int =((n$12 + n$13) + n$14) [line 29]\n " shape="box"] + "BlockMain1" -> "BlockMain3" ; +"__objc_anonymous_block_main1______13" [label="3: Return Stmt \n n$5=*&e:int [line 35]\n n$6=*&#GB$main1_s:int [line 35]\n *&return:int =(n$5 - n$6) [line 35]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit __objc_anonymous_block_main1______2 \n " color=yellow style=filled] + "__objc_anonymous_block_main1______13" -> "__objc_anonymous_block_main1______12" ; +"__objc_anonymous_block_main1______12" [label="2: Exit __objc_anonymous_block_main1______1 \n " color=yellow style=filled] -11 [label="11: Start __objc_anonymous_block_main1______2\nFormals: x:int c:int d:int \nLocals: bla:int add2:int addblock2:_fn_ (*)\nCaptured: x:int \n DECLARE_LOCALS(&return,&bla,&add2,&addblock2); [line 18]\n " color=yellow style=filled] +"__objc_anonymous_block_main1______11" [label="1: Start __objc_anonymous_block_main1______1\nFormals: e:int f:int \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 11 -> 19 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$9=*&addblock:_fn_ (*) [line 32]\n n$10=n$9(1:int ,2:int ) [line 32]\n *&add1:int =n$10 [line 32]\n " shape="box"] + "__objc_anonymous_block_main1______11" -> "__objc_anonymous_block_main1______13" ; +"main110" [label="10: DeclStmt \n *&#GB$main1_s:int =3 [line 12]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_main1______1); [line 34]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_main1______1 ):unsigned long ) [line 34]\n *&__objc_anonymous_block_main1______1:class __objc_anonymous_block_main1______1 =n$7 [line 34]\n n$8=*&#GB$main1_s:int [line 34]\n *n$7.main1_s:int =n$8 [line 34]\n *&addblock:_fn_ (*)=(_fun___objc_anonymous_block_main1______1) [line 34]\n " shape="box"] + "main110" -> "main19" ; +"main19" [label="9: DeclStmt \n *&x:int =7 [line 13]\n " shape="box"] - 9 -> 5 ; -8 [label="8: Return Stmt \n n$5=*&e:int [line 35]\n n$6=*&#GB$main1_s:int [line 35]\n *&return:int =(n$5 - n$6) [line 35]\n " shape="box"] + "main19" -> "main18" ; +"main18" [label="8: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_main1______2); [line 18]\n n$27=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_main1______2 ):unsigned long ) [line 18]\n *&__objc_anonymous_block_main1______2:class __objc_anonymous_block_main1______2 =n$27 [line 18]\n n$28=*&x:int [line 18]\n *n$27.x:int =n$28 [line 18]\n n$11=*&x:int [line 18]\n *&addblock:_fn_ (*)=(_fun___objc_anonymous_block_main1______2,n$11) [line 18]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit __objc_anonymous_block_main1______1 \n " color=yellow style=filled] + "main18" -> "main17" ; +"main17" [label="7: BinaryOperatorStmt: Assign \n n$9=*&addblock:_fn_ (*) [line 32]\n n$10=n$9(1:int ,2:int ) [line 32]\n *&add1:int =n$10 [line 32]\n " shape="box"] -6 [label="6: Start __objc_anonymous_block_main1______1\nFormals: e:int f:int \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] + "main17" -> "main16" ; +"main16" [label="6: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_main1______1); [line 34]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_main1______1 ):unsigned long ) [line 34]\n *&__objc_anonymous_block_main1______1:class __objc_anonymous_block_main1______1 =n$7 [line 34]\n n$8=*&#GB$main1_s:int [line 34]\n *n$7.main1_s:int =n$8 [line 34]\n *&addblock:_fn_ (*)=(_fun___objc_anonymous_block_main1______1) [line 34]\n " shape="box"] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$3=*&addblock:_fn_ (*) [line 38]\n n$4=n$3(3:int ,2:int ) [line 38]\n *&add2:int =n$4 [line 38]\n " shape="box"] + "main16" -> "main15" ; +"main15" [label="5: BinaryOperatorStmt: Assign \n n$3=*&addblock:_fn_ (*) [line 38]\n n$4=n$3(3:int ,2:int ) [line 38]\n *&add2:int =n$4 [line 38]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$1=*&add1:int [line 41]\n n$2=*&add2:int [line 41]\n *&y:int =(n$1 / n$2) [line 41]\n " shape="box"] + "main15" -> "main14" ; +"main14" [label="4: BinaryOperatorStmt: Assign \n n$1=*&add1:int [line 41]\n n$2=*&add2:int [line 41]\n *&y:int =(n$1 / n$2) [line 41]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&y:int [line 43]\n *&return:int =n$0 [line 43]\n " shape="box"] + "main14" -> "main13" ; +"main13" [label="3: Return Stmt \n n$0=*&y:int [line 43]\n *&return:int =n$0 [line 43]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main1 \n " color=yellow style=filled] + "main13" -> "main12" ; +"main12" [label="2: Exit main1 \n " color=yellow style=filled] -1 [label="1: Start main1\nFormals: y:int \nLocals: addblock:_fn_ (*) add2:int add1:int x:int \n DECLARE_LOCALS(&return,&addblock,&add2,&add1,&x); [line 10]\n " color=yellow style=filled] +"main11" [label="1: Start main1\nFormals: y:int \nLocals: addblock:_fn_ (*) add2:int add1:int x:int \n DECLARE_LOCALS(&return,&addblock,&add2,&add1,&x); [line 10]\n " color=yellow style=filled] - 1 -> 22 ; + "main11" -> "main110" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/block/block_no_args.m.dot b/infer/tests/codetoanalyze/objc/shared/block/block_no_args.m.dot index 82c5dce03..f92374673 100644 --- a/infer/tests/codetoanalyze/objc/shared/block/block_no_args.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/block/block_no_args.m.dot @@ -1,70 +1,70 @@ /* @generated */ digraph iCFG { -17 [label="17: BinaryOperatorStmt: Assign \n *&#GB$g:int =7 [line 22]\n " shape="box"] +"My_manager_m14" [label="14: BinaryOperatorStmt: Assign \n *&#GB$g:int =7 [line 22]\n " shape="box"] - 17 -> 16 ; -16 [label="16: DeclStmt \n *&z:int =3 [line 24]\n " shape="box"] + "My_manager_m14" -> "My_manager_m13" ; +"My_manager_m13" [label="13: DeclStmt \n *&z:int =3 [line 24]\n " shape="box"] - 16 -> 15 ; -15 [label="15: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_My_manager_m______1); [line 25]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_My_manager_m______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_My_manager_m______1:class __objc_anonymous_block_My_manager_m______1 =n$7 [line 25]\n n$8=*&z:int [line 25]\n n$9=*&#GB$g:int [line 25]\n *n$7.z:int =n$8 [line 25]\n *n$7.g:int =n$9 [line 25]\n n$5=*&z:int [line 25]\n *&b:_fn_ (*)=(_fun___objc_anonymous_block_My_manager_m______1,n$5) [line 25]\n " shape="box"] + "My_manager_m13" -> "My_manager_m12" ; +"My_manager_m12" [label="12: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_My_manager_m______1); [line 25]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_My_manager_m______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_My_manager_m______1:class __objc_anonymous_block_My_manager_m______1 =n$7 [line 25]\n n$8=*&z:int [line 25]\n n$9=*&#GB$g:int [line 25]\n *n$7.z:int =n$8 [line 25]\n *n$7.g:int =n$9 [line 25]\n n$5=*&z:int [line 25]\n *&b:_fn_ (*)=(_fun___objc_anonymous_block_My_manager_m______1,n$5) [line 25]\n " shape="box"] - 15 -> 11 ; -14 [label="14: BinaryOperatorStmt: Assign \n n$6=*&z:int [line 26]\n *&#GB$g:int =(n$6 + 3) [line 26]\n " shape="box"] + "My_manager_m12" -> "My_manager_m11" ; +"My_manager_m11" [label="11: Call n$4 \n n$4=*&b:_fn_ (*) [line 28]\n n$4() [line 28]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit __objc_anonymous_block_My_manager_m______1 \n " color=yellow style=filled] + "My_manager_m11" -> "My_manager_m10" ; +"My_manager_m10" [label="10: DeclStmt \n *&p:int *=0 [line 29]\n " shape="box"] -12 [label="12: Start __objc_anonymous_block_My_manager_m______1\nFormals: z:int \nLocals: \nCaptured: z:int \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] + "My_manager_m10" -> "My_manager_m5" ; +"My_manager_m9" [label="9: Return Stmt \n n$3=*&z:int [line 33]\n *&return:int =n$3 [line 33]\n " shape="box"] - 12 -> 14 ; -11 [label="11: Call n$4 \n n$4=*&b:_fn_ (*) [line 28]\n n$4() [line 28]\n " shape="box"] + "My_manager_m9" -> "My_manager_m2" ; +"My_manager_m8" [label="8: Return Stmt \n n$1=*&p:int * [line 31]\n n$2=*n$1:int [line 31]\n *&return:int =n$2 [line 31]\n " shape="box"] - 11 -> 10 ; -10 [label="10: DeclStmt \n *&p:int *=0 [line 29]\n " shape="box"] + "My_manager_m8" -> "My_manager_m2" ; +"My_manager_m7" [label="7: Prune (false branch) \n PRUNE(((n$0 == 6) == 0), false); [line 30]\n " shape="invhouse"] - 10 -> 5 ; -9 [label="9: Return Stmt \n n$3=*&z:int [line 33]\n *&return:int =n$3 [line 33]\n " shape="box"] + "My_manager_m7" -> "My_manager_m9" ; +"My_manager_m6" [label="6: Prune (true branch) \n PRUNE(((n$0 == 6) != 0), true); [line 30]\n " shape="invhouse"] - 9 -> 2 ; -8 [label="8: Return Stmt \n n$1=*&p:int * [line 31]\n n$2=*n$1:int [line 31]\n *&return:int =n$2 [line 31]\n " shape="box"] + "My_manager_m6" -> "My_manager_m8" ; +"My_manager_m5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&#GB$g:int [line 30]\n " shape="box"] - 8 -> 2 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 == 6) == 0), false); [line 30]\n " shape="invhouse"] + "My_manager_m5" -> "My_manager_m6" ; + "My_manager_m5" -> "My_manager_m7" ; +"My_manager_m4" [label="4: between_join_and_exit \n " shape="box"] - 7 -> 9 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 == 6) != 0), true); [line 30]\n " shape="invhouse"] + "My_manager_m4" -> "My_manager_m2" ; +"My_manager_m3" [label="3: + \n " ] - 6 -> 8 ; -5 [label="5: BinaryOperatorStmt: EQ \n n$0=*&#GB$g:int [line 30]\n " shape="box"] + "My_manager_m3" -> "My_manager_m4" ; +"My_manager_m2" [label="2: Exit My_manager_m \n " color=yellow style=filled] - 5 -> 6 ; - 5 -> 7 ; -4 [label="4: between_join_and_exit \n " shape="box"] +"My_manager_m1" [label="1: Start My_manager_m\nFormals: self:class My_manager *\nLocals: p:int * z:int b:_fn_ (*) \n DECLARE_LOCALS(&return,&p,&z,&b); [line 21]\n " color=yellow style=filled] - 4 -> 2 ; -3 [label="3: + \n " ] + "My_manager_m1" -> "My_manager_m14" ; +"__objc_anonymous_block_My_manager_m______13" [label="3: BinaryOperatorStmt: Assign \n n$6=*&z:int [line 26]\n *&#GB$g:int =(n$6 + 3) [line 26]\n " shape="box"] - 3 -> 4 ; -2 [label="2: Exit My_manager_m \n " color=yellow style=filled] + "__objc_anonymous_block_My_manager_m______13" -> "__objc_anonymous_block_My_manager_m______12" ; +"__objc_anonymous_block_My_manager_m______12" [label="2: Exit __objc_anonymous_block_My_manager_m______1 \n " color=yellow style=filled] -1 [label="1: Start My_manager_m\nFormals: self:class My_manager *\nLocals: p:int * z:int b:_fn_ (*) \n DECLARE_LOCALS(&return,&p,&z,&b); [line 21]\n " color=yellow style=filled] +"__objc_anonymous_block_My_manager_m______11" [label="1: Start __objc_anonymous_block_My_manager_m______1\nFormals: z:int \nLocals: \nCaptured: z:int \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 1 -> 17 ; + "__objc_anonymous_block_My_manager_m______11" -> "__objc_anonymous_block_My_manager_m______13" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/block/block_release.m.dot b/infer/tests/codetoanalyze/objc/shared/block/block_release.m.dot index b4cff26ed..5b5b324ad 100644 --- a/infer/tests/codetoanalyze/objc/shared/block/block_release.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/block/block_release.m.dot @@ -1,79 +1,79 @@ /* @generated */ digraph iCFG { -19 [label="19: DeclStmt \n *&z:int =3 [line 22]\n " shape="box"] +"__objc_anonymous_block_My_manager_blockReleaseTODO______17" [label="7: Call _fun_CGImageRelease \n n$7=*&newImage:struct CGImage * [line 27]\n _fun_CGImageRelease(n$7:struct CGImage *) [line 27]\n " shape="box"] - 19 -> 18 ; -18 [label="18: DeclStmt \n n$12=_fun_CGBitmapContextCreate(0:void *,0:unsigned long ,0:unsigned long ,8:unsigned long ,0:unsigned long ,0:struct CGColorSpace *,0:unsigned int ) [line 23]\n *&context:struct CGContext *=n$12 [line 23]\n " shape="box"] + "__objc_anonymous_block_My_manager_blockReleaseTODO______17" -> "__objc_anonymous_block_My_manager_blockReleaseTODO______13" ; +"__objc_anonymous_block_My_manager_blockReleaseTODO______16" [label="6: Prune (false branch) \n n$6=*&newImage:struct CGImage * [line 26]\n PRUNE((n$6 == 0), false); [line 26]\n " shape="invhouse"] - 18 -> 17 ; -17 [label="17: DeclStmt \n n$10=*&context:struct CGContext * [line 24]\n n$11=_fun_CGBitmapContextCreateImage(n$10:struct CGContext *) [line 24]\n *&newImage:struct CGImage *=n$11 [line 24]\n " shape="box"] + "__objc_anonymous_block_My_manager_blockReleaseTODO______16" -> "__objc_anonymous_block_My_manager_blockReleaseTODO______13" ; +"__objc_anonymous_block_My_manager_blockReleaseTODO______15" [label="5: Prune (true branch) \n n$6=*&newImage:struct CGImage * [line 26]\n PRUNE((n$6 != 0), true); [line 26]\n " shape="invhouse"] - 17 -> 16 ; -16 [label="16: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_My_manager_blockReleaseTODO______1); [line 25]\n n$8=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_My_manager_blockReleaseTODO______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_My_manager_blockReleaseTODO______1:class __objc_anonymous_block_My_manager_blockReleaseTODO______1 =n$8 [line 25]\n n$9=*&newImage:struct CGImage * [line 25]\n *n$8.newImage:struct CGImage *=n$9 [line 25]\n n$5=*&newImage:struct CGImage * [line 25]\n *&b:_fn_ (*)=(_fun___objc_anonymous_block_My_manager_blockReleaseTODO______1,n$5) [line 25]\n " shape="box"] + "__objc_anonymous_block_My_manager_blockReleaseTODO______15" -> "__objc_anonymous_block_My_manager_blockReleaseTODO______17" ; +"__objc_anonymous_block_My_manager_blockReleaseTODO______14" [label="4: between_join_and_exit \n " shape="box"] - 16 -> 8 ; -15 [label="15: Call _fun_CGImageRelease \n n$7=*&newImage:struct CGImage * [line 27]\n _fun_CGImageRelease(n$7:struct CGImage *) [line 27]\n " shape="box"] + "__objc_anonymous_block_My_manager_blockReleaseTODO______14" -> "__objc_anonymous_block_My_manager_blockReleaseTODO______12" ; +"__objc_anonymous_block_My_manager_blockReleaseTODO______13" [label="3: + \n " ] - 15 -> 11 ; -14 [label="14: Prune (false branch) \n n$6=*&newImage:struct CGImage * [line 26]\n PRUNE((n$6 == 0), false); [line 26]\n " shape="invhouse"] + "__objc_anonymous_block_My_manager_blockReleaseTODO______13" -> "__objc_anonymous_block_My_manager_blockReleaseTODO______14" ; +"__objc_anonymous_block_My_manager_blockReleaseTODO______12" [label="2: Exit __objc_anonymous_block_My_manager_blockReleaseTODO______1 \n " color=yellow style=filled] - 14 -> 11 ; -13 [label="13: Prune (true branch) \n n$6=*&newImage:struct CGImage * [line 26]\n PRUNE((n$6 != 0), true); [line 26]\n " shape="invhouse"] +"__objc_anonymous_block_My_manager_blockReleaseTODO______11" [label="1: Start __objc_anonymous_block_My_manager_blockReleaseTODO______1\nFormals: newImage:struct CGImage * a:int \nLocals: \nCaptured: newImage:struct CGImage * \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: between_join_and_exit \n " shape="box"] + "__objc_anonymous_block_My_manager_blockReleaseTODO______11" -> "__objc_anonymous_block_My_manager_blockReleaseTODO______15" ; + "__objc_anonymous_block_My_manager_blockReleaseTODO______11" -> "__objc_anonymous_block_My_manager_blockReleaseTODO______16" ; +"My_manager_blockReleaseTODO12" [label="12: DeclStmt \n *&z:int =3 [line 22]\n " shape="box"] - 12 -> 10 ; -11 [label="11: + \n " ] + "My_manager_blockReleaseTODO12" -> "My_manager_blockReleaseTODO11" ; +"My_manager_blockReleaseTODO11" [label="11: DeclStmt \n n$12=_fun_CGBitmapContextCreate(0:void *,0:unsigned long ,0:unsigned long ,8:unsigned long ,0:unsigned long ,0:struct CGColorSpace *,0:unsigned int ) [line 23]\n *&context:struct CGContext *=n$12 [line 23]\n " shape="box"] - 11 -> 12 ; -10 [label="10: Exit __objc_anonymous_block_My_manager_blockReleaseTODO______1 \n " color=yellow style=filled] + "My_manager_blockReleaseTODO11" -> "My_manager_blockReleaseTODO10" ; +"My_manager_blockReleaseTODO10" [label="10: DeclStmt \n n$10=*&context:struct CGContext * [line 24]\n n$11=_fun_CGBitmapContextCreateImage(n$10:struct CGContext *) [line 24]\n *&newImage:struct CGImage *=n$11 [line 24]\n " shape="box"] -9 [label="9: Start __objc_anonymous_block_My_manager_blockReleaseTODO______1\nFormals: newImage:struct CGImage * a:int \nLocals: \nCaptured: newImage:struct CGImage * \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] + "My_manager_blockReleaseTODO10" -> "My_manager_blockReleaseTODO9" ; +"My_manager_blockReleaseTODO9" [label="9: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_My_manager_blockReleaseTODO______1); [line 25]\n n$8=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_My_manager_blockReleaseTODO______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_My_manager_blockReleaseTODO______1:class __objc_anonymous_block_My_manager_blockReleaseTODO______1 =n$8 [line 25]\n n$9=*&newImage:struct CGImage * [line 25]\n *n$8.newImage:struct CGImage *=n$9 [line 25]\n n$5=*&newImage:struct CGImage * [line 25]\n *&b:_fn_ (*)=(_fun___objc_anonymous_block_My_manager_blockReleaseTODO______1,n$5) [line 25]\n " shape="box"] - 9 -> 13 ; - 9 -> 14 ; -8 [label="8: Call n$3 \n n$3=*&b:_fn_ (*) [line 29]\n n$4=*&z:int [line 29]\n n$3(n$4:int ) [line 29]\n " shape="box"] + "My_manager_blockReleaseTODO9" -> "My_manager_blockReleaseTODO8" ; +"My_manager_blockReleaseTODO8" [label="8: Call n$3 \n n$3=*&b:_fn_ (*) [line 29]\n n$4=*&z:int [line 29]\n n$3(n$4:int ) [line 29]\n " shape="box"] - 8 -> 5 ; - 8 -> 6 ; -7 [label="7: Call _fun_CGContextRelease \n n$2=*&context:struct CGContext * [line 31]\n _fun_CGContextRelease(n$2:struct CGContext *) [line 31]\n " shape="box"] + "My_manager_blockReleaseTODO8" -> "My_manager_blockReleaseTODO5" ; + "My_manager_blockReleaseTODO8" -> "My_manager_blockReleaseTODO6" ; +"My_manager_blockReleaseTODO7" [label="7: Call _fun_CGContextRelease \n n$2=*&context:struct CGContext * [line 31]\n _fun_CGContextRelease(n$2:struct CGContext *) [line 31]\n " shape="box"] - 7 -> 4 ; -6 [label="6: Prune (false branch) \n n$1=*&context:struct CGContext * [line 30]\n PRUNE((n$1 == 0), false); [line 30]\n " shape="invhouse"] + "My_manager_blockReleaseTODO7" -> "My_manager_blockReleaseTODO4" ; +"My_manager_blockReleaseTODO6" [label="6: Prune (false branch) \n n$1=*&context:struct CGContext * [line 30]\n PRUNE((n$1 == 0), false); [line 30]\n " shape="invhouse"] - 6 -> 4 ; -5 [label="5: Prune (true branch) \n n$1=*&context:struct CGContext * [line 30]\n PRUNE((n$1 != 0), true); [line 30]\n " shape="invhouse"] + "My_manager_blockReleaseTODO6" -> "My_manager_blockReleaseTODO4" ; +"My_manager_blockReleaseTODO5" [label="5: Prune (true branch) \n n$1=*&context:struct CGContext * [line 30]\n PRUNE((n$1 != 0), true); [line 30]\n " shape="invhouse"] - 5 -> 7 ; -4 [label="4: + \n " ] + "My_manager_blockReleaseTODO5" -> "My_manager_blockReleaseTODO7" ; +"My_manager_blockReleaseTODO4" [label="4: + \n " ] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&z:int [line 32]\n *&return:int =n$0 [line 32]\n " shape="box"] + "My_manager_blockReleaseTODO4" -> "My_manager_blockReleaseTODO3" ; +"My_manager_blockReleaseTODO3" [label="3: Return Stmt \n n$0=*&z:int [line 32]\n *&return:int =n$0 [line 32]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit My_manager_blockReleaseTODO \n " color=yellow style=filled] + "My_manager_blockReleaseTODO3" -> "My_manager_blockReleaseTODO2" ; +"My_manager_blockReleaseTODO2" [label="2: Exit My_manager_blockReleaseTODO \n " color=yellow style=filled] -1 [label="1: Start My_manager_blockReleaseTODO\nFormals: self:class My_manager *\nLocals: newImage:struct CGImage * context:struct CGContext * z:int b:_fn_ (*) \n DECLARE_LOCALS(&return,&newImage,&context,&z,&b); [line 20]\n " color=yellow style=filled] +"My_manager_blockReleaseTODO1" [label="1: Start My_manager_blockReleaseTODO\nFormals: self:class My_manager *\nLocals: newImage:struct CGImage * context:struct CGContext * z:int b:_fn_ (*) \n DECLARE_LOCALS(&return,&newImage,&context,&z,&b); [line 20]\n " color=yellow style=filled] - 1 -> 19 ; + "My_manager_blockReleaseTODO1" -> "My_manager_blockReleaseTODO12" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/block/dispatch.m.dot b/infer/tests/codetoanalyze/objc/shared/block/dispatch.m.dot index 7af68f629..f7b9decd1 100644 --- a/infer/tests/codetoanalyze/objc/shared/block/dispatch.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/block/dispatch.m.dot @@ -1,185 +1,185 @@ /* @generated */ digraph iCFG { -48 [label="48: DeclStmt \n n$3=_fun_DispatchA_sharedInstance() [line 76]\n *&b:class DispatchA *=n$3 [line 76]\n " shape="box"] +"DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object5" [label="5: DeclStmt \n n$30=_fun_DispatchA_dispatch_a_block_variable_from_macro() [line 68]\n *&a:class DispatchA *=n$30 [line 68]\n " shape="box"] - 48 -> 47 ; -47 [label="47: DeclStmt \n *&p:int *=0 [line 77]\n " shape="box"] + "DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object5" -> "DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object4" ; +"DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object4" [label="4: BinaryOperatorStmt: Assign \n n$29=*&a:class DispatchA * [line 69]\n *n$29._x:int =5 [line 69]\n " shape="box"] - 47 -> 42 ; -46 [label="46: Return Stmt \n *&return:int =0 [line 81]\n " shape="box"] + "DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object4" -> "DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object3" ; +"DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object3" [label="3: Return Stmt \n n$27=*&a:class DispatchA * [line 70]\n n$28=*n$27._x:int [line 70]\n *&return:int =(1 / (n$28 - 5)) [line 70]\n " shape="box"] - 46 -> 39 ; -45 [label="45: Return Stmt \n n$1=*&p:int * [line 79]\n n$2=*n$1:int [line 79]\n *&return:int =n$2 [line 79]\n " shape="box"] + "DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object3" -> "DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object2" ; +"DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object2" [label="2: Exit DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object \n " color=yellow style=filled] - 45 -> 39 ; -44 [label="44: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 78]\n " shape="invhouse"] +"DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object1" [label="1: Start DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object\nFormals: \nLocals: a:class DispatchA * \n DECLARE_LOCALS(&return,&a); [line 67]\n " color=yellow style=filled] - 44 -> 46 ; -43 [label="43: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 78]\n " shape="invhouse"] + "DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object1" -> "DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object5" ; +"__objc_anonymous_block_DispatchA_dispatch_a_block_variable______33" [label="3: BinaryOperatorStmt: Assign \n n$16=_fun___objc_alloc_no_fail(sizeof(class DispatchA ):unsigned long ) [line 48]\n n$17=_fun_DispatchA_init(n$16:class DispatchA *) virtual [line 48]\n *&#GB$DispatchA_dispatch_a_block_variable_static_storage__:struct objc_object *=n$17 [line 48]\n " shape="box"] - 43 -> 45 ; -42 [label="42: BinaryOperatorStmt: EQ \n n$0=*&b:class DispatchA * [line 78]\n " shape="box"] + "__objc_anonymous_block_DispatchA_dispatch_a_block_variable______33" -> "__objc_anonymous_block_DispatchA_dispatch_a_block_variable______32" ; +"__objc_anonymous_block_DispatchA_dispatch_a_block_variable______32" [label="2: Exit __objc_anonymous_block_DispatchA_dispatch_a_block_variable______3 \n " color=yellow style=filled] - 42 -> 43 ; - 42 -> 44 ; -41 [label="41: between_join_and_exit \n " shape="box"] +"__objc_anonymous_block_DispatchA_dispatch_a_block_variable______31" [label="1: Start __objc_anonymous_block_DispatchA_dispatch_a_block_variable______3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] - 41 -> 39 ; -40 [label="40: + \n " ] + "__objc_anonymous_block_DispatchA_dispatch_a_block_variable______31" -> "__objc_anonymous_block_DispatchA_dispatch_a_block_variable______33" ; +"__objc_anonymous_block_DispatchA_trans______23" [label="3: BinaryOperatorStmt: Assign \n n$9=_fun___objc_alloc_no_fail(sizeof(class DispatchA ):unsigned long ) [line 39]\n n$10=_fun_DispatchA_init(n$9:class DispatchA *) virtual [line 39]\n *&#GB$DispatchA_trans_sharedInstance:struct objc_object *=n$10 [line 39]\n " shape="box"] - 40 -> 41 ; -39 [label="39: Exit DispatchMain \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchA_trans______23" -> "__objc_anonymous_block_DispatchA_trans______22" ; +"__objc_anonymous_block_DispatchA_trans______22" [label="2: Exit __objc_anonymous_block_DispatchA_trans______2 \n " color=yellow style=filled] -38 [label="38: Start DispatchMain\nFormals: \nLocals: p:int * b:class DispatchA * \n DECLARE_LOCALS(&return,&p,&b); [line 75]\n " color=yellow style=filled] +"__objc_anonymous_block_DispatchA_trans______21" [label="1: Start __objc_anonymous_block_DispatchA_trans______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 38]\n " color=yellow style=filled] - 38 -> 48 ; -37 [label="37: DeclStmt \n n$30=_fun_DispatchA_dispatch_a_block_variable_from_macro() [line 68]\n *&a:class DispatchA *=n$30 [line 68]\n " shape="box"] + "__objc_anonymous_block_DispatchA_trans______21" -> "__objc_anonymous_block_DispatchA_trans______23" ; +"__objc_anonymous_block_DispatchA_sharedInstance______13" [label="3: BinaryOperatorStmt: Assign \n n$2=_fun___objc_alloc_no_fail(sizeof(class DispatchA ):unsigned long ) [line 31]\n n$3=_fun_DispatchA_init(n$2:class DispatchA *) virtual [line 31]\n *&#GB$DispatchA_sharedInstance_sharedInstance:struct objc_object *=n$3 [line 31]\n " shape="box"] - 37 -> 36 ; -36 [label="36: BinaryOperatorStmt: Assign \n n$29=*&a:class DispatchA * [line 69]\n *n$29._x:int =5 [line 69]\n " shape="box"] + "__objc_anonymous_block_DispatchA_sharedInstance______13" -> "__objc_anonymous_block_DispatchA_sharedInstance______12" ; +"__objc_anonymous_block_DispatchA_sharedInstance______12" [label="2: Exit __objc_anonymous_block_DispatchA_sharedInstance______1 \n " color=yellow style=filled] - 36 -> 35 ; -35 [label="35: Return Stmt \n n$27=*&a:class DispatchA * [line 70]\n n$28=*n$27._x:int [line 70]\n *&return:int =(1 / (n$28 - 5)) [line 70]\n " shape="box"] +"__objc_anonymous_block_DispatchA_sharedInstance______11" [label="1: Start __objc_anonymous_block_DispatchA_sharedInstance______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] - 35 -> 34 ; -34 [label="34: Exit DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchA_sharedInstance______11" -> "__objc_anonymous_block_DispatchA_sharedInstance______13" ; +"DispatchA_init3" [label="3: Return Stmt \n n$0=*&self:class DispatchA * [line 24]\n *&return:struct objc_object *=n$0 [line 24]\n " shape="box"] -33 [label="33: Start DispatchA_dispatch_a_block_variable_from_macro_delivers_initialised_object\nFormals: \nLocals: a:class DispatchA * \n DECLARE_LOCALS(&return,&a); [line 67]\n " color=yellow style=filled] + "DispatchA_init3" -> "DispatchA_init2" ; +"DispatchA_init2" [label="2: Exit DispatchA_init \n " color=yellow style=filled] - 33 -> 37 ; -32 [label="32: Return Stmt \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4); [line 58]\n n$25=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4 ):unsigned long ) [line 58]\n *&__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4:class __objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4 =n$25 [line 58]\n n$26=*&#GB$DispatchA_dispatch_a_block_variable_from_macro_static_storage__:struct objc_object * [line 58]\n *n$25.DispatchA_dispatch_a_block_variable_from_macro_static_storage__:struct objc_object *=n$26 [line 58]\n *&initialization_block__:_fn_ (*)=(_fun___objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4) [line 58]\n n$21=*&initialization_block__:_fn_ (*) [line 62]\n n$22=n$21() [line 62]\n n$20=*&#GB$DispatchA_dispatch_a_block_variable_from_macro_static_storage__:struct objc_object * [line 63]\n *&return:struct objc_object *=n$20 [line 56]\n " shape="box"] +"DispatchA_init1" [label="1: Start DispatchA_init\nFormals: self:class DispatchA *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 32 -> 28 ; -31 [label="31: BinaryOperatorStmt: Assign \n n$23=_fun___objc_alloc_no_fail(sizeof(class DispatchA ):unsigned long ) [line 59]\n n$24=_fun_DispatchA_init(n$23:class DispatchA *) virtual [line 59]\n *&#GB$DispatchA_dispatch_a_block_variable_from_macro_static_storage__:struct objc_object *=n$24 [line 59]\n " shape="box"] + "DispatchA_init1" -> "DispatchA_init3" ; +"DispatchMain11" [label="11: DeclStmt \n n$3=_fun_DispatchA_sharedInstance() [line 76]\n *&b:class DispatchA *=n$3 [line 76]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Exit __objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4 \n " color=yellow style=filled] + "DispatchMain11" -> "DispatchMain10" ; +"DispatchMain10" [label="10: DeclStmt \n *&p:int *=0 [line 77]\n " shape="box"] -29 [label="29: Start __objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 58]\n " color=yellow style=filled] + "DispatchMain10" -> "DispatchMain5" ; +"DispatchMain9" [label="9: Return Stmt \n *&return:int =0 [line 81]\n " shape="box"] - 29 -> 31 ; -28 [label="28: Exit DispatchA_dispatch_a_block_variable_from_macro \n " color=yellow style=filled] + "DispatchMain9" -> "DispatchMain2" ; +"DispatchMain8" [label="8: Return Stmt \n n$1=*&p:int * [line 79]\n n$2=*n$1:int [line 79]\n *&return:int =n$2 [line 79]\n " shape="box"] -27 [label="27: Start DispatchA_dispatch_a_block_variable_from_macro\nFormals: \nLocals: initialization_block__:_fn_ (*) \n DECLARE_LOCALS(&return,&initialization_block__); [line 55]\n " color=yellow style=filled] + "DispatchMain8" -> "DispatchMain2" ; +"DispatchMain7" [label="7: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 78]\n " shape="invhouse"] - 27 -> 32 ; -26 [label="26: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchA_dispatch_a_block_variable______3); [line 47]\n n$18=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchA_dispatch_a_block_variable______3 ):unsigned long ) [line 47]\n *&__objc_anonymous_block_DispatchA_dispatch_a_block_variable______3:class __objc_anonymous_block_DispatchA_dispatch_a_block_variable______3 =n$18 [line 47]\n n$19=*&#GB$DispatchA_dispatch_a_block_variable_static_storage__:struct objc_object * [line 47]\n *n$18.DispatchA_dispatch_a_block_variable_static_storage__:struct objc_object *=n$19 [line 47]\n *&initialization_block__:_fn_ (*)=(_fun___objc_anonymous_block_DispatchA_dispatch_a_block_variable______3) [line 47]\n " shape="box"] + "DispatchMain7" -> "DispatchMain9" ; +"DispatchMain6" [label="6: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 78]\n " shape="invhouse"] - 26 -> 22 ; -25 [label="25: BinaryOperatorStmt: Assign \n n$16=_fun___objc_alloc_no_fail(sizeof(class DispatchA ):unsigned long ) [line 48]\n n$17=_fun_DispatchA_init(n$16:class DispatchA *) virtual [line 48]\n *&#GB$DispatchA_dispatch_a_block_variable_static_storage__:struct objc_object *=n$17 [line 48]\n " shape="box"] + "DispatchMain6" -> "DispatchMain8" ; +"DispatchMain5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&b:class DispatchA * [line 78]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit __objc_anonymous_block_DispatchA_dispatch_a_block_variable______3 \n " color=yellow style=filled] + "DispatchMain5" -> "DispatchMain6" ; + "DispatchMain5" -> "DispatchMain7" ; +"DispatchMain4" [label="4: between_join_and_exit \n " shape="box"] -23 [label="23: Start __objc_anonymous_block_DispatchA_dispatch_a_block_variable______3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] + "DispatchMain4" -> "DispatchMain2" ; +"DispatchMain3" [label="3: + \n " ] - 23 -> 25 ; -22 [label="22: Call n$14 \n n$14=*&initialization_block__:_fn_ (*) [line 51]\n n$15=n$14() [line 51]\n " shape="box"] + "DispatchMain3" -> "DispatchMain4" ; +"DispatchMain2" [label="2: Exit DispatchMain \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Return Stmt \n n$13=*&#GB$DispatchA_dispatch_a_block_variable_static_storage__:struct objc_object * [line 52]\n *&return:struct objc_object *=n$13 [line 52]\n " shape="box"] +"DispatchMain1" [label="1: Start DispatchMain\nFormals: \nLocals: p:int * b:class DispatchA * \n DECLARE_LOCALS(&return,&p,&b); [line 75]\n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Exit DispatchA_dispatch_a_block_variable \n " color=yellow style=filled] + "DispatchMain1" -> "DispatchMain11" ; +"DispatchA_dispatch_a_block_variable_from_macro3" [label="3: Return Stmt \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4); [line 58]\n n$25=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4 ):unsigned long ) [line 58]\n *&__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4:class __objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4 =n$25 [line 58]\n n$26=*&#GB$DispatchA_dispatch_a_block_variable_from_macro_static_storage__:struct objc_object * [line 58]\n *n$25.DispatchA_dispatch_a_block_variable_from_macro_static_storage__:struct objc_object *=n$26 [line 58]\n *&initialization_block__:_fn_ (*)=(_fun___objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4) [line 58]\n n$21=*&initialization_block__:_fn_ (*) [line 62]\n n$22=n$21() [line 62]\n n$20=*&#GB$DispatchA_dispatch_a_block_variable_from_macro_static_storage__:struct objc_object * [line 63]\n *&return:struct objc_object *=n$20 [line 56]\n " shape="box"] -19 [label="19: Start DispatchA_dispatch_a_block_variable\nFormals: \nLocals: initialization_block__:_fn_ (*) \n DECLARE_LOCALS(&return,&initialization_block__); [line 45]\n " color=yellow style=filled] + "DispatchA_dispatch_a_block_variable_from_macro3" -> "DispatchA_dispatch_a_block_variable_from_macro2" ; +"DispatchA_dispatch_a_block_variable_from_macro2" [label="2: Exit DispatchA_dispatch_a_block_variable_from_macro \n " color=yellow style=filled] - 19 -> 26 ; -18 [label="18: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchA_trans______2); [line 38]\n n$11=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchA_trans______2 ):unsigned long ) [line 38]\n *&__objc_anonymous_block_DispatchA_trans______2:class __objc_anonymous_block_DispatchA_trans______2 =n$11 [line 38]\n n$12=*&#GB$DispatchA_trans_sharedInstance:struct objc_object * [line 38]\n *n$11.DispatchA_trans_sharedInstance:struct objc_object *=n$12 [line 38]\n *&dummy_block:_fn_ (*)=(_fun___objc_anonymous_block_DispatchA_trans______2) [line 38]\n " shape="box"] +"DispatchA_dispatch_a_block_variable_from_macro1" [label="1: Start DispatchA_dispatch_a_block_variable_from_macro\nFormals: \nLocals: initialization_block__:_fn_ (*) \n DECLARE_LOCALS(&return,&initialization_block__); [line 55]\n " color=yellow style=filled] - 18 -> 14 ; -17 [label="17: BinaryOperatorStmt: Assign \n n$9=_fun___objc_alloc_no_fail(sizeof(class DispatchA ):unsigned long ) [line 39]\n n$10=_fun_DispatchA_init(n$9:class DispatchA *) virtual [line 39]\n *&#GB$DispatchA_trans_sharedInstance:struct objc_object *=n$10 [line 39]\n " shape="box"] + "DispatchA_dispatch_a_block_variable_from_macro1" -> "DispatchA_dispatch_a_block_variable_from_macro3" ; +"DispatchA_trans5" [label="5: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchA_trans______2); [line 38]\n n$11=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchA_trans______2 ):unsigned long ) [line 38]\n *&__objc_anonymous_block_DispatchA_trans______2:class __objc_anonymous_block_DispatchA_trans______2 =n$11 [line 38]\n n$12=*&#GB$DispatchA_trans_sharedInstance:struct objc_object * [line 38]\n *n$11.DispatchA_trans_sharedInstance:struct objc_object *=n$12 [line 38]\n *&dummy_block:_fn_ (*)=(_fun___objc_anonymous_block_DispatchA_trans______2) [line 38]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Exit __objc_anonymous_block_DispatchA_trans______2 \n " color=yellow style=filled] + "DispatchA_trans5" -> "DispatchA_trans4" ; +"DispatchA_trans4" [label="4: Call n$8 \n n$8=*&dummy_block:_fn_ (*) [line 41]\n n$8() [line 41]\n " shape="box"] -15 [label="15: Start __objc_anonymous_block_DispatchA_trans______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 38]\n " color=yellow style=filled] + "DispatchA_trans4" -> "DispatchA_trans3" ; +"DispatchA_trans3" [label="3: Return Stmt \n n$7=*&#GB$DispatchA_trans_sharedInstance:struct objc_object * [line 42]\n *&return:struct objc_object *=n$7 [line 42]\n " shape="box"] - 15 -> 17 ; -14 [label="14: Call n$8 \n n$8=*&dummy_block:_fn_ (*) [line 41]\n n$8() [line 41]\n " shape="box"] + "DispatchA_trans3" -> "DispatchA_trans2" ; +"DispatchA_trans2" [label="2: Exit DispatchA_trans \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Return Stmt \n n$7=*&#GB$DispatchA_trans_sharedInstance:struct objc_object * [line 42]\n *&return:struct objc_object *=n$7 [line 42]\n " shape="box"] +"DispatchA_trans1" [label="1: Start DispatchA_trans\nFormals: \nLocals: dummy_block:_fn_ (*) \n DECLARE_LOCALS(&return,&dummy_block); [line 36]\n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit DispatchA_trans \n " color=yellow style=filled] + "DispatchA_trans1" -> "DispatchA_trans5" ; +"__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______43" [label="3: BinaryOperatorStmt: Assign \n n$23=_fun___objc_alloc_no_fail(sizeof(class DispatchA ):unsigned long ) [line 59]\n n$24=_fun_DispatchA_init(n$23:class DispatchA *) virtual [line 59]\n *&#GB$DispatchA_dispatch_a_block_variable_from_macro_static_storage__:struct objc_object *=n$24 [line 59]\n " shape="box"] -11 [label="11: Start DispatchA_trans\nFormals: \nLocals: dummy_block:_fn_ (*) \n DECLARE_LOCALS(&return,&dummy_block); [line 36]\n " color=yellow style=filled] + "__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______43" -> "__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______42" ; +"__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______42" [label="2: Exit __objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4 \n " color=yellow style=filled] - 11 -> 18 ; -10 [label="10: Call (_fun___objc_anonymous_block_DispatchA_sharedInstance______1) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchA_sharedInstance______1); [line 30]\n n$4=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchA_sharedInstance______1 ):unsigned long ) [line 30]\n *&__objc_anonymous_block_DispatchA_sharedInstance______1:class __objc_anonymous_block_DispatchA_sharedInstance______1 =n$4 [line 30]\n n$5=*&#GB$DispatchA_sharedInstance_sharedInstance:struct objc_object * [line 30]\n *n$4.DispatchA_sharedInstance_sharedInstance:struct objc_object *=n$5 [line 30]\n n$6=(_fun___objc_anonymous_block_DispatchA_sharedInstance______1)() [line 30]\n " shape="box"] +"__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______41" [label="1: Start __objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 58]\n " color=yellow style=filled] - 10 -> 6 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$2=_fun___objc_alloc_no_fail(sizeof(class DispatchA ):unsigned long ) [line 31]\n n$3=_fun_DispatchA_init(n$2:class DispatchA *) virtual [line 31]\n *&#GB$DispatchA_sharedInstance_sharedInstance:struct objc_object *=n$3 [line 31]\n " shape="box"] + "__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______41" -> "__objc_anonymous_block_DispatchA_dispatch_a_block_variable_from_macro______43" ; +"DispatchA_sharedInstance4" [label="4: Call (_fun___objc_anonymous_block_DispatchA_sharedInstance______1) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchA_sharedInstance______1); [line 30]\n n$4=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchA_sharedInstance______1 ):unsigned long ) [line 30]\n *&__objc_anonymous_block_DispatchA_sharedInstance______1:class __objc_anonymous_block_DispatchA_sharedInstance______1 =n$4 [line 30]\n n$5=*&#GB$DispatchA_sharedInstance_sharedInstance:struct objc_object * [line 30]\n *n$4.DispatchA_sharedInstance_sharedInstance:struct objc_object *=n$5 [line 30]\n n$6=(_fun___objc_anonymous_block_DispatchA_sharedInstance______1)() [line 30]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit __objc_anonymous_block_DispatchA_sharedInstance______1 \n " color=yellow style=filled] + "DispatchA_sharedInstance4" -> "DispatchA_sharedInstance3" ; +"DispatchA_sharedInstance3" [label="3: Return Stmt \n n$1=*&#GB$DispatchA_sharedInstance_sharedInstance:struct objc_object * [line 33]\n *&return:struct objc_object *=n$1 [line 33]\n " shape="box"] -7 [label="7: Start __objc_anonymous_block_DispatchA_sharedInstance______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] + "DispatchA_sharedInstance3" -> "DispatchA_sharedInstance2" ; +"DispatchA_sharedInstance2" [label="2: Exit DispatchA_sharedInstance \n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Return Stmt \n n$1=*&#GB$DispatchA_sharedInstance_sharedInstance:struct objc_object * [line 33]\n *&return:struct objc_object *=n$1 [line 33]\n " shape="box"] +"DispatchA_sharedInstance1" [label="1: Start DispatchA_sharedInstance\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit DispatchA_sharedInstance \n " color=yellow style=filled] + "DispatchA_sharedInstance1" -> "DispatchA_sharedInstance4" ; +"DispatchA_dispatch_a_block_variable5" [label="5: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchA_dispatch_a_block_variable______3); [line 47]\n n$18=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchA_dispatch_a_block_variable______3 ):unsigned long ) [line 47]\n *&__objc_anonymous_block_DispatchA_dispatch_a_block_variable______3:class __objc_anonymous_block_DispatchA_dispatch_a_block_variable______3 =n$18 [line 47]\n n$19=*&#GB$DispatchA_dispatch_a_block_variable_static_storage__:struct objc_object * [line 47]\n *n$18.DispatchA_dispatch_a_block_variable_static_storage__:struct objc_object *=n$19 [line 47]\n *&initialization_block__:_fn_ (*)=(_fun___objc_anonymous_block_DispatchA_dispatch_a_block_variable______3) [line 47]\n " shape="box"] -4 [label="4: Start DispatchA_sharedInstance\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] + "DispatchA_dispatch_a_block_variable5" -> "DispatchA_dispatch_a_block_variable4" ; +"DispatchA_dispatch_a_block_variable4" [label="4: Call n$14 \n n$14=*&initialization_block__:_fn_ (*) [line 51]\n n$15=n$14() [line 51]\n " shape="box"] - 4 -> 10 ; -3 [label="3: Return Stmt \n n$0=*&self:class DispatchA * [line 24]\n *&return:struct objc_object *=n$0 [line 24]\n " shape="box"] + "DispatchA_dispatch_a_block_variable4" -> "DispatchA_dispatch_a_block_variable3" ; +"DispatchA_dispatch_a_block_variable3" [label="3: Return Stmt \n n$13=*&#GB$DispatchA_dispatch_a_block_variable_static_storage__:struct objc_object * [line 52]\n *&return:struct objc_object *=n$13 [line 52]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit DispatchA_init \n " color=yellow style=filled] + "DispatchA_dispatch_a_block_variable3" -> "DispatchA_dispatch_a_block_variable2" ; +"DispatchA_dispatch_a_block_variable2" [label="2: Exit DispatchA_dispatch_a_block_variable \n " color=yellow style=filled] -1 [label="1: Start DispatchA_init\nFormals: self:class DispatchA *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] +"DispatchA_dispatch_a_block_variable1" [label="1: Start DispatchA_dispatch_a_block_variable\nFormals: \nLocals: initialization_block__:_fn_ (*) \n DECLARE_LOCALS(&return,&initialization_block__); [line 45]\n " color=yellow style=filled] - 1 -> 3 ; + "DispatchA_dispatch_a_block_variable1" -> "DispatchA_dispatch_a_block_variable5" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/block/dispatch_examples.m.dot b/infer/tests/codetoanalyze/objc/shared/block/dispatch_examples.m.dot index 43c598de7..fc613d5af 100644 --- a/infer/tests/codetoanalyze/objc/shared/block/dispatch_examples.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/block/dispatch_examples.m.dot @@ -1,218 +1,218 @@ /* @generated */ digraph iCFG { -57 [label="57: DeclStmt \n *&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx *=0 [line 76]\n " shape="box"] +"__objc_anonymous_block_DispatchEx_dispatch_barrier_example______64" [label="4: BinaryOperatorStmt: Assign \n n$44=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 78]\n n$45=_fun_DispatchEx_init(n$44:class DispatchEx *) virtual [line 78]\n *&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx *=n$45 [line 78]\n " shape="box"] - 57 -> 56 ; -56 [label="56: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_barrier_example______6) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_barrier_example______6); [line 77]\n n$46=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_barrier_example______6 ):unsigned long ) [line 77]\n *&__objc_anonymous_block_DispatchEx_dispatch_barrier_example______6:class __objc_anonymous_block_DispatchEx_dispatch_barrier_example______6 =n$46 [line 77]\n n$47=*&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx * [line 77]\n *n$46.DispatchEx_dispatch_barrier_example_a:class DispatchEx *=n$47 [line 77]\n n$48=(_fun___objc_anonymous_block_DispatchEx_dispatch_barrier_example______6)() [line 77]\n " shape="box"] + "__objc_anonymous_block_DispatchEx_dispatch_barrier_example______64" -> "__objc_anonymous_block_DispatchEx_dispatch_barrier_example______63" ; +"__objc_anonymous_block_DispatchEx_dispatch_barrier_example______63" [label="3: BinaryOperatorStmt: Assign \n n$43=*&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx * [line 79]\n *n$43.x:int =10 [line 79]\n " shape="box"] - 56 -> 51 ; -55 [label="55: BinaryOperatorStmt: Assign \n n$44=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 78]\n n$45=_fun_DispatchEx_init(n$44:class DispatchEx *) virtual [line 78]\n *&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx *=n$45 [line 78]\n " shape="box"] + "__objc_anonymous_block_DispatchEx_dispatch_barrier_example______63" -> "__objc_anonymous_block_DispatchEx_dispatch_barrier_example______62" ; +"__objc_anonymous_block_DispatchEx_dispatch_barrier_example______62" [label="2: Exit __objc_anonymous_block_DispatchEx_dispatch_barrier_example______6 \n " color=yellow style=filled] - 55 -> 54 ; -54 [label="54: BinaryOperatorStmt: Assign \n n$43=*&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx * [line 79]\n *n$43.x:int =10 [line 79]\n " shape="box"] +"__objc_anonymous_block_DispatchEx_dispatch_barrier_example______61" [label="1: Start __objc_anonymous_block_DispatchEx_dispatch_barrier_example______6\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 77]\n " color=yellow style=filled] - 54 -> 53 ; -53 [label="53: Exit __objc_anonymous_block_DispatchEx_dispatch_barrier_example______6 \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_barrier_example______61" -> "__objc_anonymous_block_DispatchEx_dispatch_barrier_example______64" ; +"__objc_anonymous_block_DispatchEx_dispatch_after_example______34" [label="4: BinaryOperatorStmt: Assign \n n$20=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 51]\n n$21=_fun_DispatchEx_init(n$20:class DispatchEx *) virtual [line 51]\n *&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx *=n$21 [line 51]\n " shape="box"] -52 [label="52: Start __objc_anonymous_block_DispatchEx_dispatch_barrier_example______6\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 77]\n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_after_example______34" -> "__objc_anonymous_block_DispatchEx_dispatch_after_example______33" ; +"__objc_anonymous_block_DispatchEx_dispatch_after_example______33" [label="3: BinaryOperatorStmt: Assign \n n$19=*&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx * [line 52]\n *n$19.x:int =10 [line 52]\n " shape="box"] - 52 -> 55 ; -51 [label="51: Return Stmt \n n$41=*&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx * [line 81]\n n$42=*n$41.x:int [line 81]\n *&return:int =n$42 [line 81]\n " shape="box"] + "__objc_anonymous_block_DispatchEx_dispatch_after_example______33" -> "__objc_anonymous_block_DispatchEx_dispatch_after_example______32" ; +"__objc_anonymous_block_DispatchEx_dispatch_after_example______32" [label="2: Exit __objc_anonymous_block_DispatchEx_dispatch_after_example______3 \n " color=yellow style=filled] - 51 -> 50 ; -50 [label="50: Exit DispatchEx_dispatch_barrier_example \n " color=yellow style=filled] +"__objc_anonymous_block_DispatchEx_dispatch_after_example______31" [label="1: Start __objc_anonymous_block_DispatchEx_dispatch_after_example______3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] -49 [label="49: Start DispatchEx_dispatch_barrier_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 75]\n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_after_example______31" -> "__objc_anonymous_block_DispatchEx_dispatch_after_example______34" ; +"DispatchEx_dispatch_once_example5" [label="5: DeclStmt \n *&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx *=0 [line 25]\n " shape="box"] - 49 -> 57 ; -48 [label="48: DeclStmt \n *&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx *=0 [line 67]\n " shape="box"] + "DispatchEx_dispatch_once_example5" -> "DispatchEx_dispatch_once_example4" ; +"DispatchEx_dispatch_once_example4" [label="4: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_once_example______1) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_once_example______1); [line 29]\n n$6=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_once_example______1 ):unsigned long ) [line 29]\n *&__objc_anonymous_block_DispatchEx_dispatch_once_example______1:class __objc_anonymous_block_DispatchEx_dispatch_once_example______1 =n$6 [line 29]\n n$7=*&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx * [line 29]\n *n$6.DispatchEx_dispatch_once_example_a:class DispatchEx *=n$7 [line 29]\n n$8=(_fun___objc_anonymous_block_DispatchEx_dispatch_once_example______1)() [line 29]\n " shape="box"] - 48 -> 47 ; -47 [label="47: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5); [line 68]\n n$38=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5 ):unsigned long ) [line 68]\n *&__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5:class __objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5 =n$38 [line 68]\n n$39=*&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx * [line 68]\n *n$38.DispatchEx_dispatch_group_notify_example_a:class DispatchEx *=n$39 [line 68]\n n$40=(_fun___objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5)() [line 68]\n " shape="box"] + "DispatchEx_dispatch_once_example4" -> "DispatchEx_dispatch_once_example3" ; +"DispatchEx_dispatch_once_example3" [label="3: Return Stmt \n n$1=*&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx * [line 33]\n n$2=*n$1.x:int [line 33]\n *&return:int =n$2 [line 33]\n " shape="box"] - 47 -> 42 ; -46 [label="46: BinaryOperatorStmt: Assign \n n$36=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 69]\n n$37=_fun_DispatchEx_init(n$36:class DispatchEx *) virtual [line 69]\n *&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx *=n$37 [line 69]\n " shape="box"] + "DispatchEx_dispatch_once_example3" -> "DispatchEx_dispatch_once_example2" ; +"DispatchEx_dispatch_once_example2" [label="2: Exit DispatchEx_dispatch_once_example \n " color=yellow style=filled] - 46 -> 45 ; -45 [label="45: BinaryOperatorStmt: Assign \n n$35=*&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx * [line 70]\n *n$35.x:int =10 [line 70]\n " shape="box"] +"DispatchEx_dispatch_once_example1" [label="1: Start DispatchEx_dispatch_once_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 45 -> 44 ; -44 [label="44: Exit __objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5 \n " color=yellow style=filled] + "DispatchEx_dispatch_once_example1" -> "DispatchEx_dispatch_once_example5" ; +"DispatchEx_init3" [label="3: Return Stmt \n n$0=*&self:class DispatchEx * [line 21]\n *&return:struct objc_object *=n$0 [line 21]\n " shape="box"] -43 [label="43: Start __objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 68]\n " color=yellow style=filled] + "DispatchEx_init3" -> "DispatchEx_init2" ; +"DispatchEx_init2" [label="2: Exit DispatchEx_init \n " color=yellow style=filled] - 43 -> 46 ; -42 [label="42: Return Stmt \n n$33=*&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx * [line 72]\n n$34=*n$33.x:int [line 72]\n *&return:int =n$34 [line 72]\n " shape="box"] +"DispatchEx_init1" [label="1: Start DispatchEx_init\nFormals: self:class DispatchEx *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 42 -> 41 ; -41 [label="41: Exit DispatchEx_dispatch_group_notify_example \n " color=yellow style=filled] + "DispatchEx_init1" -> "DispatchEx_init3" ; +"DispatchEx_dispatch_group_notify_example5" [label="5: DeclStmt \n *&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx *=0 [line 67]\n " shape="box"] -40 [label="40: Start DispatchEx_dispatch_group_notify_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 66]\n " color=yellow style=filled] + "DispatchEx_dispatch_group_notify_example5" -> "DispatchEx_dispatch_group_notify_example4" ; +"DispatchEx_dispatch_group_notify_example4" [label="4: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5); [line 68]\n n$38=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5 ):unsigned long ) [line 68]\n *&__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5:class __objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5 =n$38 [line 68]\n n$39=*&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx * [line 68]\n *n$38.DispatchEx_dispatch_group_notify_example_a:class DispatchEx *=n$39 [line 68]\n n$40=(_fun___objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5)() [line 68]\n " shape="box"] - 40 -> 48 ; -39 [label="39: DeclStmt \n *&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx *=0 [line 58]\n " shape="box"] + "DispatchEx_dispatch_group_notify_example4" -> "DispatchEx_dispatch_group_notify_example3" ; +"DispatchEx_dispatch_group_notify_example3" [label="3: Return Stmt \n n$33=*&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx * [line 72]\n n$34=*n$33.x:int [line 72]\n *&return:int =n$34 [line 72]\n " shape="box"] - 39 -> 38 ; -38 [label="38: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_group_example______4) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_group_example______4); [line 59]\n n$30=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_group_example______4 ):unsigned long ) [line 59]\n *&__objc_anonymous_block_DispatchEx_dispatch_group_example______4:class __objc_anonymous_block_DispatchEx_dispatch_group_example______4 =n$30 [line 59]\n n$31=*&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx * [line 59]\n *n$30.DispatchEx_dispatch_group_example_a:class DispatchEx *=n$31 [line 59]\n n$32=(_fun___objc_anonymous_block_DispatchEx_dispatch_group_example______4)() [line 59]\n " shape="box"] + "DispatchEx_dispatch_group_notify_example3" -> "DispatchEx_dispatch_group_notify_example2" ; +"DispatchEx_dispatch_group_notify_example2" [label="2: Exit DispatchEx_dispatch_group_notify_example \n " color=yellow style=filled] - 38 -> 33 ; -37 [label="37: BinaryOperatorStmt: Assign \n n$28=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 60]\n n$29=_fun_DispatchEx_init(n$28:class DispatchEx *) virtual [line 60]\n *&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx *=n$29 [line 60]\n " shape="box"] +"DispatchEx_dispatch_group_notify_example1" [label="1: Start DispatchEx_dispatch_group_notify_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 66]\n " color=yellow style=filled] - 37 -> 36 ; -36 [label="36: BinaryOperatorStmt: Assign \n n$27=*&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx * [line 61]\n *n$27.x:int =10 [line 61]\n " shape="box"] + "DispatchEx_dispatch_group_notify_example1" -> "DispatchEx_dispatch_group_notify_example5" ; +"__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______54" [label="4: BinaryOperatorStmt: Assign \n n$36=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 69]\n n$37=_fun_DispatchEx_init(n$36:class DispatchEx *) virtual [line 69]\n *&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx *=n$37 [line 69]\n " shape="box"] - 36 -> 35 ; -35 [label="35: Exit __objc_anonymous_block_DispatchEx_dispatch_group_example______4 \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______54" -> "__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______53" ; +"__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______53" [label="3: BinaryOperatorStmt: Assign \n n$35=*&#GB$DispatchEx_dispatch_group_notify_example_a:class DispatchEx * [line 70]\n *n$35.x:int =10 [line 70]\n " shape="box"] -34 [label="34: Start __objc_anonymous_block_DispatchEx_dispatch_group_example______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 59]\n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______53" -> "__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______52" ; +"__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______52" [label="2: Exit __objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5 \n " color=yellow style=filled] - 34 -> 37 ; -33 [label="33: Return Stmt \n n$25=*&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx * [line 63]\n n$26=*n$25.x:int [line 63]\n *&return:int =n$26 [line 63]\n " shape="box"] +"__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______51" [label="1: Start __objc_anonymous_block_DispatchEx_dispatch_group_notify_example______5\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 68]\n " color=yellow style=filled] - 33 -> 32 ; -32 [label="32: Exit DispatchEx_dispatch_group_example \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______51" -> "__objc_anonymous_block_DispatchEx_dispatch_group_notify_example______54" ; +"DispatchEx_dispatch_after_example5" [label="5: DeclStmt \n *&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx *=0 [line 47]\n " shape="box"] -31 [label="31: Start DispatchEx_dispatch_group_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 57]\n " color=yellow style=filled] + "DispatchEx_dispatch_after_example5" -> "DispatchEx_dispatch_after_example4" ; +"DispatchEx_dispatch_after_example4" [label="4: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_after_example______3) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_after_example______3); [line 50]\n n$22=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_after_example______3 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_DispatchEx_dispatch_after_example______3:class __objc_anonymous_block_DispatchEx_dispatch_after_example______3 =n$22 [line 50]\n n$23=*&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx * [line 50]\n *n$22.DispatchEx_dispatch_after_example_a:class DispatchEx *=n$23 [line 50]\n n$24=(_fun___objc_anonymous_block_DispatchEx_dispatch_after_example______3)() [line 48]\n " shape="box"] - 31 -> 39 ; -30 [label="30: DeclStmt \n *&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx *=0 [line 47]\n " shape="box"] + "DispatchEx_dispatch_after_example4" -> "DispatchEx_dispatch_after_example3" ; +"DispatchEx_dispatch_after_example3" [label="3: Return Stmt \n n$17=*&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx * [line 54]\n n$18=*n$17.x:int [line 54]\n *&return:int =n$18 [line 54]\n " shape="box"] - 30 -> 29 ; -29 [label="29: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_after_example______3) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_after_example______3); [line 50]\n n$22=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_after_example______3 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_DispatchEx_dispatch_after_example______3:class __objc_anonymous_block_DispatchEx_dispatch_after_example______3 =n$22 [line 50]\n n$23=*&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx * [line 50]\n *n$22.DispatchEx_dispatch_after_example_a:class DispatchEx *=n$23 [line 50]\n n$24=(_fun___objc_anonymous_block_DispatchEx_dispatch_after_example______3)() [line 48]\n " shape="box"] + "DispatchEx_dispatch_after_example3" -> "DispatchEx_dispatch_after_example2" ; +"DispatchEx_dispatch_after_example2" [label="2: Exit DispatchEx_dispatch_after_example \n " color=yellow style=filled] - 29 -> 24 ; -28 [label="28: BinaryOperatorStmt: Assign \n n$20=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 51]\n n$21=_fun_DispatchEx_init(n$20:class DispatchEx *) virtual [line 51]\n *&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx *=n$21 [line 51]\n " shape="box"] +"DispatchEx_dispatch_after_example1" [label="1: Start DispatchEx_dispatch_after_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] - 28 -> 27 ; -27 [label="27: BinaryOperatorStmt: Assign \n n$19=*&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx * [line 52]\n *n$19.x:int =10 [line 52]\n " shape="box"] + "DispatchEx_dispatch_after_example1" -> "DispatchEx_dispatch_after_example5" ; +"__objc_anonymous_block_DispatchEx_dispatch_once_example______14" [label="4: BinaryOperatorStmt: Assign \n n$4=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 30]\n n$5=_fun_DispatchEx_init(n$4:class DispatchEx *) virtual [line 30]\n *&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx *=n$5 [line 30]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Exit __objc_anonymous_block_DispatchEx_dispatch_after_example______3 \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_once_example______14" -> "__objc_anonymous_block_DispatchEx_dispatch_once_example______13" ; +"__objc_anonymous_block_DispatchEx_dispatch_once_example______13" [label="3: BinaryOperatorStmt: Assign \n n$3=*&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx * [line 31]\n *n$3.x:int =10 [line 31]\n " shape="box"] -25 [label="25: Start __objc_anonymous_block_DispatchEx_dispatch_after_example______3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_once_example______13" -> "__objc_anonymous_block_DispatchEx_dispatch_once_example______12" ; +"__objc_anonymous_block_DispatchEx_dispatch_once_example______12" [label="2: Exit __objc_anonymous_block_DispatchEx_dispatch_once_example______1 \n " color=yellow style=filled] - 25 -> 28 ; -24 [label="24: Return Stmt \n n$17=*&#GB$DispatchEx_dispatch_after_example_a:class DispatchEx * [line 54]\n n$18=*n$17.x:int [line 54]\n *&return:int =n$18 [line 54]\n " shape="box"] +"__objc_anonymous_block_DispatchEx_dispatch_once_example______11" [label="1: Start __objc_anonymous_block_DispatchEx_dispatch_once_example______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Exit DispatchEx_dispatch_after_example \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_once_example______11" -> "__objc_anonymous_block_DispatchEx_dispatch_once_example______14" ; +"__objc_anonymous_block_DispatchEx_dispatch_async_example______24" [label="4: BinaryOperatorStmt: Assign \n n$12=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 40]\n n$13=_fun_DispatchEx_init(n$12:class DispatchEx *) virtual [line 40]\n *&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx *=n$13 [line 40]\n " shape="box"] -22 [label="22: Start DispatchEx_dispatch_after_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_async_example______24" -> "__objc_anonymous_block_DispatchEx_dispatch_async_example______23" ; +"__objc_anonymous_block_DispatchEx_dispatch_async_example______23" [label="3: BinaryOperatorStmt: Assign \n n$11=*&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx * [line 41]\n *n$11.x:int =10 [line 41]\n " shape="box"] - 22 -> 30 ; -21 [label="21: DeclStmt \n *&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx *=0 [line 37]\n " shape="box"] + "__objc_anonymous_block_DispatchEx_dispatch_async_example______23" -> "__objc_anonymous_block_DispatchEx_dispatch_async_example______22" ; +"__objc_anonymous_block_DispatchEx_dispatch_async_example______22" [label="2: Exit __objc_anonymous_block_DispatchEx_dispatch_async_example______2 \n " color=yellow style=filled] - 21 -> 20 ; -20 [label="20: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_async_example______2) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_async_example______2); [line 39]\n n$14=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_async_example______2 ):unsigned long ) [line 39]\n *&__objc_anonymous_block_DispatchEx_dispatch_async_example______2:class __objc_anonymous_block_DispatchEx_dispatch_async_example______2 =n$14 [line 39]\n n$15=*&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx * [line 39]\n *n$14.DispatchEx_dispatch_async_example_a:class DispatchEx *=n$15 [line 39]\n n$16=(_fun___objc_anonymous_block_DispatchEx_dispatch_async_example______2)() [line 38]\n " shape="box"] +"__objc_anonymous_block_DispatchEx_dispatch_async_example______21" [label="1: Start __objc_anonymous_block_DispatchEx_dispatch_async_example______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 39]\n " color=yellow style=filled] - 20 -> 15 ; -19 [label="19: BinaryOperatorStmt: Assign \n n$12=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 40]\n n$13=_fun_DispatchEx_init(n$12:class DispatchEx *) virtual [line 40]\n *&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx *=n$13 [line 40]\n " shape="box"] + "__objc_anonymous_block_DispatchEx_dispatch_async_example______21" -> "__objc_anonymous_block_DispatchEx_dispatch_async_example______24" ; +"DispatchEx_dispatch_group_example5" [label="5: DeclStmt \n *&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx *=0 [line 58]\n " shape="box"] - 19 -> 18 ; -18 [label="18: BinaryOperatorStmt: Assign \n n$11=*&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx * [line 41]\n *n$11.x:int =10 [line 41]\n " shape="box"] + "DispatchEx_dispatch_group_example5" -> "DispatchEx_dispatch_group_example4" ; +"DispatchEx_dispatch_group_example4" [label="4: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_group_example______4) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_group_example______4); [line 59]\n n$30=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_group_example______4 ):unsigned long ) [line 59]\n *&__objc_anonymous_block_DispatchEx_dispatch_group_example______4:class __objc_anonymous_block_DispatchEx_dispatch_group_example______4 =n$30 [line 59]\n n$31=*&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx * [line 59]\n *n$30.DispatchEx_dispatch_group_example_a:class DispatchEx *=n$31 [line 59]\n n$32=(_fun___objc_anonymous_block_DispatchEx_dispatch_group_example______4)() [line 59]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit __objc_anonymous_block_DispatchEx_dispatch_async_example______2 \n " color=yellow style=filled] + "DispatchEx_dispatch_group_example4" -> "DispatchEx_dispatch_group_example3" ; +"DispatchEx_dispatch_group_example3" [label="3: Return Stmt \n n$25=*&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx * [line 63]\n n$26=*n$25.x:int [line 63]\n *&return:int =n$26 [line 63]\n " shape="box"] -16 [label="16: Start __objc_anonymous_block_DispatchEx_dispatch_async_example______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 39]\n " color=yellow style=filled] + "DispatchEx_dispatch_group_example3" -> "DispatchEx_dispatch_group_example2" ; +"DispatchEx_dispatch_group_example2" [label="2: Exit DispatchEx_dispatch_group_example \n " color=yellow style=filled] - 16 -> 19 ; -15 [label="15: Return Stmt \n n$9=*&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx * [line 43]\n n$10=*n$9.x:int [line 43]\n *&return:int =n$10 [line 43]\n " shape="box"] +"DispatchEx_dispatch_group_example1" [label="1: Start DispatchEx_dispatch_group_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 57]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit DispatchEx_dispatch_async_example \n " color=yellow style=filled] + "DispatchEx_dispatch_group_example1" -> "DispatchEx_dispatch_group_example5" ; +"DispatchEx_dispatch_async_example5" [label="5: DeclStmt \n *&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx *=0 [line 37]\n " shape="box"] -13 [label="13: Start DispatchEx_dispatch_async_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] + "DispatchEx_dispatch_async_example5" -> "DispatchEx_dispatch_async_example4" ; +"DispatchEx_dispatch_async_example4" [label="4: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_async_example______2) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_async_example______2); [line 39]\n n$14=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_async_example______2 ):unsigned long ) [line 39]\n *&__objc_anonymous_block_DispatchEx_dispatch_async_example______2:class __objc_anonymous_block_DispatchEx_dispatch_async_example______2 =n$14 [line 39]\n n$15=*&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx * [line 39]\n *n$14.DispatchEx_dispatch_async_example_a:class DispatchEx *=n$15 [line 39]\n n$16=(_fun___objc_anonymous_block_DispatchEx_dispatch_async_example______2)() [line 38]\n " shape="box"] - 13 -> 21 ; -12 [label="12: DeclStmt \n *&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx *=0 [line 25]\n " shape="box"] + "DispatchEx_dispatch_async_example4" -> "DispatchEx_dispatch_async_example3" ; +"DispatchEx_dispatch_async_example3" [label="3: Return Stmt \n n$9=*&#GB$DispatchEx_dispatch_async_example_a:class DispatchEx * [line 43]\n n$10=*n$9.x:int [line 43]\n *&return:int =n$10 [line 43]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_once_example______1) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_once_example______1); [line 29]\n n$6=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_once_example______1 ):unsigned long ) [line 29]\n *&__objc_anonymous_block_DispatchEx_dispatch_once_example______1:class __objc_anonymous_block_DispatchEx_dispatch_once_example______1 =n$6 [line 29]\n n$7=*&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx * [line 29]\n *n$6.DispatchEx_dispatch_once_example_a:class DispatchEx *=n$7 [line 29]\n n$8=(_fun___objc_anonymous_block_DispatchEx_dispatch_once_example______1)() [line 29]\n " shape="box"] + "DispatchEx_dispatch_async_example3" -> "DispatchEx_dispatch_async_example2" ; +"DispatchEx_dispatch_async_example2" [label="2: Exit DispatchEx_dispatch_async_example \n " color=yellow style=filled] - 11 -> 6 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$4=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 30]\n n$5=_fun_DispatchEx_init(n$4:class DispatchEx *) virtual [line 30]\n *&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx *=n$5 [line 30]\n " shape="box"] +"DispatchEx_dispatch_async_example1" [label="1: Start DispatchEx_dispatch_async_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$3=*&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx * [line 31]\n *n$3.x:int =10 [line 31]\n " shape="box"] + "DispatchEx_dispatch_async_example1" -> "DispatchEx_dispatch_async_example5" ; +"DispatchEx_dispatch_barrier_example5" [label="5: DeclStmt \n *&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx *=0 [line 76]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit __objc_anonymous_block_DispatchEx_dispatch_once_example______1 \n " color=yellow style=filled] + "DispatchEx_dispatch_barrier_example5" -> "DispatchEx_dispatch_barrier_example4" ; +"DispatchEx_dispatch_barrier_example4" [label="4: Call (_fun___objc_anonymous_block_DispatchEx_dispatch_barrier_example______6) \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchEx_dispatch_barrier_example______6); [line 77]\n n$46=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchEx_dispatch_barrier_example______6 ):unsigned long ) [line 77]\n *&__objc_anonymous_block_DispatchEx_dispatch_barrier_example______6:class __objc_anonymous_block_DispatchEx_dispatch_barrier_example______6 =n$46 [line 77]\n n$47=*&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx * [line 77]\n *n$46.DispatchEx_dispatch_barrier_example_a:class DispatchEx *=n$47 [line 77]\n n$48=(_fun___objc_anonymous_block_DispatchEx_dispatch_barrier_example______6)() [line 77]\n " shape="box"] -7 [label="7: Start __objc_anonymous_block_DispatchEx_dispatch_once_example______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] + "DispatchEx_dispatch_barrier_example4" -> "DispatchEx_dispatch_barrier_example3" ; +"DispatchEx_dispatch_barrier_example3" [label="3: Return Stmt \n n$41=*&#GB$DispatchEx_dispatch_barrier_example_a:class DispatchEx * [line 81]\n n$42=*n$41.x:int [line 81]\n *&return:int =n$42 [line 81]\n " shape="box"] - 7 -> 10 ; -6 [label="6: Return Stmt \n n$1=*&#GB$DispatchEx_dispatch_once_example_a:class DispatchEx * [line 33]\n n$2=*n$1.x:int [line 33]\n *&return:int =n$2 [line 33]\n " shape="box"] + "DispatchEx_dispatch_barrier_example3" -> "DispatchEx_dispatch_barrier_example2" ; +"DispatchEx_dispatch_barrier_example2" [label="2: Exit DispatchEx_dispatch_barrier_example \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit DispatchEx_dispatch_once_example \n " color=yellow style=filled] +"DispatchEx_dispatch_barrier_example1" [label="1: Start DispatchEx_dispatch_barrier_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 75]\n " color=yellow style=filled] -4 [label="4: Start DispatchEx_dispatch_once_example\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] + "DispatchEx_dispatch_barrier_example1" -> "DispatchEx_dispatch_barrier_example5" ; +"__objc_anonymous_block_DispatchEx_dispatch_group_example______44" [label="4: BinaryOperatorStmt: Assign \n n$28=_fun___objc_alloc_no_fail(sizeof(class DispatchEx ):unsigned long ) [line 60]\n n$29=_fun_DispatchEx_init(n$28:class DispatchEx *) virtual [line 60]\n *&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx *=n$29 [line 60]\n " shape="box"] - 4 -> 12 ; -3 [label="3: Return Stmt \n n$0=*&self:class DispatchEx * [line 21]\n *&return:struct objc_object *=n$0 [line 21]\n " shape="box"] + "__objc_anonymous_block_DispatchEx_dispatch_group_example______44" -> "__objc_anonymous_block_DispatchEx_dispatch_group_example______43" ; +"__objc_anonymous_block_DispatchEx_dispatch_group_example______43" [label="3: BinaryOperatorStmt: Assign \n n$27=*&#GB$DispatchEx_dispatch_group_example_a:class DispatchEx * [line 61]\n *n$27.x:int =10 [line 61]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit DispatchEx_init \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchEx_dispatch_group_example______43" -> "__objc_anonymous_block_DispatchEx_dispatch_group_example______42" ; +"__objc_anonymous_block_DispatchEx_dispatch_group_example______42" [label="2: Exit __objc_anonymous_block_DispatchEx_dispatch_group_example______4 \n " color=yellow style=filled] -1 [label="1: Start DispatchEx_init\nFormals: self:class DispatchEx *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +"__objc_anonymous_block_DispatchEx_dispatch_group_example______41" [label="1: Start __objc_anonymous_block_DispatchEx_dispatch_group_example______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 59]\n " color=yellow style=filled] - 1 -> 3 ; + "__objc_anonymous_block_DispatchEx_dispatch_group_example______41" -> "__objc_anonymous_block_DispatchEx_dispatch_group_example______44" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/block/dispatch_in_macro.m.dot b/infer/tests/codetoanalyze/objc/shared/block/dispatch_in_macro.m.dot index 9e1af212c..f583154b7 100644 --- a/infer/tests/codetoanalyze/objc/shared/block/dispatch_in_macro.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/block/dispatch_in_macro.m.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: Return Stmt \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchInMacroTest______1); [line 23]\n n$3=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchInMacroTest______1 ):unsigned long ) [line 23]\n *&__objc_anonymous_block_DispatchInMacroTest______1:class __objc_anonymous_block_DispatchInMacroTest______1 =n$3 [line 23]\n n$4=*&#GB$DispatchInMacroTest_static_storage:class NSObject * [line 23]\n *n$3.DispatchInMacroTest_static_storage:class NSObject *=n$4 [line 23]\n n$5=(_fun___objc_anonymous_block_DispatchInMacroTest______1)() [line 23]\n n$0=*&#GB$DispatchInMacroTest_static_storage:class NSObject * [line 23]\n *&return:struct objc_object *=n$0 [line 23]\n " shape="box"] +"DispatchInMacroTest3" [label="3: Return Stmt \n DECLARE_LOCALS(&__objc_anonymous_block_DispatchInMacroTest______1); [line 23]\n n$3=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_DispatchInMacroTest______1 ):unsigned long ) [line 23]\n *&__objc_anonymous_block_DispatchInMacroTest______1:class __objc_anonymous_block_DispatchInMacroTest______1 =n$3 [line 23]\n n$4=*&#GB$DispatchInMacroTest_static_storage:class NSObject * [line 23]\n *n$3.DispatchInMacroTest_static_storage:class NSObject *=n$4 [line 23]\n n$5=(_fun___objc_anonymous_block_DispatchInMacroTest______1)() [line 23]\n n$0=*&#GB$DispatchInMacroTest_static_storage:class NSObject * [line 23]\n *&return:struct objc_object *=n$0 [line 23]\n " shape="box"] - 6 -> 2 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$1=_fun___objc_alloc_no_fail(sizeof(class NSObject ):unsigned long ) [line 23]\n n$2=_fun_NSObject_init(n$1:class NSObject *) virtual [line 23]\n *&#GB$DispatchInMacroTest_static_storage:class NSObject *=n$2 [line 23]\n " shape="box"] + "DispatchInMacroTest3" -> "DispatchInMacroTest2" ; +"DispatchInMacroTest2" [label="2: Exit DispatchInMacroTest \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit __objc_anonymous_block_DispatchInMacroTest______1 \n " color=yellow style=filled] +"DispatchInMacroTest1" [label="1: Start DispatchInMacroTest\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] -3 [label="3: Start __objc_anonymous_block_DispatchInMacroTest______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] + "DispatchInMacroTest1" -> "DispatchInMacroTest3" ; +"__objc_anonymous_block_DispatchInMacroTest______13" [label="3: BinaryOperatorStmt: Assign \n n$1=_fun___objc_alloc_no_fail(sizeof(class NSObject ):unsigned long ) [line 23]\n n$2=_fun_NSObject_init(n$1:class NSObject *) virtual [line 23]\n *&#GB$DispatchInMacroTest_static_storage:class NSObject *=n$2 [line 23]\n " shape="box"] - 3 -> 5 ; -2 [label="2: Exit DispatchInMacroTest \n " color=yellow style=filled] + "__objc_anonymous_block_DispatchInMacroTest______13" -> "__objc_anonymous_block_DispatchInMacroTest______12" ; +"__objc_anonymous_block_DispatchInMacroTest______12" [label="2: Exit __objc_anonymous_block_DispatchInMacroTest______1 \n " color=yellow style=filled] -1 [label="1: Start DispatchInMacroTest\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 22]\n " color=yellow style=filled] +"__objc_anonymous_block_DispatchInMacroTest______11" [label="1: Start __objc_anonymous_block_DispatchInMacroTest______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 1 -> 6 ; + "__objc_anonymous_block_DispatchInMacroTest______11" -> "__objc_anonymous_block_DispatchInMacroTest______13" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/category_procdesc/EOCPerson.m.dot b/infer/tests/codetoanalyze/objc/shared/category_procdesc/EOCPerson.m.dot index 0a14dc950..b67b6cdd4 100644 --- a/infer/tests/codetoanalyze/objc/shared/category_procdesc/EOCPerson.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/category_procdesc/EOCPerson.m.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"BTaking vacations\":char *) [line 19]\n _fun_NSLog(n$1:struct objc_object *) [line 19]\n " shape="box"] +"EOCPerson_performDaysWork3" [label="3: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"Performing days at work\":char *) [line 15]\n _fun_NSLog(n$0:struct objc_object *) [line 15]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit EOCPerson_takeVacationFromWork \n " color=yellow style=filled] + "EOCPerson_performDaysWork3" -> "EOCPerson_performDaysWork2" ; +"EOCPerson_performDaysWork2" [label="2: Exit EOCPerson_performDaysWork \n " color=yellow style=filled] -4 [label="4: Start EOCPerson_takeVacationFromWork\nFormals: self:class EOCPerson *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"EOCPerson_performDaysWork1" [label="1: Start EOCPerson_performDaysWork\nFormals: self:class EOCPerson *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"Performing days at work\":char *) [line 15]\n _fun_NSLog(n$0:struct objc_object *) [line 15]\n " shape="box"] + "EOCPerson_performDaysWork1" -> "EOCPerson_performDaysWork3" ; +"EOCPerson_takeVacationFromWork3" [label="3: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"BTaking vacations\":char *) [line 19]\n _fun_NSLog(n$1:struct objc_object *) [line 19]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit EOCPerson_performDaysWork \n " color=yellow style=filled] + "EOCPerson_takeVacationFromWork3" -> "EOCPerson_takeVacationFromWork2" ; +"EOCPerson_takeVacationFromWork2" [label="2: Exit EOCPerson_takeVacationFromWork \n " color=yellow style=filled] -1 [label="1: Start EOCPerson_performDaysWork\nFormals: self:class EOCPerson *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"EOCPerson_takeVacationFromWork1" [label="1: Start EOCPerson_takeVacationFromWork\nFormals: self:class EOCPerson *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 1 -> 3 ; + "EOCPerson_takeVacationFromWork1" -> "EOCPerson_takeVacationFromWork3" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/category_procdesc/main.c.dot b/infer/tests/codetoanalyze/objc/shared/category_procdesc/main.c.dot index 516eaac8a..adf8940f0 100644 --- a/infer/tests/codetoanalyze/objc/shared/category_procdesc/main.c.dot +++ b/infer/tests/codetoanalyze/objc/shared/category_procdesc/main.c.dot @@ -1,26 +1,26 @@ /* @generated */ digraph iCFG { -6 [label="6: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class EOCPerson ):unsigned long ) [line 14]\n n$3=_fun_NSObject_init(n$2:class EOCPerson *) virtual [line 14]\n *&person:class EOCPerson *=n$3 [line 14]\n " shape="box"] +"CategoryProcdescMain6" [label="6: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class EOCPerson ):unsigned long ) [line 14]\n n$3=_fun_NSObject_init(n$2:class EOCPerson *) virtual [line 14]\n *&person:class EOCPerson *=n$3 [line 14]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Message Call: performDaysWork \n n$1=*&person:class EOCPerson * [line 15]\n _fun_EOCPerson_performDaysWork(n$1:class EOCPerson *) virtual [line 15]\n " shape="box"] + "CategoryProcdescMain6" -> "CategoryProcdescMain5" ; +"CategoryProcdescMain5" [label="5: Message Call: performDaysWork \n n$1=*&person:class EOCPerson * [line 15]\n _fun_EOCPerson_performDaysWork(n$1:class EOCPerson *) virtual [line 15]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n n$0=_fun_malloc_no_fail(sizeof(int ):int ) [line 16]\n *&x:int *=n$0 [line 16]\n " shape="box"] + "CategoryProcdescMain5" -> "CategoryProcdescMain4" ; +"CategoryProcdescMain4" [label="4: DeclStmt \n n$0=_fun_malloc_no_fail(sizeof(int ):int ) [line 16]\n *&x:int *=n$0 [line 16]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] + "CategoryProcdescMain4" -> "CategoryProcdescMain3" ; +"CategoryProcdescMain3" [label="3: Return Stmt \n *&return:int =0 [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit CategoryProcdescMain \n " color=yellow style=filled] + "CategoryProcdescMain3" -> "CategoryProcdescMain2" ; +"CategoryProcdescMain2" [label="2: Exit CategoryProcdescMain \n " color=yellow style=filled] -1 [label="1: Start CategoryProcdescMain\nFormals: \nLocals: x:int * person:class EOCPerson * \n DECLARE_LOCALS(&return,&x,&person); [line 13]\n " color=yellow style=filled] +"CategoryProcdescMain1" [label="1: Start CategoryProcdescMain\nFormals: \nLocals: x:int * person:class EOCPerson * \n DECLARE_LOCALS(&return,&x,&person); [line 13]\n " color=yellow style=filled] - 1 -> 6 ; + "CategoryProcdescMain1" -> "CategoryProcdescMain6" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/field_superclass/SuperExample.m.dot b/infer/tests/codetoanalyze/objc/shared/field_superclass/SuperExample.m.dot index ddb7b7c68..d54143655 100644 --- a/infer/tests/codetoanalyze/objc/shared/field_superclass/SuperExample.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/field_superclass/SuperExample.m.dot @@ -1,48 +1,48 @@ /* @generated */ digraph iCFG { -12 [label="12: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class ASuper ):unsigned long ) [line 42]\n n$2=_fun_NSObject_init(n$1:class ASuper *) virtual [line 42]\n *&a:struct objc_object *=n$2 [line 42]\n " shape="box"] +"super_example_main4" [label="4: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class ASuper ):unsigned long ) [line 42]\n n$2=_fun_NSObject_init(n$1:class ASuper *) virtual [line 42]\n *&a:struct objc_object *=n$2 [line 42]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool() [line 41]\n " shape="box"] + "super_example_main4" -> "super_example_main3" ; +"super_example_main3" [label="3: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool() [line 41]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit super_example_main \n " color=yellow style=filled] + "super_example_main3" -> "super_example_main2" ; +"super_example_main2" [label="2: Exit super_example_main \n " color=yellow style=filled] -9 [label="9: Start super_example_main\nFormals: argc:int argv:char **\nLocals: a:struct objc_object * \n DECLARE_LOCALS(&return,&a); [line 40]\n " color=yellow style=filled] +"super_example_main1" [label="1: Start super_example_main\nFormals: argc:int argv:char **\nLocals: a:struct objc_object * \n DECLARE_LOCALS(&return,&a); [line 40]\n " color=yellow style=filled] - 9 -> 12 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$2=*&self:class ASuper * [line 33]\n n$3=_fun_BSuper_init(n$2:class ASuper *) [line 33]\n *&self:class ASuper *=n$3 [line 33]\n " shape="box"] + "super_example_main1" -> "super_example_main4" ; +"ASuper_init5" [label="5: BinaryOperatorStmt: Assign \n n$2=*&self:class ASuper * [line 33]\n n$3=_fun_BSuper_init(n$2:class ASuper *) [line 33]\n *&self:class ASuper *=n$3 [line 33]\n " shape="box"] - 8 -> 7 ; -7 [label="7: BinaryOperatorStmt: Assign \n n$1=*&self:class ASuper * [line 34]\n *n$1.a:int =4 [line 34]\n " shape="box"] + "ASuper_init5" -> "ASuper_init4" ; +"ASuper_init4" [label="4: BinaryOperatorStmt: Assign \n n$1=*&self:class ASuper * [line 34]\n *n$1.a:int =4 [line 34]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&self:class ASuper * [line 35]\n *&return:struct objc_object *=n$0 [line 35]\n " shape="box"] + "ASuper_init4" -> "ASuper_init3" ; +"ASuper_init3" [label="3: Return Stmt \n n$0=*&self:class ASuper * [line 35]\n *&return:struct objc_object *=n$0 [line 35]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit ASuper_init \n " color=yellow style=filled] + "ASuper_init3" -> "ASuper_init2" ; +"ASuper_init2" [label="2: Exit ASuper_init \n " color=yellow style=filled] -4 [label="4: Start ASuper_init\nFormals: self:class ASuper *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] +"ASuper_init1" [label="1: Start ASuper_init\nFormals: self:class ASuper *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 4 -> 8 ; -3 [label="3: Return Stmt \n *&return:struct objc_object *=0 [line 19]\n " shape="box"] + "ASuper_init1" -> "ASuper_init5" ; +"BSuper_init3" [label="3: Return Stmt \n *&return:struct objc_object *=0 [line 19]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit BSuper_init \n " color=yellow style=filled] + "BSuper_init3" -> "BSuper_init2" ; +"BSuper_init2" [label="2: Exit BSuper_init \n " color=yellow style=filled] -1 [label="1: Start BSuper_init\nFormals: self:class BSuper *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"BSuper_init1" [label="1: Start BSuper_init\nFormals: self:class BSuper *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 1 -> 3 ; + "BSuper_init1" -> "BSuper_init3" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/ArcExample.m.dot b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/ArcExample.m.dot index a8be8c393..556a9a924 100644 --- a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/ArcExample.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/ArcExample.m.dot @@ -1,33 +1,33 @@ /* @generated */ digraph iCFG { -8 [label="8: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 29]\n *&s:class NSString *=n$4 [line 29]\n " shape="box"] +"ArcA_getS4" [label="4: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 23]\n *&s:class NSString *=n$2 [line 23]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Return Stmt \n n$3=*&s:class NSString * [line 30]\n *&return:class NSString *=n$3 [line 30]\n " shape="box"] + "ArcA_getS4" -> "ArcA_getS3" ; +"ArcA_getS3" [label="3: Return Stmt \n n$0=*&s:class NSString * [line 24]\n *&return:class NSString *=n$0 [line 24]\n n$1=_fun___set_autorelease_attribute(n$0:class NSString *) [line 24]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit ArcA_newS \n " color=yellow style=filled] + "ArcA_getS3" -> "ArcA_getS2" ; +"ArcA_getS2" [label="2: Exit ArcA_getS \n " color=yellow style=filled] -5 [label="5: Start ArcA_newS\nFormals: self:class ArcA *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 28]\n " color=yellow style=filled] +"ArcA_getS1" [label="1: Start ArcA_getS\nFormals: self:class ArcA *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 22]\n " color=yellow style=filled] - 5 -> 8 ; -4 [label="4: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 23]\n *&s:class NSString *=n$2 [line 23]\n " shape="box"] + "ArcA_getS1" -> "ArcA_getS4" ; +"ArcA_newS4" [label="4: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 29]\n *&s:class NSString *=n$4 [line 29]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&s:class NSString * [line 24]\n *&return:class NSString *=n$0 [line 24]\n n$1=_fun___set_autorelease_attribute(n$0:class NSString *) [line 24]\n " shape="box"] + "ArcA_newS4" -> "ArcA_newS3" ; +"ArcA_newS3" [label="3: Return Stmt \n n$3=*&s:class NSString * [line 30]\n *&return:class NSString *=n$3 [line 30]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit ArcA_getS \n " color=yellow style=filled] + "ArcA_newS3" -> "ArcA_newS2" ; +"ArcA_newS2" [label="2: Exit ArcA_newS \n " color=yellow style=filled] -1 [label="1: Start ArcA_getS\nFormals: self:class ArcA *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 22]\n " color=yellow style=filled] +"ArcA_newS1" [label="1: Start ArcA_newS\nFormals: self:class ArcA *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 28]\n " color=yellow style=filled] - 1 -> 4 ; + "ArcA_newS1" -> "ArcA_newS4" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/AutoreleaseExample.m.dot b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/AutoreleaseExample.m.dot index ea4a2bff4..813a59318 100644 --- a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/AutoreleaseExample.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/AutoreleaseExample.m.dot @@ -1,138 +1,138 @@ /* @generated */ digraph iCFG { -35 [label="35: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class NSAutoreleasePool ):unsigned long ) [line 60]\n n$5=_fun_NSObject_init(n$4:class NSAutoreleasePool *) virtual [line 60]\n *&pool:class NSAutoreleasePool *=n$5 [line 60]\n " shape="box"] +"Auto_autorelease_main4" [label="4: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 23]\n *&s:class NSString *=n$2 [line 23]\n " shape="box"] - 35 -> 34 ; -34 [label="34: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 61]\n n$3=_fun___set_autorelease_attribute(n$2:class NSString *) [line 61]\n *&string:class NSString *=n$3 [line 61]\n " shape="box"] + "Auto_autorelease_main4" -> "Auto_autorelease_main3" ; +"Auto_autorelease_main3" [label="3: Return Stmt \n n$0=*&s:class NSString * [line 24]\n n$1=_fun___set_autorelease_attribute(n$0:class NSString *) [line 24]\n *&return:class NSString *=n$1 [line 24]\n " shape="box"] - 34 -> 33 ; -33 [label="33: Message Call: release \n n$1=*&pool:class NSAutoreleasePool * [line 63]\n _fun___objc_release_autorelease_pool(n$1:class NSAutoreleasePool *) [line 63]\n " shape="box"] + "Auto_autorelease_main3" -> "Auto_autorelease_main2" ; +"Auto_autorelease_main2" [label="2: Exit Auto_autorelease_main \n " color=yellow style=filled] - 33 -> 32 ; -32 [label="32: DeclStmt \n n$0=*&string:class NSString * [line 64]\n *&c:class NSString *=n$0 [line 64]\n " shape="box"] +"Auto_autorelease_main1" [label="1: Start Auto_autorelease_main\nFormals: self:class Auto *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 22]\n " color=yellow style=filled] - 32 -> 31 ; -31 [label="31: Exit autorelease_test3 \n " color=yellow style=filled] + "Auto_autorelease_main1" -> "Auto_autorelease_main4" ; +"autorelease_test111" [label="11: DeclStmt \n *&s1:class Auto *=0 [line 35]\n " shape="box"] -30 [label="30: Start autorelease_test3\nFormals: \nLocals: c:class NSString * string:class NSString * pool:class NSAutoreleasePool * \n DECLARE_LOCALS(&return,&c,&string,&pool); [line 59]\n " color=yellow style=filled] + "autorelease_test111" -> "autorelease_test110" ; +"autorelease_test110" [label="10: DeclStmt \n *&s2:class Auto *=0 [line 36]\n " shape="box"] - 30 -> 35 ; -29 [label="29: DeclStmt \n *&s1:class Auto *=0 [line 48]\n " shape="box"] + "autorelease_test110" -> "autorelease_test19" ; +"autorelease_test19" [label="9: DeclStmt \n *&s3:class Auto *=0 [line 37]\n " shape="box"] - 29 -> 28 ; -28 [label="28: DeclStmt \n *&s2:class Auto *=0 [line 49]\n " shape="box"] + "autorelease_test19" -> "autorelease_test18" ; +"autorelease_test18" [label="8: BinaryOperatorStmt: Assign \n n$5=_fun_createA() [line 39]\n *&s1:class Auto *=n$5 [line 39]\n " shape="box"] - 28 -> 27 ; -27 [label="27: DeclStmt \n *&s3:class Auto *=0 [line 50]\n " shape="box"] + "autorelease_test18" -> "autorelease_test17" ; +"autorelease_test17" [label="7: Message Call: retain \n n$3=*&s1:class Auto * [line 40]\n n$4=_fun___objc_retain(n$3:class Auto *) [line 40]\n " shape="box"] - 27 -> 26 ; -26 [label="26: BinaryOperatorStmt: Assign \n n$3=_fun_createA() [line 52]\n *&s1:class Auto *=n$3 [line 52]\n " shape="box"] + "autorelease_test17" -> "autorelease_test16" ; +"autorelease_test16" [label="6: BinaryOperatorStmt: Assign \n n$2=_fun_createA() [line 41]\n *&s2:class Auto *=n$2 [line 41]\n " shape="box"] - 26 -> 25 ; -25 [label="25: BinaryOperatorStmt: Assign \n n$2=_fun_createA() [line 53]\n *&s2:class Auto *=n$2 [line 53]\n " shape="box"] + "autorelease_test16" -> "autorelease_test15" ; +"autorelease_test15" [label="5: BinaryOperatorStmt: Assign \n n$1=_fun_createA() [line 42]\n *&s3:class Auto *=n$1 [line 42]\n " shape="box"] - 25 -> 24 ; -24 [label="24: BinaryOperatorStmt: Assign \n n$1=_fun_createA() [line 54]\n *&s3:class Auto *=n$1 [line 54]\n " shape="box"] + "autorelease_test15" -> "autorelease_test14" ; +"autorelease_test14" [label="4: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool(&s1:class Auto *,&s2:class Auto *,&s3:class Auto *) [line 38]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool(&s1:class Auto *,&s3:class Auto *,&s2:class Auto *) [line 51]\n " shape="box"] + "autorelease_test14" -> "autorelease_test13" ; +"autorelease_test13" [label="3: Return Stmt \n *&return:int =0 [line 44]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Return Stmt \n *&return:int =0 [line 56]\n " shape="box"] + "autorelease_test13" -> "autorelease_test12" ; +"autorelease_test12" [label="2: Exit autorelease_test1 \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Exit autorelease_test2 \n " color=yellow style=filled] +"autorelease_test11" [label="1: Start autorelease_test1\nFormals: \nLocals: s3:class Auto * s2:class Auto * s1:class Auto * \n DECLARE_LOCALS(&return,&s3,&s2,&s1); [line 34]\n " color=yellow style=filled] -20 [label="20: Start autorelease_test2\nFormals: \nLocals: s3:class Auto * s2:class Auto * s1:class Auto * \n DECLARE_LOCALS(&return,&s3,&s2,&s1); [line 47]\n " color=yellow style=filled] + "autorelease_test11" -> "autorelease_test111" ; +"autorelease_test36" [label="6: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class NSAutoreleasePool ):unsigned long ) [line 60]\n n$5=_fun_NSObject_init(n$4:class NSAutoreleasePool *) virtual [line 60]\n *&pool:class NSAutoreleasePool *=n$5 [line 60]\n " shape="box"] - 20 -> 29 ; -19 [label="19: DeclStmt \n *&s1:class Auto *=0 [line 35]\n " shape="box"] + "autorelease_test36" -> "autorelease_test35" ; +"autorelease_test35" [label="5: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 61]\n n$3=_fun___set_autorelease_attribute(n$2:class NSString *) [line 61]\n *&string:class NSString *=n$3 [line 61]\n " shape="box"] - 19 -> 18 ; -18 [label="18: DeclStmt \n *&s2:class Auto *=0 [line 36]\n " shape="box"] + "autorelease_test35" -> "autorelease_test34" ; +"autorelease_test34" [label="4: Message Call: release \n n$1=*&pool:class NSAutoreleasePool * [line 63]\n _fun___objc_release_autorelease_pool(n$1:class NSAutoreleasePool *) [line 63]\n " shape="box"] - 18 -> 17 ; -17 [label="17: DeclStmt \n *&s3:class Auto *=0 [line 37]\n " shape="box"] + "autorelease_test34" -> "autorelease_test33" ; +"autorelease_test33" [label="3: DeclStmt \n n$0=*&string:class NSString * [line 64]\n *&c:class NSString *=n$0 [line 64]\n " shape="box"] - 17 -> 16 ; -16 [label="16: BinaryOperatorStmt: Assign \n n$5=_fun_createA() [line 39]\n *&s1:class Auto *=n$5 [line 39]\n " shape="box"] + "autorelease_test33" -> "autorelease_test32" ; +"autorelease_test32" [label="2: Exit autorelease_test3 \n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Message Call: retain \n n$3=*&s1:class Auto * [line 40]\n n$4=_fun___objc_retain(n$3:class Auto *) [line 40]\n " shape="box"] +"autorelease_test31" [label="1: Start autorelease_test3\nFormals: \nLocals: c:class NSString * string:class NSString * pool:class NSAutoreleasePool * \n DECLARE_LOCALS(&return,&c,&string,&pool); [line 59]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: BinaryOperatorStmt: Assign \n n$2=_fun_createA() [line 41]\n *&s2:class Auto *=n$2 [line 41]\n " shape="box"] + "autorelease_test31" -> "autorelease_test36" ; +"createA4" [label="4: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class Auto ):unsigned long ) [line 30]\n n$3=_fun_NSObject_init(n$2:class Auto *) virtual [line 30]\n *&s1:class Auto *=n$3 [line 30]\n " shape="box"] - 14 -> 13 ; -13 [label="13: BinaryOperatorStmt: Assign \n n$1=_fun_createA() [line 42]\n *&s3:class Auto *=n$1 [line 42]\n " shape="box"] + "createA4" -> "createA3" ; +"createA3" [label="3: Return Stmt \n n$0=*&s1:class Auto * [line 31]\n n$1=_fun___set_autorelease_attribute(n$0:class Auto *) [line 31]\n *&return:class Auto *=n$1 [line 31]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool(&s1:class Auto *,&s2:class Auto *,&s3:class Auto *) [line 38]\n " shape="box"] + "createA3" -> "createA2" ; +"createA2" [label="2: Exit createA \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: Return Stmt \n *&return:int =0 [line 44]\n " shape="box"] +"createA1" [label="1: Start createA\nFormals: \nLocals: s1:class Auto * \n DECLARE_LOCALS(&return,&s1); [line 29]\n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Exit autorelease_test1 \n " color=yellow style=filled] + "createA1" -> "createA4" ; +"autorelease_test210" [label="10: DeclStmt \n *&s1:class Auto *=0 [line 48]\n " shape="box"] -9 [label="9: Start autorelease_test1\nFormals: \nLocals: s3:class Auto * s2:class Auto * s1:class Auto * \n DECLARE_LOCALS(&return,&s3,&s2,&s1); [line 34]\n " color=yellow style=filled] + "autorelease_test210" -> "autorelease_test29" ; +"autorelease_test29" [label="9: DeclStmt \n *&s2:class Auto *=0 [line 49]\n " shape="box"] - 9 -> 19 ; -8 [label="8: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class Auto ):unsigned long ) [line 30]\n n$3=_fun_NSObject_init(n$2:class Auto *) virtual [line 30]\n *&s1:class Auto *=n$3 [line 30]\n " shape="box"] + "autorelease_test29" -> "autorelease_test28" ; +"autorelease_test28" [label="8: DeclStmt \n *&s3:class Auto *=0 [line 50]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Return Stmt \n n$0=*&s1:class Auto * [line 31]\n n$1=_fun___set_autorelease_attribute(n$0:class Auto *) [line 31]\n *&return:class Auto *=n$1 [line 31]\n " shape="box"] + "autorelease_test28" -> "autorelease_test27" ; +"autorelease_test27" [label="7: BinaryOperatorStmt: Assign \n n$3=_fun_createA() [line 52]\n *&s1:class Auto *=n$3 [line 52]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit createA \n " color=yellow style=filled] + "autorelease_test27" -> "autorelease_test26" ; +"autorelease_test26" [label="6: BinaryOperatorStmt: Assign \n n$2=_fun_createA() [line 53]\n *&s2:class Auto *=n$2 [line 53]\n " shape="box"] -5 [label="5: Start createA\nFormals: \nLocals: s1:class Auto * \n DECLARE_LOCALS(&return,&s1); [line 29]\n " color=yellow style=filled] + "autorelease_test26" -> "autorelease_test25" ; +"autorelease_test25" [label="5: BinaryOperatorStmt: Assign \n n$1=_fun_createA() [line 54]\n *&s3:class Auto *=n$1 [line 54]\n " shape="box"] - 5 -> 8 ; -4 [label="4: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 23]\n *&s:class NSString *=n$2 [line 23]\n " shape="box"] + "autorelease_test25" -> "autorelease_test24" ; +"autorelease_test24" [label="4: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool(&s1:class Auto *,&s3:class Auto *,&s2:class Auto *) [line 51]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&s:class NSString * [line 24]\n n$1=_fun___set_autorelease_attribute(n$0:class NSString *) [line 24]\n *&return:class NSString *=n$1 [line 24]\n " shape="box"] + "autorelease_test24" -> "autorelease_test23" ; +"autorelease_test23" [label="3: Return Stmt \n *&return:int =0 [line 56]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Auto_autorelease_main \n " color=yellow style=filled] + "autorelease_test23" -> "autorelease_test22" ; +"autorelease_test22" [label="2: Exit autorelease_test2 \n " color=yellow style=filled] -1 [label="1: Start Auto_autorelease_main\nFormals: self:class Auto *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 22]\n " color=yellow style=filled] +"autorelease_test21" [label="1: Start autorelease_test2\nFormals: \nLocals: s3:class Auto * s2:class Auto * s1:class Auto * \n DECLARE_LOCALS(&return,&s3,&s2,&s1); [line 47]\n " color=yellow style=filled] - 1 -> 4 ; + "autorelease_test21" -> "autorelease_test210" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m.dot b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m.dot index 3d54d60a1..3c9a464b7 100644 --- a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m.dot @@ -1,278 +1,278 @@ /* @generated */ digraph iCFG { -73 [label="73: DeclStmt \n n$59=_fun_malloc_no_fail(sizeof(int ):int ) [line 103]\n *&x:int *=n$59 [line 103]\n " shape="box"] +"MemoryLeakExample_test4" [label="4: DeclStmt \n n$13=_fun___objc_alloc_no_fail(sizeof(struct CGPath ):unsigned long ,_fun_CGPathCreateWithRect:void ) [line 30]\n *&shadowPath:struct CGPath *=n$13 [line 29]\n " shape="box"] - 73 -> 72 ; -72 [label="72: BinaryOperatorStmt: Assign \n n$58=*&x:int * [line 104]\n *n$58:int =2 [line 104]\n " shape="box"] + "MemoryLeakExample_test4" -> "MemoryLeakExample_test3" ; +"MemoryLeakExample_test3" [label="3: Message Call: setShadowPath: \n n$6=*&self:class MemoryLeakExample * [line 31]\n n$7=_fun_MemoryLeakExample_backgroundCoveringView(n$6:class MemoryLeakExample *) [line 31]\n n$8=_fun_UIView_layer(n$7:class UIView *) [line 31]\n n$9=*&shadowPath:struct CGPath * [line 31]\n _fun_CALayer_setShadowPath:(n$8:class CALayer *,n$9:struct CGPath *) [line 31]\n " shape="box"] - 72 -> 71 ; -71 [label="71: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2); [line 105]\n n$56=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 ):unsigned long ) [line 105]\n *&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2:class __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 =n$56 [line 105]\n n$57=*&x:int * [line 105]\n *n$56.x:int *=n$57 [line 105]\n n$51=*&x:int * [line 105]\n *&blk:_fn_ (*)=(_fun___objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2,n$51) [line 105]\n " shape="box"] + "MemoryLeakExample_test3" -> "MemoryLeakExample_test2" ; +"MemoryLeakExample_test2" [label="2: Exit MemoryLeakExample_test \n " color=yellow style=filled] - 71 -> 65 ; -70 [label="70: DeclStmt \n n$54=*&x:int * [line 106]\n n$55=*n$54:int [line 106]\n *&i:int =n$55 [line 106]\n " shape="box"] +"MemoryLeakExample_test1" [label="1: Start MemoryLeakExample_test\nFormals: self:class MemoryLeakExample *\nLocals: shadowPath:struct CGPath * \n DECLARE_LOCALS(&return,&shadowPath); [line 28]\n " color=yellow style=filled] - 70 -> 69 ; -69 [label="69: Call _fun_free \n n$53=*&x:int * [line 107]\n _fun_free(n$53:void *) [line 107]\n " shape="box"] + "MemoryLeakExample_test1" -> "MemoryLeakExample_test4" ; +"MemoryLeakExample_layoutSubviews6" [label="6: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class UIView ):unsigned long ) [line 20]\n *&attachmentContainerView:class UIView *=n$5 [line 20]\n " shape="box"] - 69 -> 68 ; -68 [label="68: Return Stmt \n n$52=*&i:int [line 108]\n *&return:int =n$52 [line 108]\n " shape="box"] + "MemoryLeakExample_layoutSubviews6" -> "MemoryLeakExample_layoutSubviews5" ; +"MemoryLeakExample_layoutSubviews5" [label="5: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(struct CGPath ):unsigned long ,_fun_CGPathCreateWithRect:void ) [line 22]\n *&shadowPath:struct CGPath *=n$4 [line 21]\n " shape="box"] - 68 -> 67 ; -67 [label="67: Exit __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 \n " color=yellow style=filled] + "MemoryLeakExample_layoutSubviews5" -> "MemoryLeakExample_layoutSubviews4" ; +"MemoryLeakExample_layoutSubviews4" [label="4: Call _fun_CGPathRelease \n n$1=*&shadowPath:struct CGPath * [line 24]\n _fun_CGPathRelease(n$1:struct CGPath *) [line 24]\n " shape="box"] -66 [label="66: Start __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2\nFormals: x:int *\nLocals: i:int \nCaptured: x:int * \n DECLARE_LOCALS(&return,&i); [line 105]\n " color=yellow style=filled] + "MemoryLeakExample_layoutSubviews4" -> "MemoryLeakExample_layoutSubviews3" ; +"MemoryLeakExample_layoutSubviews3" [label="3: Message Call: release \n n$0=*&attachmentContainerView:class UIView * [line 25]\n _fun___objc_release(n$0:class UIView *) [line 25]\n " shape="box"] - 66 -> 70 ; -65 [label="65: Return Stmt \n n$49=*&blk:_fn_ (*) [line 110]\n n$50=n$49() [line 110]\n *&return:int =n$50 [line 110]\n " shape="box"] + "MemoryLeakExample_layoutSubviews3" -> "MemoryLeakExample_layoutSubviews2" ; +"MemoryLeakExample_layoutSubviews2" [label="2: Exit MemoryLeakExample_layoutSubviews \n " color=yellow style=filled] - 65 -> 64 ; -64 [label="64: Exit MemoryLeakExample_blockFreeNoLeakTODO \n " color=yellow style=filled] +"MemoryLeakExample_layoutSubviews1" [label="1: Start MemoryLeakExample_layoutSubviews\nFormals: self:class MemoryLeakExample *\nLocals: shadowPath:struct CGPath * attachmentContainerView:class UIView * \n DECLARE_LOCALS(&return,&shadowPath,&attachmentContainerView); [line 19]\n " color=yellow style=filled] -63 [label="63: Start MemoryLeakExample_blockFreeNoLeakTODO\nFormals: self:class MemoryLeakExample *\nLocals: blk:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&blk,&x); [line 102]\n " color=yellow style=filled] + "MemoryLeakExample_layoutSubviews1" -> "MemoryLeakExample_layoutSubviews6" ; +"MemoryLeakExample_test2:3" [label="3: Call _fun_SecTrustCopyPublicKey \n n$28=*&trust:struct __SecTrust * [line 67]\n n$29=_fun_SecTrustCopyPublicKey(n$28:struct __SecTrust *) [line 67]\n " shape="box"] - 63 -> 73 ; -62 [label="62: DeclStmt \n n$48=_fun_malloc_no_fail(sizeof(int ):int ) [line 94]\n *&x:int *=n$48 [line 94]\n " shape="box"] + "MemoryLeakExample_test2:3" -> "MemoryLeakExample_test2:2" ; +"MemoryLeakExample_test2:2" [label="2: Exit MemoryLeakExample_test2: \n " color=yellow style=filled] - 62 -> 61 ; -61 [label="61: BinaryOperatorStmt: Assign \n n$47=*&x:int * [line 95]\n *n$47:int =2 [line 95]\n " shape="box"] +"MemoryLeakExample_test2:1" [label="1: Start MemoryLeakExample_test2:\nFormals: trust:struct __SecTrust *\nLocals: \n DECLARE_LOCALS(&return); [line 66]\n " color=yellow style=filled] - 61 -> 60 ; -60 [label="60: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1); [line 96]\n n$45=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 ):unsigned long ) [line 96]\n *&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1:class __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 =n$45 [line 96]\n n$46=*&x:int * [line 96]\n *n$45.x:int *=n$46 [line 96]\n n$42=*&x:int * [line 96]\n *&blk:_fn_ (*)=(_fun___objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1,n$42) [line 96]\n " shape="box"] + "MemoryLeakExample_test2:1" -> "MemoryLeakExample_test2:3" ; +"MemoryLeakExample_test2NoLeak4" [label="4: DeclStmt \n n$31=_fun_SecTrustCopyPublicKey(0:struct __SecTrust *) [line 71]\n *&allowedPublicKey:struct __SecKey *=n$31 [line 71]\n " shape="box"] - 60 -> 56 ; -59 [label="59: Return Stmt \n n$43=*&x:int * [line 97]\n n$44=*n$43:int [line 97]\n *&return:int =n$44 [line 97]\n " shape="box"] + "MemoryLeakExample_test2NoLeak4" -> "MemoryLeakExample_test2NoLeak3" ; +"MemoryLeakExample_test2NoLeak3" [label="3: Call _fun___objc_release_cf \n n$30=*&allowedPublicKey:struct __SecKey * [line 72]\n _fun___objc_release_cf(1:_Bool ,n$30:void *) [line 72]\n " shape="box"] - 59 -> 58 ; -58 [label="58: Exit __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 \n " color=yellow style=filled] + "MemoryLeakExample_test2NoLeak3" -> "MemoryLeakExample_test2NoLeak2" ; +"MemoryLeakExample_test2NoLeak2" [label="2: Exit MemoryLeakExample_test2NoLeak \n " color=yellow style=filled] -57 [label="57: Start __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 96]\n " color=yellow style=filled] +"MemoryLeakExample_test2NoLeak1" [label="1: Start MemoryLeakExample_test2NoLeak\nFormals: \nLocals: allowedPublicKey:struct __SecKey * \n DECLARE_LOCALS(&return,&allowedPublicKey); [line 70]\n " color=yellow style=filled] - 57 -> 59 ; -56 [label="56: Return Stmt \n n$40=*&blk:_fn_ (*) [line 99]\n n$41=n$40() [line 99]\n *&return:int =n$41 [line 99]\n " shape="box"] + "MemoryLeakExample_test2NoLeak1" -> "MemoryLeakExample_test2NoLeak4" ; +"MemoryLeakExample_test1NoLeak4" [label="4: DeclStmt \n n$20=_fun_CTFramesetterCreateWithAttributedString(0:struct __CFAttributedString *) [line 49]\n *&framesetter:struct __CTFramesetter *=n$20 [line 49]\n " shape="box"] - 56 -> 55 ; -55 [label="55: Exit MemoryLeakExample_blockCapturedVarLeak \n " color=yellow style=filled] + "MemoryLeakExample_test1NoLeak4" -> "MemoryLeakExample_test1NoLeak3" ; +"MemoryLeakExample_test1NoLeak3" [label="3: Call _fun___objc_release_cf \n n$19=*&framesetter:struct __CTFramesetter * [line 50]\n _fun___objc_release_cf(1:_Bool ,n$19:void *) [line 50]\n " shape="box"] -54 [label="54: Start MemoryLeakExample_blockCapturedVarLeak\nFormals: self:class MemoryLeakExample *\nLocals: blk:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&blk,&x); [line 93]\n " color=yellow style=filled] + "MemoryLeakExample_test1NoLeak3" -> "MemoryLeakExample_test1NoLeak2" ; +"MemoryLeakExample_test1NoLeak2" [label="2: Exit MemoryLeakExample_test1NoLeak \n " color=yellow style=filled] - 54 -> 62 ; -53 [label="53: DeclStmt \n n$39=_fun_malloc_no_fail(sizeof(int ):int ) [line 88]\n *&x:int *=n$39 [line 88]\n " shape="box"] +"MemoryLeakExample_test1NoLeak1" [label="1: Start MemoryLeakExample_test1NoLeak\nFormals: \nLocals: framesetter:struct __CTFramesetter * \n DECLARE_LOCALS(&return,&framesetter); [line 48]\n " color=yellow style=filled] - 53 -> 52 ; -52 [label="52: BinaryOperatorStmt: Assign \n n$38=*&x:int * [line 89]\n *n$38:int =7 [line 89]\n " shape="box"] + "MemoryLeakExample_test1NoLeak1" -> "MemoryLeakExample_test1NoLeak4" ; +"MemoryLeakExample_testFBColorCreateWithGray4" [label="4: DeclStmt \n n$35=_fun_FBColorCreateWithGray(0.000000:double ,0.300000:double ) [line 83]\n *&borderColor:struct CGColor *=n$35 [line 83]\n " shape="box"] - 52 -> 51 ; -51 [label="51: Return Stmt \n n$36=*&x:int * [line 90]\n n$37=*n$36:int [line 90]\n *&return:int =n$37 [line 90]\n " shape="box"] + "MemoryLeakExample_testFBColorCreateWithGray4" -> "MemoryLeakExample_testFBColorCreateWithGray3" ; +"MemoryLeakExample_testFBColorCreateWithGray3" [label="3: Call _fun_CGColorRelease \n n$34=*&borderColor:struct CGColor * [line 84]\n _fun_CGColorRelease(n$34:struct CGColor *) [line 84]\n " shape="box"] - 51 -> 50 ; -50 [label="50: Exit MemoryLeakExample_regularLeak \n " color=yellow style=filled] + "MemoryLeakExample_testFBColorCreateWithGray3" -> "MemoryLeakExample_testFBColorCreateWithGray2" ; +"MemoryLeakExample_testFBColorCreateWithGray2" [label="2: Exit MemoryLeakExample_testFBColorCreateWithGray \n " color=yellow style=filled] -49 [label="49: Start MemoryLeakExample_regularLeak\nFormals: self:class MemoryLeakExample *\nLocals: x:int * \n DECLARE_LOCALS(&return,&x); [line 87]\n " color=yellow style=filled] +"MemoryLeakExample_testFBColorCreateWithGray1" [label="1: Start MemoryLeakExample_testFBColorCreateWithGray\nFormals: self:class MemoryLeakExample *\nLocals: borderColor:struct CGColor * \n DECLARE_LOCALS(&return,&borderColor); [line 82]\n " color=yellow style=filled] - 49 -> 53 ; -48 [label="48: DeclStmt \n n$35=_fun_FBColorCreateWithGray(0.000000:double ,0.300000:double ) [line 83]\n *&borderColor:struct CGColor *=n$35 [line 83]\n " shape="box"] + "MemoryLeakExample_testFBColorCreateWithGray1" -> "MemoryLeakExample_testFBColorCreateWithGray4" ; +"MemoryLeakExample_regularLeak5" [label="5: DeclStmt \n n$39=_fun_malloc_no_fail(sizeof(int ):int ) [line 88]\n *&x:int *=n$39 [line 88]\n " shape="box"] - 48 -> 47 ; -47 [label="47: Call _fun_CGColorRelease \n n$34=*&borderColor:struct CGColor * [line 84]\n _fun_CGColorRelease(n$34:struct CGColor *) [line 84]\n " shape="box"] + "MemoryLeakExample_regularLeak5" -> "MemoryLeakExample_regularLeak4" ; +"MemoryLeakExample_regularLeak4" [label="4: BinaryOperatorStmt: Assign \n n$38=*&x:int * [line 89]\n *n$38:int =7 [line 89]\n " shape="box"] - 47 -> 46 ; -46 [label="46: Exit MemoryLeakExample_testFBColorCreateWithGray \n " color=yellow style=filled] + "MemoryLeakExample_regularLeak4" -> "MemoryLeakExample_regularLeak3" ; +"MemoryLeakExample_regularLeak3" [label="3: Return Stmt \n n$36=*&x:int * [line 90]\n n$37=*n$36:int [line 90]\n *&return:int =n$37 [line 90]\n " shape="box"] -45 [label="45: Start MemoryLeakExample_testFBColorCreateWithGray\nFormals: self:class MemoryLeakExample *\nLocals: borderColor:struct CGColor * \n DECLARE_LOCALS(&return,&borderColor); [line 82]\n " color=yellow style=filled] + "MemoryLeakExample_regularLeak3" -> "MemoryLeakExample_regularLeak2" ; +"MemoryLeakExample_regularLeak2" [label="2: Exit MemoryLeakExample_regularLeak \n " color=yellow style=filled] - 45 -> 48 ; -44 [label="44: DeclStmt \n n$33=_fun_CGBitmapContextCreateImage(0:struct CGContext *) [line 76]\n *&newImage:struct CGImage *=n$33 [line 76]\n " shape="box"] +"MemoryLeakExample_regularLeak1" [label="1: Start MemoryLeakExample_regularLeak\nFormals: self:class MemoryLeakExample *\nLocals: x:int * \n DECLARE_LOCALS(&return,&x); [line 87]\n " color=yellow style=filled] - 44 -> 43 ; -43 [label="43: Call _fun_CGImageRelease \n n$32=*&newImage:struct CGImage * [line 77]\n _fun_CGImageRelease(n$32:struct CGImage *) [line 77]\n " shape="box"] + "MemoryLeakExample_regularLeak1" -> "MemoryLeakExample_regularLeak5" ; +"MemoryLeakExample_createCloseCrossGlyph:4" [label="4: BinaryOperatorStmt: Mul \n n$22=*&rect:struct CGRect [line 54]\n n$23=_fun_CGRectGetHeight(n$22:struct CGRect ) [line 54]\n " shape="box"] - 43 -> 42 ; -42 [label="42: Exit MemoryLeakExample_testImageRefRelease \n " color=yellow style=filled] + "MemoryLeakExample_createCloseCrossGlyph:4" -> "MemoryLeakExample_createCloseCrossGlyph:3" ; +"MemoryLeakExample_createCloseCrossGlyph:3" [label="3: Call alloc \n n$21=_fun___objc_alloc_no_fail(sizeof(struct CGPath ):unsigned long ,_fun_CGPathCreateMutable:void ) [line 55]\n " shape="box"] -41 [label="41: Start MemoryLeakExample_testImageRefRelease\nFormals: \nLocals: newImage:struct CGImage * \n DECLARE_LOCALS(&return,&newImage); [line 75]\n " color=yellow style=filled] + "MemoryLeakExample_createCloseCrossGlyph:3" -> "MemoryLeakExample_createCloseCrossGlyph:2" ; +"MemoryLeakExample_createCloseCrossGlyph:2" [label="2: Exit MemoryLeakExample_createCloseCrossGlyph: \n " color=yellow style=filled] - 41 -> 44 ; -40 [label="40: DeclStmt \n n$31=_fun_SecTrustCopyPublicKey(0:struct __SecTrust *) [line 71]\n *&allowedPublicKey:struct __SecKey *=n$31 [line 71]\n " shape="box"] +"MemoryLeakExample_createCloseCrossGlyph:1" [label="1: Start MemoryLeakExample_createCloseCrossGlyph:\nFormals: rect:struct CGRect \nLocals: \n DECLARE_LOCALS(&return); [line 53]\n " color=yellow style=filled] - 40 -> 39 ; -39 [label="39: Call _fun___objc_release_cf \n n$30=*&allowedPublicKey:struct __SecKey * [line 72]\n _fun___objc_release_cf(1:_Bool ,n$30:void *) [line 72]\n " shape="box"] + "MemoryLeakExample_createCloseCrossGlyph:1" -> "MemoryLeakExample_createCloseCrossGlyph:4" ; +"MemoryLeakExample_test1:3" [label="3: Call _fun_CTFramesetterCreateWithAttributedString \n n$17=*&str:struct __CFAttributedString * [line 45]\n n$18=_fun_CTFramesetterCreateWithAttributedString(n$17:struct __CFAttributedString *) [line 45]\n " shape="box"] - 39 -> 38 ; -38 [label="38: Exit MemoryLeakExample_test2NoLeak \n " color=yellow style=filled] + "MemoryLeakExample_test1:3" -> "MemoryLeakExample_test1:2" ; +"MemoryLeakExample_test1:2" [label="2: Exit MemoryLeakExample_test1: \n " color=yellow style=filled] -37 [label="37: Start MemoryLeakExample_test2NoLeak\nFormals: \nLocals: allowedPublicKey:struct __SecKey * \n DECLARE_LOCALS(&return,&allowedPublicKey); [line 70]\n " color=yellow style=filled] +"MemoryLeakExample_test1:1" [label="1: Start MemoryLeakExample_test1:\nFormals: str:struct __CFAttributedString *\nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] - 37 -> 40 ; -36 [label="36: Call _fun_SecTrustCopyPublicKey \n n$28=*&trust:struct __SecTrust * [line 67]\n n$29=_fun_SecTrustCopyPublicKey(n$28:struct __SecTrust *) [line 67]\n " shape="box"] + "MemoryLeakExample_test1:1" -> "MemoryLeakExample_test1:3" ; +"__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______13" [label="3: Return Stmt \n n$43=*&x:int * [line 97]\n n$44=*n$43:int [line 97]\n *&return:int =n$44 [line 97]\n " shape="box"] - 36 -> 35 ; -35 [label="35: Exit MemoryLeakExample_test2: \n " color=yellow style=filled] + "__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______13" -> "__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______12" ; +"__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______12" [label="2: Exit __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 \n " color=yellow style=filled] -34 [label="34: Start MemoryLeakExample_test2:\nFormals: trust:struct __SecTrust *\nLocals: \n DECLARE_LOCALS(&return); [line 66]\n " color=yellow style=filled] +"__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______11" [label="1: Start __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 96]\n " color=yellow style=filled] - 34 -> 36 ; -33 [label="33: DeclStmt \n n$26=*&rect:struct CGRect [line 59]\n n$27=_fun_CGRectGetHeight(n$26:struct CGRect ) [line 59]\n *&lineThickness:double =(0.200000 * n$27) [line 59]\n " shape="box"] + "__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______11" -> "__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______13" ; +"MemoryLeakExample_createCloseCrossGlyphNoLeak:5" [label="5: DeclStmt \n n$26=*&rect:struct CGRect [line 59]\n n$27=_fun_CGRectGetHeight(n$26:struct CGRect ) [line 59]\n *&lineThickness:double =(0.200000 * n$27) [line 59]\n " shape="box"] - 33 -> 32 ; -32 [label="32: DeclStmt \n n$25=_fun___objc_alloc_no_fail(sizeof(struct CGPath ):unsigned long ,_fun_CGPathCreateMutable:void ) [line 62]\n *&path1:struct CGPath *=n$25 [line 62]\n " shape="box"] + "MemoryLeakExample_createCloseCrossGlyphNoLeak:5" -> "MemoryLeakExample_createCloseCrossGlyphNoLeak:4" ; +"MemoryLeakExample_createCloseCrossGlyphNoLeak:4" [label="4: DeclStmt \n n$25=_fun___objc_alloc_no_fail(sizeof(struct CGPath ):unsigned long ,_fun_CGPathCreateMutable:void ) [line 62]\n *&path1:struct CGPath *=n$25 [line 62]\n " shape="box"] - 32 -> 31 ; -31 [label="31: Call _fun___objc_release_cf \n n$24=*&path1:struct CGPath * [line 63]\n _fun___objc_release_cf(1:_Bool ,n$24:void *) [line 63]\n " shape="box"] + "MemoryLeakExample_createCloseCrossGlyphNoLeak:4" -> "MemoryLeakExample_createCloseCrossGlyphNoLeak:3" ; +"MemoryLeakExample_createCloseCrossGlyphNoLeak:3" [label="3: Call _fun___objc_release_cf \n n$24=*&path1:struct CGPath * [line 63]\n _fun___objc_release_cf(1:_Bool ,n$24:void *) [line 63]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Exit MemoryLeakExample_createCloseCrossGlyphNoLeak: \n " color=yellow style=filled] + "MemoryLeakExample_createCloseCrossGlyphNoLeak:3" -> "MemoryLeakExample_createCloseCrossGlyphNoLeak:2" ; +"MemoryLeakExample_createCloseCrossGlyphNoLeak:2" [label="2: Exit MemoryLeakExample_createCloseCrossGlyphNoLeak: \n " color=yellow style=filled] -29 [label="29: Start MemoryLeakExample_createCloseCrossGlyphNoLeak:\nFormals: rect:struct CGRect \nLocals: path1:struct CGPath * lineThickness:double \n DECLARE_LOCALS(&return,&path1,&lineThickness); [line 58]\n " color=yellow style=filled] +"MemoryLeakExample_createCloseCrossGlyphNoLeak:1" [label="1: Start MemoryLeakExample_createCloseCrossGlyphNoLeak:\nFormals: rect:struct CGRect \nLocals: path1:struct CGPath * lineThickness:double \n DECLARE_LOCALS(&return,&path1,&lineThickness); [line 58]\n " color=yellow style=filled] - 29 -> 33 ; -28 [label="28: BinaryOperatorStmt: Mul \n n$22=*&rect:struct CGRect [line 54]\n n$23=_fun_CGRectGetHeight(n$22:struct CGRect ) [line 54]\n " shape="box"] + "MemoryLeakExample_createCloseCrossGlyphNoLeak:1" -> "MemoryLeakExample_createCloseCrossGlyphNoLeak:5" ; +"MemoryLeakExample_testImageRefRelease4" [label="4: DeclStmt \n n$33=_fun_CGBitmapContextCreateImage(0:struct CGContext *) [line 76]\n *&newImage:struct CGImage *=n$33 [line 76]\n " shape="box"] - 28 -> 27 ; -27 [label="27: Call alloc \n n$21=_fun___objc_alloc_no_fail(sizeof(struct CGPath ):unsigned long ,_fun_CGPathCreateMutable:void ) [line 55]\n " shape="box"] + "MemoryLeakExample_testImageRefRelease4" -> "MemoryLeakExample_testImageRefRelease3" ; +"MemoryLeakExample_testImageRefRelease3" [label="3: Call _fun_CGImageRelease \n n$32=*&newImage:struct CGImage * [line 77]\n _fun_CGImageRelease(n$32:struct CGImage *) [line 77]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Exit MemoryLeakExample_createCloseCrossGlyph: \n " color=yellow style=filled] + "MemoryLeakExample_testImageRefRelease3" -> "MemoryLeakExample_testImageRefRelease2" ; +"MemoryLeakExample_testImageRefRelease2" [label="2: Exit MemoryLeakExample_testImageRefRelease \n " color=yellow style=filled] -25 [label="25: Start MemoryLeakExample_createCloseCrossGlyph:\nFormals: rect:struct CGRect \nLocals: \n DECLARE_LOCALS(&return); [line 53]\n " color=yellow style=filled] +"MemoryLeakExample_testImageRefRelease1" [label="1: Start MemoryLeakExample_testImageRefRelease\nFormals: \nLocals: newImage:struct CGImage * \n DECLARE_LOCALS(&return,&newImage); [line 75]\n " color=yellow style=filled] - 25 -> 28 ; -24 [label="24: DeclStmt \n n$20=_fun_CTFramesetterCreateWithAttributedString(0:struct __CFAttributedString *) [line 49]\n *&framesetter:struct __CTFramesetter *=n$20 [line 49]\n " shape="box"] + "MemoryLeakExample_testImageRefRelease1" -> "MemoryLeakExample_testImageRefRelease4" ; +"MemoryLeakExample_measureFrameSizeForTextNoLeak4" [label="4: DeclStmt \n n$16=_fun___objc_alloc_no_fail(sizeof(struct __CFAttributedString ):unsigned long ,_fun_CFAttributedStringCreateMutable:void ) [line 40]\n *&maString:struct __CFAttributedString *=n$16 [line 39]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Call _fun___objc_release_cf \n n$19=*&framesetter:struct __CTFramesetter * [line 50]\n _fun___objc_release_cf(1:_Bool ,n$19:void *) [line 50]\n " shape="box"] + "MemoryLeakExample_measureFrameSizeForTextNoLeak4" -> "MemoryLeakExample_measureFrameSizeForTextNoLeak3" ; +"MemoryLeakExample_measureFrameSizeForTextNoLeak3" [label="3: Call _fun___objc_release_cf \n n$15=*&maString:struct __CFAttributedString * [line 41]\n _fun___objc_release_cf(1:_Bool ,n$15:void *) [line 41]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Exit MemoryLeakExample_test1NoLeak \n " color=yellow style=filled] + "MemoryLeakExample_measureFrameSizeForTextNoLeak3" -> "MemoryLeakExample_measureFrameSizeForTextNoLeak2" ; +"MemoryLeakExample_measureFrameSizeForTextNoLeak2" [label="2: Exit MemoryLeakExample_measureFrameSizeForTextNoLeak \n " color=yellow style=filled] -21 [label="21: Start MemoryLeakExample_test1NoLeak\nFormals: \nLocals: framesetter:struct __CTFramesetter * \n DECLARE_LOCALS(&return,&framesetter); [line 48]\n " color=yellow style=filled] +"MemoryLeakExample_measureFrameSizeForTextNoLeak1" [label="1: Start MemoryLeakExample_measureFrameSizeForTextNoLeak\nFormals: \nLocals: maString:struct __CFAttributedString * \n DECLARE_LOCALS(&return,&maString); [line 38]\n " color=yellow style=filled] - 21 -> 24 ; -20 [label="20: Call _fun_CTFramesetterCreateWithAttributedString \n n$17=*&str:struct __CFAttributedString * [line 45]\n n$18=_fun_CTFramesetterCreateWithAttributedString(n$17:struct __CFAttributedString *) [line 45]\n " shape="box"] + "MemoryLeakExample_measureFrameSizeForTextNoLeak1" -> "MemoryLeakExample_measureFrameSizeForTextNoLeak4" ; +"__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______25" [label="5: DeclStmt \n n$54=*&x:int * [line 106]\n n$55=*n$54:int [line 106]\n *&i:int =n$55 [line 106]\n " shape="box"] - 20 -> 19 ; -19 [label="19: Exit MemoryLeakExample_test1: \n " color=yellow style=filled] + "__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______25" -> "__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______24" ; +"__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______24" [label="4: Call _fun_free \n n$53=*&x:int * [line 107]\n _fun_free(n$53:void *) [line 107]\n " shape="box"] -18 [label="18: Start MemoryLeakExample_test1:\nFormals: str:struct __CFAttributedString *\nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] + "__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______24" -> "__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______23" ; +"__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______23" [label="3: Return Stmt \n n$52=*&i:int [line 108]\n *&return:int =n$52 [line 108]\n " shape="box"] - 18 -> 20 ; -17 [label="17: DeclStmt \n n$16=_fun___objc_alloc_no_fail(sizeof(struct __CFAttributedString ):unsigned long ,_fun_CFAttributedStringCreateMutable:void ) [line 40]\n *&maString:struct __CFAttributedString *=n$16 [line 39]\n " shape="box"] + "__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______23" -> "__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______22" ; +"__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______22" [label="2: Exit __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 \n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Call _fun___objc_release_cf \n n$15=*&maString:struct __CFAttributedString * [line 41]\n _fun___objc_release_cf(1:_Bool ,n$15:void *) [line 41]\n " shape="box"] +"__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______21" [label="1: Start __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2\nFormals: x:int *\nLocals: i:int \nCaptured: x:int * \n DECLARE_LOCALS(&return,&i); [line 105]\n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Exit MemoryLeakExample_measureFrameSizeForTextNoLeak \n " color=yellow style=filled] + "__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______21" -> "__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______25" ; +"MemoryLeakExample_blockCapturedVarLeak6" [label="6: DeclStmt \n n$48=_fun_malloc_no_fail(sizeof(int ):int ) [line 94]\n *&x:int *=n$48 [line 94]\n " shape="box"] -14 [label="14: Start MemoryLeakExample_measureFrameSizeForTextNoLeak\nFormals: \nLocals: maString:struct __CFAttributedString * \n DECLARE_LOCALS(&return,&maString); [line 38]\n " color=yellow style=filled] + "MemoryLeakExample_blockCapturedVarLeak6" -> "MemoryLeakExample_blockCapturedVarLeak5" ; +"MemoryLeakExample_blockCapturedVarLeak5" [label="5: BinaryOperatorStmt: Assign \n n$47=*&x:int * [line 95]\n *n$47:int =2 [line 95]\n " shape="box"] - 14 -> 17 ; -13 [label="13: Call alloc \n n$14=_fun___objc_alloc_no_fail(sizeof(struct __CFAttributedString ):unsigned long ,_fun_CFAttributedStringCreateMutable:void ) [line 35]\n " shape="box"] + "MemoryLeakExample_blockCapturedVarLeak5" -> "MemoryLeakExample_blockCapturedVarLeak4" ; +"MemoryLeakExample_blockCapturedVarLeak4" [label="4: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1); [line 96]\n n$45=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 ):unsigned long ) [line 96]\n *&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1:class __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 =n$45 [line 96]\n n$46=*&x:int * [line 96]\n *n$45.x:int *=n$46 [line 96]\n n$42=*&x:int * [line 96]\n *&blk:_fn_ (*)=(_fun___objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1,n$42) [line 96]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit MemoryLeakExample_measureFrameSizeForText \n " color=yellow style=filled] + "MemoryLeakExample_blockCapturedVarLeak4" -> "MemoryLeakExample_blockCapturedVarLeak3" ; +"MemoryLeakExample_blockCapturedVarLeak3" [label="3: Return Stmt \n n$40=*&blk:_fn_ (*) [line 99]\n n$41=n$40() [line 99]\n *&return:int =n$41 [line 99]\n " shape="box"] -11 [label="11: Start MemoryLeakExample_measureFrameSizeForText\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] + "MemoryLeakExample_blockCapturedVarLeak3" -> "MemoryLeakExample_blockCapturedVarLeak2" ; +"MemoryLeakExample_blockCapturedVarLeak2" [label="2: Exit MemoryLeakExample_blockCapturedVarLeak \n " color=yellow style=filled] - 11 -> 13 ; -10 [label="10: DeclStmt \n n$13=_fun___objc_alloc_no_fail(sizeof(struct CGPath ):unsigned long ,_fun_CGPathCreateWithRect:void ) [line 30]\n *&shadowPath:struct CGPath *=n$13 [line 29]\n " shape="box"] +"MemoryLeakExample_blockCapturedVarLeak1" [label="1: Start MemoryLeakExample_blockCapturedVarLeak\nFormals: self:class MemoryLeakExample *\nLocals: blk:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&blk,&x); [line 93]\n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Message Call: setShadowPath: \n n$6=*&self:class MemoryLeakExample * [line 31]\n n$7=_fun_MemoryLeakExample_backgroundCoveringView(n$6:class MemoryLeakExample *) [line 31]\n n$8=_fun_UIView_layer(n$7:class UIView *) [line 31]\n n$9=*&shadowPath:struct CGPath * [line 31]\n _fun_CALayer_setShadowPath:(n$8:class CALayer *,n$9:struct CGPath *) [line 31]\n " shape="box"] + "MemoryLeakExample_blockCapturedVarLeak1" -> "MemoryLeakExample_blockCapturedVarLeak6" ; +"MemoryLeakExample_blockFreeNoLeakTODO6" [label="6: DeclStmt \n n$59=_fun_malloc_no_fail(sizeof(int ):int ) [line 103]\n *&x:int *=n$59 [line 103]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit MemoryLeakExample_test \n " color=yellow style=filled] + "MemoryLeakExample_blockFreeNoLeakTODO6" -> "MemoryLeakExample_blockFreeNoLeakTODO5" ; +"MemoryLeakExample_blockFreeNoLeakTODO5" [label="5: BinaryOperatorStmt: Assign \n n$58=*&x:int * [line 104]\n *n$58:int =2 [line 104]\n " shape="box"] -7 [label="7: Start MemoryLeakExample_test\nFormals: self:class MemoryLeakExample *\nLocals: shadowPath:struct CGPath * \n DECLARE_LOCALS(&return,&shadowPath); [line 28]\n " color=yellow style=filled] + "MemoryLeakExample_blockFreeNoLeakTODO5" -> "MemoryLeakExample_blockFreeNoLeakTODO4" ; +"MemoryLeakExample_blockFreeNoLeakTODO4" [label="4: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2); [line 105]\n n$56=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 ):unsigned long ) [line 105]\n *&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2:class __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 =n$56 [line 105]\n n$57=*&x:int * [line 105]\n *n$56.x:int *=n$57 [line 105]\n n$51=*&x:int * [line 105]\n *&blk:_fn_ (*)=(_fun___objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2,n$51) [line 105]\n " shape="box"] - 7 -> 10 ; -6 [label="6: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class UIView ):unsigned long ) [line 20]\n *&attachmentContainerView:class UIView *=n$5 [line 20]\n " shape="box"] + "MemoryLeakExample_blockFreeNoLeakTODO4" -> "MemoryLeakExample_blockFreeNoLeakTODO3" ; +"MemoryLeakExample_blockFreeNoLeakTODO3" [label="3: Return Stmt \n n$49=*&blk:_fn_ (*) [line 110]\n n$50=n$49() [line 110]\n *&return:int =n$50 [line 110]\n " shape="box"] - 6 -> 5 ; -5 [label="5: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(struct CGPath ):unsigned long ,_fun_CGPathCreateWithRect:void ) [line 22]\n *&shadowPath:struct CGPath *=n$4 [line 21]\n " shape="box"] + "MemoryLeakExample_blockFreeNoLeakTODO3" -> "MemoryLeakExample_blockFreeNoLeakTODO2" ; +"MemoryLeakExample_blockFreeNoLeakTODO2" [label="2: Exit MemoryLeakExample_blockFreeNoLeakTODO \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Call _fun_CGPathRelease \n n$1=*&shadowPath:struct CGPath * [line 24]\n _fun_CGPathRelease(n$1:struct CGPath *) [line 24]\n " shape="box"] +"MemoryLeakExample_blockFreeNoLeakTODO1" [label="1: Start MemoryLeakExample_blockFreeNoLeakTODO\nFormals: self:class MemoryLeakExample *\nLocals: blk:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&blk,&x); [line 102]\n " color=yellow style=filled] - 4 -> 3 ; -3 [label="3: Message Call: release \n n$0=*&attachmentContainerView:class UIView * [line 25]\n _fun___objc_release(n$0:class UIView *) [line 25]\n " shape="box"] + "MemoryLeakExample_blockFreeNoLeakTODO1" -> "MemoryLeakExample_blockFreeNoLeakTODO6" ; +"MemoryLeakExample_measureFrameSizeForText3" [label="3: Call alloc \n n$14=_fun___objc_alloc_no_fail(sizeof(struct __CFAttributedString ):unsigned long ,_fun_CFAttributedStringCreateMutable:void ) [line 35]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit MemoryLeakExample_layoutSubviews \n " color=yellow style=filled] + "MemoryLeakExample_measureFrameSizeForText3" -> "MemoryLeakExample_measureFrameSizeForText2" ; +"MemoryLeakExample_measureFrameSizeForText2" [label="2: Exit MemoryLeakExample_measureFrameSizeForText \n " color=yellow style=filled] -1 [label="1: Start MemoryLeakExample_layoutSubviews\nFormals: self:class MemoryLeakExample *\nLocals: shadowPath:struct CGPath * attachmentContainerView:class UIView * \n DECLARE_LOCALS(&return,&shadowPath,&attachmentContainerView); [line 19]\n " color=yellow style=filled] +"MemoryLeakExample_measureFrameSizeForText1" [label="1: Start MemoryLeakExample_measureFrameSizeForText\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 1 -> 6 ; + "MemoryLeakExample_measureFrameSizeForText1" -> "MemoryLeakExample_measureFrameSizeForText3" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/RetainReleaseExample.m.dot b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/RetainReleaseExample.m.dot index 2538667fb..5fadaca50 100644 --- a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/RetainReleaseExample.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/RetainReleaseExample.m.dot @@ -1,33 +1,33 @@ /* @generated */ digraph iCFG { -8 [label="8: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class RRA ):unsigned long ) [line 25]\n n$4=_fun_RRA_init(n$3:class RRA *) virtual [line 25]\n *&a:class RRA *=n$4 [line 25]\n " shape="box"] +"RRA_init3" [label="3: Return Stmt \n n$0=*&self:class RRA * [line 19]\n *&return:struct objc_object *=n$0 [line 19]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Message Call: retain \n n$1=*&a:class RRA * [line 26]\n n$2=_fun___objc_retain(n$1:class RRA *) [line 26]\n " shape="box"] + "RRA_init3" -> "RRA_init2" ; +"RRA_init2" [label="2: Exit RRA_init \n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: Message Call: release \n n$0=*&a:class RRA * [line 27]\n _fun___objc_release(n$0:class RRA *) [line 27]\n " shape="box"] +"RRA_init1" [label="1: Start RRA_init\nFormals: self:class RRA *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit retain_release_test \n " color=yellow style=filled] + "RRA_init1" -> "RRA_init3" ; +"retain_release_test5" [label="5: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class RRA ):unsigned long ) [line 25]\n n$4=_fun_RRA_init(n$3:class RRA *) virtual [line 25]\n *&a:class RRA *=n$4 [line 25]\n " shape="box"] -4 [label="4: Start retain_release_test\nFormals: \nLocals: a:class RRA * \n DECLARE_LOCALS(&return,&a); [line 24]\n " color=yellow style=filled] + "retain_release_test5" -> "retain_release_test4" ; +"retain_release_test4" [label="4: Message Call: retain \n n$1=*&a:class RRA * [line 26]\n n$2=_fun___objc_retain(n$1:class RRA *) [line 26]\n " shape="box"] - 4 -> 8 ; -3 [label="3: Return Stmt \n n$0=*&self:class RRA * [line 19]\n *&return:struct objc_object *=n$0 [line 19]\n " shape="box"] + "retain_release_test4" -> "retain_release_test3" ; +"retain_release_test3" [label="3: Message Call: release \n n$0=*&a:class RRA * [line 27]\n _fun___objc_release(n$0:class RRA *) [line 27]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit RRA_init \n " color=yellow style=filled] + "retain_release_test3" -> "retain_release_test2" ; +"retain_release_test2" [label="2: Exit retain_release_test \n " color=yellow style=filled] -1 [label="1: Start RRA_init\nFormals: self:class RRA *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"retain_release_test1" [label="1: Start retain_release_test\nFormals: \nLocals: a:class RRA * \n DECLARE_LOCALS(&return,&a); [line 24]\n " color=yellow style=filled] - 1 -> 3 ; + "retain_release_test1" -> "retain_release_test5" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/RetainReleaseExample2.m.dot b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/RetainReleaseExample2.m.dot index 2d94c7e5d..0298703da 100644 --- a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/RetainReleaseExample2.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/RetainReleaseExample2.m.dot @@ -1,140 +1,140 @@ /* @generated */ digraph iCFG { -36 [label="36: Call _fun___objc_release \n n$1=*&a:class RR2 * [line 69]\n _fun___objc_release(n$1:class RR2 *) [line 69]\n " shape="box"] +"test33" [label="3: DeclStmt \n n$0=_fun_retain_release2_test() [line 44]\n *&b:class RR2 *=n$0 [line 44]\n " shape="box"] - 36 -> 32 ; -35 [label="35: Prune (false branch) \n n$0=*&a:class RR2 * [line 68]\n PRUNE((n$0 == 0), false); [line 68]\n " shape="invhouse"] + "test33" -> "test32" ; +"test32" [label="2: Exit test3 \n " color=yellow style=filled] - 35 -> 32 ; -34 [label="34: Prune (true branch) \n n$0=*&a:class RR2 * [line 68]\n PRUNE((n$0 != 0), true); [line 68]\n " shape="invhouse"] +"test31" [label="1: Start test3\nFormals: \nLocals: b:class RR2 * \n DECLARE_LOCALS(&return,&b); [line 44]\n " color=yellow style=filled] - 34 -> 36 ; -33 [label="33: between_join_and_exit \n " shape="box"] + "test31" -> "test33" ; +"test54" [label="4: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class RR2 ):unsigned long ) [line 55]\n n$2=_fun_RR2_init(n$1:class RR2 *) virtual [line 55]\n *&a:class RR2 *=n$2 [line 55]\n " shape="box"] - 33 -> 31 ; -32 [label="32: + \n " ] + "test54" -> "test53" ; +"test53" [label="3: Message Call: release \n n$0=*&a:class RR2 * [line 56]\n _fun___objc_release(n$0:class RR2 *) [line 56]\n " shape="box"] - 32 -> 33 ; -31 [label="31: Exit test7 \n " color=yellow style=filled] + "test53" -> "test52" ; +"test52" [label="2: Exit test5 \n " color=yellow style=filled] -30 [label="30: Start test7\nFormals: a:class RR2 *\nLocals: \n DECLARE_LOCALS(&return); [line 67]\n " color=yellow style=filled] +"test51" [label="1: Start test5\nFormals: \nLocals: a:class RR2 * \n DECLARE_LOCALS(&return,&a); [line 54]\n " color=yellow style=filled] - 30 -> 34 ; - 30 -> 35 ; -29 [label="29: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class RR2 ):unsigned long ) [line 61]\n n$4=_fun_RR2_init(n$3:class RR2 *) virtual [line 61]\n *&a:class RR2 *=n$4 [line 61]\n " shape="box"] + "test51" -> "test54" ; +"test44" [label="4: DeclStmt \n n$1=_fun_retain_release2_test() [line 49]\n *&b:class RR2 *=n$1 [line 49]\n " shape="box"] - 29 -> 28 ; -28 [label="28: Message Call: retain \n n$1=*&a:class RR2 * [line 62]\n n$2=_fun___objc_retain(n$1:class RR2 *) [line 62]\n " shape="box"] + "test44" -> "test43" ; +"test43" [label="3: Message Call: release \n n$0=*&b:class RR2 * [line 50]\n _fun___objc_release(n$0:class RR2 *) [line 50]\n " shape="box"] - 28 -> 27 ; -27 [label="27: Message Call: release \n n$0=*&a:class RR2 * [line 63]\n _fun___objc_release(n$0:class RR2 *) [line 63]\n " shape="box"] + "test43" -> "test42" ; +"test42" [label="2: Exit test4 \n " color=yellow style=filled] - 27 -> 26 ; -26 [label="26: Exit test6 \n " color=yellow style=filled] +"test41" [label="1: Start test4\nFormals: \nLocals: b:class RR2 * \n DECLARE_LOCALS(&return,&b); [line 47]\n " color=yellow style=filled] -25 [label="25: Start test6\nFormals: \nLocals: a:class RR2 * \n DECLARE_LOCALS(&return,&a); [line 60]\n " color=yellow style=filled] + "test41" -> "test44" ; +"RR2_init3" [label="3: Return Stmt \n n$0=*&self:class RR2 * [line 19]\n *&return:struct objc_object *=n$0 [line 19]\n " shape="box"] - 25 -> 29 ; -24 [label="24: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class RR2 ):unsigned long ) [line 55]\n n$2=_fun_RR2_init(n$1:class RR2 *) virtual [line 55]\n *&a:class RR2 *=n$2 [line 55]\n " shape="box"] + "RR2_init3" -> "RR2_init2" ; +"RR2_init2" [label="2: Exit RR2_init \n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Message Call: release \n n$0=*&a:class RR2 * [line 56]\n _fun___objc_release(n$0:class RR2 *) [line 56]\n " shape="box"] +"RR2_init1" [label="1: Start RR2_init\nFormals: self:class RR2 *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 23 -> 22 ; -22 [label="22: Exit test5 \n " color=yellow style=filled] + "RR2_init1" -> "RR2_init3" ; +"retain_release2_test6" [label="6: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class RR2 ):unsigned long ) [line 29]\n n$5=_fun_RR2_init(n$4:class RR2 *) virtual [line 29]\n *&a:class RR2 *=n$5 [line 29]\n " shape="box"] -21 [label="21: Start test5\nFormals: \nLocals: a:class RR2 * \n DECLARE_LOCALS(&return,&a); [line 54]\n " color=yellow style=filled] + "retain_release2_test6" -> "retain_release2_test5" ; +"retain_release2_test5" [label="5: Message Call: retain \n n$2=*&a:class RR2 * [line 30]\n n$3=_fun___objc_retain(n$2:class RR2 *) [line 30]\n " shape="box"] - 21 -> 24 ; -20 [label="20: DeclStmt \n n$1=_fun_retain_release2_test() [line 49]\n *&b:class RR2 *=n$1 [line 49]\n " shape="box"] + "retain_release2_test5" -> "retain_release2_test4" ; +"retain_release2_test4" [label="4: Message Call: release \n n$1=*&a:class RR2 * [line 31]\n _fun___objc_release(n$1:class RR2 *) [line 31]\n " shape="box"] - 20 -> 19 ; -19 [label="19: Message Call: release \n n$0=*&b:class RR2 * [line 50]\n _fun___objc_release(n$0:class RR2 *) [line 50]\n " shape="box"] + "retain_release2_test4" -> "retain_release2_test3" ; +"retain_release2_test3" [label="3: Return Stmt \n n$0=*&a:class RR2 * [line 33]\n *&return:class RR2 *=n$0 [line 33]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit test4 \n " color=yellow style=filled] + "retain_release2_test3" -> "retain_release2_test2" ; +"retain_release2_test2" [label="2: Exit retain_release2_test \n " color=yellow style=filled] -17 [label="17: Start test4\nFormals: \nLocals: b:class RR2 * \n DECLARE_LOCALS(&return,&b); [line 47]\n " color=yellow style=filled] +"retain_release2_test1" [label="1: Start retain_release2_test\nFormals: \nLocals: a:class RR2 * \n DECLARE_LOCALS(&return,&a); [line 28]\n " color=yellow style=filled] - 17 -> 20 ; -16 [label="16: DeclStmt \n n$0=_fun_retain_release2_test() [line 44]\n *&b:class RR2 *=n$0 [line 44]\n " shape="box"] + "retain_release2_test1" -> "retain_release2_test6" ; +"test77" [label="7: Call _fun___objc_release \n n$1=*&a:class RR2 * [line 69]\n _fun___objc_release(n$1:class RR2 *) [line 69]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Exit test3 \n " color=yellow style=filled] + "test77" -> "test73" ; +"test76" [label="6: Prune (false branch) \n n$0=*&a:class RR2 * [line 68]\n PRUNE((n$0 == 0), false); [line 68]\n " shape="invhouse"] -14 [label="14: Start test3\nFormals: \nLocals: b:class RR2 * \n DECLARE_LOCALS(&return,&b); [line 44]\n " color=yellow style=filled] + "test76" -> "test73" ; +"test75" [label="5: Prune (true branch) \n n$0=*&a:class RR2 * [line 68]\n PRUNE((n$0 != 0), true); [line 68]\n " shape="invhouse"] - 14 -> 16 ; -13 [label="13: DeclStmt \n n$1=_fun_retain_release2_test() [line 39]\n *&b:class RR2 *=n$1 [line 39]\n " shape="box"] + "test75" -> "test77" ; +"test74" [label="4: between_join_and_exit \n " shape="box"] - 13 -> 12 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$0=*&b:class RR2 * [line 40]\n *&#GB$g:class RR2 *=n$0 [line 40]\n " shape="box"] + "test74" -> "test72" ; +"test73" [label="3: + \n " ] - 12 -> 11 ; -11 [label="11: Exit retain_release2_test2 \n " color=yellow style=filled] + "test73" -> "test74" ; +"test72" [label="2: Exit test7 \n " color=yellow style=filled] -10 [label="10: Start retain_release2_test2\nFormals: \nLocals: b:class RR2 * \n DECLARE_LOCALS(&return,&b); [line 37]\n " color=yellow style=filled] +"test71" [label="1: Start test7\nFormals: a:class RR2 *\nLocals: \n DECLARE_LOCALS(&return); [line 67]\n " color=yellow style=filled] - 10 -> 13 ; -9 [label="9: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class RR2 ):unsigned long ) [line 29]\n n$5=_fun_RR2_init(n$4:class RR2 *) virtual [line 29]\n *&a:class RR2 *=n$5 [line 29]\n " shape="box"] + "test71" -> "test75" ; + "test71" -> "test76" ; +"test65" [label="5: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class RR2 ):unsigned long ) [line 61]\n n$4=_fun_RR2_init(n$3:class RR2 *) virtual [line 61]\n *&a:class RR2 *=n$4 [line 61]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Message Call: retain \n n$2=*&a:class RR2 * [line 30]\n n$3=_fun___objc_retain(n$2:class RR2 *) [line 30]\n " shape="box"] + "test65" -> "test64" ; +"test64" [label="4: Message Call: retain \n n$1=*&a:class RR2 * [line 62]\n n$2=_fun___objc_retain(n$1:class RR2 *) [line 62]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Message Call: release \n n$1=*&a:class RR2 * [line 31]\n _fun___objc_release(n$1:class RR2 *) [line 31]\n " shape="box"] + "test64" -> "test63" ; +"test63" [label="3: Message Call: release \n n$0=*&a:class RR2 * [line 63]\n _fun___objc_release(n$0:class RR2 *) [line 63]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&a:class RR2 * [line 33]\n *&return:class RR2 *=n$0 [line 33]\n " shape="box"] + "test63" -> "test62" ; +"test62" [label="2: Exit test6 \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Exit retain_release2_test \n " color=yellow style=filled] +"test61" [label="1: Start test6\nFormals: \nLocals: a:class RR2 * \n DECLARE_LOCALS(&return,&a); [line 60]\n " color=yellow style=filled] -4 [label="4: Start retain_release2_test\nFormals: \nLocals: a:class RR2 * \n DECLARE_LOCALS(&return,&a); [line 28]\n " color=yellow style=filled] + "test61" -> "test65" ; +"retain_release2_test24" [label="4: DeclStmt \n n$1=_fun_retain_release2_test() [line 39]\n *&b:class RR2 *=n$1 [line 39]\n " shape="box"] - 4 -> 9 ; -3 [label="3: Return Stmt \n n$0=*&self:class RR2 * [line 19]\n *&return:struct objc_object *=n$0 [line 19]\n " shape="box"] + "retain_release2_test24" -> "retain_release2_test23" ; +"retain_release2_test23" [label="3: BinaryOperatorStmt: Assign \n n$0=*&b:class RR2 * [line 40]\n *&#GB$g:class RR2 *=n$0 [line 40]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit RR2_init \n " color=yellow style=filled] + "retain_release2_test23" -> "retain_release2_test22" ; +"retain_release2_test22" [label="2: Exit retain_release2_test2 \n " color=yellow style=filled] -1 [label="1: Start RR2_init\nFormals: self:class RR2 *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"retain_release2_test21" [label="1: Start retain_release2_test2\nFormals: \nLocals: b:class RR2 * \n DECLARE_LOCALS(&return,&b); [line 37]\n " color=yellow style=filled] - 1 -> 3 ; + "retain_release2_test21" -> "retain_release2_test24" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/TollBridgeExample.m.dot b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/TollBridgeExample.m.dot index 087affdf9..25d07a258 100644 --- a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/TollBridgeExample.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/TollBridgeExample.m.dot @@ -1,89 +1,89 @@ /* @generated */ digraph iCFG { -23 [label="23: DeclStmt \n n$1=_fun_NSDictionary_dictionaryWithObjects:forKeys:count:(0:struct objc_object *) [line 45]\n n$2=_fun_NSString_stringWithUTF8String:(\"key\":char *) [line 45]\n n$3=_fun_NSDictionary_dictionaryWithObjects:forKeys:count:(n$1:struct objc_object *,n$2:struct objc_object *,0:struct objc_object *) [line 45]\n *&bufferAttributes:class NSDictionary *=n$3 [line 45]\n " shape="box"] +"TollBridgeExample_bridgeTransfer4" [label="4: DeclStmt \n n$1=_fun_CFLocaleCreate(0:struct __CFAllocator *,0:struct __CFString *) [line 20]\n *&nameRef:struct __CFLocale *=n$1 [line 20]\n " shape="box"] - 23 -> 22 ; -22 [label="22: DeclStmt \n n$0=*&bufferAttributes:class NSDictionary * [line 46]\n *&dict:struct __CFDictionary *=n$0 [line 46]\n " shape="box"] + "TollBridgeExample_bridgeTransfer4" -> "TollBridgeExample_bridgeTransfer3" ; +"TollBridgeExample_bridgeTransfer3" [label="3: DeclStmt \n n$0=*&nameRef:struct __CFLocale * [line 21]\n *&a:class NSLocale *=n$0 [line 21]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Exit bridgeDictionaryNoLeak \n " color=yellow style=filled] + "TollBridgeExample_bridgeTransfer3" -> "TollBridgeExample_bridgeTransfer2" ; +"TollBridgeExample_bridgeTransfer2" [label="2: Exit TollBridgeExample_bridgeTransfer \n " color=yellow style=filled] -20 [label="20: Start bridgeDictionaryNoLeak\nFormals: \nLocals: dict:struct __CFDictionary * bufferAttributes:class NSDictionary * \n DECLARE_LOCALS(&return,&dict,&bufferAttributes); [line 44]\n " color=yellow style=filled] +"TollBridgeExample_bridgeTransfer1" [label="1: Start TollBridgeExample_bridgeTransfer\nFormals: self:class TollBridgeExample *\nLocals: a:class NSLocale * nameRef:struct __CFLocale * \n DECLARE_LOCALS(&return,&a,&nameRef); [line 19]\n " color=yellow style=filled] - 20 -> 23 ; -19 [label="19: Return Stmt \n n$0=_fun___builtin___CFStringMakeConstantString(\"Icon\":char *) [line 41]\n n$1=_fun_CTFontCreateWithName(n$0:struct __CFString *,17.000000:double ,0:struct CGAffineTransform *) [line 41]\n n$2=_fun___objc_cast(n$1:void *,sizeof(void ):unsigned long ) [line 41]\n *&return:struct __CTFont *=n$2 [line 41]\n " shape="box"] + "TollBridgeExample_bridgeTransfer1" -> "TollBridgeExample_bridgeTransfer4" ; +"TollBridgeExample_bridge4" [label="4: DeclStmt \n n$3=_fun_CFLocaleCreate(0:struct __CFAllocator *,0:struct __CFString *) [line 25]\n *&nameRef:struct __CFLocale *=n$3 [line 25]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit cfautorelease_test \n " color=yellow style=filled] + "TollBridgeExample_bridge4" -> "TollBridgeExample_bridge3" ; +"TollBridgeExample_bridge3" [label="3: DeclStmt \n n$2=*&nameRef:struct __CFLocale * [line 26]\n *&a:class NSLocale *=n$2 [line 26]\n " shape="box"] -17 [label="17: Start cfautorelease_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] + "TollBridgeExample_bridge3" -> "TollBridgeExample_bridge2" ; +"TollBridgeExample_bridge2" [label="2: Exit TollBridgeExample_bridge \n " color=yellow style=filled] - 17 -> 19 ; -16 [label="16: DeclStmt \n n$8=_fun_CFHTTPMessageCopyAllHeaderFields(0:struct __CFHTTPMessage *) [line 36]\n *&ref:struct __CFDictionary *=n$8 [line 36]\n " shape="box"] +"TollBridgeExample_bridge1" [label="1: Start TollBridgeExample_bridge\nFormals: self:class TollBridgeExample *\nLocals: a:class NSLocale * nameRef:struct __CFLocale * \n DECLARE_LOCALS(&return,&a,&nameRef); [line 24]\n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Call _fun_CFBridgingRelease \n n$6=*&ref:struct __CFDictionary * [line 37]\n n$7=_fun___objc_cast(n$6:void *,sizeof(struct objc_object ):unsigned long ) [line 37]\n " shape="box"] + "TollBridgeExample_bridge1" -> "TollBridgeExample_bridge4" ; +"TollBridgeExample_brideRetained4" [label="4: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class NSLocale ):unsigned long ) [line 30]\n *&observer:struct objc_object *=n$5 [line 30]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit TollBridgeExample__readHTTPHeader \n " color=yellow style=filled] + "TollBridgeExample_brideRetained4" -> "TollBridgeExample_brideRetained3" ; +"TollBridgeExample_brideRetained3" [label="3: DeclStmt \n n$4=*&observer:struct objc_object * [line 31]\n *&a:struct __CFLocale *=n$4 [line 31]\n " shape="box"] -13 [label="13: Start TollBridgeExample__readHTTPHeader\nFormals: self:class TollBridgeExample *\nLocals: ref:struct __CFDictionary * \n DECLARE_LOCALS(&return,&ref); [line 34]\n " color=yellow style=filled] + "TollBridgeExample_brideRetained3" -> "TollBridgeExample_brideRetained2" ; +"TollBridgeExample_brideRetained2" [label="2: Exit TollBridgeExample_brideRetained \n " color=yellow style=filled] - 13 -> 16 ; -12 [label="12: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class NSLocale ):unsigned long ) [line 30]\n *&observer:struct objc_object *=n$5 [line 30]\n " shape="box"] +"TollBridgeExample_brideRetained1" [label="1: Start TollBridgeExample_brideRetained\nFormals: self:class TollBridgeExample *\nLocals: a:struct __CFLocale * observer:struct objc_object * \n DECLARE_LOCALS(&return,&a,&observer); [line 29]\n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: DeclStmt \n n$4=*&observer:struct objc_object * [line 31]\n *&a:struct __CFLocale *=n$4 [line 31]\n " shape="box"] + "TollBridgeExample_brideRetained1" -> "TollBridgeExample_brideRetained4" ; +"bridgeDictionaryNoLeak4" [label="4: DeclStmt \n n$1=_fun_NSDictionary_dictionaryWithObjects:forKeys:count:(0:struct objc_object *) [line 45]\n n$2=_fun_NSString_stringWithUTF8String:(\"key\":char *) [line 45]\n n$3=_fun_NSDictionary_dictionaryWithObjects:forKeys:count:(n$1:struct objc_object *,n$2:struct objc_object *,0:struct objc_object *) [line 45]\n *&bufferAttributes:class NSDictionary *=n$3 [line 45]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit TollBridgeExample_brideRetained \n " color=yellow style=filled] + "bridgeDictionaryNoLeak4" -> "bridgeDictionaryNoLeak3" ; +"bridgeDictionaryNoLeak3" [label="3: DeclStmt \n n$0=*&bufferAttributes:class NSDictionary * [line 46]\n *&dict:struct __CFDictionary *=n$0 [line 46]\n " shape="box"] -9 [label="9: Start TollBridgeExample_brideRetained\nFormals: self:class TollBridgeExample *\nLocals: a:struct __CFLocale * observer:struct objc_object * \n DECLARE_LOCALS(&return,&a,&observer); [line 29]\n " color=yellow style=filled] + "bridgeDictionaryNoLeak3" -> "bridgeDictionaryNoLeak2" ; +"bridgeDictionaryNoLeak2" [label="2: Exit bridgeDictionaryNoLeak \n " color=yellow style=filled] - 9 -> 12 ; -8 [label="8: DeclStmt \n n$3=_fun_CFLocaleCreate(0:struct __CFAllocator *,0:struct __CFString *) [line 25]\n *&nameRef:struct __CFLocale *=n$3 [line 25]\n " shape="box"] +"bridgeDictionaryNoLeak1" [label="1: Start bridgeDictionaryNoLeak\nFormals: \nLocals: dict:struct __CFDictionary * bufferAttributes:class NSDictionary * \n DECLARE_LOCALS(&return,&dict,&bufferAttributes); [line 44]\n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: DeclStmt \n n$2=*&nameRef:struct __CFLocale * [line 26]\n *&a:class NSLocale *=n$2 [line 26]\n " shape="box"] + "bridgeDictionaryNoLeak1" -> "bridgeDictionaryNoLeak4" ; +"cfautorelease_test3" [label="3: Return Stmt \n n$0=_fun___builtin___CFStringMakeConstantString(\"Icon\":char *) [line 41]\n n$1=_fun_CTFontCreateWithName(n$0:struct __CFString *,17.000000:double ,0:struct CGAffineTransform *) [line 41]\n n$2=_fun___objc_cast(n$1:void *,sizeof(void ):unsigned long ) [line 41]\n *&return:struct __CTFont *=n$2 [line 41]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit TollBridgeExample_bridge \n " color=yellow style=filled] + "cfautorelease_test3" -> "cfautorelease_test2" ; +"cfautorelease_test2" [label="2: Exit cfautorelease_test \n " color=yellow style=filled] -5 [label="5: Start TollBridgeExample_bridge\nFormals: self:class TollBridgeExample *\nLocals: a:class NSLocale * nameRef:struct __CFLocale * \n DECLARE_LOCALS(&return,&a,&nameRef); [line 24]\n " color=yellow style=filled] +"cfautorelease_test1" [label="1: Start cfautorelease_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] - 5 -> 8 ; -4 [label="4: DeclStmt \n n$1=_fun_CFLocaleCreate(0:struct __CFAllocator *,0:struct __CFString *) [line 20]\n *&nameRef:struct __CFLocale *=n$1 [line 20]\n " shape="box"] + "cfautorelease_test1" -> "cfautorelease_test3" ; +"TollBridgeExample__readHTTPHeader4" [label="4: DeclStmt \n n$8=_fun_CFHTTPMessageCopyAllHeaderFields(0:struct __CFHTTPMessage *) [line 36]\n *&ref:struct __CFDictionary *=n$8 [line 36]\n " shape="box"] - 4 -> 3 ; -3 [label="3: DeclStmt \n n$0=*&nameRef:struct __CFLocale * [line 21]\n *&a:class NSLocale *=n$0 [line 21]\n " shape="box"] + "TollBridgeExample__readHTTPHeader4" -> "TollBridgeExample__readHTTPHeader3" ; +"TollBridgeExample__readHTTPHeader3" [label="3: Call _fun_CFBridgingRelease \n n$6=*&ref:struct __CFDictionary * [line 37]\n n$7=_fun___objc_cast(n$6:void *,sizeof(struct objc_object ):unsigned long ) [line 37]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit TollBridgeExample_bridgeTransfer \n " color=yellow style=filled] + "TollBridgeExample__readHTTPHeader3" -> "TollBridgeExample__readHTTPHeader2" ; +"TollBridgeExample__readHTTPHeader2" [label="2: Exit TollBridgeExample__readHTTPHeader \n " color=yellow style=filled] -1 [label="1: Start TollBridgeExample_bridgeTransfer\nFormals: self:class TollBridgeExample *\nLocals: a:class NSLocale * nameRef:struct __CFLocale * \n DECLARE_LOCALS(&return,&a,&nameRef); [line 19]\n " color=yellow style=filled] +"TollBridgeExample__readHTTPHeader1" [label="1: Start TollBridgeExample__readHTTPHeader\nFormals: self:class TollBridgeExample *\nLocals: ref:struct __CFDictionary * \n DECLARE_LOCALS(&return,&ref); [line 34]\n " color=yellow style=filled] - 1 -> 4 ; + "TollBridgeExample__readHTTPHeader1" -> "TollBridgeExample__readHTTPHeader4" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/arc_methods.m.dot b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/arc_methods.m.dot index 8ddf758c4..e3584e52b 100644 --- a/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/arc_methods.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/memory_leaks_benchmark/arc_methods.m.dot @@ -1,60 +1,60 @@ /* @generated */ digraph iCFG { -15 [label="15: DeclStmt \n n$3=_fun_ArcMethodsA_newA() [line 42]\n *&a1:class ArcMethodsA *=n$3 [line 42]\n " shape="box"] +"main_arc_methods7" [label="7: DeclStmt \n n$3=_fun_ArcMethodsA_newA() [line 42]\n *&a1:class ArcMethodsA *=n$3 [line 42]\n " shape="box"] - 15 -> 14 ; -14 [label="14: DeclStmt \n n$2=*&a1:class ArcMethodsA * [line 43]\n _fun___objc_retain(n$2:class ArcMethodsA *) [line 43]\n *&aa:class ArcMethodsA *=n$2 [line 43]\n " shape="box"] + "main_arc_methods7" -> "main_arc_methods6" ; +"main_arc_methods6" [label="6: DeclStmt \n n$2=*&a1:class ArcMethodsA * [line 43]\n _fun___objc_retain(n$2:class ArcMethodsA *) [line 43]\n *&aa:class ArcMethodsA *=n$2 [line 43]\n " shape="box"] - 14 -> 13 ; -13 [label="13: DeclStmt \n n$1=_fun_ArcMethodsA_someA() [line 44]\n _fun___objc_retain(n$1:class ArcMethodsA *) [line 44]\n *&a2:class ArcMethodsA *=n$1 [line 44]\n " shape="box"] + "main_arc_methods6" -> "main_arc_methods5" ; +"main_arc_methods5" [label="5: DeclStmt \n n$1=_fun_ArcMethodsA_someA() [line 44]\n _fun___objc_retain(n$1:class ArcMethodsA *) [line 44]\n *&a2:class ArcMethodsA *=n$1 [line 44]\n " shape="box"] - 13 -> 12 ; -12 [label="12: DeclStmt \n n$0=*&a2:class ArcMethodsA * [line 45]\n _fun___objc_retain(n$0:class ArcMethodsA *) [line 45]\n *&ab:class ArcMethodsA *=n$0 [line 45]\n " shape="box"] + "main_arc_methods5" -> "main_arc_methods4" ; +"main_arc_methods4" [label="4: DeclStmt \n n$0=*&a2:class ArcMethodsA * [line 45]\n _fun___objc_retain(n$0:class ArcMethodsA *) [line 45]\n *&ab:class ArcMethodsA *=n$0 [line 45]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Return Stmt \n *&return:int =0 [line 46]\n " shape="box"] + "main_arc_methods4" -> "main_arc_methods3" ; +"main_arc_methods3" [label="3: Return Stmt \n *&return:int =0 [line 46]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit main_arc_methods \n " color=yellow style=filled] + "main_arc_methods3" -> "main_arc_methods2" ; +"main_arc_methods2" [label="2: Exit main_arc_methods \n " color=yellow style=filled] -9 [label="9: Start main_arc_methods\nFormals: \nLocals: ab:class ArcMethodsA * a2:class ArcMethodsA * aa:class ArcMethodsA * a1:class ArcMethodsA * \n DECLARE_LOCALS(&return,&ab,&a2,&aa,&a1); [line 35]\n " color=yellow style=filled] +"main_arc_methods1" [label="1: Start main_arc_methods\nFormals: \nLocals: ab:class ArcMethodsA * a2:class ArcMethodsA * aa:class ArcMethodsA * a1:class ArcMethodsA * \n DECLARE_LOCALS(&return,&ab,&a2,&aa,&a1); [line 35]\n " color=yellow style=filled] - 9 -> 15 ; -8 [label="8: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class ArcMethodsA ):unsigned long ) [line 28]\n n$6=_fun_NSObject_init(n$5:class ArcMethodsA *) virtual [line 28]\n *&a:class ArcMethodsA *=n$6 [line 28]\n " shape="box"] + "main_arc_methods1" -> "main_arc_methods7" ; +"ArcMethodsA_newA4" [label="4: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class ArcMethodsA ):unsigned long ) [line 23]\n n$2=_fun_NSObject_init(n$1:class ArcMethodsA *) virtual [line 23]\n *&a:class ArcMethodsA *=n$2 [line 23]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Return Stmt \n n$3=*&a:class ArcMethodsA * [line 30]\n *&return:class ArcMethodsA *=n$3 [line 30]\n n$4=_fun___set_autorelease_attribute(n$3:class ArcMethodsA *) [line 30]\n " shape="box"] + "ArcMethodsA_newA4" -> "ArcMethodsA_newA3" ; +"ArcMethodsA_newA3" [label="3: Return Stmt \n n$0=*&a:class ArcMethodsA * [line 24]\n *&return:class ArcMethodsA *=n$0 [line 24]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Exit ArcMethodsA_someA \n " color=yellow style=filled] + "ArcMethodsA_newA3" -> "ArcMethodsA_newA2" ; +"ArcMethodsA_newA2" [label="2: Exit ArcMethodsA_newA \n " color=yellow style=filled] -5 [label="5: Start ArcMethodsA_someA\nFormals: \nLocals: a:class ArcMethodsA * \n DECLARE_LOCALS(&return,&a); [line 27]\n " color=yellow style=filled] +"ArcMethodsA_newA1" [label="1: Start ArcMethodsA_newA\nFormals: \nLocals: a:class ArcMethodsA * \n DECLARE_LOCALS(&return,&a); [line 22]\n " color=yellow style=filled] - 5 -> 8 ; -4 [label="4: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class ArcMethodsA ):unsigned long ) [line 23]\n n$2=_fun_NSObject_init(n$1:class ArcMethodsA *) virtual [line 23]\n *&a:class ArcMethodsA *=n$2 [line 23]\n " shape="box"] + "ArcMethodsA_newA1" -> "ArcMethodsA_newA4" ; +"ArcMethodsA_someA4" [label="4: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class ArcMethodsA ):unsigned long ) [line 28]\n n$6=_fun_NSObject_init(n$5:class ArcMethodsA *) virtual [line 28]\n *&a:class ArcMethodsA *=n$6 [line 28]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&a:class ArcMethodsA * [line 24]\n *&return:class ArcMethodsA *=n$0 [line 24]\n " shape="box"] + "ArcMethodsA_someA4" -> "ArcMethodsA_someA3" ; +"ArcMethodsA_someA3" [label="3: Return Stmt \n n$3=*&a:class ArcMethodsA * [line 30]\n *&return:class ArcMethodsA *=n$3 [line 30]\n n$4=_fun___set_autorelease_attribute(n$3:class ArcMethodsA *) [line 30]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit ArcMethodsA_newA \n " color=yellow style=filled] + "ArcMethodsA_someA3" -> "ArcMethodsA_someA2" ; +"ArcMethodsA_someA2" [label="2: Exit ArcMethodsA_someA \n " color=yellow style=filled] -1 [label="1: Start ArcMethodsA_newA\nFormals: \nLocals: a:class ArcMethodsA * \n DECLARE_LOCALS(&return,&a); [line 22]\n " color=yellow style=filled] +"ArcMethodsA_someA1" [label="1: Start ArcMethodsA_someA\nFormals: \nLocals: a:class ArcMethodsA * \n DECLARE_LOCALS(&return,&a); [line 27]\n " color=yellow style=filled] - 1 -> 4 ; + "ArcMethodsA_someA1" -> "ArcMethodsA_someA4" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/npe/Nonnull_attribute_example.m.dot b/infer/tests/codetoanalyze/objc/shared/npe/Nonnull_attribute_example.m.dot index 20c5f3988..cced6e194 100644 --- a/infer/tests/codetoanalyze/objc/shared/npe/Nonnull_attribute_example.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/npe/Nonnull_attribute_example.m.dot @@ -1,52 +1,52 @@ /* @generated */ digraph iCFG { -13 [label="13: Call _fun___infer_assume \n n$1=*&callback:_fn_ (*) [line 46]\n n$2=_fun___infer_assume((n$1 != 0):_fn_ (*)) [line 46]\n " shape="box"] +"NonnullAtrributeTest4" [label="4: Call _fun___infer_assume \n n$1=*&callback:_fn_ (*) [line 46]\n n$2=_fun___infer_assume((n$1 != 0):_fn_ (*)) [line 46]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Call n$0 \n n$0=*&callback:_fn_ (*) [line 47]\n n$0(0:class NSError *,0:struct objc_object *) [line 47]\n " shape="box"] + "NonnullAtrributeTest4" -> "NonnullAtrributeTest3" ; +"NonnullAtrributeTest3" [label="3: Call n$0 \n n$0=*&callback:_fn_ (*) [line 47]\n n$0(0:class NSError *,0:struct objc_object *) [line 47]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit NonnullAtrributeTest \n " color=yellow style=filled] + "NonnullAtrributeTest3" -> "NonnullAtrributeTest2" ; +"NonnullAtrributeTest2" [label="2: Exit NonnullAtrributeTest \n " color=yellow style=filled] -10 [label="10: Start NonnullAtrributeTest\nFormals: callback:_fn_ (*)\nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] +"NonnullAtrributeTest1" [label="1: Start NonnullAtrributeTest\nFormals: callback:_fn_ (*)\nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] - 10 -> 13 ; -9 [label="9: Call _fun___infer_assume \n n$5=*&a:class NonnullA * [line 38]\n n$6=_fun___infer_assume((n$5 != 0):class NonnullA *) [line 38]\n " shape="box"] + "NonnullAtrributeTest1" -> "NonnullAtrributeTest4" ; +"NonnullC_initWithCoder:and:6" [label="6: Call _fun___infer_assume \n n$5=*&a:class NonnullA * [line 38]\n n$6=_fun___infer_assume((n$5 != 0):class NonnullA *) [line 38]\n " shape="box"] - 9 -> 8 ; -8 [label="8: DeclStmt \n n$3=*&a:class NonnullA * [line 39]\n n$4=_fun_NonnullA_getA(n$3:class NonnullA *) virtual [line 39]\n _fun___objc_retain(n$4:class NonnullA *) [line 39]\n *&a1:class NonnullA *=n$4 [line 39]\n " shape="box"] + "NonnullC_initWithCoder:and:6" -> "NonnullC_initWithCoder:and:5" ; +"NonnullC_initWithCoder:and:5" [label="5: DeclStmt \n n$3=*&a:class NonnullA * [line 39]\n n$4=_fun_NonnullA_getA(n$3:class NonnullA *) virtual [line 39]\n _fun___objc_retain(n$4:class NonnullA *) [line 39]\n *&a1:class NonnullA *=n$4 [line 39]\n " shape="box"] - 8 -> 7 ; -7 [label="7: DeclStmt \n n$1=*&a1:class NonnullA * [line 40]\n n$2=*n$1.x:int [line 40]\n *&y:int =n$2 [line 40]\n " shape="box"] + "NonnullC_initWithCoder:and:5" -> "NonnullC_initWithCoder:and:4" ; +"NonnullC_initWithCoder:and:4" [label="4: DeclStmt \n n$1=*&a1:class NonnullA * [line 40]\n n$2=*n$1.x:int [line 40]\n *&y:int =n$2 [line 40]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&self:class NonnullC * [line 41]\n *&return:struct objc_object *=n$0 [line 41]\n " shape="box"] + "NonnullC_initWithCoder:and:4" -> "NonnullC_initWithCoder:and:3" ; +"NonnullC_initWithCoder:and:3" [label="3: Return Stmt \n n$0=*&self:class NonnullC * [line 41]\n *&return:struct objc_object *=n$0 [line 41]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit NonnullC_initWithCoder:and: \n " color=yellow style=filled] + "NonnullC_initWithCoder:and:3" -> "NonnullC_initWithCoder:and:2" ; +"NonnullC_initWithCoder:and:2" [label="2: Exit NonnullC_initWithCoder:and: \n " color=yellow style=filled] -4 [label="4: Start NonnullC_initWithCoder:and:\nFormals: self:class NonnullC * aDecoder:class NSString * a:class NonnullA *\nLocals: y:int a1:class NonnullA * \n DECLARE_LOCALS(&return,&y,&a1); [line 38]\n " color=yellow style=filled] +"NonnullC_initWithCoder:and:1" [label="1: Start NonnullC_initWithCoder:and:\nFormals: self:class NonnullC * aDecoder:class NSString * a:class NonnullA *\nLocals: y:int a1:class NonnullA * \n DECLARE_LOCALS(&return,&y,&a1); [line 38]\n " color=yellow style=filled] - 4 -> 9 ; -3 [label="3: Return Stmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class NonnullA ):unsigned long ) [line 26]\n n$1=_fun_NSObject_init(n$0:class NonnullA *) virtual [line 26]\n *&return:class NonnullA *=n$1 [line 26]\n n$2=_fun___set_autorelease_attribute(n$1:class NonnullA *) [line 26]\n " shape="box"] + "NonnullC_initWithCoder:and:1" -> "NonnullC_initWithCoder:and:6" ; +"NonnullA_getA3" [label="3: Return Stmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class NonnullA ):unsigned long ) [line 26]\n n$1=_fun_NSObject_init(n$0:class NonnullA *) virtual [line 26]\n *&return:class NonnullA *=n$1 [line 26]\n n$2=_fun___set_autorelease_attribute(n$1:class NonnullA *) [line 26]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit NonnullA_getA \n " color=yellow style=filled] + "NonnullA_getA3" -> "NonnullA_getA2" ; +"NonnullA_getA2" [label="2: Exit NonnullA_getA \n " color=yellow style=filled] -1 [label="1: Start NonnullA_getA\nFormals: self:class NonnullA *\nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] +"NonnullA_getA1" [label="1: Start NonnullA_getA\nFormals: self:class NonnullA *\nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 1 -> 3 ; + "NonnullA_getA1" -> "NonnullA_getA3" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/npe/npe_malloc.m.dot b/infer/tests/codetoanalyze/objc/shared/npe/npe_malloc.m.dot index f9144420b..6ff6ce456 100644 --- a/infer/tests/codetoanalyze/objc/shared/npe/npe_malloc.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/npe/npe_malloc.m.dot @@ -1,22 +1,22 @@ /* @generated */ digraph iCFG { -5 [label="5: DeclStmt \n n$2=_fun_malloc_no_fail(sizeof(struct Person ):struct Person ) [line 25]\n *&person:struct Person *=n$2 [line 25]\n " shape="box"] +"NpeMallocC_test5" [label="5: DeclStmt \n n$2=_fun_malloc_no_fail(sizeof(struct Person ):struct Person ) [line 25]\n *&person:struct Person *=n$2 [line 25]\n " shape="box"] - 5 -> 4 ; -4 [label="4: BinaryOperatorStmt: Assign \n n$1=*&person:struct Person * [line 26]\n *n$1.x:int =10 [line 26]\n " shape="box"] + "NpeMallocC_test5" -> "NpeMallocC_test4" ; +"NpeMallocC_test4" [label="4: BinaryOperatorStmt: Assign \n n$1=*&person:struct Person * [line 26]\n *n$1.x:int =10 [line 26]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&person:struct Person * [line 27]\n *&return:struct Person *=n$0 [line 27]\n " shape="box"] + "NpeMallocC_test4" -> "NpeMallocC_test3" ; +"NpeMallocC_test3" [label="3: Return Stmt \n n$0=*&person:struct Person * [line 27]\n *&return:struct Person *=n$0 [line 27]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit NpeMallocC_test \n " color=yellow style=filled] + "NpeMallocC_test3" -> "NpeMallocC_test2" ; +"NpeMallocC_test2" [label="2: Exit NpeMallocC_test \n " color=yellow style=filled] -1 [label="1: Start NpeMallocC_test\nFormals: self:class NpeMallocC *\nLocals: person:struct Person * \n DECLARE_LOCALS(&return,&person); [line 24]\n " color=yellow style=filled] +"NpeMallocC_test1" [label="1: Start NpeMallocC_test\nFormals: self:class NpeMallocC *\nLocals: person:struct Person * \n DECLARE_LOCALS(&return,&person); [line 24]\n " color=yellow style=filled] - 1 -> 5 ; + "NpeMallocC_test1" -> "NpeMallocC_test5" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/property/GetterExample.m.dot b/infer/tests/codetoanalyze/objc/shared/property/GetterExample.m.dot index a779953d3..0385602c1 100644 --- a/infer/tests/codetoanalyze/objc/shared/property/GetterExample.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/property/GetterExample.m.dot @@ -1,22 +1,22 @@ /* @generated */ digraph iCFG { -5 [label="5: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class GetterExample ):unsigned long ) [line 15]\n n$4=_fun_NSObject_init(n$3:class GetterExample *) virtual [line 15]\n *&a:class GetterExample *=n$4 [line 15]\n " shape="box"] +"should_have_div05" [label="5: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class GetterExample ):unsigned long ) [line 15]\n n$4=_fun_NSObject_init(n$3:class GetterExample *) virtual [line 15]\n *&a:class GetterExample *=n$4 [line 15]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Message Call: setName: \n n$2=*&a:class GetterExample * [line 16]\n _fun_GetterExample_setName:(n$2:class GetterExample *,5:int ) [line 16]\n " shape="box"] + "should_have_div05" -> "should_have_div04" ; +"should_have_div04" [label="4: Message Call: setName: \n n$2=*&a:class GetterExample * [line 16]\n _fun_GetterExample_setName:(n$2:class GetterExample *,5:int ) [line 16]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=*&a:class GetterExample * [line 17]\n n$1=_fun_GetterExample_name(n$0:class GetterExample *) [line 17]\n *&return:int =(1 / (n$1 - 5)) [line 17]\n " shape="box"] + "should_have_div04" -> "should_have_div03" ; +"should_have_div03" [label="3: Return Stmt \n n$0=*&a:class GetterExample * [line 17]\n n$1=_fun_GetterExample_name(n$0:class GetterExample *) [line 17]\n *&return:int =(1 / (n$1 - 5)) [line 17]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit should_have_div0 \n " color=yellow style=filled] + "should_have_div03" -> "should_have_div02" ; +"should_have_div02" [label="2: Exit should_have_div0 \n " color=yellow style=filled] -1 [label="1: Start should_have_div0\nFormals: \nLocals: a:class GetterExample * \n DECLARE_LOCALS(&return,&a); [line 14]\n " color=yellow style=filled] +"should_have_div01" [label="1: Start should_have_div0\nFormals: \nLocals: a:class GetterExample * \n DECLARE_LOCALS(&return,&a); [line 14]\n " color=yellow style=filled] - 1 -> 5 ; + "should_have_div01" -> "should_have_div05" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/property/PropertyAttributes.m.dot b/infer/tests/codetoanalyze/objc/shared/property/PropertyAttributes.m.dot index 1c1d88b3c..539d8e75c 100644 --- a/infer/tests/codetoanalyze/objc/shared/property/PropertyAttributes.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/property/PropertyAttributes.m.dot @@ -1,77 +1,77 @@ /* @generated */ digraph iCFG { -19 [label="19: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class PropertyA ):unsigned long ) [line 43]\n n$4=_fun_PropertyA_init(n$3:class PropertyA *) virtual [line 43]\n *&a:class PropertyA *=n$4 [line 43]\n " shape="box"] +"PropertyA_init3" [label="3: Return Stmt \n n$0=*&self:class PropertyA * [line 27]\n *&return:struct objc_object *=n$0 [line 27]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Message Call: setLast_name: \n n$1=*&a:class PropertyA * [line 44]\n n$2=*&a2:class PropertyA * [line 44]\n _fun_PropertyA_setLast_name:(n$1:class PropertyA *,n$2:class PropertyA *) [line 44]\n " shape="box"] + "PropertyA_init3" -> "PropertyA_init2" ; +"PropertyA_init2" [label="2: Exit PropertyA_init \n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Message Call: release \n n$0=*&a:class PropertyA * [line 45]\n _fun___objc_release(n$0:class PropertyA *) [line 45]\n " shape="box"] +"PropertyA_init1" [label="1: Start PropertyA_init\nFormals: self:class PropertyA *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Return Stmt \n *&return:int =0 [line 46]\n " shape="box"] + "PropertyA_init1" -> "PropertyA_init3" ; +"PropertyA_copy10" [label="10: DeclStmt \n n$12=_fun___objc_alloc_no_fail(sizeof(class PropertyA ):unsigned long ) [line 31]\n n$13=_fun_PropertyA_init(n$12:class PropertyA *) virtual [line 31]\n *&other:class PropertyA *=n$13 [line 31]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Exit test \n " color=yellow style=filled] + "PropertyA_copy10" -> "PropertyA_copy5" ; + "PropertyA_copy10" -> "PropertyA_copy6" ; +"PropertyA_copy9" [label="9: BinaryOperatorStmt: Assign \n n$9=*&other:class PropertyA * [line 33]\n n$10=*&self:class PropertyA * [line 33]\n n$11=*n$10._name:class PropertyA * [line 33]\n *n$9._name:class PropertyA *=n$11 [line 33]\n " shape="box"] -14 [label="14: Start test\nFormals: a2:class PropertyA *\nLocals: a:class PropertyA * \n DECLARE_LOCALS(&return,&a); [line 42]\n " color=yellow style=filled] + "PropertyA_copy9" -> "PropertyA_copy8" ; +"PropertyA_copy8" [label="8: BinaryOperatorStmt: Assign \n n$6=*&other:class PropertyA * [line 34]\n n$7=*&self:class PropertyA * [line 34]\n n$8=*n$7._last_name:class PropertyA * [line 34]\n *n$6._last_name:class PropertyA *=n$8 [line 34]\n " shape="box"] - 14 -> 19 ; -13 [label="13: DeclStmt \n n$12=_fun___objc_alloc_no_fail(sizeof(class PropertyA ):unsigned long ) [line 31]\n n$13=_fun_PropertyA_init(n$12:class PropertyA *) virtual [line 31]\n *&other:class PropertyA *=n$13 [line 31]\n " shape="box"] + "PropertyA_copy8" -> "PropertyA_copy7" ; +"PropertyA_copy7" [label="7: BinaryOperatorStmt: Assign \n n$3=*&other:class PropertyA * [line 35]\n n$4=*&self:class PropertyA * [line 35]\n n$5=*n$4._child:class PropertyA * [line 35]\n *n$3._child:class PropertyA *=n$5 [line 35]\n " shape="box"] - 13 -> 8 ; - 13 -> 9 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$9=*&other:class PropertyA * [line 33]\n n$10=*&self:class PropertyA * [line 33]\n n$11=*n$10._name:class PropertyA * [line 33]\n *n$9._name:class PropertyA *=n$11 [line 33]\n " shape="box"] + "PropertyA_copy7" -> "PropertyA_copy4" ; +"PropertyA_copy6" [label="6: Prune (false branch) \n n$2=*&other:class PropertyA * [line 32]\n PRUNE((n$2 == 0), false); [line 32]\n " shape="invhouse"] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$6=*&other:class PropertyA * [line 34]\n n$7=*&self:class PropertyA * [line 34]\n n$8=*n$7._last_name:class PropertyA * [line 34]\n *n$6._last_name:class PropertyA *=n$8 [line 34]\n " shape="box"] + "PropertyA_copy6" -> "PropertyA_copy4" ; +"PropertyA_copy5" [label="5: Prune (true branch) \n n$2=*&other:class PropertyA * [line 32]\n PRUNE((n$2 != 0), true); [line 32]\n " shape="invhouse"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$3=*&other:class PropertyA * [line 35]\n n$4=*&self:class PropertyA * [line 35]\n n$5=*n$4._child:class PropertyA * [line 35]\n *n$3._child:class PropertyA *=n$5 [line 35]\n " shape="box"] + "PropertyA_copy5" -> "PropertyA_copy9" ; +"PropertyA_copy4" [label="4: + \n " ] - 10 -> 7 ; -9 [label="9: Prune (false branch) \n n$2=*&other:class PropertyA * [line 32]\n PRUNE((n$2 == 0), false); [line 32]\n " shape="invhouse"] + "PropertyA_copy4" -> "PropertyA_copy3" ; +"PropertyA_copy3" [label="3: Return Stmt \n n$1=*&other:class PropertyA * [line 37]\n *&return:class PropertyA *=n$1 [line 37]\n " shape="box"] - 9 -> 7 ; -8 [label="8: Prune (true branch) \n n$2=*&other:class PropertyA * [line 32]\n PRUNE((n$2 != 0), true); [line 32]\n " shape="invhouse"] + "PropertyA_copy3" -> "PropertyA_copy2" ; +"PropertyA_copy2" [label="2: Exit PropertyA_copy \n " color=yellow style=filled] - 8 -> 12 ; -7 [label="7: + \n " ] +"PropertyA_copy1" [label="1: Start PropertyA_copy\nFormals: self:class PropertyA *\nLocals: other:class PropertyA * \n DECLARE_LOCALS(&return,&other); [line 30]\n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: Return Stmt \n n$1=*&other:class PropertyA * [line 37]\n *&return:class PropertyA *=n$1 [line 37]\n " shape="box"] + "PropertyA_copy1" -> "PropertyA_copy10" ; +"test6" [label="6: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class PropertyA ):unsigned long ) [line 43]\n n$4=_fun_PropertyA_init(n$3:class PropertyA *) virtual [line 43]\n *&a:class PropertyA *=n$4 [line 43]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit PropertyA_copy \n " color=yellow style=filled] + "test6" -> "test5" ; +"test5" [label="5: Message Call: setLast_name: \n n$1=*&a:class PropertyA * [line 44]\n n$2=*&a2:class PropertyA * [line 44]\n _fun_PropertyA_setLast_name:(n$1:class PropertyA *,n$2:class PropertyA *) [line 44]\n " shape="box"] -4 [label="4: Start PropertyA_copy\nFormals: self:class PropertyA *\nLocals: other:class PropertyA * \n DECLARE_LOCALS(&return,&other); [line 30]\n " color=yellow style=filled] + "test5" -> "test4" ; +"test4" [label="4: Message Call: release \n n$0=*&a:class PropertyA * [line 45]\n _fun___objc_release(n$0:class PropertyA *) [line 45]\n " shape="box"] - 4 -> 13 ; -3 [label="3: Return Stmt \n n$0=*&self:class PropertyA * [line 27]\n *&return:struct objc_object *=n$0 [line 27]\n " shape="box"] + "test4" -> "test3" ; +"test3" [label="3: Return Stmt \n *&return:int =0 [line 46]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit PropertyA_init \n " color=yellow style=filled] + "test3" -> "test2" ; +"test2" [label="2: Exit test \n " color=yellow style=filled] -1 [label="1: Start PropertyA_init\nFormals: self:class PropertyA *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +"test1" [label="1: Start test\nFormals: a2:class PropertyA *\nLocals: a:class PropertyA * \n DECLARE_LOCALS(&return,&a); [line 42]\n " color=yellow style=filled] - 1 -> 3 ; + "test1" -> "test6" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/protocol_procdesc/Bicycle.m.dot b/infer/tests/codetoanalyze/objc/shared/protocol_procdesc/Bicycle.m.dot index d177b1c1c..c8cbbc28e 100644 --- a/infer/tests/codetoanalyze/objc/shared/protocol_procdesc/Bicycle.m.dot +++ b/infer/tests/codetoanalyze/objc/shared/protocol_procdesc/Bicycle.m.dot @@ -1,69 +1,69 @@ /* @generated */ digraph iCFG { -18 [label="18: Call _fun_NSLog \n n$5=_fun_NSString_stringWithUTF8String:(\"Locked to structure. Don't forget the combination!\":char *) [line 32]\n _fun_NSLog(n$5:struct objc_object *) [line 32]\n " shape="box"] +"Bicycle_signalStop3" [label="3: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"Bending left arm downwards\":char *) [line 16]\n _fun_NSLog(n$0:struct objc_object *) [line 16]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit Bicycle_lockToStructure: \n " color=yellow style=filled] + "Bicycle_signalStop3" -> "Bicycle_signalStop2" ; +"Bicycle_signalStop2" [label="2: Exit Bicycle_signalStop \n " color=yellow style=filled] -16 [label="16: Start Bicycle_lockToStructure:\nFormals: self:class Bicycle * theStructure:struct objc_object *\nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] +"Bicycle_signalStop1" [label="1: Start Bicycle_signalStop\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] - 16 -> 18 ; -15 [label="15: Call _fun_NSLog \n n$4=_fun_NSString_stringWithUTF8String:(\"Front wheel is off.Should probably replace that before pedaling...\":char *) [line 28]\n _fun_NSLog(n$4:struct objc_object *) [line 28]\n " shape="box"] + "Bicycle_signalStop1" -> "Bicycle_signalStop3" ; +"Bicycle_lockToStructure:3" [label="3: Call _fun_NSLog \n n$5=_fun_NSString_stringWithUTF8String:(\"Locked to structure. Don't forget the combination!\":char *) [line 32]\n _fun_NSLog(n$5:struct objc_object *) [line 32]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit Bicycle_removeFrontWheel \n " color=yellow style=filled] + "Bicycle_lockToStructure:3" -> "Bicycle_lockToStructure:2" ; +"Bicycle_lockToStructure:2" [label="2: Exit Bicycle_lockToStructure: \n " color=yellow style=filled] -13 [label="13: Start Bicycle_removeFrontWheel\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] +"Bicycle_lockToStructure:1" [label="1: Start Bicycle_lockToStructure:\nFormals: self:class Bicycle * theStructure:struct objc_object *\nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Call _fun_NSLog \n n$3=_fun_NSString_stringWithUTF8String:(\"Here we go!\":char *) [line 25]\n _fun_NSLog(n$3:struct objc_object *) [line 25]\n " shape="box"] + "Bicycle_lockToStructure:1" -> "Bicycle_lockToStructure:3" ; +"Bicycle_signalRightTurn3" [label="3: Call _fun_NSLog \n n$2=_fun_NSString_stringWithUTF8String:(\"Bending left arm upwards\":char *) [line 22]\n _fun_NSLog(n$2:struct objc_object *) [line 22]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Exit Bicycle_startPedaling \n " color=yellow style=filled] + "Bicycle_signalRightTurn3" -> "Bicycle_signalRightTurn2" ; +"Bicycle_signalRightTurn2" [label="2: Exit Bicycle_signalRightTurn \n " color=yellow style=filled] -10 [label="10: Start Bicycle_startPedaling\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +"Bicycle_signalRightTurn1" [label="1: Start Bicycle_signalRightTurn\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Call _fun_NSLog \n n$2=_fun_NSString_stringWithUTF8String:(\"Bending left arm upwards\":char *) [line 22]\n _fun_NSLog(n$2:struct objc_object *) [line 22]\n " shape="box"] + "Bicycle_signalRightTurn1" -> "Bicycle_signalRightTurn3" ; +"Bicycle_signalLeftTurn3" [label="3: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"Extending left arm outwards\":char *) [line 19]\n _fun_NSLog(n$1:struct objc_object *) [line 19]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit Bicycle_signalRightTurn \n " color=yellow style=filled] + "Bicycle_signalLeftTurn3" -> "Bicycle_signalLeftTurn2" ; +"Bicycle_signalLeftTurn2" [label="2: Exit Bicycle_signalLeftTurn \n " color=yellow style=filled] -7 [label="7: Start Bicycle_signalRightTurn\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled] +"Bicycle_signalLeftTurn1" [label="1: Start Bicycle_signalLeftTurn\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"Extending left arm outwards\":char *) [line 19]\n _fun_NSLog(n$1:struct objc_object *) [line 19]\n " shape="box"] + "Bicycle_signalLeftTurn1" -> "Bicycle_signalLeftTurn3" ; +"Bicycle_removeFrontWheel3" [label="3: Call _fun_NSLog \n n$4=_fun_NSString_stringWithUTF8String:(\"Front wheel is off.Should probably replace that before pedaling...\":char *) [line 28]\n _fun_NSLog(n$4:struct objc_object *) [line 28]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit Bicycle_signalLeftTurn \n " color=yellow style=filled] + "Bicycle_removeFrontWheel3" -> "Bicycle_removeFrontWheel2" ; +"Bicycle_removeFrontWheel2" [label="2: Exit Bicycle_removeFrontWheel \n " color=yellow style=filled] -4 [label="4: Start Bicycle_signalLeftTurn\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +"Bicycle_removeFrontWheel1" [label="1: Start Bicycle_removeFrontWheel\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 27]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"Bending left arm downwards\":char *) [line 16]\n _fun_NSLog(n$0:struct objc_object *) [line 16]\n " shape="box"] + "Bicycle_removeFrontWheel1" -> "Bicycle_removeFrontWheel3" ; +"Bicycle_startPedaling3" [label="3: Call _fun_NSLog \n n$3=_fun_NSString_stringWithUTF8String:(\"Here we go!\":char *) [line 25]\n _fun_NSLog(n$3:struct objc_object *) [line 25]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Bicycle_signalStop \n " color=yellow style=filled] + "Bicycle_startPedaling3" -> "Bicycle_startPedaling2" ; +"Bicycle_startPedaling2" [label="2: Exit Bicycle_startPedaling \n " color=yellow style=filled] -1 [label="1: Start Bicycle_signalStop\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled] +"Bicycle_startPedaling1" [label="1: Start Bicycle_startPedaling\nFormals: self:class Bicycle *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 1 -> 3 ; + "Bicycle_startPedaling1" -> "Bicycle_startPedaling3" ; } diff --git a/infer/tests/codetoanalyze/objc/shared/protocol_procdesc/main.c.dot b/infer/tests/codetoanalyze/objc/shared/protocol_procdesc/main.c.dot index 546d8e734..add743448 100644 --- a/infer/tests/codetoanalyze/objc/shared/protocol_procdesc/main.c.dot +++ b/infer/tests/codetoanalyze/objc/shared/protocol_procdesc/main.c.dot @@ -1,22 +1,22 @@ /* @generated */ digraph iCFG { -5 [label="5: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class Bicycle ):unsigned long ) [line 14]\n *&bike:class Bicycle *=n$1 [line 14]\n " shape="box"] +"ProtocolProcdescMain5" [label="5: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class Bicycle ):unsigned long ) [line 14]\n *&bike:class Bicycle *=n$1 [line 14]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Message Call: signalStop \n n$0=*&bike:class Bicycle * [line 16]\n _fun_Bicycle_signalStop(n$0:class Bicycle *) virtual [line 16]\n " shape="box"] + "ProtocolProcdescMain5" -> "ProtocolProcdescMain4" ; +"ProtocolProcdescMain4" [label="4: Message Call: signalStop \n n$0=*&bike:class Bicycle * [line 16]\n _fun_Bicycle_signalStop(n$0:class Bicycle *) virtual [line 16]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 18]\n " shape="box"] + "ProtocolProcdescMain4" -> "ProtocolProcdescMain3" ; +"ProtocolProcdescMain3" [label="3: Return Stmt \n *&return:int =0 [line 18]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit ProtocolProcdescMain \n " color=yellow style=filled] + "ProtocolProcdescMain3" -> "ProtocolProcdescMain2" ; +"ProtocolProcdescMain2" [label="2: Exit ProtocolProcdescMain \n " color=yellow style=filled] -1 [label="1: Start ProtocolProcdescMain\nFormals: \nLocals: bike:class Bicycle * \n DECLARE_LOCALS(&return,&bike); [line 12]\n " color=yellow style=filled] +"ProtocolProcdescMain1" [label="1: Start ProtocolProcdescMain\nFormals: \nLocals: bike:class Bicycle * \n DECLARE_LOCALS(&return,&bike); [line 12]\n " color=yellow style=filled] - 1 -> 5 ; + "ProtocolProcdescMain1" -> "ProtocolProcdescMain5" ; } diff --git a/infer/tests/codetoanalyze/objcpp/frontend/funcoverloading/af_test.mm.dot b/infer/tests/codetoanalyze/objcpp/frontend/funcoverloading/af_test.mm.dot index 32c593167..914aab1f3 100644 --- a/infer/tests/codetoanalyze/objcpp/frontend/funcoverloading/af_test.mm.dot +++ b/infer/tests/codetoanalyze/objcpp/frontend/funcoverloading/af_test.mm.dot @@ -1,25 +1,25 @@ /* @generated */ digraph iCFG { -6 [label="6: Return Stmt \n n$0=*&v:int [line 14]\n *&return:int =n$0 [line 14]\n " shape="box"] +"POPSelectValueType3" [label="3: Return Stmt \n n$0=*&v:int [line 14]\n *&return:int =n$0 [line 14]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit POPSelectValueType \n " color=yellow style=filled] + "POPSelectValueType3" -> "POPSelectValueType2" ; +"POPSelectValueType2" [label="2: Exit POPSelectValueType \n " color=yellow style=filled] -4 [label="4: Start POPSelectValueType\nFormals: v:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +"POPSelectValueType1" [label="1: Start POPSelectValueType\nFormals: v:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n *&return:int =1 [line 12]\n " shape="box"] + "POPSelectValueType1" -> "POPSelectValueType3" ; +"POPSelectValueType3" [label="3: Return Stmt \n *&return:int =1 [line 12]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit POPSelectValueType \n " color=yellow style=filled] + "POPSelectValueType3" -> "POPSelectValueType2" ; +"POPSelectValueType2" [label="2: Exit POPSelectValueType \n " color=yellow style=filled] -1 [label="1: Start POPSelectValueType\nFormals: obj:struct objc_object *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +"POPSelectValueType1" [label="1: Start POPSelectValueType\nFormals: obj:struct objc_object *\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + "POPSelectValueType1" -> "POPSelectValueType3" ; } diff --git a/infer/tests/codetoanalyze/objcpp/frontend/global_const/global_const.mm.dot b/infer/tests/codetoanalyze/objcpp/frontend/global_const/global_const.mm.dot index 4ba890531..861688f43 100644 --- a/infer/tests/codetoanalyze/objcpp/frontend/global_const/global_const.mm.dot +++ b/infer/tests/codetoanalyze/objcpp/frontend/global_const/global_const.mm.dot @@ -1,44 +1,44 @@ /* @generated */ digraph iCFG { -11 [label="11: Return Stmt \n n$0=*&__return_param:class Fields * [line 20]\n *&#GB$__someFields.field1:float =1 [line 16]\n *&#GB$__someFields.field2:float =2 [line 16]\n *&#GB$__someFields.field3:float =3 [line 16]\n _fun_Fields_(n$0:class Fields *,&#GB$__someFields:class Fields &) [line 20]\n " shape="box"] +"Fields_5" [label="5: Constructor Init \n n$6=*&this:class Fields * [line 10]\n n$7=*&__param_0:class Fields & [line 10]\n n$8=*n$7.field1:float [line 10]\n *n$6.field1:float =n$8 [line 10]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit fields \n " color=yellow style=filled] + "Fields_5" -> "Fields_4" ; +"Fields_4" [label="4: Constructor Init \n n$3=*&this:class Fields * [line 10]\n n$4=*&__param_0:class Fields & [line 10]\n n$5=*n$4.field2:float [line 10]\n *n$3.field2:float =n$5 [line 10]\n " shape="box"] -9 [label="9: Start fields\nFormals: __return_param:class Fields *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] + "Fields_4" -> "Fields_3" ; +"Fields_3" [label="3: Constructor Init \n n$0=*&this:class Fields * [line 10]\n n$1=*&__param_0:class Fields & [line 10]\n n$2=*n$1.field3:float [line 10]\n *n$0.field3:float =n$2 [line 10]\n " shape="box"] - 9 -> 11 ; -8 [label="8: DeclStmt \n *&#GB$__someFields.field1:float =1 [line 16]\n *&#GB$__someFields.field2:float =2 [line 16]\n *&#GB$__someFields.field3:float =3 [line 16]\n " shape="box"] + "Fields_3" -> "Fields_2" ; +"Fields_2" [label="2: Exit Fields_ \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit __infer_globals_initializer___someFields \n " color=yellow style=filled] +"Fields_1" [label="1: Start Fields_\nFormals: this:class Fields * __param_0:class Fields &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] -6 [label="6: Start __infer_globals_initializer___someFields\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] + "Fields_1" -> "Fields_5" ; +"__infer_globals_initializer___someFields3" [label="3: DeclStmt \n *&#GB$__someFields.field1:float =1 [line 16]\n *&#GB$__someFields.field2:float =2 [line 16]\n *&#GB$__someFields.field3:float =3 [line 16]\n " shape="box"] - 6 -> 8 ; -5 [label="5: Constructor Init \n n$6=*&this:class Fields * [line 10]\n n$7=*&__param_0:class Fields & [line 10]\n n$8=*n$7.field1:float [line 10]\n *n$6.field1:float =n$8 [line 10]\n " shape="box"] + "__infer_globals_initializer___someFields3" -> "__infer_globals_initializer___someFields2" ; +"__infer_globals_initializer___someFields2" [label="2: Exit __infer_globals_initializer___someFields \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Constructor Init \n n$3=*&this:class Fields * [line 10]\n n$4=*&__param_0:class Fields & [line 10]\n n$5=*n$4.field2:float [line 10]\n *n$3.field2:float =n$5 [line 10]\n " shape="box"] +"__infer_globals_initializer___someFields1" [label="1: Start __infer_globals_initializer___someFields\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled] - 4 -> 3 ; -3 [label="3: Constructor Init \n n$0=*&this:class Fields * [line 10]\n n$1=*&__param_0:class Fields & [line 10]\n n$2=*n$1.field3:float [line 10]\n *n$0.field3:float =n$2 [line 10]\n " shape="box"] + "__infer_globals_initializer___someFields1" -> "__infer_globals_initializer___someFields3" ; +"fields3" [label="3: Return Stmt \n n$0=*&__return_param:class Fields * [line 20]\n *&#GB$__someFields.field1:float =1 [line 16]\n *&#GB$__someFields.field2:float =2 [line 16]\n *&#GB$__someFields.field3:float =3 [line 16]\n _fun_Fields_(n$0:class Fields *,&#GB$__someFields:class Fields &) [line 20]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit Fields_ \n " color=yellow style=filled] + "fields3" -> "fields2" ; +"fields2" [label="2: Exit fields \n " color=yellow style=filled] -1 [label="1: Start Fields_\nFormals: this:class Fields * __param_0:class Fields &\nLocals: \n DECLARE_LOCALS(&return); [line 10]\n " color=yellow style=filled] +"fields1" [label="1: Start fields\nFormals: __return_param:class Fields *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 1 -> 5 ; + "fields1" -> "fields3" ; }