[destructors] Add scope management to clang frontend

Reviewed By: akotulski

Differential Revision: D5368610

fbshipit-source-id: b56a6b8
master
Daiva Naudziuniene 7 years ago committed by Facebook Github Bot
parent 6f3cdd462d
commit f12616cea5

@ -15,6 +15,7 @@ module Hashtbl = Caml.Hashtbl
(** and the cg, cfg, and tenv corresponding to the current file. *)
module L = Logging
module StmtMap = ClangPointers.Map
type pointer = int [@@deriving compare]
@ -39,10 +40,11 @@ type t =
(** in case of objc blocks, the context of the method containing the
block *)
; mutable blocks_static_vars: (Pvar.t * Typ.t) list Typ.Procname.Map.t
; label_map: str_node_map }
; label_map: str_node_map
; vars_to_destroy: Clang_ast_t.decl list StmtMap.t }
let create_context translation_unit_context tenv cg cfg procdesc curr_class return_param_typ
is_objc_method outer_context =
is_objc_method outer_context vars_to_destroy =
{ translation_unit_context
; tenv
; cg
@ -53,7 +55,8 @@ let create_context translation_unit_context tenv cg cfg procdesc curr_class retu
; is_objc_method
; outer_context
; blocks_static_vars= Typ.Procname.Map.empty
; label_map= Hashtbl.create 17 }
; label_map= Hashtbl.create 17
; vars_to_destroy }
let get_cfg context = context.cfg

@ -13,6 +13,8 @@ open! IStd
(** and the cg, cfg, and tenv corresponding to the current file. *)
module StmtMap = ClangPointers.Map
type curr_class = ContextClsDeclPtr of int | ContextNoCls [@@deriving compare]
val equal_curr_class : curr_class -> curr_class -> bool
@ -32,7 +34,10 @@ type t =
(** in case of objc blocks, the context of the method containing the
block *)
; mutable blocks_static_vars: (Pvar.t * Typ.t) list Typ.Procname.Map.t
; label_map: str_node_map }
; label_map: str_node_map
; vars_to_destroy: Clang_ast_t.decl list StmtMap.t
(* mapping from a statement to a list of variables, that go out of scope after the end of the statement *)
}
val get_procdesc : t -> Procdesc.t
@ -54,7 +59,7 @@ val get_tenv : t -> Tenv.t
val create_context :
CFrontend_config.translation_unit_context -> Tenv.t -> Cg.t -> Cfg.cfg -> Procdesc.t
-> curr_class -> Typ.t option -> bool -> t option -> t
-> curr_class -> Typ.t option -> bool -> t option -> Clang_ast_t.decl list StmtMap.t -> t
val add_block_static_var : t -> Typ.Procname.t -> Pvar.t * Typ.t -> unit

@ -29,9 +29,10 @@ module CFrontend_decl_funct (T : CModule_type.CTranslation) : CModule_type.CFron
match Cfg.find_proc_desc_from_name cfg procname with
| Some procdesc
-> if Procdesc.is_defined procdesc && not (model_exists procname) then
let vars_to_destroy = CTrans_utils.Scope.compute_vars_to_destroy body in
let context =
CContext.create_context trans_unit_ctx tenv cg cfg procdesc class_decl_opt
has_return_param is_objc_method outer_context_opt
has_return_param is_objc_method outer_context_opt vars_to_destroy
in
let start_node = Procdesc.get_start_node procdesc in
let exit_node = Procdesc.get_exit_node procdesc in

@ -666,8 +666,18 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
-> None
in
match destruct_decl_ref_opt with
| Some decl_ref
-> method_deref_trans trans_state pvar_trans_result decl_ref si `CXXDestructor
| Some decl_ref -> (
match CAst_utils.get_decl decl_ref.Clang_ast_t.dr_decl_pointer with
| Some CXXDestructorDecl (_, named_decl_info, _, {fdi_body= None}, _)
-> L.(debug Capture Verbose)
"@\n Trying to translate destructor call, but found empty destructor body for %s@\n@."
(CAst_utils.get_unqualified_name named_decl_info) ;
empty_res_trans
| Some CXXDestructorDecl (_, _, _, {fdi_body= Some _}, _)
(* Translate only those destructors that have bodies *)
-> method_deref_trans trans_state pvar_trans_result decl_ref si `CXXDestructor
| _
-> empty_res_trans )
| None
-> empty_res_trans
@ -1248,7 +1258,68 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
in
instruction trans_state transformed_stmt
and compoundStmt_trans trans_state stmt_list = instructions trans_state stmt_list
and inject_destructors trans_state stmt_info =
let context = trans_state.context in
if not (CGeneral_utils.is_cpp_translation context.translation_unit_context) then
empty_res_trans
else
let procname = Procdesc.get_proc_name context.CContext.procdesc in
(* The source location of destructor should reflect the end of the statement *)
let _, sloc2 = stmt_info.Clang_ast_t.si_source_range in
let stmt_info_loc = {stmt_info with Clang_ast_t.si_source_range= (sloc2, sloc2)} in
(* ReturnStmt may claim a priority with the same `stmt_info`.
New pointer is generated to avoid premature node creation *)
let stmt_info' =
{stmt_info_loc with Clang_ast_t.si_pointer= CAst_utils.get_fresh_pointer ()}
in
let trans_state_pri = PriorityNode.try_claim_priority_node trans_state stmt_info' in
let all_res_trans =
try
let map = context.CContext.vars_to_destroy in
let vars_to_destroy = CContext.StmtMap.find_exn map stmt_info.Clang_ast_t.si_pointer in
List.map
~f:(function
| Clang_ast_t.VarDecl (_, _, qual_type, _) as decl
-> let pvar = CVar_decl.sil_var_of_decl context decl procname in
let exp = Exp.Lvar pvar in
let typ = CType_decl.qual_type_to_sil_type context.CContext.tenv qual_type in
let this_res_trans_destruct =
{empty_res_trans with exps= [(exp, CType.add_pointer_to_typ typ)]}
in
(* cxx_destructor_call_trans may claim a priority with the same `stmt_info`.
New pointer is generated to avoid premature node creation *)
let stmt_info'' =
{stmt_info_loc with Clang_ast_t.si_pointer= CAst_utils.get_fresh_pointer ()}
in
cxx_destructor_call_trans trans_state_pri stmt_info'' this_res_trans_destruct
qual_type
| _
-> assert false)
vars_to_destroy
with Not_found ->
L.(debug Capture Verbose) "@\n Variables that go out of scope are not found...@\n@." ; []
in
let sil_loc = CLocation.get_sil_location stmt_info context in
PriorityNode.compute_results_to_parent trans_state_pri sil_loc "Destruction" stmt_info'
all_res_trans
and compoundStmt_trans trans_state stmt_info stmt_list =
(* Computing destructor call nodes to inject at the end of the compound statement,
except if the statement ends with Return statemenent *)
let destr_trans_result =
match List.last stmt_list with
| Some Clang_ast_t.ReturnStmt _
-> empty_res_trans
| _
-> inject_destructors trans_state stmt_info
in
(* Injecting destructor call nodes at the end of the compound statement *)
let succ_nodes =
if destr_trans_result.root_nodes <> [] then destr_trans_result.root_nodes
else trans_state.succ_nodes
in
let trans_state' = {trans_state with succ_nodes} in
instructions trans_state' stmt_list
and conditionalOperator_trans trans_state stmt_info stmt_list expr_info =
let context = trans_state.context in
@ -2171,7 +2242,11 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
let sil_loc = CLocation.get_sil_location stmt_info context in
let trans_state_pri = PriorityNode.try_claim_priority_node trans_state stmt_info in
let mk_ret_node instrs =
let ret_node = create_node (Procdesc.Node.Stmt_node "Return Stmt") instrs sil_loc context in
let destr_trans_result = inject_destructors trans_state_pri stmt_info in
let ret_node =
create_node (Procdesc.Node.Stmt_node "Return Stmt") (instrs @ destr_trans_result.instrs)
sil_loc context
in
Procdesc.node_set_succs_exn context.procdesc ret_node
[Procdesc.get_exit_node context.CContext.procdesc] [] ;
ret_node
@ -2766,9 +2841,9 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
block_enumeration_trans trans_state stmt_info stmt_list expr_info
else
objCMessageExpr_trans trans_state stmt_info obj_c_message_expr_info stmt_list expr_info
| CompoundStmt (_, stmt_list)
| CompoundStmt (stmt_info, stmt_list)
-> (* No node for this statement. We just collect its statement list*)
compoundStmt_trans trans_state stmt_list
compoundStmt_trans trans_state stmt_info stmt_list
| ConditionalOperator (stmt_info, stmt_list, expr_info)
-> (* Ternary operator "cond ? exp1 : exp2" *)
conditionalOperator_trans trans_state stmt_info stmt_list expr_info
@ -2885,19 +2960,19 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
-> blockExpr_trans trans_state stmt_info expr_info decl
| ObjCAutoreleasePoolStmt (stmt_info, stmts)
-> objcAutoreleasePool_trans trans_state stmt_info stmts
| ObjCAtTryStmt (_, stmts)
-> compoundStmt_trans trans_state stmts
| CXXTryStmt (_, stmts)
| ObjCAtTryStmt (stmt_info, stmts)
-> compoundStmt_trans trans_state stmt_info stmts
| CXXTryStmt (stmt_info, stmts)
-> L.(debug Capture Medium)
"@\n!!!!WARNING: found statement %s. @\nTranslation need to be improved.... @\n"
(Clang_ast_proj.get_stmt_kind_string instr) ;
compoundStmt_trans trans_state stmts
compoundStmt_trans trans_state stmt_info stmts
| ObjCAtThrowStmt (stmt_info, stmts) | CXXThrowExpr (stmt_info, stmts, _)
-> objc_cxx_throw_trans trans_state stmt_info stmts
| ObjCAtFinallyStmt (_, stmts)
-> compoundStmt_trans trans_state stmts
| ObjCAtCatchStmt _ | CXXCatchStmt _
-> compoundStmt_trans trans_state []
| ObjCAtFinallyStmt (stmt_info, stmts)
-> compoundStmt_trans trans_state stmt_info stmts
| ObjCAtCatchStmt (stmt_info, _, _) | CXXCatchStmt (stmt_info, _, _)
-> compoundStmt_trans trans_state stmt_info []
| PredefinedExpr (_, _, expr_info, _)
-> stringLiteral_trans trans_state expr_info ""
| BinaryConditionalOperator (stmt_info, stmts, expr_info)

@ -291,6 +291,50 @@ module Loops = struct
with For (_, _, cond, _, _) | While (_, cond, _) | DoWhile (cond, _) -> cond
end
module Scope = struct
module StmtMap = ClangPointers.Map
let add_scope_vars_to_destroy var_map stmt_info vars =
let ptr = stmt_info.Clang_ast_t.si_pointer in
StmtMap.add var_map ~key:ptr ~data:vars
let rec compute_vars vars_in_scope var_map stmt =
(* vars_in_scope corresponds to the list of all variables existing in the current scope *)
let open Clang_ast_t in
let get_var_info_from_decl = function VarDecl _ as decl -> Some decl | _ -> None in
let get_new_vars = function
| DeclStmt (_, _, decl_list)
-> List.filter_map ~f:get_var_info_from_decl decl_list
| _
-> []
in
let rec handle_instructions_block var_map vars_in_scope instrs =
match instrs with
| []
-> (vars_in_scope, var_map)
| stmt :: rest
-> let new_var_map = compute_vars vars_in_scope var_map stmt in
let new_vars_in_stmt = get_new_vars stmt in
handle_instructions_block new_var_map (new_vars_in_stmt @ vars_in_scope) rest
in
(* TODO handle following stmts: *)
(* BreakStmt _ | ContinueStmt _ | GotoStmt _ | ForStmt _ | WhileStmt _ |
DoStmt _ | IfStmt _ | SwitchStmt _ | CXXForRangeStmt _ | LabelStmt_ *)
match stmt with
| CompoundStmt (stmt_info, stmt_list)
-> let vars, new_var_map = handle_instructions_block var_map vars_in_scope stmt_list in
(* vars contains the variables defined in the current compound statement + vars_in_scope *)
let vars_to_destroy = List.take vars (List.length vars - List.length vars_in_scope) in
add_scope_vars_to_destroy new_var_map stmt_info vars_to_destroy
| ReturnStmt (stmt_info, _)
-> add_scope_vars_to_destroy var_map stmt_info vars_in_scope
| _
-> let stmt_list = snd (Clang_ast_proj.get_stmt_tuple stmt) in
List.fold_left ~f:(compute_vars vars_in_scope) stmt_list ~init:var_map
let compute_vars_to_destroy body = List.fold_left ~f:(compute_vars []) ~init:StmtMap.empty [body]
end
(** This function handles ObjC new/alloc and C++ new calls *)
let create_alloc_instrs sil_loc function_type fname size_exp_opt procname_opt =
let function_type, function_type_np =

