From 006bd06adba428ce91364af27d4a43ea514b1aa6 Mon Sep 17 00:00:00 2001 From: Sam Blackshear Date: Thu, 7 Jul 2016 07:50:34 -0700 Subject: [PATCH] add concept of a dummy identifier Reviewed By: jberdine Differential Revision: D3470952 fbshipit-source-id: d40ef14 --- infer/src/IR/Ident.re | 40 +++++++------ infer/src/IR/Ident.rei | 13 +++-- infer/src/clang/cTrans.ml | 3 +- infer/src/java/jTrans.ml | 4 +- .../cpp/errors/npe/method_call.cpp.dot | 6 +- .../constructor_with_body.cpp.dot | 10 ++-- .../constructors/std_init_list.cpp.dot | 4 +- .../frontend/constructors/temp_object.cpp.dot | 2 +- .../destructors/call_destructor.cpp.dot | 2 +- .../include_header/include_templ.cpp.dot | 4 +- .../frontend/keywords/self_parameter.cpp.dot | 2 +- .../cpp/frontend/loops/foreach1.cpp.dot | 4 +- .../methods/conversion_operator.cpp.dot | 24 ++++---- .../methods/default_parameters.cpp.dot | 6 +- .../frontend/methods/dereference_this.cpp.dot | 4 +- .../frontend/methods/inline_method.cpp.dot | 4 +- .../cpp/frontend/methods/overloading.cpp.dot | 4 +- .../frontend/methods/return_struct.cpp.dot | 2 +- .../frontend/methods/virtual_methods.cpp.dot | 14 ++--- .../cpp/frontend/namespace/namespace.cpp.dot | 4 +- .../frontend/reference/member_access.cpp.dot | 4 +- .../member_access_from_return.cpp.dot | 4 +- .../reference/reference_field.cpp.dot | 12 ++-- .../reference/reference_struct_e2e.cpp.dot | 56 +++++++++---------- .../class_template_instantiate.cpp.dot | 14 ++--- .../cpp/frontend/templates/function.cpp.dot | 4 +- .../cpp/frontend/templates/method.cpp.dot | 24 ++++---- .../cpp/frontend/types/inheritance.cpp.dot | 12 ++-- .../frontend/types/operator_overload.cpp.dot | 2 +- .../types/struct_forward_declare.cpp.dot | 10 ++-- .../cpp/frontend/types/typeid_expr.cpp.dot | 10 ++-- 31 files changed, 161 insertions(+), 147 deletions(-) diff --git a/infer/src/IR/Ident.re b/infer/src/IR/Ident.re index ac5e51946..b0c66611c 100644 --- a/infer/src/IR/Ident.re +++ b/infer/src/IR/Ident.re @@ -31,6 +31,14 @@ let knormal = 0; let kfootprint = 1; + +/** special kind of "null ident" (basically, a more compact way of implementing an ident option). + useful for situations when an instruction requires an id, but no one should read the result. */ +let knone = 2; + +/* timestamp for a path identifier */ +let path_ident_stamp = (-3); + type t = {kind: int, name: name, stamp: int}; type _ident = t; @@ -147,6 +155,7 @@ let name_to_string (name: name) => name; /** Convert a fieldname to a string. */ let fieldname_to_string fn => Mangled.to_string fn.fname; + /** Convert a fieldname to a string, including the mangled part. */ let fieldname_to_complete_string fn => Mangled.to_string_full fn.fname; @@ -283,7 +292,7 @@ let name_return = Mangled.from_string "return"; /** Return the standard name for the given kind */ let standard_name kind => - if (kind === knormal) { + if (kind === knormal || kind === knone) { name_normal } else if (kind === kfootprint) { name_footprint @@ -307,6 +316,12 @@ let create kind stamp => create_with_stamp kind (standard_name kind) stamp; let create_normal name stamp => create_with_stamp knormal name stamp; +/** Create a fresh identifier with default name for the given kind. */ +let create_fresh kind => NameGenerator.create_fresh_ident kind (standard_name kind); + +let create_none () => create_fresh knone; + + /** Generate a primed identifier with the given name and stamp */ let create_primed name stamp => create_with_stamp kprimed name stamp; @@ -319,22 +334,21 @@ let create_footprint name stamp => create_with_stamp kfootprint name stamp; /** Get a name of an identifier */ let get_name id => id.name; -let get_kind id => id.kind; - let is_primed (id: t) => id.kind === kprimed; -let is_normal (id: t) => id.kind === knormal; +let is_normal (id: t) => id.kind === knormal || id.kind === knone; let is_footprint (id: t) => id.kind === kfootprint; -/* timestamp for a path identifier */ -let path_ident_stamp = (-3); +let is_none (id: t) => id.kind == knone; let is_path (id: t) => id.kind === knormal && id.stamp == path_ident_stamp; let make_unprimed id => if (id.kind != kprimed) { assert false + } else if (id.kind === knone) { + {...id, kind: knone} } else { {...id, kind: knormal} }; @@ -347,10 +361,6 @@ let update_name_generator ids => { }; -/** Create a fresh identifier with default name for the given kind. */ -let create_fresh kind => NameGenerator.create_fresh_ident kind (standard_name kind); - - /** Generate a normal identifier whose name encodes a path given as a string. */ let create_path pathstring => create_normal (string_to_name ("%path%" ^ pathstring)) path_ident_stamp; @@ -365,6 +375,10 @@ let to_string id => { "@" } else if (id.kind === knormal) { "" + } else if ( + id.kind === knone + ) { + "NONE" } else { "_" }; @@ -412,9 +426,3 @@ let pp_list pe => pp_comma_seq (pp pe); /** pretty printer for lists of names */ let pp_name_list = pp_comma_seq pp_name; - -/* - let make_ident_primed id = - if id.kind == kprimed then assert false - else { id with kind = kprimed } - */ diff --git a/infer/src/IR/Ident.rei b/infer/src/IR/Ident.rei index f40ccf795..10a281244 100644 --- a/infer/src/IR/Ident.rei +++ b/infer/src/IR/Ident.rei @@ -105,6 +105,7 @@ let name_to_string: name => string; /** Convert a field name to a string. */ let fieldname_to_string: fieldname => string; + /** Convert a fieldname to a string, including the mangled part. */ let fieldname_to_complete_string: fieldname => string; @@ -145,10 +146,6 @@ let fieldname_is_hidden: fieldname => bool; let get_name: t => name; -/** Kind of the identifier. */ -let get_kind: t => kind; - - /** Create an identifier with default name for the given kind */ let create: kind => int => t; @@ -157,6 +154,10 @@ let create: kind => int => t; let create_normal: name => int => t; +/** Create a "null" identifier for situations where the IR requires an id that will never be read */ +let create_none: unit => t; + + /** Generate a primed identifier with the given name and stamp. */ let create_primed: name => int => t; @@ -193,6 +194,10 @@ let is_footprint: t => bool; let is_path: t => bool; +/** Check whether an identifier is the special "none" identifier */ +let is_none: t => bool; + + /** Convert a primed ident into a nonprimed one, keeping the stamp. */ let make_unprimed: t => t; diff --git a/infer/src/clang/cTrans.ml b/infer/src/clang/cTrans.ml index 1aeba149c..32a9e1f34 100644 --- a/infer/src/clang/cTrans.ml +++ b/infer/src/clang/cTrans.ml @@ -575,7 +575,8 @@ struct (* calling a method with null *) | [(exp, Typ.Tptr (typ, _) )] when decl_kind <> `CXXConstructor -> let typ = CTypes.expand_structured_type context.tenv typ in - let extra_instrs, _ = CTrans_utils.dereference_var_sil (exp, typ) sil_loc in + let no_id = Ident.create_none () in + let extra_instrs = [Sil.Letderef (no_id, exp, typ, sil_loc)] in pre_trans_result.exps, extra_instrs | [(_, Typ.Tptr _ )] -> pre_trans_result.exps, [] | [(sil, typ)] -> [(sil, Typ.Tptr (typ, Typ.Pk_reference))], [] diff --git a/infer/src/java/jTrans.ml b/infer/src/java/jTrans.ml index ffa42d1dd..ba789aa88 100644 --- a/infer/src/java/jTrans.ml +++ b/infer/src/java/jTrans.ml @@ -404,8 +404,8 @@ let builtin_get_array_length = Sil.Const (Sil.Cfun ModelBuiltins.__get_array_length) let create_sil_deref exp typ loc = - let fresh_id = Ident.create_fresh Ident.knormal in - Sil.Letderef (fresh_id, exp, typ, loc) + let no_id = Ident.create_none () in + Sil.Letderef (no_id, exp, typ, loc) (** translate an expression used as an r-value *) let rec expression context pc expr = diff --git a/infer/tests/codetoanalyze/cpp/errors/npe/method_call.cpp.dot b/infer/tests/codetoanalyze/cpp/errors/npe/method_call.cpp.dot index 0348bba08..912121715 100644 --- a/infer/tests/codetoanalyze/cpp/errors/npe/method_call.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/errors/npe/method_call.cpp.dot @@ -11,7 +11,7 @@ digraph iCFG { 20 -> 22 ; -19 [label="19: Call _fun_XForward_call \n n$0=*&x:class XForward * [line 35]\n n$1=*n$0:class XForward [line 35]\n n$2=_fun_XForward_call(n$0:class XForward *) [line 35]\n " shape="box"] +19 [label="19: Call _fun_XForward_call \n n$0=*&x:class XForward * [line 35]\n NONEn$1=*n$0:class XForward [line 35]\n n$2=_fun_XForward_call(n$0:class XForward *) [line 35]\n " shape="box"] 19 -> 18 ; @@ -33,7 +33,7 @@ digraph iCFG { 14 -> 16 ; -13 [label="13: Call _fun_X_call \n n$0=_fun_getX() [line 22]\n n$1=*n$0:class X [line 22]\n n$2=_fun_X_call(n$0:class X *) [line 22]\n " shape="box"] +13 [label="13: Call _fun_X_call \n n$0=_fun_getX() [line 22]\n NONEn$1=*n$0:class X [line 22]\n n$2=_fun_X_call(n$0:class X *) [line 22]\n " shape="box"] 13 -> 12 ; @@ -59,7 +59,7 @@ digraph iCFG { 7 -> 6 ; -6 [label="6: Return Stmt \n n$0=*&x:class X * [line 17]\n n$1=*n$0:class X [line 17]\n n$2=_fun_X_call(n$0:class X *) [line 17]\n *&return:int =n$2 [line 17]\n " shape="box"] +6 [label="6: Return Stmt \n n$0=*&x:class X * [line 17]\n NONEn$1=*n$0:class X [line 17]\n n$2=_fun_X_call(n$0:class X *) [line 17]\n *&return:int =n$2 [line 17]\n " shape="box"] 6 -> 5 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/constructors/constructor_with_body.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/constructors/constructor_with_body.cpp.dot index 1baf2ea6c..a1035e3bc 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/constructors/constructor_with_body.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/constructors/constructor_with_body.cpp.dot @@ -4,7 +4,7 @@ digraph iCFG { 26 -> 25 ; -25 [label="25: Call _fun_X_div \n n$0=*&x:class X [line 40]\n n$1=_fun_X_div(&x:class X &) [line 40]\n " shape="box"] +25 [label="25: Call _fun_X_div \n NONEn$0=*&x:class X [line 40]\n n$1=_fun_X_div(&x:class X &) [line 40]\n " shape="box"] 25 -> 24 ; @@ -19,7 +19,7 @@ digraph iCFG { 22 -> 21 ; -21 [label="21: Call _fun_X_div \n n$0=*&x:class X [line 35]\n n$1=_fun_X_div(&x:class X &) [line 35]\n " shape="box"] +21 [label="21: Call _fun_X_div \n NONEn$0=*&x:class X [line 35]\n n$1=_fun_X_div(&x:class X &) [line 35]\n " shape="box"] 21 -> 20 ; @@ -34,7 +34,7 @@ digraph iCFG { 18 -> 17 ; -17 [label="17: Call _fun_X_div \n n$0=*&x:class X [line 30]\n n$1=_fun_X_div(&x:class X &) [line 30]\n " shape="box"] +17 [label="17: Call _fun_X_div \n NONEn$0=*&x:class X [line 30]\n n$1=_fun_X_div(&x:class X &) [line 30]\n " shape="box"] 17 -> 16 ; @@ -49,7 +49,7 @@ digraph iCFG { 14 -> 13 ; -13 [label="13: Call _fun_X_init \n n$2=*&this:class X * [line 24]\n n$3=*n$2:class X [line 24]\n _fun_X_init(n$2:class X *) [line 24]\n " shape="box"] +13 [label="13: Call _fun_X_init \n n$2=*&this:class X * [line 24]\n NONEn$3=*n$2:class X [line 24]\n _fun_X_init(n$2:class X *) [line 24]\n " shape="box"] 13 -> 12 ; @@ -75,7 +75,7 @@ digraph iCFG { 7 -> 9 ; -6 [label="6: Call _fun_X_init \n n$0=*&this:class X * [line 15]\n n$1=*n$0:class X [line 15]\n _fun_X_init(n$0:class X *) [line 15]\n " shape="box"] +6 [label="6: Call _fun_X_init \n n$0=*&this:class X * [line 15]\n NONEn$1=*n$0:class X [line 15]\n _fun_X_init(n$0:class X *) [line 15]\n " shape="box"] 6 -> 5 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/constructors/std_init_list.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/constructors/std_init_list.cpp.dot index e92b16261..c3c9cd405 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/constructors/std_init_list.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/constructors/std_init_list.cpp.dot @@ -19,7 +19,7 @@ digraph iCFG { 7 -> 5 ; -6 [label="6: BinaryOperatorStmt: NE \n n$4=*&i:int * [line 15]\n n$5=*&list:class std::initializer_list & [line 15]\n n$6=*n$5:class std::initializer_list [line 15]\n n$7=_fun_std::initializer_list_end(n$5:class std::initializer_list &) [line 15]\n " shape="box"] +6 [label="6: BinaryOperatorStmt: NE \n n$4=*&i:int * [line 15]\n n$5=*&list:class std::initializer_list & [line 15]\n NONEn$6=*n$5:class std::initializer_list [line 15]\n n$7=_fun_std::initializer_list_end(n$5:class std::initializer_list &) [line 15]\n " shape="box"] 6 -> 7 ; @@ -28,7 +28,7 @@ digraph iCFG { 5 -> 3 ; -4 [label="4: DeclStmt \n n$0=*&list:class std::initializer_list & [line 15]\n n$1=*n$0:class std::initializer_list [line 15]\n n$2=_fun_std::initializer_list_begin(n$0:class std::initializer_list &) [line 15]\n *&i:int *=n$2 [line 15]\n " shape="box"] +4 [label="4: DeclStmt \n n$0=*&list:class std::initializer_list & [line 15]\n NONEn$1=*n$0:class std::initializer_list [line 15]\n n$2=_fun_std::initializer_list_begin(n$0:class std::initializer_list &) [line 15]\n *&i:int *=n$2 [line 15]\n " shape="box"] 4 -> 3 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/constructors/temp_object.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/constructors/temp_object.cpp.dot index f001bc22f..a6e6767c3 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/constructors/temp_object.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/constructors/temp_object.cpp.dot @@ -81,7 +81,7 @@ digraph iCFG { 22 -> 21 ; -21 [label="21: Return Stmt \n n$0=*&x:class X [line 28]\n n$1=_fun_X_div(&x:class X &) [line 28]\n *&return:int =n$1 [line 28]\n " shape="box"] +21 [label="21: Return Stmt \n NONEn$0=*&x:class X [line 28]\n n$1=_fun_X_div(&x:class X &) [line 28]\n *&return:int =n$1 [line 28]\n " shape="box"] 21 -> 20 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/destructors/call_destructor.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/destructors/call_destructor.cpp.dot index d037c3372..d55073a44 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/destructors/call_destructor.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/destructors/call_destructor.cpp.dot @@ -1,6 +1,6 @@ /* @generated */ digraph iCFG { -3 [label="3: Call _fun_Person_~Person \n n$0=*&p:class Person * [line 15]\n n$1=*n$0:class Person [line 15]\n _fun_Person_~Person(n$0:class Person *) [line 15]\n " shape="box"] +3 [label="3: Call _fun_Person_~Person \n n$0=*&p:class Person * [line 15]\n NONEn$1=*n$0:class Person [line 15]\n _fun_Person_~Person(n$0:class Person *) [line 15]\n " shape="box"] 3 -> 2 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/include_header/include_templ.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/include_header/include_templ.cpp.dot index f625396bc..4871a2b31 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/include_header/include_templ.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/include_header/include_templ.cpp.dot @@ -26,7 +26,7 @@ digraph iCFG { 30 -> 29 ; -29 [label="29: Call _fun_B_div0 \n n$0=*&b:class B [line 20]\n n$1=_fun_B_div0(&b:class B &) [line 20]\n " shape="box"] +29 [label="29: Call _fun_B_div0 \n NONEn$0=*&b:class B [line 20]\n n$1=_fun_B_div0(&b:class B &) [line 20]\n " shape="box"] 29 -> 28 ; @@ -41,7 +41,7 @@ digraph iCFG { 26 -> 25 ; -25 [label="25: Call _fun_B_div0 \n n$0=*&b:class B [line 15]\n n$1=_fun_B_div0(&b:class B &) [line 15]\n " shape="box"] +25 [label="25: Call _fun_B_div0 \n NONEn$0=*&b:class B [line 15]\n n$1=_fun_B_div0(&b:class B &) [line 15]\n " shape="box"] 25 -> 24 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/keywords/self_parameter.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/keywords/self_parameter.cpp.dot index 3a0676450..513a4d686 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/keywords/self_parameter.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/keywords/self_parameter.cpp.dot @@ -1,6 +1,6 @@ /* @generated */ digraph iCFG { -9 [label="9: Return Stmt \n n$0=*&a:class A * [line 17]\n n$1=*n$0:class A [line 17]\n n$2=_fun_A_meth_with_self(n$0:class A *,1:int ,2:int ) [line 17]\n n$3=_fun_fun_with_self(10:int ) [line 17]\n *&return:int =(n$2 + n$3) [line 17]\n " shape="box"] +9 [label="9: Return Stmt \n n$0=*&a:class A * [line 17]\n NONEn$1=*n$0:class A [line 17]\n n$2=_fun_A_meth_with_self(n$0:class A *,1:int ,2:int ) [line 17]\n n$3=_fun_fun_with_self(10:int ) [line 17]\n *&return:int =(n$2 + n$3) [line 17]\n " shape="box"] 9 -> 8 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/loops/foreach1.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/loops/foreach1.cpp.dot index 689efa165..ab13347fe 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/loops/foreach1.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/loops/foreach1.cpp.dot @@ -33,11 +33,11 @@ digraph iCFG { 36 -> 33 ; -35 [label="35: DeclStmt \n n$5=*&__range:class vec & [line 37]\n n$6=*n$5:class vec [line 37]\n _fun_vec_begin(n$5:class vec &,&SIL_materialize_temp__n$4:class iterator *) [line 37]\n _fun_iterator_iterator(&__begin:class iterator *,&SIL_materialize_temp__n$4:class iterator &) [line 37]\n " shape="box"] +35 [label="35: DeclStmt \n n$5=*&__range:class vec & [line 37]\n NONEn$6=*n$5:class vec [line 37]\n _fun_vec_begin(n$5:class vec &,&SIL_materialize_temp__n$4:class iterator *) [line 37]\n _fun_iterator_iterator(&__begin:class iterator *,&SIL_materialize_temp__n$4:class iterator &) [line 37]\n " shape="box"] 35 -> 34 ; -34 [label="34: DeclStmt \n n$1=*&__range:class vec & [line 37]\n n$2=*n$1:class vec [line 37]\n _fun_vec_end(n$1:class vec &,&SIL_materialize_temp__n$0:class iterator *) [line 37]\n _fun_iterator_iterator(&__end:class iterator *,&SIL_materialize_temp__n$0:class iterator &) [line 37]\n " shape="box"] +34 [label="34: DeclStmt \n n$1=*&__range:class vec & [line 37]\n NONEn$2=*n$1:class vec [line 37]\n _fun_vec_end(n$1:class vec &,&SIL_materialize_temp__n$0:class iterator *) [line 37]\n _fun_iterator_iterator(&__end:class iterator *,&SIL_materialize_temp__n$0:class iterator &) [line 37]\n " shape="box"] 34 -> 33 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/methods/conversion_operator.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/methods/conversion_operator.cpp.dot index 4fab7764f..2a1869764 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/methods/conversion_operator.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/methods/conversion_operator.cpp.dot @@ -4,7 +4,7 @@ digraph iCFG { 61 -> 56 ; -60 [label="60: DeclStmt \n n$5=*&x:class X [line 64]\n n$6=_fun_X_operator int(&x:class X &) [line 64]\n *&v:int =n$6 [line 64]\n " shape="box"] +60 [label="60: DeclStmt \n NONEn$5=*&x:class X [line 64]\n n$6=_fun_X_operator int(&x:class X &) [line 64]\n *&v:int =n$6 [line 64]\n " shape="box"] 60 -> 59 ; @@ -20,7 +20,7 @@ digraph iCFG { 57 -> 60 ; -56 [label="56: Call _fun_X_operator bool \n n$2=*&x:class X [line 63]\n n$3=_fun_X_operator bool(&x:class X &) [line 63]\n " shape="box"] +56 [label="56: Call _fun_X_operator bool \n NONEn$2=*&x:class X [line 63]\n n$3=_fun_X_operator bool(&x:class X &) [line 63]\n " shape="box"] 56 -> 57 ; @@ -29,7 +29,7 @@ digraph iCFG { 55 -> 54 ; -54 [label="54: Return Stmt \n n$0=*&x:class X [line 67]\n n$1=_fun_X_operator int(&x:class X &) [line 67]\n *&return:int =n$1 [line 67]\n " shape="box"] +54 [label="54: Return Stmt \n NONEn$0=*&x:class X [line 67]\n n$1=_fun_X_operator int(&x:class X &) [line 67]\n *&return:int =n$1 [line 67]\n " shape="box"] 54 -> 53 ; @@ -44,7 +44,7 @@ digraph iCFG { 51 -> 46 ; -50 [label="50: DeclStmt \n n$5=*&x:class X [line 55]\n n$6=_fun_X_operator int(&x:class X &) [line 55]\n *&v:int =n$6 [line 55]\n " shape="box"] +50 [label="50: DeclStmt \n NONEn$5=*&x:class X [line 55]\n n$6=_fun_X_operator int(&x:class X &) [line 55]\n *&v:int =n$6 [line 55]\n " shape="box"] 50 -> 49 ; @@ -60,7 +60,7 @@ digraph iCFG { 47 -> 50 ; -46 [label="46: Call _fun_X_operator bool \n n$2=*&x:class X [line 54]\n n$3=_fun_X_operator bool(&x:class X &) [line 54]\n " shape="box"] +46 [label="46: Call _fun_X_operator bool \n NONEn$2=*&x:class X [line 54]\n n$3=_fun_X_operator bool(&x:class X &) [line 54]\n " shape="box"] 46 -> 47 ; @@ -69,7 +69,7 @@ digraph iCFG { 45 -> 44 ; -44 [label="44: Return Stmt \n n$0=*&x:class X [line 58]\n n$1=_fun_X_operator int(&x:class X &) [line 58]\n *&return:int =n$1 [line 58]\n " shape="box"] +44 [label="44: Return Stmt \n NONEn$0=*&x:class X [line 58]\n n$1=_fun_X_operator int(&x:class X &) [line 58]\n *&return:int =n$1 [line 58]\n " shape="box"] 44 -> 43 ; @@ -92,7 +92,7 @@ digraph iCFG { 39 -> 34 ; -38 [label="38: DeclStmt \n n$13=*&y:class Y [line 46]\n _fun_Y_operator X(&y:class Y &,&SIL_materialize_temp__n$12:class X *) [line 46]\n _fun_X_X(&__temp_construct_n$11:class X *,&SIL_materialize_temp__n$12:class X &) [line 46]\n n$15=_fun_X_operator int(&__temp_construct_n$11:class X &) [line 46]\n *&v:int =n$15 [line 46]\n " shape="box"] +38 [label="38: DeclStmt \n NONEn$13=*&y:class Y [line 46]\n _fun_Y_operator X(&y:class Y &,&SIL_materialize_temp__n$12:class X *) [line 46]\n _fun_X_X(&__temp_construct_n$11:class X *,&SIL_materialize_temp__n$12:class X &) [line 46]\n n$15=_fun_X_operator int(&__temp_construct_n$11:class X &) [line 46]\n *&v:int =n$15 [line 46]\n " shape="box"] 38 -> 37 ; @@ -108,7 +108,7 @@ digraph iCFG { 35 -> 38 ; -34 [label="34: Call _fun_X_operator bool \n n$7=*&y:class Y [line 45]\n _fun_Y_operator X(&y:class Y &,&SIL_materialize_temp__n$6:class X *) [line 45]\n _fun_X_X(&__temp_construct_n$5:class X *,&SIL_materialize_temp__n$6:class X &) [line 45]\n n$9=_fun_X_operator bool(&__temp_construct_n$5:class X &) [line 45]\n " shape="box"] +34 [label="34: Call _fun_X_operator bool \n NONEn$7=*&y:class Y [line 45]\n _fun_Y_operator X(&y:class Y &,&SIL_materialize_temp__n$6:class X *) [line 45]\n _fun_X_X(&__temp_construct_n$5:class X *,&SIL_materialize_temp__n$6:class X &) [line 45]\n n$9=_fun_X_operator bool(&__temp_construct_n$5:class X &) [line 45]\n " shape="box"] 34 -> 35 ; @@ -117,7 +117,7 @@ digraph iCFG { 33 -> 32 ; -32 [label="32: Return Stmt \n n$2=*&y:class Y [line 49]\n _fun_Y_operator X(&y:class Y &,&SIL_materialize_temp__n$1:class X *) [line 49]\n _fun_X_X(&__temp_construct_n$0:class X *,&SIL_materialize_temp__n$1:class X &) [line 49]\n n$4=_fun_X_operator int(&__temp_construct_n$0:class X &) [line 49]\n *&return:int =n$4 [line 49]\n " shape="box"] +32 [label="32: Return Stmt \n NONEn$2=*&y:class Y [line 49]\n _fun_Y_operator X(&y:class Y &,&SIL_materialize_temp__n$1:class X *) [line 49]\n _fun_X_X(&__temp_construct_n$0:class X *,&SIL_materialize_temp__n$1:class X &) [line 49]\n n$4=_fun_X_operator int(&__temp_construct_n$0:class X &) [line 49]\n *&return:int =n$4 [line 49]\n " shape="box"] 32 -> 31 ; @@ -132,7 +132,7 @@ digraph iCFG { 29 -> 24 ; -28 [label="28: DeclStmt \n n$5=*&x:class X [line 35]\n n$6=_fun_X_operator int(&x:class X &) [line 35]\n *&v:int =n$6 [line 35]\n " shape="box"] +28 [label="28: DeclStmt \n NONEn$5=*&x:class X [line 35]\n n$6=_fun_X_operator int(&x:class X &) [line 35]\n *&v:int =n$6 [line 35]\n " shape="box"] 28 -> 27 ; @@ -148,7 +148,7 @@ digraph iCFG { 25 -> 28 ; -24 [label="24: Call _fun_X_operator bool \n n$2=*&x:class X [line 34]\n n$3=_fun_X_operator bool(&x:class X &) [line 34]\n " shape="box"] +24 [label="24: Call _fun_X_operator bool \n NONEn$2=*&x:class X [line 34]\n n$3=_fun_X_operator bool(&x:class X &) [line 34]\n " shape="box"] 24 -> 25 ; @@ -157,7 +157,7 @@ digraph iCFG { 23 -> 22 ; -22 [label="22: Return Stmt \n n$0=*&x:class X [line 38]\n n$1=_fun_X_operator int(&x:class X &) [line 38]\n *&return:int =n$1 [line 38]\n " shape="box"] +22 [label="22: Return Stmt \n NONEn$0=*&x:class X [line 38]\n n$1=_fun_X_operator int(&x:class X &) [line 38]\n *&return:int =n$1 [line 38]\n " shape="box"] 22 -> 21 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/methods/default_parameters.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/methods/default_parameters.cpp.dot index 1926c6ac7..7a905ffe1 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/methods/default_parameters.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/methods/default_parameters.cpp.dot @@ -1,14 +1,14 @@ /* @generated */ digraph iCFG { -8 [label="8: Call _fun_A_fun_default \n n$6=*&a_ptr:class A * [line 18]\n n$7=*n$6:class A [line 18]\n n$8=_fun_A_fun_default(n$6:class A *,1:int ,2:int ,3:int ) [line 18]\n " shape="box"] +8 [label="8: Call _fun_A_fun_default \n n$6=*&a_ptr:class A * [line 18]\n NONEn$7=*n$6:class A [line 18]\n n$8=_fun_A_fun_default(n$6:class A *,1:int ,2:int ,3:int ) [line 18]\n " shape="box"] 8 -> 7 ; -7 [label="7: Call _fun_A_fun_default \n n$3=*&a_ptr:class A * [line 19]\n n$4=*n$3:class A [line 19]\n n$5=_fun_A_fun_default(n$3:class A *,1:int ,2:int ,20:int ) [line 19]\n " shape="box"] +7 [label="7: Call _fun_A_fun_default \n n$3=*&a_ptr:class A * [line 19]\n NONEn$4=*n$3:class A [line 19]\n n$5=_fun_A_fun_default(n$3:class A *,1:int ,2:int ,20:int ) [line 19]\n " shape="box"] 7 -> 6 ; -6 [label="6: Call _fun_A_fun_default \n n$0=*&a_ptr:class A * [line 20]\n n$1=*n$0:class A [line 20]\n n$2=_fun_A_fun_default(n$0:class A *,1:int ,10:int ,20:int ) [line 20]\n " shape="box"] +6 [label="6: Call _fun_A_fun_default \n n$0=*&a_ptr:class A * [line 20]\n NONEn$1=*n$0:class A [line 20]\n n$2=_fun_A_fun_default(n$0:class A *,1:int ,10:int ,20:int ) [line 20]\n " shape="box"] 6 -> 5 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/methods/dereference_this.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/methods/dereference_this.cpp.dot index 9fcb11658..ab25f3e29 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/methods/dereference_this.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/methods/dereference_this.cpp.dot @@ -1,6 +1,6 @@ /* @generated */ digraph iCFG { -10 [label="10: Call _fun_A_method \n n$0=*&a_ptr:class A * [line 25]\n n$1=*n$0:class A [line 25]\n n$2=_fun_A_method(n$0:class A *) [line 25]\n " shape="box"] +10 [label="10: Call _fun_A_method \n n$0=*&a_ptr:class A * [line 25]\n NONEn$1=*n$0:class A [line 25]\n n$2=_fun_A_method(n$0:class A *) [line 25]\n " shape="box"] 10 -> 9 ; @@ -11,7 +11,7 @@ digraph iCFG { 8 -> 10 ; -7 [label="7: Call _fun_A_init \n n$2=*&this:class A * [line 19]\n n$3=*n$2:class A [line 19]\n _fun_A_init(n$2:class A *,10:int ) [line 19]\n " shape="box"] +7 [label="7: Call _fun_A_init \n n$2=*&this:class A * [line 19]\n NONEn$3=*n$2:class A [line 19]\n _fun_A_init(n$2:class A *,10:int ) [line 19]\n " shape="box"] 7 -> 6 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/methods/inline_method.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/methods/inline_method.cpp.dot index 7f0fd2349..5b7de50ad 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/methods/inline_method.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/methods/inline_method.cpp.dot @@ -1,10 +1,10 @@ /* @generated */ digraph iCFG { -11 [label="11: Call _fun_A_fun \n n$4=*&a_ptr:class A * [line 24]\n n$5=*n$4:class A [line 24]\n n$6=_fun_A_fun(n$4:class A *) [line 24]\n " shape="box"] +11 [label="11: Call _fun_A_fun \n n$4=*&a_ptr:class A * [line 24]\n NONEn$5=*n$4:class A [line 24]\n n$6=_fun_A_fun(n$4:class A *) [line 24]\n " shape="box"] 11 -> 10 ; -10 [label="10: Call _fun_A::AIn_fun \n n$0=*&a_ptr:class A * [line 25]\n n$1=*n$0.in:class A::AIn * [line 25]\n n$2=*n$1:class A::AIn [line 25]\n n$3=_fun_A::AIn_fun(n$1:class A::AIn *) [line 25]\n " shape="box"] +10 [label="10: Call _fun_A::AIn_fun \n n$0=*&a_ptr:class A * [line 25]\n n$1=*n$0.in:class A::AIn * [line 25]\n NONEn$2=*n$1:class A::AIn [line 25]\n n$3=_fun_A::AIn_fun(n$1:class A::AIn *) [line 25]\n " shape="box"] 10 -> 9 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/methods/overloading.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/methods/overloading.cpp.dot index ce6d606cd..62aaa61a3 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/methods/overloading.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/methods/overloading.cpp.dot @@ -1,10 +1,10 @@ /* @generated */ digraph iCFG { -10 [label="10: Call _fun_A_fun \n n$3=*&a_ptr:class A * [line 22]\n n$4=*n$3:class A [line 22]\n n$5=_fun_A_fun(n$3:class A *,1:int ,2:int ) [line 22]\n " shape="box"] +10 [label="10: Call _fun_A_fun \n n$3=*&a_ptr:class A * [line 22]\n NONEn$4=*n$3:class A [line 22]\n n$5=_fun_A_fun(n$3:class A *,1:int ,2:int ) [line 22]\n " shape="box"] 10 -> 9 ; -9 [label="9: Call _fun_A_fun \n n$0=*&a_ptr:class A * [line 23]\n n$1=*n$0:class A [line 23]\n n$2=_fun_A_fun(n$0:class A *,1:int ,2:int ,3:int ) [line 23]\n " shape="box"] +9 [label="9: Call _fun_A_fun \n n$0=*&a_ptr:class A * [line 23]\n NONEn$1=*n$0:class A [line 23]\n n$2=_fun_A_fun(n$0:class A *,1:int ,2:int ,3:int ) [line 23]\n " shape="box"] 9 -> 8 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/methods/return_struct.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/methods/return_struct.cpp.dot index 84c8bd80b..4e8a124a9 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/methods/return_struct.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/methods/return_struct.cpp.dot @@ -1,6 +1,6 @@ /* @generated */ digraph iCFG { -13 [label="13: DeclStmt \n n$2=*&a:class A * [line 22]\n n$3=*n$2:class A [line 22]\n _fun_A_get(n$2:class A *,1:int ,&SIL_materialize_temp__n$1:class X *) [line 22]\n _fun_X_X(&x:class X *,&SIL_materialize_temp__n$1:class X &) [line 22]\n " shape="box"] +13 [label="13: DeclStmt \n n$2=*&a:class A * [line 22]\n NONEn$3=*n$2:class A [line 22]\n _fun_A_get(n$2:class A *,1:int ,&SIL_materialize_temp__n$1:class X *) [line 22]\n _fun_X_X(&x:class X *,&SIL_materialize_temp__n$1:class X &) [line 22]\n " shape="box"] 13 -> 12 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/methods/virtual_methods.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/methods/virtual_methods.cpp.dot index f909fa677..19c63d882 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/methods/virtual_methods.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/methods/virtual_methods.cpp.dot @@ -27,11 +27,11 @@ digraph iCFG { 47 -> 46 ; -46 [label="46: Call _fun_Polygon_set_values \n n$3=*&ppoly2:class Polygon * [line 63]\n n$4=*n$3:class Polygon [line 63]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 63]\n " shape="box"] +46 [label="46: Call _fun_Polygon_set_values \n n$3=*&ppoly2:class Polygon * [line 63]\n NONEn$4=*n$3:class Polygon [line 63]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 63]\n " shape="box"] 46 -> 45 ; -45 [label="45: Return Stmt \n n$0=*&ppoly2:class Polygon * [line 64]\n n$1=*n$0:class Polygon [line 64]\n n$2=_fun_Polygon_area(n$0:class Polygon *) [line 64]\n *&return:int =(1 / n$2) [line 64]\n " shape="box"] +45 [label="45: Return Stmt \n n$0=*&ppoly2:class Polygon * [line 64]\n NONEn$1=*n$0:class Polygon [line 64]\n n$2=_fun_Polygon_area(n$0:class Polygon *) [line 64]\n *&return:int =(1 / n$2) [line 64]\n " shape="box"] 45 -> 44 ; @@ -50,7 +50,7 @@ digraph iCFG { 41 -> 40 ; -40 [label="40: Return Stmt \n n$0=*&ppoly3:class Polygon * [line 56]\n n$1=*n$0:class Polygon [line 56]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 56]\n *&return:int =(1 / n$2) [line 56]\n " shape="box"] +40 [label="40: Return Stmt \n n$0=*&ppoly3:class Polygon * [line 56]\n NONEn$1=*n$0:class Polygon [line 56]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 56]\n *&return:int =(1 / n$2) [line 56]\n " shape="box"] 40 -> 39 ; @@ -73,11 +73,11 @@ digraph iCFG { 35 -> 34 ; -34 [label="34: Call _fun_Polygon_set_values \n n$3=*&ppoly2:class Polygon * [line 49]\n n$4=*n$3:class Polygon [line 49]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 49]\n " shape="box"] +34 [label="34: Call _fun_Polygon_set_values \n n$3=*&ppoly2:class Polygon * [line 49]\n NONEn$4=*n$3:class Polygon [line 49]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 49]\n " shape="box"] 34 -> 33 ; -33 [label="33: Return Stmt \n n$0=*&ppoly2:class Polygon * [line 50]\n n$1=*n$0:class Polygon [line 50]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 50]\n *&return:int =(1 / (n$2 - 10)) [line 50]\n " shape="box"] +33 [label="33: Return Stmt \n n$0=*&ppoly2:class Polygon * [line 50]\n NONEn$1=*n$0:class Polygon [line 50]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 50]\n *&return:int =(1 / (n$2 - 10)) [line 50]\n " shape="box"] 33 -> 32 ; @@ -96,11 +96,11 @@ digraph iCFG { 29 -> 28 ; -28 [label="28: Call _fun_Polygon_set_values \n n$3=*&ppoly1:class Polygon * [line 41]\n n$4=*n$3:class Polygon [line 41]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 41]\n " shape="box"] +28 [label="28: Call _fun_Polygon_set_values \n n$3=*&ppoly1:class Polygon * [line 41]\n NONEn$4=*n$3:class Polygon [line 41]\n _fun_Polygon_set_values(n$3:class Polygon *,4:int ,5:int ) [line 41]\n " shape="box"] 28 -> 27 ; -27 [label="27: Return Stmt \n n$0=*&ppoly1:class Polygon * [line 42]\n n$1=*n$0:class Polygon [line 42]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 42]\n *&return:int =(1 / (n$2 - 20)) [line 42]\n " shape="box"] +27 [label="27: Return Stmt \n n$0=*&ppoly1:class Polygon * [line 42]\n NONEn$1=*n$0:class Polygon [line 42]\n n$2=_fun_Polygon_area(n$0:class Polygon *) virtual [line 42]\n *&return:int =(1 / (n$2 - 20)) [line 42]\n " shape="box"] 27 -> 26 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/namespace/namespace.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/namespace/namespace.cpp.dot index 49842eb36..1a806890e 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/namespace/namespace.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/namespace/namespace.cpp.dot @@ -8,7 +8,7 @@ digraph iCFG { 23 -> 22 ; -22 [label="22: Call _fun_bar::Rectangle_set_values \n n$4=*&rect1:class bar::Rectangle [line 49]\n _fun_bar::Rectangle_set_values(&rect1:class bar::Rectangle &,3:int ,4:int ) [line 49]\n " shape="box"] +22 [label="22: Call _fun_bar::Rectangle_set_values \n NONEn$4=*&rect1:class bar::Rectangle [line 49]\n _fun_bar::Rectangle_set_values(&rect1:class bar::Rectangle &,3:int ,4:int ) [line 49]\n " shape="box"] 22 -> 21 ; @@ -16,7 +16,7 @@ digraph iCFG { 21 -> 20 ; -20 [label="20: Call _fun_foo::Rectangle_set_values \n n$3=*&rect2:class foo::Rectangle [line 52]\n _fun_foo::Rectangle_set_values(&rect2:class foo::Rectangle &,7:int ,10:int ) [line 52]\n " shape="box"] +20 [label="20: Call _fun_foo::Rectangle_set_values \n NONEn$3=*&rect2:class foo::Rectangle [line 52]\n _fun_foo::Rectangle_set_values(&rect2:class foo::Rectangle &,7:int ,10:int ) [line 52]\n " shape="box"] 20 -> 19 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/reference/member_access.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/reference/member_access.cpp.dot index 0a3e6666f..3acfebf7a 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/reference/member_access.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/reference/member_access.cpp.dot @@ -4,7 +4,7 @@ digraph iCFG { 11 -> 10 ; -10 [label="10: DeclStmt \n n$0=*&x:class X * [line 22]\n n$1=*n$0:class X [line 22]\n n$2=_fun_X_call(n$0:class X *) [line 22]\n *&c:int =n$2 [line 22]\n " shape="box"] +10 [label="10: DeclStmt \n n$0=*&x:class X * [line 22]\n NONEn$1=*n$0:class X [line 22]\n n$2=_fun_X_call(n$0:class X *) [line 22]\n *&c:int =n$2 [line 22]\n " shape="box"] 10 -> 9 ; @@ -19,7 +19,7 @@ digraph iCFG { 7 -> 6 ; -6 [label="6: DeclStmt \n n$0=*&x:class X & [line 17]\n n$1=*n$0:class X [line 17]\n n$2=_fun_X_call(n$0:class X &) [line 17]\n *&c:int =n$2 [line 17]\n " shape="box"] +6 [label="6: DeclStmt \n n$0=*&x:class X & [line 17]\n NONEn$1=*n$0:class X [line 17]\n n$2=_fun_X_call(n$0:class X &) [line 17]\n *&c:int =n$2 [line 17]\n " shape="box"] 6 -> 5 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/reference/member_access_from_return.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/reference/member_access_from_return.cpp.dot index b2fe71ae7..521de39f5 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/reference/member_access_from_return.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/reference/member_access_from_return.cpp.dot @@ -4,7 +4,7 @@ digraph iCFG { 19 -> 18 ; -18 [label="18: DeclStmt \n n$0=_fun_get_ptr() [line 26]\n n$1=*n$0:class X [line 26]\n n$2=_fun_X_call(n$0:class X *) [line 26]\n *&c:int =n$2 [line 26]\n " shape="box"] +18 [label="18: DeclStmt \n n$0=_fun_get_ptr() [line 26]\n NONEn$1=*n$0:class X [line 26]\n n$2=_fun_X_call(n$0:class X *) [line 26]\n *&c:int =n$2 [line 26]\n " shape="box"] 18 -> 17 ; @@ -19,7 +19,7 @@ digraph iCFG { 15 -> 14 ; -14 [label="14: DeclStmt \n n$0=_fun_get_ref() [line 21]\n n$1=*n$0:class X [line 21]\n n$2=_fun_X_call(n$0:class X &) [line 21]\n *&c:int =n$2 [line 21]\n " shape="box"] +14 [label="14: DeclStmt \n n$0=_fun_get_ref() [line 21]\n NONEn$1=*n$0:class X [line 21]\n n$2=_fun_X_call(n$0:class X &) [line 21]\n *&c:int =n$2 [line 21]\n " shape="box"] 14 -> 13 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/reference/reference_field.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/reference/reference_field.cpp.dot index 45b0bf564..312c3a7ec 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/reference/reference_field.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/reference/reference_field.cpp.dot @@ -16,7 +16,7 @@ digraph iCFG { 116 -> 115 ; -115 [label="115: Return Stmt \n n$0=*&r:class Val [line 141]\n n$1=_fun_Val_getI(&r:class Val &) [line 141]\n *&return:int =(1 / n$1) [line 141]\n " shape="box"] +115 [label="115: Return Stmt \n NONEn$0=*&r:class Val [line 141]\n n$1=_fun_Val_getI(&r:class Val &) [line 141]\n *&return:int =(1 / n$1) [line 141]\n " shape="box"] 115 -> 114 ; @@ -43,7 +43,7 @@ digraph iCFG { 109 -> 108 ; -108 [label="108: Return Stmt \n n$0=*&r:class Val [line 133]\n n$1=_fun_Val_getF(&r:class Val &) [line 133]\n *&return:int =(1 / n$1) [line 133]\n " shape="box"] +108 [label="108: Return Stmt \n NONEn$0=*&r:class Val [line 133]\n n$1=_fun_Val_getF(&r:class Val &) [line 133]\n *&return:int =(1 / n$1) [line 133]\n " shape="box"] 108 -> 107 ; @@ -124,7 +124,7 @@ digraph iCFG { 88 -> 87 ; -87 [label="87: Return Stmt \n n$0=*&r:class Ptr [line 108]\n n$1=_fun_Ptr_getI(&r:class Ptr &) [line 108]\n *&return:int =(1 / n$1) [line 108]\n " shape="box"] +87 [label="87: Return Stmt \n NONEn$0=*&r:class Ptr [line 108]\n n$1=_fun_Ptr_getI(&r:class Ptr &) [line 108]\n *&return:int =(1 / n$1) [line 108]\n " shape="box"] 87 -> 86 ; @@ -151,7 +151,7 @@ digraph iCFG { 81 -> 80 ; -80 [label="80: Return Stmt \n n$0=*&r:class Ptr [line 100]\n n$1=_fun_Ptr_getF(&r:class Ptr &) [line 100]\n *&return:int =(1 / n$1) [line 100]\n " shape="box"] +80 [label="80: Return Stmt \n NONEn$0=*&r:class Ptr [line 100]\n n$1=_fun_Ptr_getF(&r:class Ptr &) [line 100]\n *&return:int =(1 / n$1) [line 100]\n " shape="box"] 80 -> 79 ; @@ -232,7 +232,7 @@ digraph iCFG { 60 -> 59 ; -59 [label="59: Return Stmt \n n$0=*&r:class Ref [line 75]\n n$1=_fun_Ref_getI(&r:class Ref &) [line 75]\n *&return:int =(1 / n$1) [line 75]\n " shape="box"] +59 [label="59: Return Stmt \n NONEn$0=*&r:class Ref [line 75]\n n$1=_fun_Ref_getI(&r:class Ref &) [line 75]\n *&return:int =(1 / n$1) [line 75]\n " shape="box"] 59 -> 58 ; @@ -259,7 +259,7 @@ digraph iCFG { 53 -> 52 ; -52 [label="52: Return Stmt \n n$0=*&r:class Ref [line 67]\n n$1=_fun_Ref_getF(&r:class Ref &) [line 67]\n *&return:int =(1 / n$1) [line 67]\n " shape="box"] +52 [label="52: Return Stmt \n NONEn$0=*&r:class Ref [line 67]\n n$1=_fun_Ref_getF(&r:class Ref &) [line 67]\n *&return:int =(1 / n$1) [line 67]\n " shape="box"] 52 -> 51 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/reference/reference_struct_e2e.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/reference/reference_struct_e2e.cpp.dot index 02b5c0f40..8e894638e 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/reference/reference_struct_e2e.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/reference/reference_struct_e2e.cpp.dot @@ -1,6 +1,6 @@ /* @generated */ digraph iCFG { -123 [label="123: Call _fun_X_zero \n n$4=_fun_get_global_ref() [line 124]\n n$5=*n$4:class X [line 124]\n _fun_X_zero(n$4:class X &) [line 124]\n " shape="box"] +123 [label="123: Call _fun_X_zero \n n$4=_fun_get_global_ref() [line 124]\n NONEn$5=*n$4:class X [line 124]\n _fun_X_zero(n$4:class X &) [line 124]\n " shape="box"] 123 -> 122 ; @@ -8,7 +8,7 @@ digraph iCFG { 122 -> 121 ; -121 [label="121: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 126]\n n$1=*n$0:class X [line 126]\n n$2=_fun_X_div(n$0:class X &) [line 126]\n " shape="box"] +121 [label="121: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 126]\n NONEn$1=*n$0:class X [line 126]\n n$2=_fun_X_div(n$0:class X &) [line 126]\n " shape="box"] 121 -> 120 ; @@ -19,7 +19,7 @@ digraph iCFG { 119 -> 123 ; -118 [label="118: Call _fun_X_nonzero \n n$4=_fun_get_global_ref() [line 118]\n n$5=*n$4:class X [line 118]\n _fun_X_nonzero(n$4:class X &) [line 118]\n " shape="box"] +118 [label="118: Call _fun_X_nonzero \n n$4=_fun_get_global_ref() [line 118]\n NONEn$5=*n$4:class X [line 118]\n _fun_X_nonzero(n$4:class X &) [line 118]\n " shape="box"] 118 -> 117 ; @@ -27,7 +27,7 @@ digraph iCFG { 117 -> 116 ; -116 [label="116: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 120]\n n$1=*n$0:class X [line 120]\n n$2=_fun_X_div(n$0:class X &) [line 120]\n " shape="box"] +116 [label="116: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 120]\n NONEn$1=*n$0:class X [line 120]\n n$2=_fun_X_div(n$0:class X &) [line 120]\n " shape="box"] 116 -> 115 ; @@ -42,11 +42,11 @@ digraph iCFG { 113 -> 112 ; -112 [label="112: Call _fun_X_nonzero \n n$3=_fun_get_global_ref() [line 113]\n n$4=*n$3:class X [line 113]\n _fun_X_nonzero(n$3:class X &) [line 113]\n " shape="box"] +112 [label="112: Call _fun_X_nonzero \n n$3=_fun_get_global_ref() [line 113]\n NONEn$4=*n$3:class X [line 113]\n _fun_X_nonzero(n$3:class X &) [line 113]\n " shape="box"] 112 -> 111 ; -111 [label="111: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 114]\n n$1=*n$0:class X [line 114]\n n$2=_fun_X_div(n$0:class X &) [line 114]\n " shape="box"] +111 [label="111: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 114]\n NONEn$1=*n$0:class X [line 114]\n n$2=_fun_X_div(n$0:class X &) [line 114]\n " shape="box"] 111 -> 110 ; @@ -61,11 +61,11 @@ digraph iCFG { 108 -> 107 ; -107 [label="107: Call _fun_X_zero \n n$3=_fun_get_global_ref() [line 107]\n n$4=*n$3:class X [line 107]\n _fun_X_zero(n$3:class X &) [line 107]\n " shape="box"] +107 [label="107: Call _fun_X_zero \n n$3=_fun_get_global_ref() [line 107]\n NONEn$4=*n$3:class X [line 107]\n _fun_X_zero(n$3:class X &) [line 107]\n " shape="box"] 107 -> 106 ; -106 [label="106: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 108]\n n$1=*n$0:class X [line 108]\n n$2=_fun_X_div(n$0:class X &) [line 108]\n " shape="box"] +106 [label="106: Call _fun_X_div \n n$0=_fun_get_global_ref() [line 108]\n NONEn$1=*n$0:class X [line 108]\n n$2=_fun_X_div(n$0:class X &) [line 108]\n " shape="box"] 106 -> 105 ; @@ -80,7 +80,7 @@ digraph iCFG { 103 -> 102 ; -102 [label="102: Return Stmt \n n$0=*&x:class X & [line 102]\n n$1=*n$0:class X [line 102]\n n$2=_fun_X_div(n$0:class X &) [line 102]\n *&return:int =n$2 [line 102]\n " shape="box"] +102 [label="102: Return Stmt \n n$0=*&x:class X & [line 102]\n NONEn$1=*n$0:class X [line 102]\n n$2=_fun_X_div(n$0:class X &) [line 102]\n *&return:int =n$2 [line 102]\n " shape="box"] 102 -> 101 ; @@ -95,7 +95,7 @@ digraph iCFG { 99 -> 98 ; -98 [label="98: Return Stmt \n n$0=*&x:class X & [line 97]\n n$1=*n$0:class X [line 97]\n n$2=_fun_X_div(n$0:class X &) [line 97]\n *&return:int =n$2 [line 97]\n " shape="box"] +98 [label="98: Return Stmt \n n$0=*&x:class X & [line 97]\n NONEn$1=*n$0:class X [line 97]\n n$2=_fun_X_div(n$0:class X &) [line 97]\n *&return:int =n$2 [line 97]\n " shape="box"] 98 -> 97 ; @@ -110,7 +110,7 @@ digraph iCFG { 95 -> 94 ; -94 [label="94: Return Stmt \n n$0=*&x:class X & [line 92]\n n$1=*n$0:class X [line 92]\n n$2=_fun_X_div(n$0:class X &) [line 92]\n *&return:int =n$2 [line 92]\n " shape="box"] +94 [label="94: Return Stmt \n n$0=*&x:class X & [line 92]\n NONEn$1=*n$0:class X [line 92]\n n$2=_fun_X_div(n$0:class X &) [line 92]\n *&return:int =n$2 [line 92]\n " shape="box"] 94 -> 93 ; @@ -125,7 +125,7 @@ digraph iCFG { 91 -> 90 ; -90 [label="90: Return Stmt \n n$0=*&x:class X & [line 87]\n n$1=*n$0:class X [line 87]\n n$2=_fun_X_div(n$0:class X &) [line 87]\n *&return:int =n$2 [line 87]\n " shape="box"] +90 [label="90: Return Stmt \n n$0=*&x:class X & [line 87]\n NONEn$1=*n$0:class X [line 87]\n n$2=_fun_X_div(n$0:class X &) [line 87]\n *&return:int =n$2 [line 87]\n " shape="box"] 90 -> 89 ; @@ -136,7 +136,7 @@ digraph iCFG { 88 -> 91 ; -87 [label="87: Call _fun_X_zero \n n$4=_fun_get_global_ptr() [line 80]\n n$5=*n$4:class X [line 80]\n _fun_X_zero(n$4:class X *) [line 80]\n " shape="box"] +87 [label="87: Call _fun_X_zero \n n$4=_fun_get_global_ptr() [line 80]\n NONEn$5=*n$4:class X [line 80]\n _fun_X_zero(n$4:class X *) [line 80]\n " shape="box"] 87 -> 86 ; @@ -144,7 +144,7 @@ digraph iCFG { 86 -> 85 ; -85 [label="85: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 82]\n n$1=*n$0:class X [line 82]\n n$2=_fun_X_div(n$0:class X *) [line 82]\n " shape="box"] +85 [label="85: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 82]\n NONEn$1=*n$0:class X [line 82]\n n$2=_fun_X_div(n$0:class X *) [line 82]\n " shape="box"] 85 -> 84 ; @@ -155,7 +155,7 @@ digraph iCFG { 83 -> 87 ; -82 [label="82: Call _fun_X_nonzero \n n$4=_fun_get_global_ptr() [line 74]\n n$5=*n$4:class X [line 74]\n _fun_X_nonzero(n$4:class X *) [line 74]\n " shape="box"] +82 [label="82: Call _fun_X_nonzero \n n$4=_fun_get_global_ptr() [line 74]\n NONEn$5=*n$4:class X [line 74]\n _fun_X_nonzero(n$4:class X *) [line 74]\n " shape="box"] 82 -> 81 ; @@ -163,7 +163,7 @@ digraph iCFG { 81 -> 80 ; -80 [label="80: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 76]\n n$1=*n$0:class X [line 76]\n n$2=_fun_X_div(n$0:class X *) [line 76]\n " shape="box"] +80 [label="80: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 76]\n NONEn$1=*n$0:class X [line 76]\n n$2=_fun_X_div(n$0:class X *) [line 76]\n " shape="box"] 80 -> 79 ; @@ -178,11 +178,11 @@ digraph iCFG { 77 -> 76 ; -76 [label="76: Call _fun_X_nonzero \n n$3=_fun_get_global_ptr() [line 69]\n n$4=*n$3:class X [line 69]\n _fun_X_nonzero(n$3:class X *) [line 69]\n " shape="box"] +76 [label="76: Call _fun_X_nonzero \n n$3=_fun_get_global_ptr() [line 69]\n NONEn$4=*n$3:class X [line 69]\n _fun_X_nonzero(n$3:class X *) [line 69]\n " shape="box"] 76 -> 75 ; -75 [label="75: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 70]\n n$1=*n$0:class X [line 70]\n n$2=_fun_X_div(n$0:class X *) [line 70]\n " shape="box"] +75 [label="75: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 70]\n NONEn$1=*n$0:class X [line 70]\n n$2=_fun_X_div(n$0:class X *) [line 70]\n " shape="box"] 75 -> 74 ; @@ -197,11 +197,11 @@ digraph iCFG { 72 -> 71 ; -71 [label="71: Call _fun_X_zero \n n$3=_fun_get_global_ptr() [line 63]\n n$4=*n$3:class X [line 63]\n _fun_X_zero(n$3:class X *) [line 63]\n " shape="box"] +71 [label="71: Call _fun_X_zero \n n$3=_fun_get_global_ptr() [line 63]\n NONEn$4=*n$3:class X [line 63]\n _fun_X_zero(n$3:class X *) [line 63]\n " shape="box"] 71 -> 70 ; -70 [label="70: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 64]\n n$1=*n$0:class X [line 64]\n n$2=_fun_X_div(n$0:class X *) [line 64]\n " shape="box"] +70 [label="70: Call _fun_X_div \n n$0=_fun_get_global_ptr() [line 64]\n NONEn$1=*n$0:class X [line 64]\n n$2=_fun_X_div(n$0:class X *) [line 64]\n " shape="box"] 70 -> 69 ; @@ -216,7 +216,7 @@ digraph iCFG { 67 -> 66 ; -66 [label="66: Return Stmt \n n$1=*&x:class X * [line 57]\n n$2=*n$1:class X [line 57]\n n$3=_fun_X_div(n$1:class X *) [line 57]\n *&return:int =n$3 [line 57]\n " shape="box"] +66 [label="66: Return Stmt \n n$1=*&x:class X * [line 57]\n NONEn$2=*n$1:class X [line 57]\n n$3=_fun_X_div(n$1:class X *) [line 57]\n *&return:int =n$3 [line 57]\n " shape="box"] 66 -> 61 ; @@ -248,7 +248,7 @@ digraph iCFG { 59 -> 58 ; -58 [label="58: Return Stmt \n n$1=*&x:class X * [line 50]\n n$2=*n$1:class X [line 50]\n n$3=_fun_X_div(n$1:class X *) [line 50]\n *&return:int =n$3 [line 50]\n " shape="box"] +58 [label="58: Return Stmt \n n$1=*&x:class X * [line 50]\n NONEn$2=*n$1:class X [line 50]\n n$3=_fun_X_div(n$1:class X *) [line 50]\n *&return:int =n$3 [line 50]\n " shape="box"] 58 -> 53 ; @@ -280,7 +280,7 @@ digraph iCFG { 51 -> 50 ; -50 [label="50: Return Stmt \n n$1=*&x:class X * [line 43]\n n$2=*n$1:class X [line 43]\n n$3=_fun_X_div(n$1:class X *) [line 43]\n *&return:int =n$3 [line 43]\n " shape="box"] +50 [label="50: Return Stmt \n n$1=*&x:class X * [line 43]\n NONEn$2=*n$1:class X [line 43]\n n$3=_fun_X_div(n$1:class X *) [line 43]\n *&return:int =n$3 [line 43]\n " shape="box"] 50 -> 45 ; @@ -312,7 +312,7 @@ digraph iCFG { 43 -> 42 ; -42 [label="42: Return Stmt \n n$1=*&x:class X * [line 36]\n n$2=*n$1:class X [line 36]\n n$3=_fun_X_div(n$1:class X *) [line 36]\n *&return:int =n$3 [line 36]\n " shape="box"] +42 [label="42: Return Stmt \n n$1=*&x:class X * [line 36]\n NONEn$2=*n$1:class X [line 36]\n n$3=_fun_X_div(n$1:class X *) [line 36]\n *&return:int =n$3 [line 36]\n " shape="box"] 42 -> 37 ; @@ -373,7 +373,7 @@ digraph iCFG { 27 -> 29 ; -26 [label="26: Call _fun_X_nonzero \n n$0=*&x:class X & [line 25]\n n$1=*n$0:class X [line 25]\n _fun_X_nonzero(n$0:class X &) [line 25]\n " shape="box"] +26 [label="26: Call _fun_X_nonzero \n n$0=*&x:class X & [line 25]\n NONEn$1=*n$0:class X [line 25]\n _fun_X_nonzero(n$0:class X &) [line 25]\n " shape="box"] 26 -> 25 ; @@ -384,7 +384,7 @@ digraph iCFG { 24 -> 26 ; -23 [label="23: Call _fun_X_zero \n n$0=*&x:class X & [line 23]\n n$1=*n$0:class X [line 23]\n _fun_X_zero(n$0:class X &) [line 23]\n " shape="box"] +23 [label="23: Call _fun_X_zero \n n$0=*&x:class X & [line 23]\n NONEn$1=*n$0:class X [line 23]\n _fun_X_zero(n$0:class X &) [line 23]\n " shape="box"] 23 -> 22 ; @@ -406,7 +406,7 @@ digraph iCFG { 18 -> 20 ; -17 [label="17: Call _fun_X_nonzero \n n$0=*&x:class X * [line 19]\n n$1=*n$0:class X [line 19]\n _fun_X_nonzero(n$0:class X *) [line 19]\n " shape="box"] +17 [label="17: Call _fun_X_nonzero \n n$0=*&x:class X * [line 19]\n NONEn$1=*n$0:class X [line 19]\n _fun_X_nonzero(n$0:class X *) [line 19]\n " shape="box"] 17 -> 16 ; @@ -417,7 +417,7 @@ digraph iCFG { 15 -> 17 ; -14 [label="14: Call _fun_X_zero \n n$0=*&x:class X * [line 17]\n n$1=*n$0:class X [line 17]\n _fun_X_zero(n$0:class X *) [line 17]\n " shape="box"] +14 [label="14: Call _fun_X_zero \n n$0=*&x:class X * [line 17]\n NONEn$1=*n$0:class X [line 17]\n _fun_X_zero(n$0:class X *) [line 17]\n " shape="box"] 14 -> 13 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/templates/class_template_instantiate.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/templates/class_template_instantiate.cpp.dot index 8d6b3ac3d..9b67c0671 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/templates/class_template_instantiate.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/templates/class_template_instantiate.cpp.dot @@ -1,6 +1,6 @@ /* @generated */ digraph iCFG { -30 [label="30: Return Stmt \n n$0=*&s:class ExecStore & [line 41]\n n$1=*n$0.f:class Choose2 [line 41]\n n$2=_fun_Choose2_extra(n$0.f:class Choose2 &,1:int ) [line 41]\n *&return:int =n$2 [line 41]\n " shape="box"] +30 [label="30: Return Stmt \n n$0=*&s:class ExecStore & [line 41]\n NONEn$1=*n$0.f:class Choose2 [line 41]\n n$2=_fun_Choose2_extra(n$0.f:class Choose2 &,1:int ) [line 41]\n *&return:int =n$2 [line 41]\n " shape="box"] 30 -> 29 ; @@ -11,7 +11,7 @@ digraph iCFG { 28 -> 30 ; -27 [label="27: Return Stmt \n n$0=*&s:class ExecStore & [line 39]\n n$1=*n$0.f:class Choose2 [line 39]\n n$2=_fun_Choose2_extra(n$0.f:class Choose2 &,0:int ) [line 39]\n *&return:int =n$2 [line 39]\n " shape="box"] +27 [label="27: Return Stmt \n n$0=*&s:class ExecStore & [line 39]\n NONEn$1=*n$0.f:class Choose2 [line 39]\n n$2=_fun_Choose2_extra(n$0.f:class Choose2 &,0:int ) [line 39]\n *&return:int =n$2 [line 39]\n " shape="box"] 27 -> 26 ; @@ -22,7 +22,7 @@ digraph iCFG { 25 -> 27 ; -24 [label="24: Return Stmt \n n$0=*&s:class ExecStore & [line 36]\n n$1=*n$0:class ExecStore [line 36]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,1:int ) [line 36]\n *&return:int =n$2 [line 36]\n " shape="box"] +24 [label="24: Return Stmt \n n$0=*&s:class ExecStore & [line 36]\n NONEn$1=*n$0:class ExecStore [line 36]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,1:int ) [line 36]\n *&return:int =n$2 [line 36]\n " shape="box"] 24 -> 23 ; @@ -33,7 +33,7 @@ digraph iCFG { 22 -> 24 ; -21 [label="21: Return Stmt \n n$0=*&s:class ExecStore & [line 32]\n n$1=*n$0:class ExecStore [line 32]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,1:int ) [line 32]\n *&return:int =n$2 [line 32]\n " shape="box"] +21 [label="21: Return Stmt \n n$0=*&s:class ExecStore & [line 32]\n NONEn$1=*n$0:class ExecStore [line 32]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,1:int ) [line 32]\n *&return:int =n$2 [line 32]\n " shape="box"] 21 -> 20 ; @@ -44,7 +44,7 @@ digraph iCFG { 19 -> 21 ; -18 [label="18: Return Stmt \n n$0=*&s:class ExecStore & [line 30]\n n$1=*n$0:class ExecStore [line 30]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,0:int ) [line 30]\n *&return:int =n$2 [line 30]\n " shape="box"] +18 [label="18: Return Stmt \n n$0=*&s:class ExecStore & [line 30]\n NONEn$1=*n$0:class ExecStore [line 30]\n n$2=_fun_ExecStore_call_div(n$0:class ExecStore &,0:int ) [line 30]\n *&return:int =n$2 [line 30]\n " shape="box"] 18 -> 17 ; @@ -55,7 +55,7 @@ digraph iCFG { 16 -> 18 ; -15 [label="15: Return Stmt \n n$0=*&this:class ExecStore * [line 26]\n n$1=*n$0.f:class Choose2 [line 26]\n n$2=*&a:int [line 26]\n n$3=_fun_Choose2_div(n$0.f:class Choose2 &,n$2:int ,0:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] +15 [label="15: Return Stmt \n n$0=*&this:class ExecStore * [line 26]\n NONEn$1=*n$0.f:class Choose2 [line 26]\n n$2=*&a:int [line 26]\n n$3=_fun_Choose2_div(n$0.f:class Choose2 &,n$2:int ,0:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] 15 -> 14 ; @@ -66,7 +66,7 @@ digraph iCFG { 13 -> 15 ; -12 [label="12: Return Stmt \n n$0=*&this:class ExecStore * [line 26]\n n$1=*n$0.f:class Choose1 [line 26]\n n$2=*&a:int [line 26]\n n$3=_fun_Choose1_div(n$0.f:class Choose1 &,n$2:int ,0:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] +12 [label="12: Return Stmt \n n$0=*&this:class ExecStore * [line 26]\n NONEn$1=*n$0.f:class Choose1 [line 26]\n n$2=*&a:int [line 26]\n n$3=_fun_Choose1_div(n$0.f:class Choose1 &,n$2:int ,0:int ) [line 26]\n *&return:int =n$3 [line 26]\n " shape="box"] 12 -> 11 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/templates/function.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/templates/function.cpp.dot index b6d51ca90..84ff32907 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/templates/function.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/templates/function.cpp.dot @@ -112,7 +112,7 @@ digraph iCFG { 20 -> 23 ; -19 [label="19: Return Stmt \n n$0=*&x:class X3 & [line 30]\n n$1=*n$0:class X3 [line 30]\n n$2=_fun_X3_get(n$0:class X3 &) [line 30]\n *&return:int =n$2 [line 30]\n " shape="box"] +19 [label="19: Return Stmt \n n$0=*&x:class X3 & [line 30]\n NONEn$1=*n$0:class X3 [line 30]\n n$2=_fun_X3_get(n$0:class X3 &) [line 30]\n *&return:int =n$2 [line 30]\n " shape="box"] 19 -> 18 ; @@ -123,7 +123,7 @@ digraph iCFG { 17 -> 19 ; -16 [label="16: Return Stmt \n n$0=*&x:class X1 & [line 24]\n n$1=*n$0:class X1 [line 24]\n n$2=_fun_X1_getVal(n$0:class X1 &) [line 24]\n *&return:int =n$2 [line 24]\n " shape="box"] +16 [label="16: Return Stmt \n n$0=*&x:class X1 & [line 24]\n NONEn$1=*n$0:class X1 [line 24]\n n$2=_fun_X1_getVal(n$0:class X1 &) [line 24]\n *&return:int =n$2 [line 24]\n " shape="box"] 16 -> 15 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/templates/method.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/templates/method.cpp.dot index 9a1e8f06d..e3684330a 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/templates/method.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/templates/method.cpp.dot @@ -12,7 +12,7 @@ digraph iCFG { 73 -> 72 ; -72 [label="72: Return Stmt \n n$0=*&g:class GetterTempl [line 74]\n n$1=_fun_GetterTempl_get(&g:class GetterTempl &,&x1_1:class X1 &,&x1_2:class X1 &) [line 74]\n *&return:int =(1 / n$1) [line 74]\n " shape="box"] +72 [label="72: Return Stmt \n NONEn$0=*&g:class GetterTempl [line 74]\n n$1=_fun_GetterTempl_get(&g:class GetterTempl &,&x1_1:class X1 &,&x1_2:class X1 &) [line 74]\n *&return:int =(1 / n$1) [line 74]\n " shape="box"] 72 -> 71 ; @@ -35,7 +35,7 @@ digraph iCFG { 67 -> 66 ; -66 [label="66: Return Stmt \n n$0=*&g:class GetterTempl [line 67]\n n$1=_fun_GetterTempl_get(&g:class GetterTempl &,&x2:class X2 &,&x1:class X1 &) [line 67]\n *&return:int =(1 / n$1) [line 67]\n " shape="box"] +66 [label="66: Return Stmt \n NONEn$0=*&g:class GetterTempl [line 67]\n n$1=_fun_GetterTempl_get(&g:class GetterTempl &,&x2:class X2 &,&x1:class X1 &) [line 67]\n *&return:int =(1 / n$1) [line 67]\n " shape="box"] 66 -> 65 ; @@ -58,7 +58,7 @@ digraph iCFG { 61 -> 60 ; -60 [label="60: Return Stmt \n n$0=*&g:class GetterTempl [line 60]\n n$1=_fun_GetterTempl_get(&g:class GetterTempl &,&x2_1:class X2 &,&x2_2:class X2 &) [line 60]\n *&return:int =(1 / n$1) [line 60]\n " shape="box"] +60 [label="60: Return Stmt \n NONEn$0=*&g:class GetterTempl [line 60]\n n$1=_fun_GetterTempl_get(&g:class GetterTempl &,&x2_1:class X2 &,&x2_2:class X2 &) [line 60]\n *&return:int =(1 / n$1) [line 60]\n " shape="box"] 60 -> 59 ; @@ -81,7 +81,7 @@ digraph iCFG { 55 -> 54 ; -54 [label="54: Return Stmt \n n$0=*&g:class GetterTempl [line 53]\n n$1=_fun_GetterTempl_get(&g:class GetterTempl &,&x3:class X3 &,&x2:class X2 &) [line 53]\n *&return:int =(1 / n$1) [line 53]\n " shape="box"] +54 [label="54: Return Stmt \n NONEn$0=*&g:class GetterTempl [line 53]\n n$1=_fun_GetterTempl_get(&g:class GetterTempl &,&x3:class X3 &,&x2:class X2 &) [line 53]\n *&return:int =(1 / n$1) [line 53]\n " shape="box"] 54 -> 53 ; @@ -100,7 +100,7 @@ digraph iCFG { 50 -> 49 ; -49 [label="49: Return Stmt \n n$0=*&g:class Getter [line 46]\n n$1=_fun_Getter_get(&g:class Getter &,&x1:class X1 &) [line 46]\n *&return:int =(1 / n$1) [line 46]\n " shape="box"] +49 [label="49: Return Stmt \n NONEn$0=*&g:class Getter [line 46]\n n$1=_fun_Getter_get(&g:class Getter &,&x1:class X1 &) [line 46]\n *&return:int =(1 / n$1) [line 46]\n " shape="box"] 49 -> 48 ; @@ -119,7 +119,7 @@ digraph iCFG { 45 -> 44 ; -44 [label="44: Return Stmt \n n$0=*&g:class Getter [line 40]\n n$1=_fun_Getter_get(&g:class Getter &,&x2:class X2 &) [line 40]\n *&return:int =(1 / n$1) [line 40]\n " shape="box"] +44 [label="44: Return Stmt \n NONEn$0=*&g:class Getter [line 40]\n n$1=_fun_Getter_get(&g:class Getter &,&x2:class X2 &) [line 40]\n *&return:int =(1 / n$1) [line 40]\n " shape="box"] 44 -> 43 ; @@ -137,7 +137,7 @@ digraph iCFG { 40 -> 41 ; -39 [label="39: Return Stmt \n n$0=*&t:class X1 & [line 33]\n n$1=*n$0:class X1 [line 33]\n n$2=_fun_X1_get(n$0:class X1 &) [line 33]\n n$3=*&s:class X1 & [line 33]\n n$4=*n$3:class X1 [line 33]\n n$5=_fun_X1_get(n$3:class X1 &) [line 33]\n *&return:int =(n$2 + n$5) [line 33]\n " shape="box"] +39 [label="39: Return Stmt \n n$0=*&t:class X1 & [line 33]\n NONEn$1=*n$0:class X1 [line 33]\n n$2=_fun_X1_get(n$0:class X1 &) [line 33]\n n$3=*&s:class X1 & [line 33]\n NONEn$4=*n$3:class X1 [line 33]\n n$5=_fun_X1_get(n$3:class X1 &) [line 33]\n *&return:int =(n$2 + n$5) [line 33]\n " shape="box"] 39 -> 38 ; @@ -155,7 +155,7 @@ digraph iCFG { 35 -> 36 ; -34 [label="34: Return Stmt \n n$0=*&t:class X2 & [line 33]\n n$1=*n$0:class X2 [line 33]\n n$2=_fun_X2_get(n$0:class X2 &) [line 33]\n n$3=*&s:class X1 & [line 33]\n n$4=*n$3:class X1 [line 33]\n n$5=_fun_X1_get(n$3:class X1 &) [line 33]\n *&return:int =(n$2 + n$5) [line 33]\n " shape="box"] +34 [label="34: Return Stmt \n n$0=*&t:class X2 & [line 33]\n NONEn$1=*n$0:class X2 [line 33]\n n$2=_fun_X2_get(n$0:class X2 &) [line 33]\n n$3=*&s:class X1 & [line 33]\n NONEn$4=*n$3:class X1 [line 33]\n n$5=_fun_X1_get(n$3:class X1 &) [line 33]\n *&return:int =(n$2 + n$5) [line 33]\n " shape="box"] 34 -> 33 ; @@ -166,7 +166,7 @@ digraph iCFG { 32 -> 34 ; -31 [label="31: Return Stmt \n n$0=*&t:class X2 & [line 33]\n n$1=*n$0:class X2 [line 33]\n n$2=_fun_X2_get(n$0:class X2 &) [line 33]\n n$3=*&s:class X2 & [line 33]\n n$4=*n$3:class X2 [line 33]\n n$5=_fun_X2_get(n$3:class X2 &) [line 33]\n *&return:int =(n$2 + n$5) [line 33]\n " shape="box"] +31 [label="31: Return Stmt \n n$0=*&t:class X2 & [line 33]\n NONEn$1=*n$0:class X2 [line 33]\n n$2=_fun_X2_get(n$0:class X2 &) [line 33]\n n$3=*&s:class X2 & [line 33]\n NONEn$4=*n$3:class X2 [line 33]\n n$5=_fun_X2_get(n$3:class X2 &) [line 33]\n *&return:int =(n$2 + n$5) [line 33]\n " shape="box"] 31 -> 30 ; @@ -184,7 +184,7 @@ digraph iCFG { 27 -> 28 ; -26 [label="26: Return Stmt \n n$0=*&t:class X3 & [line 33]\n n$1=*n$0:class X3 [line 33]\n n$2=_fun_X3_get(n$0:class X3 &) [line 33]\n n$3=*&s:class X2 & [line 33]\n n$4=*n$3:class X2 [line 33]\n n$5=_fun_X2_get(n$3:class X2 &) [line 33]\n *&return:int =(n$2 + n$5) [line 33]\n " shape="box"] +26 [label="26: Return Stmt \n n$0=*&t:class X3 & [line 33]\n NONEn$1=*n$0:class X3 [line 33]\n n$2=_fun_X3_get(n$0:class X3 &) [line 33]\n n$3=*&s:class X2 & [line 33]\n NONEn$4=*n$3:class X2 [line 33]\n n$5=_fun_X2_get(n$3:class X2 &) [line 33]\n *&return:int =(n$2 + n$5) [line 33]\n " shape="box"] 26 -> 25 ; @@ -202,7 +202,7 @@ digraph iCFG { 22 -> 23 ; -21 [label="21: Return Stmt \n n$0=*&s:class X1 & [line 25]\n n$1=*n$0:class X1 [line 25]\n n$2=_fun_X1_get(n$0:class X1 &) [line 25]\n *&return:int =n$2 [line 25]\n " shape="box"] +21 [label="21: Return Stmt \n n$0=*&s:class X1 & [line 25]\n NONEn$1=*n$0:class X1 [line 25]\n n$2=_fun_X1_get(n$0:class X1 &) [line 25]\n *&return:int =n$2 [line 25]\n " shape="box"] 21 -> 20 ; @@ -213,7 +213,7 @@ digraph iCFG { 19 -> 21 ; -18 [label="18: Return Stmt \n n$0=*&s:class X2 & [line 25]\n n$1=*n$0:class X2 [line 25]\n n$2=_fun_X2_get(n$0:class X2 &) [line 25]\n *&return:int =n$2 [line 25]\n " shape="box"] +18 [label="18: Return Stmt \n n$0=*&s:class X2 & [line 25]\n NONEn$1=*n$0:class X2 [line 25]\n n$2=_fun_X2_get(n$0:class X2 &) [line 25]\n *&return:int =n$2 [line 25]\n " shape="box"] 18 -> 17 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/types/inheritance.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/types/inheritance.cpp.dot index 9a2dbdf0b..a8fd38bdb 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/types/inheritance.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/types/inheritance.cpp.dot @@ -12,27 +12,27 @@ digraph iCFG { 23 -> 22 ; -22 [label="22: Call _fun_Base_fun \n n$15=*&b:class Base * [line 26]\n n$16=*n$15:class Base [line 26]\n n$17=_fun_Base_fun(n$15:class Base *) [line 26]\n " shape="box"] +22 [label="22: Call _fun_Base_fun \n n$15=*&b:class Base * [line 26]\n NONEn$16=*n$15:class Base [line 26]\n n$17=_fun_Base_fun(n$15:class Base *) [line 26]\n " shape="box"] 22 -> 21 ; -21 [label="21: Call _fun_Base_fun \n n$12=*&s1:class Base * [line 27]\n n$13=*n$12:class Base [line 27]\n n$14=_fun_Base_fun(n$12:class Base *) [line 27]\n " shape="box"] +21 [label="21: Call _fun_Base_fun \n n$12=*&s1:class Base * [line 27]\n NONEn$13=*n$12:class Base [line 27]\n n$14=_fun_Base_fun(n$12:class Base *) [line 27]\n " shape="box"] 21 -> 20 ; -20 [label="20: Call _fun_Base_fun \n n$9=*&s2:class Sub * [line 28]\n n$10=*n$9:class Sub [line 28]\n n$11=_fun_Base_fun(n$9:class Sub *) [line 28]\n " shape="box"] +20 [label="20: Call _fun_Base_fun \n n$9=*&s2:class Sub * [line 28]\n NONEn$10=*n$9:class Sub [line 28]\n n$11=_fun_Base_fun(n$9:class Sub *) [line 28]\n " shape="box"] 20 -> 19 ; -19 [label="19: Call _fun_Base_fun_redefine \n n$6=*&b:class Base * [line 30]\n n$7=*n$6:class Base [line 30]\n n$8=_fun_Base_fun_redefine(n$6:class Base *) [line 30]\n " shape="box"] +19 [label="19: Call _fun_Base_fun_redefine \n n$6=*&b:class Base * [line 30]\n NONEn$7=*n$6:class Base [line 30]\n n$8=_fun_Base_fun_redefine(n$6:class Base *) [line 30]\n " shape="box"] 19 -> 18 ; -18 [label="18: Call _fun_Base_fun_redefine \n n$3=*&s1:class Base * [line 31]\n n$4=*n$3:class Base [line 31]\n n$5=_fun_Base_fun_redefine(n$3:class Base *) [line 31]\n " shape="box"] +18 [label="18: Call _fun_Base_fun_redefine \n n$3=*&s1:class Base * [line 31]\n NONEn$4=*n$3:class Base [line 31]\n n$5=_fun_Base_fun_redefine(n$3:class Base *) [line 31]\n " shape="box"] 18 -> 17 ; -17 [label="17: Call _fun_Sub_fun_redefine \n n$0=*&s2:class Sub * [line 32]\n n$1=*n$0:class Sub [line 32]\n n$2=_fun_Sub_fun_redefine(n$0:class Sub *) [line 32]\n " shape="box"] +17 [label="17: Call _fun_Sub_fun_redefine \n n$0=*&s2:class Sub * [line 32]\n NONEn$1=*n$0:class Sub [line 32]\n n$2=_fun_Sub_fun_redefine(n$0:class Sub *) [line 32]\n " shape="box"] 17 -> 16 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/types/operator_overload.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/types/operator_overload.cpp.dot index 2c94d7d00..7477ff1c1 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/types/operator_overload.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/types/operator_overload.cpp.dot @@ -22,7 +22,7 @@ digraph iCFG { 22 -> 24 ; -21 [label="21: DeclStmt \n n$1=*&x:class X & [line 36]\n n$2=*n$1:class X [line 36]\n n$3=_fun_X_operator[](n$1:class X &,0:int ) [line 36]\n *&v:int =n$3 [line 36]\n " shape="box"] +21 [label="21: DeclStmt \n n$1=*&x:class X & [line 36]\n NONEn$2=*n$1:class X [line 36]\n n$3=_fun_X_operator[](n$1:class X &,0:int ) [line 36]\n *&v:int =n$3 [line 36]\n " shape="box"] 21 -> 20 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/types/struct_forward_declare.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/types/struct_forward_declare.cpp.dot index 354eca5a0..5d06c2a44 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/types/struct_forward_declare.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/types/struct_forward_declare.cpp.dot @@ -4,7 +4,7 @@ digraph iCFG { 41 -> 40 ; -40 [label="40: Return Stmt \n n$0=*&z:class Z * [line 66]\n n$1=*n$0:class Z [line 66]\n n$2=_fun_Z_getF(n$0:class Z *) [line 66]\n *&return:int =(1 / n$2) [line 66]\n " shape="box"] +40 [label="40: Return Stmt \n n$0=*&z:class Z * [line 66]\n NONEn$1=*n$0:class Z [line 66]\n n$2=_fun_Z_getF(n$0:class Z *) [line 66]\n *&return:int =(1 / n$2) [line 66]\n " shape="box"] 40 -> 39 ; @@ -23,7 +23,7 @@ digraph iCFG { 36 -> 35 ; -35 [label="35: Return Stmt \n n$0=*&z:class Z [line 58]\n n$1=_fun_Z_getF(&z:class Z &) [line 58]\n *&return:int =(1 / n$1) [line 58]\n " shape="box"] +35 [label="35: Return Stmt \n NONEn$0=*&z:class Z [line 58]\n n$1=_fun_Z_getF(&z:class Z &) [line 58]\n *&return:int =(1 / n$1) [line 58]\n " shape="box"] 35 -> 34 ; @@ -63,7 +63,7 @@ digraph iCFG { 26 -> 25 ; -25 [label="25: Return Stmt \n n$0=*&x:class X [line 52]\n n$1=_fun_X_getF(&x:class X &) [line 52]\n *&return:int =(1 / n$1) [line 52]\n " shape="box"] +25 [label="25: Return Stmt \n NONEn$0=*&x:class X [line 52]\n n$1=_fun_X_getF(&x:class X &) [line 52]\n *&return:int =(1 / n$1) [line 52]\n " shape="box"] 25 -> 24 ; @@ -78,7 +78,7 @@ digraph iCFG { 22 -> 21 ; -21 [label="21: Return Stmt \n n$0=*&x:class X * [line 42]\n n$1=*n$0:class X [line 42]\n n$2=_fun_X_getF(n$0:class X *) [line 42]\n *&return:int =(1 / n$2) [line 42]\n " shape="box"] +21 [label="21: Return Stmt \n n$0=*&x:class X * [line 42]\n NONEn$1=*n$0:class X [line 42]\n n$2=_fun_X_getF(n$0:class X *) [line 42]\n *&return:int =(1 / n$2) [line 42]\n " shape="box"] 21 -> 20 ; @@ -97,7 +97,7 @@ digraph iCFG { 17 -> 16 ; -16 [label="16: Return Stmt \n n$0=*&x:class X [line 37]\n n$1=_fun_X_getF(&x:class X &) [line 37]\n *&return:int =(1 / n$1) [line 37]\n " shape="box"] +16 [label="16: Return Stmt \n NONEn$0=*&x:class X [line 37]\n n$1=_fun_X_getF(&x:class X &) [line 37]\n *&return:int =(1 / n$1) [line 37]\n " shape="box"] 16 -> 15 ; diff --git a/infer/tests/codetoanalyze/cpp/frontend/types/typeid_expr.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/types/typeid_expr.cpp.dot index c38b4b7e0..e06cc2da0 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/types/typeid_expr.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/types/typeid_expr.cpp.dot @@ -20,7 +20,7 @@ digraph iCFG { 66 -> 68 ; -65 [label="65: BinaryOperatorStmt: EQ \n n$0=_fun_template_typeid(&person:class Person &) [line 64]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,&person:class Person ) [line 64]\n n$2=*n$1:class std::type_info [line 64]\n n$3=_fun_std::type_info_name(n$1:class std::type_info &) [line 64]\n " shape="box"] +65 [label="65: BinaryOperatorStmt: EQ \n n$0=_fun_template_typeid(&person:class Person &) [line 64]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,&person:class Person ) [line 64]\n NONEn$2=*n$1:class std::type_info [line 64]\n n$3=_fun_std::type_info_name(n$1:class std::type_info &) [line 64]\n " shape="box"] 65 -> 66 ; @@ -44,7 +44,7 @@ digraph iCFG { 60 -> 59 ; -59 [label="59: Return Stmt \n n$0=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$0.__type_name:void ) [line 59]\n n$1=*n$0:class std::type_info [line 59]\n n$2=_fun_std::type_info_name(n$0:class std::type_info &) [line 59]\n *&return:char *=n$2 [line 59]\n " shape="box"] +59 [label="59: Return Stmt \n n$0=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$0.__type_name:void ) [line 59]\n NONEn$1=*n$0:class std::type_info [line 59]\n n$2=_fun_std::type_info_name(n$0:class std::type_info &) [line 59]\n *&return:char *=n$2 [line 59]\n " shape="box"] 59 -> 58 ; @@ -75,7 +75,7 @@ digraph iCFG { 52 -> 54 ; -51 [label="51: BinaryOperatorStmt: EQ \n n$0=*&ptr:class Person * [line 50]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,n$0:class Person ) [line 50]\n n$2=*n$1:class std::type_info [line 50]\n n$3=_fun_std::type_info_name(n$1:class std::type_info &) [line 50]\n n$4=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$4.__type_name:void ,&person:class Person ) [line 50]\n n$5=*n$4:class std::type_info [line 50]\n n$6=_fun_std::type_info_name(n$4:class std::type_info &) [line 50]\n " shape="box"] +51 [label="51: BinaryOperatorStmt: EQ \n n$0=*&ptr:class Person * [line 50]\n n$1=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$1.__type_name:void ,n$0:class Person ) [line 50]\n NONEn$2=*n$1:class std::type_info [line 50]\n n$3=_fun_std::type_info_name(n$1:class std::type_info &) [line 50]\n n$4=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$4.__type_name:void ,&person:class Person ) [line 50]\n NONEn$5=*n$4:class std::type_info [line 50]\n n$6=_fun_std::type_info_name(n$4:class std::type_info &) [line 50]\n " shape="box"] 51 -> 52 ; @@ -147,11 +147,11 @@ digraph iCFG { 34 -> 33 ; -33 [label="33: DeclStmt \n n$5=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$5.__type_name:void ,&t:int ) [line 31]\n n$6=*n$5:class std::type_info [line 31]\n n$7=_fun_std::type_info_name(n$5:class std::type_info &) [line 31]\n *&t_type_info:char *=n$7 [line 31]\n " shape="box"] +33 [label="33: DeclStmt \n n$5=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$5.__type_name:void ,&t:int ) [line 31]\n NONEn$6=*n$5:class std::type_info [line 31]\n n$7=_fun_std::type_info_name(n$5:class std::type_info &) [line 31]\n *&t_type_info:char *=n$7 [line 31]\n " shape="box"] 33 -> 32 ; -32 [label="32: DeclStmt \n n$2=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$2.__type_name:void ,&person:class Person ) [line 32]\n n$3=*n$2:class std::type_info [line 32]\n n$4=_fun_std::type_info_name(n$2:class std::type_info &) [line 32]\n *&person_type_info:char *=n$4 [line 32]\n " shape="box"] +32 [label="32: DeclStmt \n n$2=_fun___cxx_typeid(sizeof(class std::type_info ):void ,n$2.__type_name:void ,&person:class Person ) [line 32]\n NONEn$3=*n$2:class std::type_info [line 32]\n n$4=_fun_std::type_info_name(n$2:class std::type_info &) [line 32]\n *&person_type_info:char *=n$4 [line 32]\n " shape="box"] 32 -> 27 ;