@ -197,6 +197,13 @@ module Loops : sig
val get_body : loop_kind -> Clang_ast_t.stmt
end
(** Module that provides utilities for scopes *)
module Scope : sig
module StmtMap = ClangPointers.Map
val compute_vars_to_destroy : Clang_ast_t.stmt -> Clang_ast_t.decl list StmtMap.t
end
(** This module handles the translation of the variable self which is challenging because self is
used both as a variable in instance method calls and also as a type in class method calls. *)
module Self : sig

@ -3,30 +3,34 @@ digraph iCFG {
"main.fad58de7366495db4650cfefac2fcd61_1" [label="1: Start main\nFormals: \nLocals: s:std::basic_string<char,std::char_traits<char>,std::allocator<char>> x:int* \n DECLARE_LOCALS(&return,&s,&x); [line 17]\n " color=yellow style=filled]
"main.fad58de7366495db4650cfefac2fcd61_1" -> "main.fad58de7366495db4650cfefac2fcd61_7" ;
"main.fad58de7366495db4650cfefac2fcd61_1" -> "main.fad58de7366495db4650cfefac2fcd61_8" ;
"main.fad58de7366495db4650cfefac2fcd61_2" [label="2: Exit main \n " color=yellow style=filled]
"main.fad58de7366495db4650cfefac2fcd61_3" [label="3: DeclStmt \n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,\"1234\":char const *) [line 22]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_3" [label="3: Destruction \n _=*&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>> [line 24]\n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_~basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*) [line 24]\n _=*&x:int* [line 24]\n _fun_std::shared_ptr<int>_~shared_ptr(&x:int**) [line 24]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_3" -> "main.fad58de7366495db4650cfefac2fcd61_2" ;
"main.fad58de7366495db4650cfefac2fcd61_4" [label="4: DeclStmt \n _fun_std::shared_ptr<int>_shared_ptr(&x:int**) [line 21]\n n$0=*&x:int* [line 21]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_4" [label="4: DeclStmt \n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,\"1234\":char const *) [line 22]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_4" -> "main.fad58de7366495db4650cfefac2fcd61_3" ;
"main.fad58de7366495db4650cfefac2fcd61_5" [label="5: Call _fun_external::fun \n n$1=_fun_external::fun(1:int) [line 20]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_5" [label="5: DeclStmt \n _fun_std::shared_ptr<int>_shared_ptr(&x:int**) [line 21]\n n$2=*&x:int* [line 21]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_5" -> "main.fad58de7366495db4650cfefac2fcd61_4" ;
"main.fad58de7366495db4650cfefac2fcd61_6" [label="6: Call _fun_internal_exclude::fun \n n$2=_fun_internal_exclude::fun(1:int) [line 19]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_6" [label="6: Call _fun_external::fun \n n$3=_fun_external::fun(1:int) [line 20]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_6" -> "main.fad58de7366495db4650cfefac2fcd61_5" ;
"main.fad58de7366495db4650cfefac2fcd61_7" [label="7: Call _fun_internal::fun \n n$3=_fun_internal::fun(1:int) [line 18]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_7" [label="7: Call _fun_internal_exclude::fun \n n$4=_fun_internal_exclude::fun(1:int) [line 19]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_7" -> "main.fad58de7366495db4650cfefac2fcd61_6" ;
"main.fad58de7366495db4650cfefac2fcd61_8" [label="8: Call _fun_internal::fun \n n$5=_fun_internal::fun(1:int) [line 18]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_8" -> "main.fad58de7366495db4650cfefac2fcd61_7" ;
"fun#internal#_ZN8internal3funEi.155c7f802a6b5777ac6736e35c7e46a6_1" [label="1: Start internal::fun\nFormals: a:int\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled]

@ -3,30 +3,34 @@ digraph iCFG {
"main.fad58de7366495db4650cfefac2fcd61_1" [label="1: Start main\nFormals: \nLocals: s:std::basic_string<char,std::char_traits<char>,std::allocator<char>> x:int* \n DECLARE_LOCALS(&return,&s,&x); [line 17]\n " color=yellow style=filled]
"main.fad58de7366495db4650cfefac2fcd61_1" -> "main.fad58de7366495db4650cfefac2fcd61_7" ;
"main.fad58de7366495db4650cfefac2fcd61_1" -> "main.fad58de7366495db4650cfefac2fcd61_8" ;
"main.fad58de7366495db4650cfefac2fcd61_2" [label="2: Exit main \n " color=yellow style=filled]
"main.fad58de7366495db4650cfefac2fcd61_3" [label="3: DeclStmt \n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,\"1234\":char const *) [line 22]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_3" [label="3: Destruction \n _=*&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>> [line 24]\n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_~basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*) [line 24]\n _=*&x:int* [line 24]\n _fun_std::shared_ptr<int>_~shared_ptr(&x:int**) [line 24]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_3" -> "main.fad58de7366495db4650cfefac2fcd61_2" ;
"main.fad58de7366495db4650cfefac2fcd61_4" [label="4: DeclStmt \n _fun_std::shared_ptr<int>_shared_ptr(&x:int**) [line 21]\n n$0=*&x:int* [line 21]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_4" [label="4: DeclStmt \n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,\"1234\":char const *) [line 22]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_4" -> "main.fad58de7366495db4650cfefac2fcd61_3" ;
"main.fad58de7366495db4650cfefac2fcd61_5" [label="5: Call _fun_external::fun \n n$1=_fun_external::fun(1:int) [line 20]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_5" [label="5: DeclStmt \n _fun_std::shared_ptr<int>_shared_ptr(&x:int**) [line 21]\n n$2=*&x:int* [line 21]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_5" -> "main.fad58de7366495db4650cfefac2fcd61_4" ;
"main.fad58de7366495db4650cfefac2fcd61_6" [label="6: Call _fun_internal_exclude::fun \n n$2=_fun_internal_exclude::fun(1:int) [line 19]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_6" [label="6: Call _fun_external::fun \n n$3=_fun_external::fun(1:int) [line 20]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_6" -> "main.fad58de7366495db4650cfefac2fcd61_5" ;
"main.fad58de7366495db4650cfefac2fcd61_7" [label="7: Call _fun_internal::fun \n n$3=_fun_internal::fun(1:int) [line 18]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_7" [label="7: Call _fun_internal_exclude::fun \n n$4=_fun_internal_exclude::fun(1:int) [line 19]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_7" -> "main.fad58de7366495db4650cfefac2fcd61_6" ;
"main.fad58de7366495db4650cfefac2fcd61_8" [label="8: Call _fun_internal::fun \n n$5=_fun_internal::fun(1:int) [line 18]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_8" -> "main.fad58de7366495db4650cfefac2fcd61_7" ;
"fun#internal#_ZN8internal3funEi.155c7f802a6b5777ac6736e35c7e46a6_1" [label="1: Start internal::fun\nFormals: a:int\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled]

@ -3,30 +3,34 @@ digraph iCFG {
"main.fad58de7366495db4650cfefac2fcd61_1" [label="1: Start main\nFormals: \nLocals: s:std::basic_string<char,std::char_traits<char>,std::allocator<char>> x:int* \n DECLARE_LOCALS(&return,&s,&x); [line 17]\n " color=yellow style=filled]
"main.fad58de7366495db4650cfefac2fcd61_1" -> "main.fad58de7366495db4650cfefac2fcd61_7" ;
"main.fad58de7366495db4650cfefac2fcd61_1" -> "main.fad58de7366495db4650cfefac2fcd61_8" ;
"main.fad58de7366495db4650cfefac2fcd61_2" [label="2: Exit main \n " color=yellow style=filled]
"main.fad58de7366495db4650cfefac2fcd61_3" [label="3: DeclStmt \n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,\"1234\":char const *) [line 22]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_3" [label="3: Destruction \n _=*&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>> [line 24]\n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_~basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*) [line 24]\n _=*&x:int* [line 24]\n _fun_std::shared_ptr<int>_~shared_ptr(&x:int**) [line 24]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_3" -> "main.fad58de7366495db4650cfefac2fcd61_2" ;
"main.fad58de7366495db4650cfefac2fcd61_4" [label="4: DeclStmt \n _fun_std::shared_ptr<int>_shared_ptr(&x:int**) [line 21]\n n$0=*&x:int* [line 21]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_4" [label="4: DeclStmt \n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,\"1234\":char const *) [line 22]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_4" -> "main.fad58de7366495db4650cfefac2fcd61_3" ;
"main.fad58de7366495db4650cfefac2fcd61_5" [label="5: Call _fun_external::fun \n n$1=_fun_external::fun(1:int) [line 20]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_5" [label="5: DeclStmt \n _fun_std::shared_ptr<int>_shared_ptr(&x:int**) [line 21]\n n$2=*&x:int* [line 21]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_5" -> "main.fad58de7366495db4650cfefac2fcd61_4" ;
"main.fad58de7366495db4650cfefac2fcd61_6" [label="6: Call _fun_internal_exclude::fun \n n$2=_fun_internal_exclude::fun(1:int) [line 19]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_6" [label="6: Call _fun_external::fun \n n$3=_fun_external::fun(1:int) [line 20]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_6" -> "main.fad58de7366495db4650cfefac2fcd61_5" ;
"main.fad58de7366495db4650cfefac2fcd61_7" [label="7: Call _fun_internal::fun \n n$3=_fun_internal::fun(1:int) [line 18]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_7" [label="7: Call _fun_internal_exclude::fun \n n$4=_fun_internal_exclude::fun(1:int) [line 19]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_7" -> "main.fad58de7366495db4650cfefac2fcd61_6" ;
"main.fad58de7366495db4650cfefac2fcd61_8" [label="8: Call _fun_internal::fun \n n$5=_fun_internal::fun(1:int) [line 18]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_8" -> "main.fad58de7366495db4650cfefac2fcd61_7" ;
"fun#internal#_ZN8internal3funEi.155c7f802a6b5777ac6736e35c7e46a6_1" [label="1: Start internal::fun\nFormals: a:int\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled]

@ -3,30 +3,34 @@ digraph iCFG {
"main.fad58de7366495db4650cfefac2fcd61_1" [label="1: Start main\nFormals: \nLocals: s:std::basic_string<char,std::char_traits<char>,std::allocator<char>> x:int* \n DECLARE_LOCALS(&return,&s,&x); [line 17]\n " color=yellow style=filled]
"main.fad58de7366495db4650cfefac2fcd61_1" -> "main.fad58de7366495db4650cfefac2fcd61_7" ;
"main.fad58de7366495db4650cfefac2fcd61_1" -> "main.fad58de7366495db4650cfefac2fcd61_8" ;
"main.fad58de7366495db4650cfefac2fcd61_2" [label="2: Exit main \n " color=yellow style=filled]
"main.fad58de7366495db4650cfefac2fcd61_3" [label="3: DeclStmt \n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,\"1234\":char const *) [line 22]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_3" [label="3: Destruction \n _=*&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>> [line 24]\n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_~basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*) [line 24]\n _=*&x:int* [line 24]\n _fun_std::shared_ptr<int>_~shared_ptr(&x:int**) [line 24]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_3" -> "main.fad58de7366495db4650cfefac2fcd61_2" ;
"main.fad58de7366495db4650cfefac2fcd61_4" [label="4: DeclStmt \n _fun_std::shared_ptr<int>_shared_ptr(&x:int**) [line 21]\n n$0=*&x:int* [line 21]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_4" [label="4: DeclStmt \n _fun_std::basic_string<char,std::char_traits<char>,std::allocator<char>>_basic_string(&s:std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,\"1234\":char const *) [line 22]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_4" -> "main.fad58de7366495db4650cfefac2fcd61_3" ;
"main.fad58de7366495db4650cfefac2fcd61_5" [label="5: Call _fun_external::fun \n n$1=_fun_external::fun(1:int) [line 20]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_5" [label="5: DeclStmt \n _fun_std::shared_ptr<int>_shared_ptr(&x:int**) [line 21]\n n$2=*&x:int* [line 21]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_5" -> "main.fad58de7366495db4650cfefac2fcd61_4" ;
"main.fad58de7366495db4650cfefac2fcd61_6" [label="6: Call _fun_internal_exclude::fun \n n$2=_fun_internal_exclude::fun(1:int) [line 19]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_6" [label="6: Call _fun_external::fun \n n$3=_fun_external::fun(1:int) [line 20]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_6" -> "main.fad58de7366495db4650cfefac2fcd61_5" ;
"main.fad58de7366495db4650cfefac2fcd61_7" [label="7: Call _fun_internal::fun \n n$3=_fun_internal::fun(1:int) [line 18]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_7" [label="7: Call _fun_internal_exclude::fun \n n$4=_fun_internal_exclude::fun(1:int) [line 19]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_7" -> "main.fad58de7366495db4650cfefac2fcd61_6" ;
"main.fad58de7366495db4650cfefac2fcd61_8" [label="8: Call _fun_internal::fun \n n$5=_fun_internal::fun(1:int) [line 18]\n " shape="box"]
"main.fad58de7366495db4650cfefac2fcd61_8" -> "main.fad58de7366495db4650cfefac2fcd61_7" ;
"fun#internal#_ZN8internal3funEi.155c7f802a6b5777ac6736e35c7e46a6_1" [label="1: Start internal::fun\nFormals: a:int\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled]

@ -56,8 +56,8 @@ codetoanalyze/cpp/errors/npe/npe_added_to_b1.cpp, npe_added_to_b1::causes_npe, 2
codetoanalyze/cpp/errors/npe/npe_added_to_b1.cpp, npe_added_to_b1::causes_npe_person, 2, NULL_DEREFERENCE, [start of procedure npe_added_to_b1::causes_npe_person(),start of procedure Person,return from a call to npe_added_to_b1::Person_Person,start of procedure npe_added_to_b1::deref_person()]
codetoanalyze/cpp/errors/npe/null_returned_by_method.cpp, testNullDeref, 3, NULL_DEREFERENCE, [start of procedure testNullDeref(),Condition is true,start of procedure getNull,return from a call to XFactory_getNull]
codetoanalyze/cpp/errors/npe/object_deref.cpp, object_deref::derefNullField, 2, NULL_DEREFERENCE, [start of procedure object_deref::derefNullField(),start of procedure object_deref::getNull(),return from a call to object_deref::getNull]
codetoanalyze/cpp/errors/npe/skip_function_with_const_formals.cpp, const_skip2_then_split_case, 5, MEMORY_LEAK, [start of procedure const_skip2_then_split_case(),Skipped call: function or method not found,start of procedure test_pointer(),Condition is true,return from a call to test_pointer,return from a call to const_skip2_then_split_case]
codetoanalyze/cpp/errors/npe/skip_function_with_const_formals.cpp, const_skip_then_split_case, 6, MEMORY_LEAK, [start of procedure const_skip_then_split_case(),Skipped call: function or method not found,start of procedure test_pointer(),Condition is true,return from a call to test_pointer,return from a call to const_skip_then_split_case]
codetoanalyze/cpp/errors/npe/skip_function_with_const_formals.cpp, const_skip2_then_split_case, 5, MEMORY_LEAK, [start of procedure const_skip2_then_split_case(),Skipped call: function or method not found,start of procedure test_pointer(),Condition is true,return from a call to test_pointer]
codetoanalyze/cpp/errors/npe/skip_function_with_const_formals.cpp, const_skip_then_split_case, 6, MEMORY_LEAK, [start of procedure const_skip_then_split_case(),Skipped call: function or method not found,start of procedure test_pointer(),Condition is true,return from a call to test_pointer]
codetoanalyze/cpp/errors/npe/skip_function_with_const_formals.cpp, skip_then_split_case, 2, MEMORY_LEAK, [start of procedure skip_then_split_case(),Skipped call: function or method not found]
codetoanalyze/cpp/errors/npe/skip_function_with_const_formals.cpp, skip_then_split_case, 5, NULL_DEREFERENCE, [start of procedure skip_then_split_case(),Skipped call: function or method not found,start of procedure test_pointer(),Condition is false,return from a call to test_pointer]
codetoanalyze/cpp/errors/npe/skip_function_with_const_formals.cpp, typedef_skip_then_split_case, 2, MEMORY_LEAK, [start of procedure typedef_skip_then_split_case(),Skipped call: function or method not found]
@ -81,8 +81,8 @@ codetoanalyze/cpp/errors/smart_ptr/const_volatile_type.cpp, test_volatile2, 2, N
codetoanalyze/cpp/errors/smart_ptr/const_volatile_type.cpp, test_volatile3, 3, NULL_DEREFERENCE, [start of procedure test_volatile3()]
codetoanalyze/cpp/errors/smart_ptr/const_volatile_type.cpp, test_volatile4, 2, NULL_DEREFERENCE, [start of procedure test_volatile4()]
codetoanalyze/cpp/errors/smart_ptr/deref_after_move_example.cpp, deref_after_mode_example::deref_after_move_crash, 4, NULL_DEREFERENCE, [start of procedure deref_after_mode_example::deref_after_move_crash(),start of procedure Person,return from a call to deref_after_mode_example::Person_Person,start of procedure move_age,return from a call to deref_after_mode_example::Person_move_age,start of procedure access_age]
codetoanalyze/cpp/errors/smart_ptr/deref_after_move_example.cpp, deref_after_mode_example::deref_after_move_ok, 4, MEMORY_LEAK, [start of procedure deref_after_mode_example::deref_after_move_ok(),start of procedure Person,return from a call to deref_after_mode_example::Person_Person,start of procedure move_age,return from a call to deref_after_mode_example::Person_move_age,return from a call to deref_after_mode_example::deref_after_move_ok]
codetoanalyze/cpp/errors/smart_ptr/deref_after_move_example.cpp, deref_after_mode_example::deref_ok, 3, MEMORY_LEAK, [start of procedure deref_after_mode_example::deref_ok(),start of procedure Person,return from a call to deref_after_mode_example::Person_Person,start of procedure access_age,return from a call to deref_after_mode_example::Person_access_age,return from a call to deref_after_mode_example::deref_ok]
codetoanalyze/cpp/errors/smart_ptr/deref_after_move_example.cpp, deref_after_mode_example::deref_after_move_ok, 3, MEMORY_LEAK, [start of procedure deref_after_mode_example::deref_after_move_ok(),start of procedure Person,return from a call to deref_after_mode_example::Person_Person,start of procedure move_age,return from a call to deref_after_mode_example::Person_move_age,start of procedure ~Person,return from a call to deref_after_mode_example::Person_~Person]
codetoanalyze/cpp/errors/smart_ptr/deref_after_move_example.cpp, deref_after_mode_example::deref_ok, 3, MEMORY_LEAK, [start of procedure deref_after_mode_example::deref_ok(),start of procedure Person,return from a call to deref_after_mode_example::Person_Person,start of procedure access_age,return from a call to deref_after_mode_example::Person_access_age,start of procedure ~Person,return from a call to deref_after_mode_example::Person_~Person,return from a call to deref_after_mode_example::deref_ok]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_constructors.cpp, shared_ptr_constructors::aliasing_member_null_bad, 4, NULL_DEREFERENCE, [start of procedure shared_ptr_constructors::aliasing_member_null_bad(),start of procedure shared_ptr_constructors::aliasing_construct_from_internal(),start of procedure shared_ptr_constructors::internal_null_def(),Skipped call: function or method not found,return from a call to shared_ptr_constructors::internal_null_def,Condition is true,Condition is false,return from a call to shared_ptr_constructors::aliasing_construct_from_internal]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_constructors.cpp, shared_ptr_constructors::get_from_base1_null_f1_deref, 6, NULL_DEREFERENCE, [start of procedure shared_ptr_constructors::get_from_base1_null_f1_deref(),start of procedure Base,return from a call to shared_ptr_constructors::Base_Base,start of procedure shared_ptr_constructors::getFromBase1(),return from a call to shared_ptr_constructors::getFromBase1]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_constructors.cpp, shared_ptr_constructors::get_from_base1_nullptr_deref, 0, NULL_DEREFERENCE, [start of procedure shared_ptr_constructors::get_from_base1_nullptr_deref(),start of procedure shared_ptr_constructors::getFromBase1(),return from a call to shared_ptr_constructors::getFromBase1]
@ -104,17 +104,17 @@ codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_n
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_null_deref2, 2, MEMORY_LEAK, [start of procedure shared_ptr::reset_ptr_null_deref2()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_null_deref2, 3, MEMORY_LEAK, [start of procedure shared_ptr::reset_ptr_null_deref2()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_null_deref2, 4, NULL_DEREFERENCE, [start of procedure shared_ptr::reset_ptr_null_deref2()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_ok_deref, 3, MEMORY_LEAK, [start of procedure shared_ptr::reset_ptr_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_ok_deref, 3, UNINITIALIZED_VALUE, [start of procedure shared_ptr::reset_ptr_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_ok_deref, 4, MEMORY_LEAK, [start of procedure shared_ptr::reset_ptr_ok_deref(),return from a call to shared_ptr::reset_ptr_ok_deref]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_ok_deref2, 4, MEMORY_LEAK, [start of procedure shared_ptr::reset_ptr_ok_deref2()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_ok_deref2, 4, UNINITIALIZED_VALUE, [start of procedure shared_ptr::reset_ptr_ok_deref2()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::reset_ptr_ok_deref2, 5, MEMORY_LEAK, [start of procedure shared_ptr::reset_ptr_ok_deref2(),return from a call to shared_ptr::reset_ptr_ok_deref2]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_assign_null_deref, 3, MEMORY_LEAK, [start of procedure shared_ptr::shared_ptr_assign_null_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_assign_null_deref, 4, NULL_DEREFERENCE, [start of procedure shared_ptr::shared_ptr_assign_null_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_assign_ok_deref, 5, MEMORY_LEAK, [start of procedure shared_ptr::shared_ptr_assign_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_assign_ok_deref, 5, UNINITIALIZED_VALUE, [start of procedure shared_ptr::shared_ptr_assign_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_assign_ok_deref, 6, MEMORY_LEAK, [start of procedure shared_ptr::shared_ptr_assign_ok_deref(),return from a call to shared_ptr::shared_ptr_assign_ok_deref]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_copy_null_deref, 3, NULL_DEREFERENCE, [start of procedure shared_ptr::shared_ptr_copy_null_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_copy_ok_deref, 3, MEMORY_LEAK, [start of procedure shared_ptr::shared_ptr_copy_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_copy_ok_deref, 3, UNINITIALIZED_VALUE, [start of procedure shared_ptr::shared_ptr_copy_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_copy_ok_deref, 4, MEMORY_LEAK, [start of procedure shared_ptr::shared_ptr_copy_ok_deref(),return from a call to shared_ptr::shared_ptr_copy_ok_deref]
codetoanalyze/cpp/errors/smart_ptr/shared_ptr_deref.cpp, shared_ptr::shared_ptr_move_null_deref, 3, NULL_DEREFERENCE, [start of procedure shared_ptr::shared_ptr_move_null_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::empty_array_ptr_deref, 2, NULL_DEREFERENCE, [start of procedure unique_ptr::empty_array_ptr_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::empty_ptr_deref, 2, NULL_DEREFERENCE, [start of procedure unique_ptr::empty_ptr_deref()]
@ -128,18 +128,18 @@ codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_n
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_null_deref2, 2, MEMORY_LEAK, [start of procedure unique_ptr::reset_ptr_null_deref2()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_null_deref2, 3, MEMORY_LEAK, [start of procedure unique_ptr::reset_ptr_null_deref2()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_null_deref2, 4, NULL_DEREFERENCE, [start of procedure unique_ptr::reset_ptr_null_deref2()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_ok_deref, 3, MEMORY_LEAK, [start of procedure unique_ptr::reset_ptr_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_ok_deref, 3, UNINITIALIZED_VALUE, [start of procedure unique_ptr::reset_ptr_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_ok_deref, 4, MEMORY_LEAK, [start of procedure unique_ptr::reset_ptr_ok_deref(),return from a call to unique_ptr::reset_ptr_ok_deref]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_ok_deref2, 4, MEMORY_LEAK, [start of procedure unique_ptr::reset_ptr_ok_deref2()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_ok_deref2, 4, UNINITIALIZED_VALUE, [start of procedure unique_ptr::reset_ptr_ok_deref2()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::reset_ptr_ok_deref2, 5, MEMORY_LEAK, [start of procedure unique_ptr::reset_ptr_ok_deref2(),return from a call to unique_ptr::reset_ptr_ok_deref2]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_assign_null_deref, 3, MEMORY_LEAK, [start of procedure unique_ptr::unique_ptr_assign_null_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_assign_null_deref, 4, NULL_DEREFERENCE, [start of procedure unique_ptr::unique_ptr_assign_null_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_assign_ok_deref, 5, MEMORY_LEAK, [start of procedure unique_ptr::unique_ptr_assign_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_assign_ok_deref, 5, UNINITIALIZED_VALUE, [start of procedure unique_ptr::unique_ptr_assign_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_assign_ok_deref, 6, MEMORY_LEAK, [start of procedure unique_ptr::unique_ptr_assign_ok_deref(),return from a call to unique_ptr::unique_ptr_assign_ok_deref]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_copy_null_deref, 3, NULL_DEREFERENCE, [start of procedure unique_ptr::unique_ptr_copy_null_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_move_null_deref, 3, NULL_DEREFERENCE, [start of procedure unique_ptr::unique_ptr_move_null_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_move_ok_deref, 3, MEMORY_LEAK, [start of procedure unique_ptr::unique_ptr_move_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_move_ok_deref, 3, UNINITIALIZED_VALUE, [start of procedure unique_ptr::unique_ptr_move_ok_deref()]
codetoanalyze/cpp/errors/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_move_ok_deref, 4, MEMORY_LEAK, [start of procedure unique_ptr::unique_ptr_move_ok_deref(),return from a call to unique_ptr::unique_ptr_move_ok_deref]
codetoanalyze/cpp/errors/smart_ptr/weak_ptr.cpp, weak_ptr_derefs::safeGetFromSharedBaseAssign_bad, 4, NULL_DEREFERENCE, [start of procedure weak_ptr_derefs::safeGetFromSharedBaseAssign_bad(),start of procedure weak_ptr_constructors::fromSharedBaseAssign(),return from a call to weak_ptr_constructors::fromSharedBaseAssign,start of procedure weak_ptr_derefs::safeGet(),Condition is true,Condition is false,return from a call to weak_ptr_derefs::safeGet]
codetoanalyze/cpp/errors/smart_ptr/weak_ptr.cpp, weak_ptr_derefs::safeGetFromSharedBaseConstr_bad, 4, NULL_DEREFERENCE, [start of procedure weak_ptr_derefs::safeGetFromSharedBaseConstr_bad(),start of procedure weak_ptr_constructors::fromSharedBaseConstr(),return from a call to weak_ptr_constructors::fromSharedBaseConstr,start of procedure weak_ptr_derefs::safeGet(),Condition is true,Condition is false,return from a call to weak_ptr_derefs::safeGet]
codetoanalyze/cpp/errors/smart_ptr/weak_ptr.cpp, weak_ptr_derefs::safeGetFromSharedDerivedAssign_bad, 4, NULL_DEREFERENCE, [start of procedure weak_ptr_derefs::safeGetFromSharedDerivedAssign_bad(),start of procedure weak_ptr_constructors::fromSharedDerivedAssign(),return from a call to weak_ptr_constructors::fromSharedDerivedAssign,start of procedure weak_ptr_derefs::safeGet(),Condition is true,Condition is false,return from a call to weak_ptr_derefs::safeGet]
@ -188,7 +188,7 @@ codetoanalyze/cpp/errors/types/typeid_expr.cpp, person_typeid_name, 4, MEMORY_LE
codetoanalyze/cpp/errors/types/typeid_expr.cpp, person_typeid_name, 8, DIVIDE_BY_ZERO, [start of procedure person_typeid_name(),start of procedure Person,return from a call to Person_Person,Condition is false]
codetoanalyze/cpp/errors/types/typeid_expr.cpp, template_type_id_person, 2, MEMORY_LEAK, [start of procedure template_type_id_person(),start of procedure Person,return from a call to Person_Person,Skipped call: function or method not found]
codetoanalyze/cpp/errors/types/typeid_expr.cpp, template_type_id_person, 5, DIVIDE_BY_ZERO, [start of procedure template_type_id_person(),start of procedure Person,return from a call to Person_Person,Condition is false]
codetoanalyze/cpp/errors/types/typeid_expr.cpp, template_typeid<Person>, 2, MEMORY_LEAK, [start of procedure template_typeid<Person>(),start of procedure Person,return from a call to Person_Person,start of procedure Person,return from a call to Person_Person]
codetoanalyze/cpp/errors/types/typeid_expr.cpp, template_typeid<Person>, 2, MEMORY_LEAK, [start of procedure template_typeid<Person>(),start of procedure Person,return from a call to Person_Person,start of procedure Person,return from a call to Person_Person,start of procedure ~Person,return from a call to Person_~Person]
codetoanalyze/cpp/errors/vector/access_field_later.cpp, getIntPtr, 1, RETURN_VALUE_IGNORED, [start of procedure getIntPtr()]
codetoanalyze/cpp/errors/vector/access_field_later.cpp, getIntPtr, 2, EMPTY_VECTOR_ACCESS, [start of procedure getIntPtr()]
codetoanalyze/cpp/errors/vector/access_field_later.cpp, getWithCopy, 1, RETURN_VALUE_IGNORED, [start of procedure getWithCopy()]

@ -0,0 +1,71 @@
/*
* Copyright (c) 2017 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
namespace destructor_scope {
struct X {
~X() {}
};
struct Y {
~Y() {}
};
struct Z {};
struct S {
X x;
};
void test1(bool a, bool b) {
X x1;
S s;
{
X x2;
Y y2;
if (a) {
return;
}
{
X x3;
if (b) {
return;
}
}
}
Y y1;
{ Y y3; }
}
int test2(bool a) {
X x1;
if (a) {
X x2;
return 1;
} else {
X x3;
return 2;
}
}
X getX() {
X x;
return x;
}
Z getZ() {
Z z;
return z;
}
/* Having `callgetZ` with a function call to `getZ`
makes clang to add a destructor ~Z with empty body for `Z`.
We want to test if we do not inject empty-body destructor
call in `getZ`. */
void callgetZ() { getZ(); }
} // namespace destructor_scope

@ -0,0 +1,240 @@
/* @generated */
digraph iCFG {
"callgetZ#destructor_scope#_ZN16destructor_scope8callgetZEv.2c9a1cb54f86af11f45d83039775201e_1" [label="1: Start destructor_scope::callgetZ\nFormals: \nLocals: 0$?%__sil_tmp__temp_return_n$1:destructor_scope::Z \n DECLARE_LOCALS(&return,&0$?%__sil_tmp__temp_return_n$1); [line 70]\n " color=yellow style=filled]
"callgetZ#destructor_scope#_ZN16destructor_scope8callgetZEv.2c9a1cb54f86af11f45d83039775201e_1" -> "callgetZ#destructor_scope#_ZN16destructor_scope8callgetZEv.2c9a1cb54f86af11f45d83039775201e_3" ;
"callgetZ#destructor_scope#_ZN16destructor_scope8callgetZEv.2c9a1cb54f86af11f45d83039775201e_2" [label="2: Exit destructor_scope::callgetZ \n " color=yellow style=filled]
"callgetZ#destructor_scope#_ZN16destructor_scope8callgetZEv.2c9a1cb54f86af11f45d83039775201e_3" [label="3: Call _fun_destructor_scope::getZ \n _fun_destructor_scope::getZ(&0$?%__sil_tmp__temp_return_n$1:destructor_scope::Z*) [line 70]\n " shape="box"]
"callgetZ#destructor_scope#_ZN16destructor_scope8callgetZEv.2c9a1cb54f86af11f45d83039775201e_3" -> "callgetZ#destructor_scope#_ZN16destructor_scope8callgetZEv.2c9a1cb54f86af11f45d83039775201e_2" ;
"getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_1" [label="1: Start destructor_scope::getX\nFormals: __return_param:destructor_scope::X*\nLocals: x:destructor_scope::X \n DECLARE_LOCALS(&return,&x); [line 56]\n " color=yellow style=filled]
"getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_1" -> "getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_4" ;
"getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_2" [label="2: Exit destructor_scope::getX \n " color=yellow style=filled]
"getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_3" [label="3: Return Stmt \n n$0=*&__return_param:destructor_scope::X* [line 58]\n _fun_destructor_scope::X_X(n$0:destructor_scope::X*,&x:destructor_scope::X&) [line 58]\n _=*&x:destructor_scope::X [line 58]\n _fun_destructor_scope::X_~X(&x:destructor_scope::X*) [line 58]\n " shape="box"]
"getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_3" -> "getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_2" ;
"getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_4" [label="4: DeclStmt \n _fun_destructor_scope::X_X(&x:destructor_scope::X*) [line 57]\n " shape="box"]
"getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_4" -> "getX#destructor_scope#_ZN16destructor_scope4getXEv.b2ba3b7097be97728da335bbc1da58e3_3" ;
"getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_1" [label="1: Start destructor_scope::getZ\nFormals: __return_param:destructor_scope::Z*\nLocals: z:destructor_scope::Z \n DECLARE_LOCALS(&return,&z); [line 61]\n " color=yellow style=filled]
"getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_1" -> "getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_4" ;
"getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_2" [label="2: Exit destructor_scope::getZ \n " color=yellow style=filled]
"getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_3" [label="3: Return Stmt \n n$0=*&__return_param:destructor_scope::Z* [line 63]\n _fun_destructor_scope::Z_Z(n$0:destructor_scope::Z*,&z:destructor_scope::Z&) [line 63]\n " shape="box"]
"getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_3" -> "getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_2" ;
"getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_4" [label="4: DeclStmt \n _fun_destructor_scope::Z_Z(&z:destructor_scope::Z*) [line 62]\n " shape="box"]
"getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_4" -> "getZ#destructor_scope#_ZN16destructor_scope4getZEv.3a61a74007b69468d628bfcaa77ebe85_3" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_1" [label="1: Start destructor_scope::test2\nFormals: a:_Bool\nLocals: x2:destructor_scope::X x3:destructor_scope::X x1:destructor_scope::X \n DECLARE_LOCALS(&return,&x2,&x3,&x1); [line 45]\n " color=yellow style=filled]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_1" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_11" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_2" [label="2: Exit destructor_scope::test2 \n " color=yellow style=filled]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_3" [label="3: Destruction \n _=*&x1:destructor_scope::X [line 54]\n _fun_destructor_scope::X_~X(&x1:destructor_scope::X*) [line 54]\n " shape="box"]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_3" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_2" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_4" [label="4: + \n " ]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_4" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_3" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_5" [label="5: Prune (true branch) \n n$1=*&a:_Bool [line 47]\n PRUNE((n$1 != 0), true); [line 47]\n " shape="invhouse"]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_5" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_8" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_6" [label="6: Prune (false branch) \n n$1=*&a:_Bool [line 47]\n PRUNE((n$1 == 0), false); [line 47]\n " shape="invhouse"]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_6" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_10" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_7" [label="7: Return Stmt \n *&return:int=1 [line 49]\n _=*&x2:destructor_scope::X [line 49]\n _fun_destructor_scope::X_~X(&x2:destructor_scope::X*) [line 49]\n _=*&x1:destructor_scope::X [line 49]\n _fun_destructor_scope::X_~X(&x1:destructor_scope::X*) [line 49]\n " shape="box"]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_7" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_2" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_8" [label="8: DeclStmt \n _fun_destructor_scope::X_X(&x2:destructor_scope::X*) [line 48]\n " shape="box"]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_8" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_7" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_9" [label="9: Return Stmt \n *&return:int=2 [line 52]\n _=*&x3:destructor_scope::X [line 52]\n _fun_destructor_scope::X_~X(&x3:destructor_scope::X*) [line 52]\n _=*&x1:destructor_scope::X [line 52]\n _fun_destructor_scope::X_~X(&x1:destructor_scope::X*) [line 52]\n " shape="box"]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_9" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_2" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_10" [label="10: DeclStmt \n _fun_destructor_scope::X_X(&x3:destructor_scope::X*) [line 51]\n " shape="box"]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_10" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_9" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_11" [label="11: DeclStmt \n _fun_destructor_scope::X_X(&x1:destructor_scope::X*) [line 46]\n " shape="box"]
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_11" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_5" ;
"test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_11" -> "test2#destructor_scope#_ZN16destructor_scope5test2Eb.098ed11854422e6a46c509b82dd7020a_6" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_1" [label="1: Start destructor_scope::test1\nFormals: a:_Bool b:_Bool\nLocals: y3:destructor_scope::Y y1:destructor_scope::Y x3:destructor_scope::X y2:destructor_scope::Y x2:destructor_scope::X s:destructor_scope::S x1:destructor_scope::X \n DECLARE_LOCALS(&return,&y3,&y1,&x3,&y2,&x2,&s,&x1); [line 25]\n " color=yellow style=filled]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_1" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_21" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_2" [label="2: Exit destructor_scope::test1 \n " color=yellow style=filled]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_3" [label="3: Destruction \n _=*&y1:destructor_scope::Y [line 43]\n _fun_destructor_scope::Y_~Y(&y1:destructor_scope::Y*) [line 43]\n _=*&s:destructor_scope::S [line 43]\n _fun_destructor_scope::S_~S(&s:destructor_scope::S*) [line 43]\n _=*&x1:destructor_scope::X [line 43]\n _fun_destructor_scope::X_~X(&x1:destructor_scope::X*) [line 43]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_3" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_2" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_4" [label="4: Destruction \n _=*&y3:destructor_scope::Y [line 42]\n _fun_destructor_scope::Y_~Y(&y3:destructor_scope::Y*) [line 42]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_4" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_3" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_5" [label="5: DeclStmt \n _fun_destructor_scope::Y_Y(&y3:destructor_scope::Y*) [line 42]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_5" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_4" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_6" [label="6: DeclStmt \n _fun_destructor_scope::Y_Y(&y1:destructor_scope::Y*) [line 41]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_6" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_5" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_7" [label="7: Destruction \n _=*&y2:destructor_scope::Y [line 40]\n _fun_destructor_scope::Y_~Y(&y2:destructor_scope::Y*) [line 40]\n _=*&x2:destructor_scope::X [line 40]\n _fun_destructor_scope::X_~X(&x2:destructor_scope::X*) [line 40]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_7" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_6" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_8" [label="8: Destruction \n _=*&x3:destructor_scope::X [line 39]\n _fun_destructor_scope::X_~X(&x3:destructor_scope::X*) [line 39]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_8" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_7" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_9" [label="9: + \n " ]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_9" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_8" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_10" [label="10: Prune (true branch) \n n$7=*&b:_Bool [line 36]\n PRUNE((n$7 != 0), true); [line 36]\n " shape="invhouse"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_10" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_12" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_11" [label="11: Prune (false branch) \n n$7=*&b:_Bool [line 36]\n PRUNE((n$7 == 0), false); [line 36]\n " shape="invhouse"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_11" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_9" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_12" [label="12: Return Stmt \n _=*&x3:destructor_scope::X [line 37]\n _fun_destructor_scope::X_~X(&x3:destructor_scope::X*) [line 37]\n _=*&y2:destructor_scope::Y [line 37]\n _fun_destructor_scope::Y_~Y(&y2:destructor_scope::Y*) [line 37]\n _=*&x2:destructor_scope::X [line 37]\n _fun_destructor_scope::X_~X(&x2:destructor_scope::X*) [line 37]\n _=*&s:destructor_scope::S [line 37]\n _fun_destructor_scope::S_~S(&s:destructor_scope::S*) [line 37]\n _=*&x1:destructor_scope::X [line 37]\n _fun_destructor_scope::X_~X(&x1:destructor_scope::X*) [line 37]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_12" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_2" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_13" [label="13: DeclStmt \n _fun_destructor_scope::X_X(&x3:destructor_scope::X*) [line 35]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_13" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_10" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_13" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_11" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_14" [label="14: + \n " ]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_14" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_13" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_15" [label="15: Prune (true branch) \n n$13=*&a:_Bool [line 31]\n PRUNE((n$13 != 0), true); [line 31]\n " shape="invhouse"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_15" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_17" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_16" [label="16: Prune (false branch) \n n$13=*&a:_Bool [line 31]\n PRUNE((n$13 == 0), false); [line 31]\n " shape="invhouse"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_16" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_14" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_17" [label="17: Return Stmt \n _=*&y2:destructor_scope::Y [line 32]\n _fun_destructor_scope::Y_~Y(&y2:destructor_scope::Y*) [line 32]\n _=*&x2:destructor_scope::X [line 32]\n _fun_destructor_scope::X_~X(&x2:destructor_scope::X*) [line 32]\n _=*&s:destructor_scope::S [line 32]\n _fun_destructor_scope::S_~S(&s:destructor_scope::S*) [line 32]\n _=*&x1:destructor_scope::X [line 32]\n _fun_destructor_scope::X_~X(&x1:destructor_scope::X*) [line 32]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_17" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_2" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_18" [label="18: DeclStmt \n _fun_destructor_scope::Y_Y(&y2:destructor_scope::Y*) [line 30]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_18" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_15" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_18" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_16" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_19" [label="19: DeclStmt \n _fun_destructor_scope::X_X(&x2:destructor_scope::X*) [line 29]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_19" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_18" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_20" [label="20: DeclStmt \n _fun_destructor_scope::S_S(&s:destructor_scope::S*) [line 27]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_20" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_19" ;
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_21" [label="21: DeclStmt \n _fun_destructor_scope::X_X(&x1:destructor_scope::X*) [line 26]\n " shape="box"]
"test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_21" -> "test1#destructor_scope#_ZN16destructor_scope5test1Ebb.fea2570de1bd37fe2fd8c1bd9766c861_20" ;
"S#S#destructor_scope#{_ZN16destructor_scope1SC1Ev|constexpr}.8a90c7de74a36914310ae757d91d91ff_1" [label="1: Start destructor_scope::S_S\nFormals: this:destructor_scope::S*\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled]
"S#S#destructor_scope#{_ZN16destructor_scope1SC1Ev|constexpr}.8a90c7de74a36914310ae757d91d91ff_1" -> "S#S#destructor_scope#{_ZN16destructor_scope1SC1Ev|constexpr}.8a90c7de74a36914310ae757d91d91ff_3" ;
"S#S#destructor_scope#{_ZN16destructor_scope1SC1Ev|constexpr}.8a90c7de74a36914310ae757d91d91ff_2" [label="2: Exit destructor_scope::S_S \n " color=yellow style=filled]
"S#S#destructor_scope#{_ZN16destructor_scope1SC1Ev|constexpr}.8a90c7de74a36914310ae757d91d91ff_3" [label="3: Constructor Init \n n$0=*&this:destructor_scope::S* [line 21]\n _fun_destructor_scope::X_X(n$0.x:destructor_scope::X*) [line 21]\n " shape="box"]
"S#S#destructor_scope#{_ZN16destructor_scope1SC1Ev|constexpr}.8a90c7de74a36914310ae757d91d91ff_3" -> "S#S#destructor_scope#{_ZN16destructor_scope1SC1Ev|constexpr}.8a90c7de74a36914310ae757d91d91ff_2" ;
"~S#S#destructor_scope#(_ZN16destructor_scope1SD0Ev).e029a1be84e1c759d19e67b6cee10d7f_1" [label="1: Start destructor_scope::S_~S\nFormals: this:destructor_scope::S*\nLocals: \n DECLARE_LOCALS(&return); [line 21]\n " color=yellow style=filled]
"~S#S#destructor_scope#(_ZN16destructor_scope1SD0Ev).e029a1be84e1c759d19e67b6cee10d7f_1" -> "~S#S#destructor_scope#(_ZN16destructor_scope1SD0Ev).e029a1be84e1c759d19e67b6cee10d7f_2" ;
"~S#S#destructor_scope#(_ZN16destructor_scope1SD0Ev).e029a1be84e1c759d19e67b6cee10d7f_2" [label="2: Exit destructor_scope::S_~S \n " color=yellow style=filled]
"X#X#destructor_scope#{_ZN16destructor_scope1XC1Ev|constexpr}.2fe4286cdaf024592bc7b4ad8b4a565f_1" [label="1: Start destructor_scope::X_X\nFormals: this:destructor_scope::X*\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled]
"X#X#destructor_scope#{_ZN16destructor_scope1XC1Ev|constexpr}.2fe4286cdaf024592bc7b4ad8b4a565f_1" -> "X#X#destructor_scope#{_ZN16destructor_scope1XC1Ev|constexpr}.2fe4286cdaf024592bc7b4ad8b4a565f_2" ;
"X#X#destructor_scope#{_ZN16destructor_scope1XC1Ev|constexpr}.2fe4286cdaf024592bc7b4ad8b4a565f_2" [label="2: Exit destructor_scope::X_X \n " color=yellow style=filled]
"~X#X#destructor_scope#(_ZN16destructor_scope1XD0Ev).f18f0761b16fe36438c4eae7e576b682_1" [label="1: Start destructor_scope::X_~X\nFormals: this:destructor_scope::X*\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled]
"~X#X#destructor_scope#(_ZN16destructor_scope1XD0Ev).f18f0761b16fe36438c4eae7e576b682_1" -> "~X#X#destructor_scope#(_ZN16destructor_scope1XD0Ev).f18f0761b16fe36438c4eae7e576b682_2" ;
"~X#X#destructor_scope#(_ZN16destructor_scope1XD0Ev).f18f0761b16fe36438c4eae7e576b682_2" [label="2: Exit destructor_scope::X_~X \n " color=yellow style=filled]
"X#X#destructor_scope#{_ZN16destructor_scope1XC1ERKS0_|constexpr}.2414d8fbaa297d1fce05355d53896b6b_1" [label="1: Start destructor_scope::X_X\nFormals: this:destructor_scope::X* __param_0:destructor_scope::X const &\nLocals: \n DECLARE_LOCALS(&return); [line 11]\n " color=yellow style=filled]
"X#X#destructor_scope#{_ZN16destructor_scope1XC1ERKS0_|constexpr}.2414d8fbaa297d1fce05355d53896b6b_1" -> "X#X#destructor_scope#{_ZN16destructor_scope1XC1ERKS0_|constexpr}.2414d8fbaa297d1fce05355d53896b6b_2" ;
"X#X#destructor_scope#{_ZN16destructor_scope1XC1ERKS0_|constexpr}.2414d8fbaa297d1fce05355d53896b6b_2" [label="2: Exit destructor_scope::X_X \n " color=yellow style=filled]
"Y#Y#destructor_scope#{_ZN16destructor_scope1YC1Ev|constexpr}.bbec2666e178558d30786fd357bae394_1" [label="1: Start destructor_scope::Y_Y\nFormals: this:destructor_scope::Y*\nLocals: \n DECLARE_LOCALS(&return); [line 15]\n " color=yellow style=filled]
"Y#Y#destructor_scope#{_ZN16destructor_scope1YC1Ev|constexpr}.bbec2666e178558d30786fd357bae394_1" -> "Y#Y#destructor_scope#{_ZN16destructor_scope1YC1Ev|constexpr}.bbec2666e178558d30786fd357bae394_2" ;
"Y#Y#destructor_scope#{_ZN16destructor_scope1YC1Ev|constexpr}.bbec2666e178558d30786fd357bae394_2" [label="2: Exit destructor_scope::Y_Y \n " color=yellow style=filled]
"~Y#Y#destructor_scope#(_ZN16destructor_scope1YD0Ev).c1e3be6c11bac066871bac643c1a7d33_1" [label="1: Start destructor_scope::Y_~Y\nFormals: this:destructor_scope::Y*\nLocals: \n DECLARE_LOCALS(&return); [line 16]\n " color=yellow style=filled]
"~Y#Y#destructor_scope#(_ZN16destructor_scope1YD0Ev).c1e3be6c11bac066871bac643c1a7d33_1" -> "~Y#Y#destructor_scope#(_ZN16destructor_scope1YD0Ev).c1e3be6c11bac066871bac643c1a7d33_2" ;
"~Y#Y#destructor_scope#(_ZN16destructor_scope1YD0Ev).c1e3be6c11bac066871bac643c1a7d33_2" [label="2: Exit destructor_scope::Y_~Y \n " color=yellow style=filled]
"Z#Z#destructor_scope#{_ZN16destructor_scope1ZC1Ev|constexpr}.58846154fa4db51b4cb4a6dc634794d7_1" [label="1: Start destructor_scope::Z_Z\nFormals: this:destructor_scope::Z*\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled]
"Z#Z#destructor_scope#{_ZN16destructor_scope1ZC1Ev|constexpr}.58846154fa4db51b4cb4a6dc634794d7_1" -> "Z#Z#destructor_scope#{_ZN16destructor_scope1ZC1Ev|constexpr}.58846154fa4db51b4cb4a6dc634794d7_2" ;
"Z#Z#destructor_scope#{_ZN16destructor_scope1ZC1Ev|constexpr}.58846154fa4db51b4cb4a6dc634794d7_2" [label="2: Exit destructor_scope::Z_Z \n " color=yellow style=filled]
"Z#Z#destructor_scope#{_ZN16destructor_scope1ZC1EOS0_|constexpr}.ae74c365359faeede5251886ed3ce9f9_1" [label="1: Start destructor_scope::Z_Z\nFormals: this:destructor_scope::Z* __param_0:destructor_scope::Z&\nLocals: \n DECLARE_LOCALS(&return); [line 19]\n " color=yellow style=filled]
"Z#Z#destructor_scope#{_ZN16destructor_scope1ZC1EOS0_|constexpr}.ae74c365359faeede5251886ed3ce9f9_1" -> "Z#Z#destructor_scope#{_ZN16destructor_scope1ZC1EOS0_|constexpr}.ae74c365359faeede5251886ed3ce9f9_2" ;
"Z#Z#destructor_scope#{_ZN16destructor_scope1ZC1EOS0_|constexpr}.ae74c365359faeede5251886ed3ce9f9_2" [label="2: Exit destructor_scope::Z_Z \n " color=yellow style=filled]
}

@ -30,11 +30,11 @@ digraph iCFG {
"tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_2" [label="2: Exit tri_area \n " color=yellow style=filled]
"tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_3" [label="3: Return Stmt \n n$0=*&ppoly2:Polygon* [line 50]\n _=*n$0:Polygon [line 50]\n n$2=_fun_Polygon_area(n$0:Polygon*) virtual [line 50]\n *&return:int=(1 / (n$2 - 10)) [line 50]\n " shape="box"]
"tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_3" [label="3: Return Stmt \n n$0=*&ppoly2:Polygon* [line 50]\n _=*n$0:Polygon [line 50]\n n$2=_fun_Polygon_area(n$0:Polygon*) virtual [line 50]\n *&return:int=(1 / (n$2 - 10)) [line 50]\n _=*&trgl:Triangle [line 50]\n _fun_Triangle_~Triangle(&trgl:Triangle*) virtual [line 50]\n " shape="box"]
"tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_3" -> "tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_2" ;
"tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_4" [label="4: Call _fun_Polygon_set_values \n n$3=*&ppoly2:Polygon* [line 49]\n _=*n$3:Polygon [line 49]\n _fun_Polygon_set_values(n$3:Polygon*,4:int,5:int) [line 49]\n " shape="box"]
"tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_4" [label="4: Call _fun_Polygon_set_values \n n$4=*&ppoly2:Polygon* [line 49]\n _=*n$4:Polygon [line 49]\n _fun_Polygon_set_values(n$4:Polygon*,4:int,5:int) [line 49]\n " shape="box"]
"tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_4" -> "tri_area#_Z8tri_areav.403fd0c777354a6dc0b49fdc8d1c7762_3" ;
@ -76,11 +76,11 @@ digraph iCFG {
"tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_2" [label="2: Exit tri_not_virtual_area \n " color=yellow style=filled]
"tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_3" [label="3: Return Stmt \n n$0=*&ppoly2:Polygon* [line 64]\n _=*n$0:Polygon [line 64]\n n$2=_fun_Polygon_area(n$0:Polygon*) [line 64]\n *&return:int=(1 / n$2) [line 64]\n " shape="box"]
"tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_3" [label="3: Return Stmt \n n$0=*&ppoly2:Polygon* [line 64]\n _=*n$0:Polygon [line 64]\n n$2=_fun_Polygon_area(n$0:Polygon*) [line 64]\n *&return:int=(1 / n$2) [line 64]\n _=*&trgl:Triangle [line 64]\n _fun_Triangle_~Triangle(&trgl:Triangle*) virtual [line 64]\n " shape="box"]
"tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_3" -> "tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_2" ;
"tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_4" [label="4: Call _fun_Polygon_set_values \n n$3=*&ppoly2:Polygon* [line 63]\n _=*n$3:Polygon [line 63]\n _fun_Polygon_set_values(n$3:Polygon*,4:int,5:int) [line 63]\n " shape="box"]
"tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_4" [label="4: Call _fun_Polygon_set_values \n n$4=*&ppoly2:Polygon* [line 63]\n _=*n$4:Polygon [line 63]\n _fun_Polygon_set_values(n$4:Polygon*,4:int,5:int) [line 63]\n " shape="box"]
"tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_4" -> "tri_not_virtual_area#_Z20tri_not_virtual_areav.f5155c2065082d5f4483008c8070f701_3" ;

@ -0,0 +1,528 @@
/* @generated */
digraph iCFG {
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_1" [label="1: Start person_typeid\nFormals: \nLocals: t:int person:Person \n DECLARE_LOCALS(&return,&t,&person); [line 19]\n " color=yellow style=filled]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_1" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_11" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_2" [label="2: Exit person_typeid \n " color=yellow style=filled]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_3" [label="3: Destruction \n _fun_Person_~Person(&person:Person&) virtual [line 26]\n " shape="box"]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_3" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_2" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_4" [label="4: + \n " ]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_4" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_3" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_5" [label="5: Call _fun_std::type_info_operator== \n n$0=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$0.__type_name:void,&t:int) [line 22]\n n$1=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$1.__type_name:void,&person:Person) [line 22]\n n$2=_fun_std::type_info_operator==(n$0:std::type_info const &,n$1:std::type_info const &) [line 22]\n " shape="box"]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_5" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_6" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_5" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_7" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_6" [label="6: Prune (true branch) \n PRUNE((n$2 != 0), true); [line 22]\n " shape="invhouse"]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_6" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_8" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_7" [label="7: Prune (false branch) \n PRUNE((n$2 == 0), false); [line 22]\n " shape="invhouse"]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_7" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_9" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_8" [label="8: Return Stmt \n *&return:int=1 [line 23]\n _fun_Person_~Person(&person:Person&) virtual [line 23]\n " shape="box"]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_8" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_2" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_9" [label="9: Return Stmt \n *&return:int=(1 / 0) [line 25]\n _fun_Person_~Person(&person:Person&) virtual [line 25]\n " shape="box"]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_9" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_2" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_10" [label="10: DeclStmt \n *&t:int=3 [line 21]\n " shape="box"]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_10" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_5" ;
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_11" [label="11: DeclStmt \n _fun_Person_Person(&person:Person*) [line 20]\n " shape="box"]
"person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_11" -> "person_typeid#_Z13person_typeidv.259e8739c3aa7b455d1b67a326ce9b09_10" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_1" [label="1: Start person_typeid_name\nFormals: \nLocals: person_type_info:char const * t_type_info:char const * t:int person:Person \n DECLARE_LOCALS(&return,&person_type_info,&t_type_info,&t,&person); [line 28]\n " color=yellow style=filled]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_1" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_13" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_2" [label="2: Exit person_typeid_name \n " color=yellow style=filled]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_3" [label="3: Destruction \n _fun_Person_~Person(&person:Person&) virtual [line 37]\n " shape="box"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_3" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_2" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_4" [label="4: + \n " ]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_4" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_3" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&t_type_info:char const * [line 33]\n n$1=*&person_type_info:char const * [line 33]\n " shape="box"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_5" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_6" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_5" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_7" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_6" [label="6: Prune (true branch) \n PRUNE(((n$0 == n$1) != 0), true); [line 33]\n " shape="invhouse"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_6" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_8" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_7" [label="7: Prune (false branch) \n PRUNE(((n$0 == n$1) == 0), false); [line 33]\n " shape="invhouse"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_7" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_9" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_8" [label="8: Return Stmt \n *&return:int=0 [line 34]\n _fun_Person_~Person(&person:Person&) virtual [line 34]\n " shape="box"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_8" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_2" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_9" [label="9: Return Stmt \n *&return:int=(1 / 0) [line 36]\n _fun_Person_~Person(&person:Person&) virtual [line 36]\n " shape="box"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_9" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_2" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_10" [label="10: DeclStmt \n n$2=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$2.__type_name:void,&person:Person) [line 32]\n _=*n$2:std::type_info const [line 32]\n n$4=_fun_std::type_info_name(n$2:std::type_info const &) [line 32]\n *&person_type_info:char const *=n$4 [line 32]\n " shape="box"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_10" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_5" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_11" [label="11: DeclStmt \n n$5=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$5.__type_name:void,&t:int) [line 31]\n _=*n$5:std::type_info const [line 31]\n n$7=_fun_std::type_info_name(n$5:std::type_info const &) [line 31]\n *&t_type_info:char const *=n$7 [line 31]\n " shape="box"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_11" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_10" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_12" [label="12: DeclStmt \n *&t:int=3 [line 30]\n " shape="box"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_12" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_11" ;
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_13" [label="13: DeclStmt \n _fun_Person_Person(&person:Person*) [line 29]\n " shape="box"]
"person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_13" -> "person_typeid_name#_Z18person_typeid_namev.61ab0ec473f2261bf55eb69fa502c9ca_12" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_1" [label="1: Start employee_typeid\nFormals: \nLocals: ptr:Person* employee:Employee \n DECLARE_LOCALS(&return,&ptr,&employee); [line 39]\n " color=yellow style=filled]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_1" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_11" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_2" [label="2: Exit employee_typeid \n " color=yellow style=filled]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_3" [label="3: Destruction \n _fun_Employee_~Employee(&employee:Employee&) virtual [line 46]\n " shape="box"]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_3" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_2" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_4" [label="4: + \n " ]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_4" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_3" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_5" [label="5: Call _fun_std::type_info_operator== \n n$0=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$0.__type_name:void,&employee:Employee) [line 42]\n n$1=*&ptr:Person* [line 42]\n n$2=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$2.__type_name:void,n$1:Person) [line 42]\n n$3=_fun_std::type_info_operator==(n$0:std::type_info const &,n$2:std::type_info const &) [line 42]\n " shape="box"]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_5" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_6" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_5" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_7" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_6" [label="6: Prune (true branch) \n PRUNE((n$3 != 0), true); [line 42]\n " shape="invhouse"]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_6" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_8" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_7" [label="7: Prune (false branch) \n PRUNE((n$3 == 0), false); [line 42]\n " shape="invhouse"]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_7" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_9" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_8" [label="8: Return Stmt \n *&return:int=(1 / 0) [line 43]\n _fun_Employee_~Employee(&employee:Employee&) virtual [line 43]\n " shape="box"]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_8" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_2" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_9" [label="9: Return Stmt \n *&return:int=0 [line 45]\n _fun_Employee_~Employee(&employee:Employee&) virtual [line 45]\n " shape="box"]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_9" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_2" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_10" [label="10: DeclStmt \n *&ptr:Employee*=&employee [line 41]\n " shape="box"]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_10" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_5" ;
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_11" [label="11: DeclStmt \n _fun_Employee_Employee(&employee:Employee*) [line 40]\n " shape="box"]
"employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_11" -> "employee_typeid#_Z15employee_typeidv.d5a1249d00c1531124f473b9003de8b4_10" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_1" [label="1: Start template_type_id_person\nFormals: \nLocals: person:Person \n DECLARE_LOCALS(&return,&person); [line 62]\n " color=yellow style=filled]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_1" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_10" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_2" [label="2: Exit template_type_id_person \n " color=yellow style=filled]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_3" [label="3: Destruction \n _fun_Person_~Person(&person:Person&) virtual [line 68]\n " shape="box"]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_3" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_2" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_4" [label="4: + \n " ]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_4" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_3" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_5" [label="5: BinaryOperatorStmt: EQ \n n$0=_fun_template_typeid<Person>(&person:Person&) [line 64]\n n$1=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$1.__type_name:void,&person:Person) [line 64]\n _=*n$1:std::type_info const [line 64]\n n$3=_fun_std::type_info_name(n$1:std::type_info const &) [line 64]\n " shape="box"]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_5" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_6" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_5" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_7" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_6" [label="6: Prune (true branch) \n PRUNE(((n$0 == n$3) != 0), true); [line 64]\n " shape="invhouse"]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_6" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_8" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_7" [label="7: Prune (false branch) \n PRUNE(((n$0 == n$3) == 0), false); [line 64]\n " shape="invhouse"]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_7" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_9" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_8" [label="8: Return Stmt \n *&return:int=1 [line 65]\n _fun_Person_~Person(&person:Person&) virtual [line 65]\n " shape="box"]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_8" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_2" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_9" [label="9: Return Stmt \n *&return:int=(1 / 0) [line 67]\n _fun_Person_~Person(&person:Person&) virtual [line 67]\n " shape="box"]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_9" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_2" ;
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_10" [label="10: DeclStmt \n _fun_Person_Person(&person:Person*) [line 63]\n " shape="box"]
"template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_10" -> "template_type_id_person#_Z23template_type_id_personv.5fe9ce5a34a9724ffe6120b87e057895_5" ;
"value#__numeric_type<void>#__infer_globals_initializer_std.47862f77402cf0b9a8f85342f9963960_1" [label="1: Start __infer_globals_initializer_std::__numeric_type<void>::value\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 1697]\n " color=yellow style=filled]
"value#__numeric_type<void>#__infer_globals_initializer_std.47862f77402cf0b9a8f85342f9963960_1" -> "value#__numeric_type<void>#__infer_globals_initializer_std.47862f77402cf0b9a8f85342f9963960_3" ;
"value#__numeric_type<void>#__infer_globals_initializer_std.47862f77402cf0b9a8f85342f9963960_2" [label="2: Exit __infer_globals_initializer_std::__numeric_type<void>::value \n " color=yellow style=filled]
"value#__numeric_type<void>#__infer_globals_initializer_std.47862f77402cf0b9a8f85342f9963960_3" [label="3: DeclStmt \n *&#GB<codetoanalyze/cpp/shared/types/typeid_expr.cpp>$std::__numeric_type<void>::value:_Bool=1 [line 1697]\n " shape="box"]
"value#__numeric_type<void>#__infer_globals_initializer_std.47862f77402cf0b9a8f85342f9963960_3" -> "value#__numeric_type<void>#__infer_globals_initializer_std.47862f77402cf0b9a8f85342f9963960_2" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEi.43b0259cdf1b6086b5b232de7e5ddc3b_1" [label="1: Start std::__convert_to_integral\nFormals: __val:int\nLocals: \n DECLARE_LOCALS(&return); [line 4309]\n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEi.43b0259cdf1b6086b5b232de7e5ddc3b_1" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEi.43b0259cdf1b6086b5b232de7e5ddc3b_3" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEi.43b0259cdf1b6086b5b232de7e5ddc3b_2" [label="2: Exit std::__convert_to_integral \n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEi.43b0259cdf1b6086b5b232de7e5ddc3b_3" [label="3: Return Stmt \n n$0=*&__val:int [line 4310]\n *&return:int=n$0 [line 4310]\n " shape="box"]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEi.43b0259cdf1b6086b5b232de7e5ddc3b_3" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEi.43b0259cdf1b6086b5b232de7e5ddc3b_2" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEn.f0a547f6acd880fbe54bf8cd9fcfe151_1" [label="1: Start std::__convert_to_integral\nFormals: __val:int\nLocals: \n DECLARE_LOCALS(&return); [line 4328]\n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEn.f0a547f6acd880fbe54bf8cd9fcfe151_1" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEn.f0a547f6acd880fbe54bf8cd9fcfe151_3" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEn.f0a547f6acd880fbe54bf8cd9fcfe151_2" [label="2: Exit std::__convert_to_integral \n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEn.f0a547f6acd880fbe54bf8cd9fcfe151_3" [label="3: Return Stmt \n n$0=*&__val:int [line 4329]\n *&return:int=n$0 [line 4329]\n " shape="box"]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEn.f0a547f6acd880fbe54bf8cd9fcfe151_3" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEn.f0a547f6acd880fbe54bf8cd9fcfe151_2" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEj.fd205920d652f02f0b9a9b89e450a068_1" [label="1: Start std::__convert_to_integral\nFormals: __val:unsigned int\nLocals: \n DECLARE_LOCALS(&return); [line 4312]\n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEj.fd205920d652f02f0b9a9b89e450a068_1" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEj.fd205920d652f02f0b9a9b89e450a068_3" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEj.fd205920d652f02f0b9a9b89e450a068_2" [label="2: Exit std::__convert_to_integral \n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEj.fd205920d652f02f0b9a9b89e450a068_3" [label="3: Return Stmt \n n$0=*&__val:unsigned int [line 4313]\n *&return:unsigned int=n$0 [line 4313]\n " shape="box"]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEj.fd205920d652f02f0b9a9b89e450a068_3" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEj.fd205920d652f02f0b9a9b89e450a068_2" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEo.15fc37df335893286e47ebfc292083c1_1" [label="1: Start std::__convert_to_integral\nFormals: __val:unsigned int\nLocals: \n DECLARE_LOCALS(&return); [line 4331]\n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEo.15fc37df335893286e47ebfc292083c1_1" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEo.15fc37df335893286e47ebfc292083c1_3" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEo.15fc37df335893286e47ebfc292083c1_2" [label="2: Exit std::__convert_to_integral \n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEo.15fc37df335893286e47ebfc292083c1_3" [label="3: Return Stmt \n n$0=*&__val:unsigned int [line 4332]\n *&return:unsigned int=n$0 [line 4332]\n " shape="box"]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEo.15fc37df335893286e47ebfc292083c1_3" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEo.15fc37df335893286e47ebfc292083c1_2" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEl.19b65e5b35784a4d6b1ba397569565af_1" [label="1: Start std::__convert_to_integral\nFormals: __val:long\nLocals: \n DECLARE_LOCALS(&return); [line 4315]\n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEl.19b65e5b35784a4d6b1ba397569565af_1" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEl.19b65e5b35784a4d6b1ba397569565af_3" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEl.19b65e5b35784a4d6b1ba397569565af_2" [label="2: Exit std::__convert_to_integral \n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEl.19b65e5b35784a4d6b1ba397569565af_3" [label="3: Return Stmt \n n$0=*&__val:long [line 4316]\n *&return:long=n$0 [line 4316]\n " shape="box"]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEl.19b65e5b35784a4d6b1ba397569565af_3" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEl.19b65e5b35784a4d6b1ba397569565af_2" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEm.111d95b3f3b4d5dd40ab1add8f243f84_1" [label="1: Start std::__convert_to_integral\nFormals: __val:unsigned long\nLocals: \n DECLARE_LOCALS(&return); [line 4318]\n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEm.111d95b3f3b4d5dd40ab1add8f243f84_1" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEm.111d95b3f3b4d5dd40ab1add8f243f84_3" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEm.111d95b3f3b4d5dd40ab1add8f243f84_2" [label="2: Exit std::__convert_to_integral \n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEm.111d95b3f3b4d5dd40ab1add8f243f84_3" [label="3: Return Stmt \n n$0=*&__val:unsigned long [line 4319]\n *&return:unsigned long=n$0 [line 4319]\n " shape="box"]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEm.111d95b3f3b4d5dd40ab1add8f243f84_3" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEm.111d95b3f3b4d5dd40ab1add8f243f84_2" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEx.c1183c63775e8691319a0bd03664ac0c_1" [label="1: Start std::__convert_to_integral\nFormals: __val:long long\nLocals: \n DECLARE_LOCALS(&return); [line 4321]\n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEx.c1183c63775e8691319a0bd03664ac0c_1" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEx.c1183c63775e8691319a0bd03664ac0c_3" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEx.c1183c63775e8691319a0bd03664ac0c_2" [label="2: Exit std::__convert_to_integral \n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEx.c1183c63775e8691319a0bd03664ac0c_3" [label="3: Return Stmt \n n$0=*&__val:long long [line 4322]\n *&return:long long=n$0 [line 4322]\n " shape="box"]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEx.c1183c63775e8691319a0bd03664ac0c_3" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEx.c1183c63775e8691319a0bd03664ac0c_2" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEy.4261f4b82618cc6ea34bb4631aefbdda_1" [label="1: Start std::__convert_to_integral\nFormals: __val:unsigned long long\nLocals: \n DECLARE_LOCALS(&return); [line 4324]\n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEy.4261f4b82618cc6ea34bb4631aefbdda_1" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEy.4261f4b82618cc6ea34bb4631aefbdda_3" ;
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEy.4261f4b82618cc6ea34bb4631aefbdda_2" [label="2: Exit std::__convert_to_integral \n " color=yellow style=filled]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEy.4261f4b82618cc6ea34bb4631aefbdda_3" [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"]
"__convert_to_integral#std#_ZNSt3__121__convert_to_integralEy.4261f4b82618cc6ea34bb4631aefbdda_3" -> "__convert_to_integral#std#_ZNSt3__121__convert_to_integralEy.4261f4b82618cc6ea34bb4631aefbdda_2" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_1" [label="1: Start person_ptr_typeid\nFormals: ptr:Person*\nLocals: person:Person \n DECLARE_LOCALS(&return,&person); [line 48]\n " color=yellow style=filled]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_1" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_10" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_2" [label="2: Exit person_ptr_typeid \n " color=yellow style=filled]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_3" [label="3: Destruction \n _fun_Person_~Person(&person:Person&) virtual [line 54]\n " shape="box"]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_3" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_2" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_4" [label="4: + \n " ]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_4" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_3" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&ptr:Person* [line 50]\n n$1=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$1.__type_name:void,n$0:Person) [line 50]\n _=*n$1:std::type_info const [line 50]\n n$3=_fun_std::type_info_name(n$1:std::type_info const &) [line 50]\n n$4=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$4.__type_name:void,&person:Person) [line 50]\n _=*n$4:std::type_info const [line 50]\n n$6=_fun_std::type_info_name(n$4:std::type_info const &) [line 50]\n " shape="box"]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_5" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_6" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_5" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_7" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_6" [label="6: Prune (true branch) \n PRUNE(((n$3 == n$6) != 0), true); [line 50]\n " shape="invhouse"]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_6" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_8" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_7" [label="7: Prune (false branch) \n PRUNE(((n$3 == n$6) == 0), false); [line 50]\n " shape="invhouse"]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_7" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_9" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_8" [label="8: Return Stmt \n *&return:int=(1 / 0) [line 51]\n _fun_Person_~Person(&person:Person&) virtual [line 51]\n " shape="box"]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_8" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_2" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_9" [label="9: Return Stmt \n *&return:int=0 [line 53]\n _fun_Person_~Person(&person:Person&) virtual [line 53]\n " shape="box"]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_9" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_2" ;
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_10" [label="10: DeclStmt \n _fun_Person_Person(&person:Person*) [line 49]\n " shape="box"]
"person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_10" -> "person_ptr_typeid#_Z17person_ptr_typeidP6Person.d9adfc6b86c71441019a0fdc03c35fa6_5" ;
"template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_1" [label="1: Start template_typeid<Person>\nFormals: value:Person const &\nLocals: result:Person 0$?%__sil_tmpSIL_materialize_temp__n$3:Person \n DECLARE_LOCALS(&return,&result,&0$?%__sil_tmpSIL_materialize_temp__n$3); [line 57]\n " color=yellow style=filled]
"template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_1" -> "template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_4" ;
"template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_2" [label="2: Exit template_typeid<Person> \n " color=yellow style=filled]
"template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_3" [label="3: Return Stmt \n n$0=_fun___cxx_typeid(sizeof(std::type_info const ):void,n$0.__type_name:void) [line 59]\n _=*n$0:std::type_info const [line 59]\n n$2=_fun_std::type_info_name(n$0:std::type_info const &) [line 59]\n *&return:char const *=n$2 [line 59]\n _fun_Person_~Person(&result:Person&) virtual [line 59]\n " shape="box"]
"template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_3" -> "template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_2" ;
"template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_4" [label="4: DeclStmt \n n$4=*&value:Person const & [line 58]\n _fun_Person_Person(&0$?%__sil_tmpSIL_materialize_temp__n$3:Person const *,n$4:Person const &) [line 58]\n _fun_Person_Person(&result:Person*,&0$?%__sil_tmpSIL_materialize_temp__n$3:Person&) [line 58]\n " shape="box"]
"template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_4" -> "template_typeid<Person>#_Z15template_typeidI6PersonEPKcRKT_.a1cb4d870e3df2f09bf7a22e0fc6e5c6_3" ;
"Employee#Employee#{_ZN8EmployeeC1Ev|constexpr}.16759caee496fa04cbb5c95e71252949_1" [label="1: Start Employee_Employee\nFormals: this:Employee*\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled]
"Employee#Employee#{_ZN8EmployeeC1Ev|constexpr}.16759caee496fa04cbb5c95e71252949_1" -> "Employee#Employee#{_ZN8EmployeeC1Ev|constexpr}.16759caee496fa04cbb5c95e71252949_3" ;
"Employee#Employee#{_ZN8EmployeeC1Ev|constexpr}.16759caee496fa04cbb5c95e71252949_2" [label="2: Exit Employee_Employee \n " color=yellow style=filled]
"Employee#Employee#{_ZN8EmployeeC1Ev|constexpr}.16759caee496fa04cbb5c95e71252949_3" [label="3: Constructor Init \n n$0=*&this:Employee* [line 17]\n _fun_Person_Person(n$0:Employee*) [line 17]\n " shape="box"]
"Employee#Employee#{_ZN8EmployeeC1Ev|constexpr}.16759caee496fa04cbb5c95e71252949_3" -> "Employee#Employee#{_ZN8EmployeeC1Ev|constexpr}.16759caee496fa04cbb5c95e71252949_2" ;
"~Employee#Employee#(_ZN6PersonD0Ev).b246750215fd295f2276d9dd33772816_1" [label="1: Start Employee_~Employee\nFormals: this:Employee*\nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled]
"~Employee#Employee#(_ZN6PersonD0Ev).b246750215fd295f2276d9dd33772816_1" -> "~Employee#Employee#(_ZN6PersonD0Ev).b246750215fd295f2276d9dd33772816_2" ;
"~Employee#Employee#(_ZN6PersonD0Ev).b246750215fd295f2276d9dd33772816_2" [label="2: Exit Employee_~Employee \n " color=yellow style=filled]
"Person#Person#{_ZN6PersonC1Ev|constexpr}.d3aa73a16cf65083c030acbc97a9ff15_1" [label="1: Start Person_Person\nFormals: this:Person*\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled]
"Person#Person#{_ZN6PersonC1Ev|constexpr}.d3aa73a16cf65083c030acbc97a9ff15_1" -> "Person#Person#{_ZN6PersonC1Ev|constexpr}.d3aa73a16cf65083c030acbc97a9ff15_2" ;
"Person#Person#{_ZN6PersonC1Ev|constexpr}.d3aa73a16cf65083c030acbc97a9ff15_2" [label="2: Exit Person_Person \n " color=yellow style=filled]
"~Person#Person#(_ZN6PersonD0Ev).6c309af5fed23bf91f2ee6ecd26bcc41_1" [label="1: Start Person_~Person\nFormals: this:Person*\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled]
"~Person#Person#(_ZN6PersonD0Ev).6c309af5fed23bf91f2ee6ecd26bcc41_1" -> "~Person#Person#(_ZN6PersonD0Ev).6c309af5fed23bf91f2ee6ecd26bcc41_2" ;
"~Person#Person#(_ZN6PersonD0Ev).6c309af5fed23bf91f2ee6ecd26bcc41_2" [label="2: Exit Person_~Person \n " color=yellow style=filled]
"Person#Person#{_ZN6PersonC1ERKS_|constexpr}.723fccb56b807554fd33d1118dcb83e1_1" [label="1: Start Person_Person\nFormals: this:Person* __param_0:Person const &\nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled]
"Person#Person#{_ZN6PersonC1ERKS_|constexpr}.723fccb56b807554fd33d1118dcb83e1_1" -> "Person#Person#{_ZN6PersonC1ERKS_|constexpr}.723fccb56b807554fd33d1118dcb83e1_2" ;
"Person#Person#{_ZN6PersonC1ERKS_|constexpr}.723fccb56b807554fd33d1118dcb83e1_2" [label="2: Exit Person_Person \n " color=yellow style=filled]
"bad_exception#bad_exception#std#{_ZNSt13bad_exceptionC1Ev}.9b3ad9f8b08e34cb77dd347cfc0925a2_1" [label="1: Start std::bad_exception_bad_exception\nFormals: this:std::bad_exception*\nLocals: \n " color=yellow style=filled]
"bad_exception#bad_exception#std#{_ZNSt13bad_exceptionC1Ev}.9b3ad9f8b08e34cb77dd347cfc0925a2_2" [label="2: Exit std::bad_exception_bad_exception \n " color=yellow style=filled]
"exception#exception#std#{_ZNSt9exceptionC1Ev}.5226a0e6cc026fc29eb750a66d588910_1" [label="1: Start std::exception_exception\nFormals: this:std::exception*\nLocals: \n " color=yellow style=filled]
"exception#exception#std#{_ZNSt9exceptionC1Ev}.5226a0e6cc026fc29eb750a66d588910_2" [label="2: Exit std::exception_exception \n " color=yellow style=filled]
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1Ev}.0c4f2ef0c0bd9280100ecba5b0fba8bd_1" [label="1: Start std::exception_ptr_exception_ptr\nFormals: this:std::exception_ptr*\nLocals: \n DECLARE_LOCALS(&return); [line 130]\n " color=yellow style=filled]
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1Ev}.0c4f2ef0c0bd9280100ecba5b0fba8bd_1" -> "exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1Ev}.0c4f2ef0c0bd9280100ecba5b0fba8bd_3" ;
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1Ev}.0c4f2ef0c0bd9280100ecba5b0fba8bd_2" [label="2: Exit std::exception_ptr_exception_ptr \n " color=yellow style=filled]
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1Ev}.0c4f2ef0c0bd9280100ecba5b0fba8bd_3" [label="3: Constructor Init \n n$0=*&this:std::exception_ptr* [line 130]\n *n$0.__ptr_:void*=null [line 130]\n " shape="box"]
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1Ev}.0c4f2ef0c0bd9280100ecba5b0fba8bd_3" -> "exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1Ev}.0c4f2ef0c0bd9280100ecba5b0fba8bd_2" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_1" [label="1: Start std::exception_ptr_operator_bool\nFormals: this:std::exception_ptr*\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:_Bool \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 136]\n " color=yellow style=filled]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_1" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_4" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_2" [label="2: Exit std::exception_ptr_operator_bool \n " color=yellow style=filled]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_3" [label="3: + \n " ]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_3" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_9" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_4" [label="4: BinaryOperatorStmt: NE \n n$1=*&this:std::exception_ptr const * [line 138]\n n$2=*n$1.__ptr_:void* [line 138]\n " shape="box"]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_4" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_5" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_4" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_6" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_5" [label="5: Prune (true branch) \n PRUNE(((n$2 != null) != 0), true); [line 138]\n " shape="invhouse"]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_5" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_7" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_6" [label="6: Prune (false branch) \n PRUNE(((n$2 != null) == 0), false); [line 138]\n " shape="invhouse"]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_6" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_8" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_Bool=1 [line 138]\n " shape="box"]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_7" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_3" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_Bool=0 [line 138]\n " shape="box"]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_8" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_3" ;
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_9" [label="9: Return Stmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$0:_Bool [line 138]\n *&return:_Bool=n$3 [line 138]\n " shape="box"]
"operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_9" -> "operator_bool#exception_ptr#std#(_ZNKSt13exception_ptrcvbEv).6fac2b4e27029bcd0295f179efc6cf0f_2" ;
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1EDn}.b23bb2147c8a8ba771e2f40d3542abc9_1" [label="1: Start std::exception_ptr_exception_ptr\nFormals: this:std::exception_ptr* __param_0:int\nLocals: \n DECLARE_LOCALS(&return); [line 131]\n " color=yellow style=filled]
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1EDn}.b23bb2147c8a8ba771e2f40d3542abc9_1" -> "exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1EDn}.b23bb2147c8a8ba771e2f40d3542abc9_3" ;
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1EDn}.b23bb2147c8a8ba771e2f40d3542abc9_2" [label="2: Exit std::exception_ptr_exception_ptr \n " color=yellow style=filled]
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1EDn}.b23bb2147c8a8ba771e2f40d3542abc9_3" [label="3: Constructor Init \n n$0=*&this:std::exception_ptr* [line 131]\n *n$0.__ptr_:void*=null [line 131]\n " shape="box"]
"exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1EDn}.b23bb2147c8a8ba771e2f40d3542abc9_3" -> "exception_ptr#exception_ptr#std#{_ZNSt13exception_ptrC1EDn}.b23bb2147c8a8ba771e2f40d3542abc9_2" ;
"nested_ptr#nested_exception#std#(_ZNKSt16nested_exception10nested_ptrEv).753e0357077fd8ac8ab8130b900014ef_1" [label="1: Start std::nested_exception_nested_ptr\nFormals: this:std::nested_exception* __return_param:std::exception_ptr*\nLocals: \n DECLARE_LOCALS(&return); [line 180]\n " color=yellow style=filled]
"nested_ptr#nested_exception#std#(_ZNKSt16nested_exception10nested_ptrEv).753e0357077fd8ac8ab8130b900014ef_1" -> "nested_ptr#nested_exception#std#(_ZNKSt16nested_exception10nested_ptrEv).753e0357077fd8ac8ab8130b900014ef_3" ;
"nested_ptr#nested_exception#std#(_ZNKSt16nested_exception10nested_ptrEv).753e0357077fd8ac8ab8130b900014ef_2" [label="2: Exit std::nested_exception_nested_ptr \n " color=yellow style=filled]
"nested_ptr#nested_exception#std#(_ZNKSt16nested_exception10nested_ptrEv).753e0357077fd8ac8ab8130b900014ef_3" [label="3: Return Stmt \n n$0=*&__return_param:std::exception_ptr* [line 180]\n n$1=*&this:std::nested_exception const * [line 180]\n _fun_std::exception_ptr_exception_ptr(n$0:std::exception_ptr*,n$1.__ptr_:std::exception_ptr&) [line 180]\n " shape="box"]
"nested_ptr#nested_exception#std#(_ZNKSt16nested_exception10nested_ptrEv).753e0357077fd8ac8ab8130b900014ef_3" -> "nested_ptr#nested_exception#std#(_ZNKSt16nested_exception10nested_ptrEv).753e0357077fd8ac8ab8130b900014ef_2" ;
"name#type_info#std#(_ZNKSt9type_info4nameEv).8c41a474dda80a419c854969d1ab23e8_1" [label="1: Start std::type_info_name\nFormals: this:std::type_info*\nLocals: \n " color=yellow style=filled]
"name#type_info#std#(_ZNKSt9type_info4nameEv).8c41a474dda80a419c854969d1ab23e8_2" [label="2: Exit std::type_info_name \n " color=yellow style=filled]
"hash_code#type_info#std#(_ZNKSt9type_info9hash_codeEv).01675cb218ac7b3cd979914210b13e49_1" [label="1: Start std::type_info_hash_code\nFormals: this:std::type_info*\nLocals: \n DECLARE_LOCALS(&return); [line 113]\n " color=yellow style=filled]
"hash_code#type_info#std#(_ZNKSt9type_info9hash_codeEv).01675cb218ac7b3cd979914210b13e49_1" -> "hash_code#type_info#std#(_ZNKSt9type_info9hash_codeEv).01675cb218ac7b3cd979914210b13e49_3" ;
"hash_code#type_info#std#(_ZNKSt9type_info9hash_codeEv).01675cb218ac7b3cd979914210b13e49_2" [label="2: Exit std::type_info_hash_code \n " color=yellow style=filled]
"hash_code#type_info#std#(_ZNKSt9type_info9hash_codeEv).01675cb218ac7b3cd979914210b13e49_3" [label="3: Return Stmt \n n$0=*&this:std::type_info const * [line 116]\n n$1=*n$0.__type_name:unsigned long [line 116]\n *&return:unsigned long=n$1 [line 116]\n " shape="box"]
"hash_code#type_info#std#(_ZNKSt9type_info9hash_codeEv).01675cb218ac7b3cd979914210b13e49_3" -> "hash_code#type_info#std#(_ZNKSt9type_info9hash_codeEv).01675cb218ac7b3cd979914210b13e49_2" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_1" [label="1: Start std::type_info_before\nFormals: this:std::type_info* __arg:std::type_info const &\nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:_Bool \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$0); [line 103]\n " color=yellow style=filled]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_1" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_4" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_2" [label="2: Exit std::type_info_before \n " color=yellow style=filled]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_3" [label="3: + \n " ]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_3" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_9" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_4" [label="4: BinaryOperatorStmt: LT \n n$1=*&this:std::type_info const * [line 106]\n n$2=*n$1.__type_name:char const * [line 106]\n n$3=*&__arg:std::type_info const & [line 106]\n n$4=*n$3.__type_name:char const * [line 106]\n " shape="box"]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_4" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_5" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_4" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_6" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_5" [label="5: Prune (true branch) \n PRUNE(((n$2 < n$4) != 0), true); [line 106]\n " shape="invhouse"]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_5" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_7" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_6" [label="6: Prune (false branch) \n PRUNE(((n$2 < n$4) == 0), false); [line 106]\n " shape="invhouse"]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_6" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_8" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_7" [label="7: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_Bool=1 [line 106]\n " shape="box"]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_7" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_3" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_8" [label="8: ConditinalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:_Bool=0 [line 106]\n " shape="box"]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_8" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_3" ;
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_9" [label="9: Return Stmt \n n$5=*&0$?%__sil_tmpSIL_temp_conditional___n$0:_Bool [line 106]\n *&return:_Bool=n$5 [line 106]\n " shape="box"]
"before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_9" -> "before#type_info#std#(_ZNKSt9type_info6beforeERKS_).d0ee91d1b591c9ae21397c3dface7eb7_2" ;
"operator==#type_info#std#(_ZNKSt9type_infoeqERKS_).bba3803f824984bb290007319588edac_1" [label="1: Start std::type_info_operator==\nFormals: this:std::type_info* __arg:std::type_info const &\nLocals: \n " color=yellow style=filled]
"operator==#type_info#std#(_ZNKSt9type_infoeqERKS_).bba3803f824984bb290007319588edac_2" [label="2: Exit std::type_info_operator== \n " color=yellow style=filled]
"operator!=#type_info#std#(_ZNKSt9type_infoneERKS_).b69fd72b9eb174c6136ece21a7473e28_1" [label="1: Start std::type_info_operator!=\nFormals: this:std::type_info* __arg:std::type_info const &\nLocals: \n " color=yellow style=filled]
"operator!=#type_info#std#(_ZNKSt9type_infoneERKS_).b69fd72b9eb174c6136ece21a7473e28_2" [label="2: Exit std::type_info_operator!= \n " color=yellow style=filled]
"type_info#type_info#std#{_ZNSt9type_infoC1EPKc}.95293c2b692be68318d378f77a5be8af_1" [label="1: Start std::type_info_type_info\nFormals: this:std::type_info* __n:char const *\nLocals: \n " color=yellow style=filled]
"type_info#type_info#std#{_ZNSt9type_infoC1EPKc}.95293c2b692be68318d378f77a5be8af_2" [label="2: Exit std::type_info_type_info \n " color=yellow style=filled]
}
Loading…
Cancel
Save