From e9cb9f4352e15aceaec4da64a07bebf37cf27400 Mon Sep 17 00:00:00 2001 From: Sam Blackshear Date: Thu, 7 Apr 2016 07:31:30 -0700 Subject: [PATCH] assign pointer type checker Reviewed By: dulmarod Differential Revision: D3125521 fb-gh-sync-id: 33c4693 fbshipit-source-id: 33c4693 --- infer/lib/python/inferlib/issues.py | 1 + infer/src/clang/cFrontend_checkers.ml | 26 + infer/src/clang/cFrontend_checkers.mli | 4 + infer/src/clang/cFrontend_errors.ml | 11 +- infer/src/clang/objcProperty_decl.ml | 6 + infer/src/clang/objcProperty_decl.mli | 3 + .../errors/category_procdesc/EOCPerson.dot | 66 +- .../objc/errors/category_procdesc/main.dot | 64 +- .../errors/field_superclass/SuperExample.dot | 94 +- .../memory_leaks_benchmark/ArcExample.dot | 74 +- .../AutoreleaseExample.dot | 152 ++- .../MemoryLeakExample.dot | 1179 +++++++++++++++-- .../MemoryLeakExample.h | 4 +- .../RetainReleaseExample.dot | 64 +- .../RetainReleaseExample2.dot | 152 ++- .../TollBridgeExample.dot | 364 ++++- .../memory_leaks_benchmark/arc_methods.dot | 98 +- .../objc/errors/npe/NPD_core_foundation.h | 4 +- .../errors/npe/Nonnull_attribute_example.dot | 96 +- .../objc/errors/npe/npe_malloc.dot | 64 +- .../objc/errors/protocol_procdesc/main.dot | 67 +- .../frontend/assertions/NSAssert_example.dot | 732 +++++++--- .../objc/frontend/block/BlockVar.dot | 488 +++++-- .../objc/frontend/block/block-it.dot | 502 +++++-- .../objc/frontend/block/block_no_args.dot | 106 +- .../objc/frontend/block/block_release.dot | 993 +++++++++++++- .../objc/frontend/block/dispatch.dot | 394 +++++- .../objc/frontend/block/dispatch_examples.dot | 514 +++++-- .../objc/frontend/block/retain_cycle.dot | 116 +- .../objc/frontend/block/static.dot | 404 +++++- .../objc/frontend/boxing/Boxing.dot | 390 +++++- .../objc/frontend/boxing/array.dot | 340 ++++- .../objc/frontend/boxing/array_literal.dot | 308 ++++- .../objc/frontend/boxing/dict_literal.dot | 314 ++++- .../objc/frontend/boxing/string_literal.dot | 314 ++++- .../ConditionalOperation.dot | 340 ++++- .../frontend/exceptions/ExceptionExample.dot | 340 ++++- .../fast_enumeration/Fast_enumeration.dot | 135 +- .../predefined_expr/PredefinedExprExample.dot | 76 +- .../frontend/property/PropertyAttributes.dot | 360 ++++- .../property/PropertyCustomAccessor.dot | 46 +- .../frontend/property/PropertyImplSetter.dot | 56 +- .../frontend/property/Property_getter.dot | 56 +- .../objc/frontend/property/aclass.dot | 46 +- .../objc/frontend/property/main_car.dot | 316 ++++- .../frontend/property_in_protocol/Test.dot | 53 +- .../objc/frontend/protocol/protocol.dot | 81 +- .../objc/frontend/returnstmt/void_return.dot | 102 +- .../objc/frontend/self_static/Self.dot | 206 +-- .../objc/frontend/self_static/static.dot | 92 +- .../strings/global_string_literal.dot | 52 +- .../objc/frontend/strings/string_literal.dot | 56 +- .../objc/frontend/subclass/MyClass.dot | 56 +- .../objc/frontend/subclass/MySubClass.dot | 60 +- .../objc/frontend/subclass/main.dot | 56 +- .../objc/frontend/types/attributes.dot | 100 +- .../objc/frontend/types/testloop.dot | 308 ++++- .../objc/frontend/types/void_call.dot | 130 +- .../objc/frontend/vardecl/aclass.dot | 56 +- .../objc/frontend/vardecl/aclass_2.dot | 56 +- .../objc/frontend/vardecl/initlist.dot | 70 +- .../objc/warnings/assign_pointer.m | 38 + .../codetoanalyze/objc/warnings/atomic_prop.m | 2 +- .../endtoend/objc/AssignPointerTest.java | 65 + infer/tests/utils/InferResults.java | 1 + 65 files changed, 10180 insertions(+), 1739 deletions(-) create mode 100644 infer/tests/codetoanalyze/objc/warnings/assign_pointer.m create mode 100644 infer/tests/endtoend/objc/AssignPointerTest.java diff --git a/infer/lib/python/inferlib/issues.py b/infer/lib/python/inferlib/issues.py index b8f221bc9..b16810518 100644 --- a/infer/lib/python/inferlib/issues.py +++ b/infer/lib/python/inferlib/issues.py @@ -56,6 +56,7 @@ ISSUE_TYPES = [ 'DIRECT_ATOMIC_PROPERTY_ACCESS', 'CXX_REFERENCE_CAPTURED_IN_OBJC_BLOCK', 'REGISTERED_OBSERVER_BEING_DEALLOCATED', + 'ASSIGN_POINTER_WARNING', ] NULL_STYLE_ISSUE_TYPES = [ diff --git a/infer/src/clang/cFrontend_checkers.ml b/infer/src/clang/cFrontend_checkers.ml index 9093f941d..ad177a28b 100644 --- a/infer/src/clang/cFrontend_checkers.ml +++ b/infer/src/clang/cFrontend_checkers.ml @@ -85,6 +85,32 @@ let dec_body_eventually atomic_pred param dec = (* === Warnings on properties === *) +(* Assing Pointer Warning: a property with a pointer type should not be declared `assign` *) +let assign_pointer_warning decl_info pname obj_c_property_decl_info = + let open Clang_ast_t in + let condition = + let has_assign_property () = ObjcProperty_decl.is_assign_property obj_c_property_decl_info in + let is_pointer_type () = + let type_ptr = obj_c_property_decl_info.opdi_type_ptr in + let raw_ptr = Clang_ast_types.type_ptr_to_clang_pointer type_ptr in + match Clang_ast_main.PointerMap.find raw_ptr !CFrontend_config.pointer_type_index with + | MemberPointerType _ | ObjCObjectPointerType _ | BlockPointerType _ -> true + | TypedefType (type_info, _) -> type_info.ti_raw = "id" + | exception Not_found -> false + | _ -> false in + has_assign_property() && is_pointer_type () in + if condition then + Some + { name = "ASSIGN_POINTER_WARNING"; + description = + Printf.sprintf + "Property `%s` is a pointer type marked with the `assign` attribute" + pname.ni_name; + suggestion = "Use a different attribute like `strong` or `weak`."; + loc = location_from_dinfo decl_info; + } + else None + (* Strong Delegate Warning: a property with name delegate should not be declared strong *) let strong_delegate_warning decl_info pname obj_c_property_decl_info = let condition = (name_contains_word pname "delegate") diff --git a/infer/src/clang/cFrontend_checkers.mli b/infer/src/clang/cFrontend_checkers.mli index 1b52d1685..71ba38357 100644 --- a/infer/src/clang/cFrontend_checkers.mli +++ b/infer/src/clang/cFrontend_checkers.mli @@ -20,6 +20,10 @@ type warning_desc = { val strong_delegate_warning : Clang_ast_t.decl_info -> Clang_ast_t.named_decl_info -> Clang_ast_t.obj_c_property_decl_info -> warning_desc option +(* Assing Pointer Warning: a property with a pointer type should not be declared `assign` *) +val assign_pointer_warning : Clang_ast_t.decl_info -> Clang_ast_t.named_decl_info -> + Clang_ast_t.obj_c_property_decl_info -> warning_desc option + (* Direct Atomic Property access: a property declared atomic should not be accesses directly via its iva *) val direct_atomic_property_access_warning : diff --git a/infer/src/clang/cFrontend_errors.ml b/infer/src/clang/cFrontend_errors.ml index 3498d2680..f76d67785 100644 --- a/infer/src/clang/cFrontend_errors.ml +++ b/infer/src/clang/cFrontend_errors.ml @@ -10,7 +10,8 @@ open CFrontend_utils (* List of checkers on properties *) -let property_checkers_list = [CFrontend_checkers.strong_delegate_warning] +let property_checkers_list = [CFrontend_checkers.strong_delegate_warning; + CFrontend_checkers.assign_pointer_warning;] (* Invocation of checker belonging to property_checker_list *) let checkers_for_property decl_info pname_info pdi checker = @@ -122,4 +123,12 @@ let rec run_frontend_checkers_on_decl tenv cg cfg dec = let call_ns_checker = checkers_for_ns decl_info decl_list in invoke_set_of_checkers call_ns_checker pdesc ns_notification_checker_list; IList.iter (run_frontend_checkers_on_decl tenv cg cfg) decl_list + | ObjCProtocolDecl (decl_info, name_info, decl_list, _, _) -> + let name = Ast_utils.get_qualified_name name_info in + let curr_class = CContext.ContextProtocol name in + let pdesc = pdesc_checker curr_class in + check_for_property_errors cfg cg tenv pdesc decl_list; + let call_ns_checker = checkers_for_ns decl_info decl_list in + invoke_set_of_checkers call_ns_checker pdesc ns_notification_checker_list; + IList.iter (run_frontend_checkers_on_decl tenv cg cfg) decl_list | _ -> () diff --git a/infer/src/clang/objcProperty_decl.ml b/infer/src/clang/objcProperty_decl.ml index b05fa2320..42cbdf045 100644 --- a/infer/src/clang/objcProperty_decl.ml +++ b/infer/src/clang/objcProperty_decl.ml @@ -23,6 +23,12 @@ let is_strong_property obj_c_property_decl_info = | `Strong -> true | _ -> false) attrs +let is_assign_property obj_c_property_decl_info = + let attrs = obj_c_property_decl_info.Clang_ast_t.opdi_property_attributes in + IList.exists (fun a -> match a with + | `Assign -> true + | _ -> false) attrs + (* Given a list of declarations in an interface returns list of methods *) let get_methods curr_class decl_list = let class_name = CContext.get_curr_class_name curr_class in diff --git a/infer/src/clang/objcProperty_decl.mli b/infer/src/clang/objcProperty_decl.mli index bc2b60264..507be9830 100644 --- a/infer/src/clang/objcProperty_decl.mli +++ b/infer/src/clang/objcProperty_decl.mli @@ -14,3 +14,6 @@ val get_methods : CContext.curr_class -> Clang_ast_t.decl list -> Procname.t lis (* Given a property type returns whether the property is strong *) val is_strong_property : Clang_ast_t.obj_c_property_decl_info -> bool + +(* Returns true if a property has the `assign` attribute *) +val is_assign_property : Clang_ast_t.obj_c_property_decl_info -> bool diff --git a/infer/tests/codetoanalyze/objc/errors/category_procdesc/EOCPerson.dot b/infer/tests/codetoanalyze/objc/errors/category_procdesc/EOCPerson.dot index c6a5872eb..3530e6628 100644 --- a/infer/tests/codetoanalyze/objc/errors/category_procdesc/EOCPerson.dot +++ b/infer/tests/codetoanalyze/objc/errors/category_procdesc/EOCPerson.dot @@ -1,30 +1,72 @@ digraph iCFG { -8 [label="8: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"BTaking vacations\":char *) [line 19]\n _fun_NSLog(n$1:struct objc_object *) [line 19]\n REMOVE_TEMPS(n$1); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] +20 [label="20: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"BTaking vacations\":char *) [line 19]\n _fun_NSLog(n$1:struct objc_object *) [line 19]\n REMOVE_TEMPS(n$1); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit EOCPerson_takeVacationFromWork \n " color=yellow style=filled] + 20 -> 19 ; +19 [label="19: Exit EOCPerson_takeVacationFromWork \n " color=yellow style=filled] -6 [label="6: Start EOCPerson_takeVacationFromWork\nFormals: self:class EOCPerson *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] +18 [label="18: Start EOCPerson_takeVacationFromWork\nFormals: self:class EOCPerson *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"Performing days at work\":char *) [line 15]\n _fun_NSLog(n$0:struct objc_object *) [line 15]\n REMOVE_TEMPS(n$0); [line 15]\n APPLY_ABSTRACTION; [line 15]\n " shape="box"] + 18 -> 20 ; +17 [label="17: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"Performing days at work\":char *) [line 15]\n _fun_NSLog(n$0:struct objc_object *) [line 15]\n REMOVE_TEMPS(n$0); [line 15]\n APPLY_ABSTRACTION; [line 15]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit EOCPerson_performDaysWork \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit EOCPerson_performDaysWork \n " color=yellow style=filled] -3 [label="3: Start EOCPerson_performDaysWork\nFormals: self:class EOCPerson *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n NULLIFY(&self,false); [line 14]\n " color=yellow style=filled] +15 [label="15: Start EOCPerson_performDaysWork\nFormals: self:class EOCPerson *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n NULLIFY(&self,false); [line 14]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit EOCPerson_frontendChecks \n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit EOCPerson_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start EOCPerson_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start EOCPerson_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/category_procdesc/main.dot b/infer/tests/codetoanalyze/objc/errors/category_procdesc/main.dot index 97c086921..c38483c70 100644 --- a/infer/tests/codetoanalyze/objc/errors/category_procdesc/main.dot +++ b/infer/tests/codetoanalyze/objc/errors/category_procdesc/main.dot @@ -1,25 +1,67 @@ digraph iCFG { -6 [label="6: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class EOCPerson ):unsigned long ) [line 13]\n n$3=_fun_NSObject_init(n$2:class EOCPerson *) virtual [line 13]\n *&person:class EOCPerson *=n$3 [line 13]\n REMOVE_TEMPS(n$2,n$3); [line 13]\n " shape="box"] +18 [label="18: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class EOCPerson ):unsigned long ) [line 13]\n n$3=_fun_NSObject_init(n$2:class EOCPerson *) virtual [line 13]\n *&person:class EOCPerson *=n$3 [line 13]\n REMOVE_TEMPS(n$2,n$3); [line 13]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Message Call: performDaysWork \n n$1=*&person:class EOCPerson * [line 14]\n _fun_EOCPerson_performDaysWork(n$1:class EOCPerson *) virtual [line 14]\n REMOVE_TEMPS(n$1); [line 14]\n NULLIFY(&person,false); [line 14]\n " shape="box"] + 18 -> 17 ; +17 [label="17: Message Call: performDaysWork \n n$1=*&person:class EOCPerson * [line 14]\n _fun_EOCPerson_performDaysWork(n$1:class EOCPerson *) virtual [line 14]\n REMOVE_TEMPS(n$1); [line 14]\n NULLIFY(&person,false); [line 14]\n " shape="box"] - 5 -> 4 ; -4 [label="4: DeclStmt \n n$0=_fun_malloc_no_fail(sizeof(int ):int ) [line 15]\n *&x:int *=n$0 [line 15]\n REMOVE_TEMPS(n$0); [line 15]\n NULLIFY(&x,false); [line 15]\n " shape="box"] + 17 -> 16 ; +16 [label="16: DeclStmt \n n$0=_fun_malloc_no_fail(sizeof(int ):int ) [line 15]\n *&x:int *=n$0 [line 15]\n REMOVE_TEMPS(n$0); [line 15]\n NULLIFY(&x,false); [line 15]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 16]\n APPLY_ABSTRACTION; [line 16]\n " shape="box"] + 16 -> 15 ; +15 [label="15: Return Stmt \n *&return:int =0 [line 16]\n APPLY_ABSTRACTION; [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + 15 -> 14 ; +14 [label="14: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: x:int * person:class EOCPerson * \n DECLARE_LOCALS(&return,&x,&person); [line 12]\n NULLIFY(&person,false); [line 12]\n NULLIFY(&x,false); [line 12]\n " color=yellow style=filled] +13 [label="13: Start main\nFormals: \nLocals: x:int * person:class EOCPerson * \n DECLARE_LOCALS(&return,&x,&person); [line 12]\n NULLIFY(&person,false); [line 12]\n NULLIFY(&x,false); [line 12]\n " color=yellow style=filled] - 1 -> 6 ; + 13 -> 18 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/errors/field_superclass/SuperExample.dot b/infer/tests/codetoanalyze/objc/errors/field_superclass/SuperExample.dot index c66012417..355ba59ec 100644 --- a/infer/tests/codetoanalyze/objc/errors/field_superclass/SuperExample.dot +++ b/infer/tests/codetoanalyze/objc/errors/field_superclass/SuperExample.dot @@ -1,60 +1,102 @@ digraph iCFG { -16 [label="16: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 42]\n n$2=_fun_NSObject_init(n$1:class A *) virtual [line 42]\n *&a:struct objc_object *=n$2 [line 42]\n REMOVE_TEMPS(n$1,n$2); [line 42]\n NULLIFY(&a,false); [line 42]\n " shape="box"] +28 [label="28: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 42]\n n$2=_fun_NSObject_init(n$1:class A *) virtual [line 42]\n *&a:struct objc_object *=n$2 [line 42]\n REMOVE_TEMPS(n$1,n$2); [line 42]\n NULLIFY(&a,false); [line 42]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool() [line 41]\n REMOVE_TEMPS(n$0); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] + 28 -> 27 ; +27 [label="27: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool() [line 41]\n REMOVE_TEMPS(n$0); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit main \n " color=yellow style=filled] + 27 -> 26 ; +26 [label="26: Exit main \n " color=yellow style=filled] -13 [label="13: Start main\nFormals: argc:int argv:char **\nLocals: a:struct objc_object * \n DECLARE_LOCALS(&return,&a); [line 40]\n NULLIFY(&a,false); [line 40]\n NULLIFY(&argc,false); [line 40]\n NULLIFY(&argv,false); [line 40]\n " color=yellow style=filled] +25 [label="25: Start main\nFormals: argc:int argv:char **\nLocals: a:struct objc_object * \n DECLARE_LOCALS(&return,&a); [line 40]\n NULLIFY(&a,false); [line 40]\n NULLIFY(&argc,false); [line 40]\n NULLIFY(&argv,false); [line 40]\n " color=yellow style=filled] - 13 -> 16 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$2=*&self:class A * [line 33]\n n$3=_fun_B_init(n$2:class A *) [line 33]\n *&self:class A *=n$3 [line 33]\n REMOVE_TEMPS(n$2,n$3); [line 33]\n " shape="box"] + 25 -> 28 ; +24 [label="24: BinaryOperatorStmt: Assign \n n$2=*&self:class A * [line 33]\n n$3=_fun_B_init(n$2:class A *) [line 33]\n *&self:class A *=n$3 [line 33]\n REMOVE_TEMPS(n$2,n$3); [line 33]\n " shape="box"] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$1=*&self:class A * [line 34]\n *n$1.a:int =4 [line 34]\n REMOVE_TEMPS(n$1); [line 34]\n " shape="box"] + 24 -> 23 ; +23 [label="23: BinaryOperatorStmt: Assign \n n$1=*&self:class A * [line 34]\n *n$1.a:int =4 [line 34]\n REMOVE_TEMPS(n$1); [line 34]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Return Stmt \n n$0=*&self:class A * [line 35]\n *&return:struct objc_object *=n$0 [line 35]\n REMOVE_TEMPS(n$0); [line 35]\n NULLIFY(&self,false); [line 35]\n APPLY_ABSTRACTION; [line 35]\n " shape="box"] + 23 -> 22 ; +22 [label="22: Return Stmt \n n$0=*&self:class A * [line 35]\n *&return:struct objc_object *=n$0 [line 35]\n REMOVE_TEMPS(n$0); [line 35]\n NULLIFY(&self,false); [line 35]\n APPLY_ABSTRACTION; [line 35]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Exit A_init \n " color=yellow style=filled] + 22 -> 21 ; +21 [label="21: Exit A_init \n " color=yellow style=filled] -8 [label="8: Start A_init\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] +20 [label="20: Start A_init\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n " color=yellow style=filled] - 8 -> 12 ; -7 [label="7: Exit A_frontendChecks \n " color=yellow style=filled] + 20 -> 24 ; +19 [label="19: Exit A_frontendChecks \n " color=yellow style=filled] -6 [label="6: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +18 [label="18: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 6 -> 7 ; -5 [label="5: Return Stmt \n *&return:struct objc_object *=0 [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] + 18 -> 19 ; +17 [label="17: Return Stmt \n *&return:struct objc_object *=0 [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit B_init \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit B_init \n " color=yellow style=filled] -3 [label="3: Start B_init\nFormals: self:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] +15 [label="15: Start B_init\nFormals: self:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit B_frontendChecks \n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit B_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start B_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start B_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/ArcExample.dot b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/ArcExample.dot index cecc181d7..d5c6e602c 100644 --- a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/ArcExample.dot +++ b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/ArcExample.dot @@ -1,38 +1,80 @@ digraph iCFG { -10 [label="10: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 29]\n *&s:class NSString *=n$4 [line 29]\n REMOVE_TEMPS(n$4); [line 29]\n " shape="box"] +22 [label="22: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 29]\n *&s:class NSString *=n$4 [line 29]\n REMOVE_TEMPS(n$4); [line 29]\n " shape="box"] - 10 -> 9 ; -9 [label="9: Return Stmt \n n$3=*&s:class NSString * [line 30]\n *&return:class NSString *=n$3 [line 30]\n REMOVE_TEMPS(n$3); [line 30]\n NULLIFY(&s,false); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] + 22 -> 21 ; +21 [label="21: Return Stmt \n n$3=*&s:class NSString * [line 30]\n *&return:class NSString *=n$3 [line 30]\n REMOVE_TEMPS(n$3); [line 30]\n NULLIFY(&s,false); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit A_newS \n " color=yellow style=filled] + 21 -> 20 ; +20 [label="20: Exit A_newS \n " color=yellow style=filled] -7 [label="7: Start A_newS\nFormals: self:class A *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 28]\n NULLIFY(&s,false); [line 28]\n NULLIFY(&self,false); [line 28]\n " color=yellow style=filled] +19 [label="19: Start A_newS\nFormals: self:class A *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 28]\n NULLIFY(&s,false); [line 28]\n NULLIFY(&self,false); [line 28]\n " color=yellow style=filled] - 7 -> 10 ; -6 [label="6: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 23]\n *&s:class NSString *=n$2 [line 23]\n REMOVE_TEMPS(n$2); [line 23]\n " shape="box"] + 19 -> 22 ; +18 [label="18: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 23]\n *&s:class NSString *=n$2 [line 23]\n REMOVE_TEMPS(n$2); [line 23]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&s:class NSString * [line 24]\n *&return:class NSString *=n$0 [line 24]\n n$1=_fun___set_autorelease_attribute(n$0:class NSString *) [line 24]\n REMOVE_TEMPS(n$0,n$1); [line 24]\n NULLIFY(&s,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + 18 -> 17 ; +17 [label="17: Return Stmt \n n$0=*&s:class NSString * [line 24]\n *&return:class NSString *=n$0 [line 24]\n n$1=_fun___set_autorelease_attribute(n$0:class NSString *) [line 24]\n REMOVE_TEMPS(n$0,n$1); [line 24]\n NULLIFY(&s,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit A_getS \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit A_getS \n " color=yellow style=filled] -3 [label="3: Start A_getS\nFormals: self:class A *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 22]\n NULLIFY(&s,false); [line 22]\n NULLIFY(&self,false); [line 22]\n " color=yellow style=filled] +15 [label="15: Start A_getS\nFormals: self:class A *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 22]\n NULLIFY(&s,false); [line 22]\n NULLIFY(&self,false); [line 22]\n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 15 -> 18 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/AutoreleaseExample.dot b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/AutoreleaseExample.dot index 108ef7441..38fa677ba 100644 --- a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/AutoreleaseExample.dot +++ b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/AutoreleaseExample.dot @@ -1,143 +1,185 @@ digraph iCFG { -37 [label="37: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class NSAutoreleasePool ):unsigned long ) [line 60]\n n$5=_fun_NSObject_init(n$4:class NSAutoreleasePool *) virtual [line 60]\n *&pool:class NSAutoreleasePool *=n$5 [line 60]\n REMOVE_TEMPS(n$4,n$5); [line 60]\n " shape="box"] +49 [label="49: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class NSAutoreleasePool ):unsigned long ) [line 60]\n n$5=_fun_NSObject_init(n$4:class NSAutoreleasePool *) virtual [line 60]\n *&pool:class NSAutoreleasePool *=n$5 [line 60]\n REMOVE_TEMPS(n$4,n$5); [line 60]\n " shape="box"] + + + 49 -> 48 ; +48 [label="48: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 61]\n n$3=_fun___set_autorelease_attribute(n$2:class NSString *) [line 61]\n *&string:class NSString *=n$3 [line 61]\n REMOVE_TEMPS(n$2,n$3); [line 61]\n " shape="box"] + + + 48 -> 47 ; +47 [label="47: Message Call: release \n n$1=*&pool:class NSAutoreleasePool * [line 63]\n _fun___objc_release_autorelease_pool(n$1:class NSAutoreleasePool *) [line 63]\n REMOVE_TEMPS(n$1); [line 63]\n NULLIFY(&pool,false); [line 63]\n " shape="box"] + + + 47 -> 46 ; +46 [label="46: DeclStmt \n n$0=*&string:class NSString * [line 64]\n *&c:class NSString *=n$0 [line 64]\n REMOVE_TEMPS(n$0); [line 64]\n NULLIFY(&c,false); [line 64]\n NULLIFY(&string,false); [line 64]\n APPLY_ABSTRACTION; [line 64]\n " shape="box"] + + + 46 -> 45 ; +45 [label="45: Exit test3 \n " color=yellow style=filled] + + +44 [label="44: Start test3\nFormals: \nLocals: c:class NSString * string:class NSString * pool:class NSAutoreleasePool * \n DECLARE_LOCALS(&return,&c,&string,&pool); [line 59]\n NULLIFY(&c,false); [line 59]\n NULLIFY(&pool,false); [line 59]\n NULLIFY(&string,false); [line 59]\n " color=yellow style=filled] + + + 44 -> 49 ; +43 [label="43: DeclStmt \n *&s1:class A *=0 [line 48]\n " shape="box"] + + + 43 -> 42 ; +42 [label="42: DeclStmt \n *&s2:class A *=0 [line 49]\n " shape="box"] + + + 42 -> 41 ; +41 [label="41: DeclStmt \n *&s3:class A *=0 [line 50]\n " shape="box"] + + + 41 -> 40 ; +40 [label="40: BinaryOperatorStmt: Assign \n n$3=_fun_createA() [line 52]\n *&s1:class A *=n$3 [line 52]\n REMOVE_TEMPS(n$3); [line 52]\n " shape="box"] + + + 40 -> 39 ; +39 [label="39: BinaryOperatorStmt: Assign \n n$2=_fun_createA() [line 53]\n *&s2:class A *=n$2 [line 53]\n REMOVE_TEMPS(n$2); [line 53]\n " shape="box"] + + + 39 -> 38 ; +38 [label="38: BinaryOperatorStmt: Assign \n n$1=_fun_createA() [line 54]\n *&s3:class A *=n$1 [line 54]\n REMOVE_TEMPS(n$1); [line 54]\n " shape="box"] + + + 38 -> 37 ; +37 [label="37: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool(&s1:class A *,&s3:class A *,&s2:class A *) [line 51]\n REMOVE_TEMPS(n$0); [line 51]\n " shape="box"] 37 -> 36 ; -36 [label="36: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 61]\n n$3=_fun___set_autorelease_attribute(n$2:class NSString *) [line 61]\n *&string:class NSString *=n$3 [line 61]\n REMOVE_TEMPS(n$2,n$3); [line 61]\n " shape="box"] +36 [label="36: Return Stmt \n *&return:int =0 [line 56]\n NULLIFY(&s1,false); [line 56]\n NULLIFY(&s2,false); [line 56]\n NULLIFY(&s3,false); [line 56]\n APPLY_ABSTRACTION; [line 56]\n " shape="box"] 36 -> 35 ; -35 [label="35: Message Call: release \n n$1=*&pool:class NSAutoreleasePool * [line 63]\n _fun___objc_release_autorelease_pool(n$1:class NSAutoreleasePool *) [line 63]\n REMOVE_TEMPS(n$1); [line 63]\n NULLIFY(&pool,false); [line 63]\n " shape="box"] +35 [label="35: Exit test2 \n " color=yellow style=filled] - 35 -> 34 ; -34 [label="34: DeclStmt \n n$0=*&string:class NSString * [line 64]\n *&c:class NSString *=n$0 [line 64]\n REMOVE_TEMPS(n$0); [line 64]\n NULLIFY(&c,false); [line 64]\n NULLIFY(&string,false); [line 64]\n APPLY_ABSTRACTION; [line 64]\n " shape="box"] +34 [label="34: Start test2\nFormals: \nLocals: s3:class A * s2:class A * s1:class A * \n DECLARE_LOCALS(&return,&s3,&s2,&s1); [line 47]\n " color=yellow style=filled] - 34 -> 33 ; -33 [label="33: Exit test3 \n " color=yellow style=filled] + 34 -> 43 ; +33 [label="33: DeclStmt \n *&s1:class A *=0 [line 35]\n " shape="box"] -32 [label="32: Start test3\nFormals: \nLocals: c:class NSString * string:class NSString * pool:class NSAutoreleasePool * \n DECLARE_LOCALS(&return,&c,&string,&pool); [line 59]\n NULLIFY(&c,false); [line 59]\n NULLIFY(&pool,false); [line 59]\n NULLIFY(&string,false); [line 59]\n " color=yellow style=filled] + 33 -> 32 ; +32 [label="32: DeclStmt \n *&s2:class A *=0 [line 36]\n " shape="box"] - 32 -> 37 ; -31 [label="31: DeclStmt \n *&s1:class A *=0 [line 48]\n " shape="box"] + 32 -> 31 ; +31 [label="31: DeclStmt \n *&s3:class A *=0 [line 37]\n " shape="box"] 31 -> 30 ; -30 [label="30: DeclStmt \n *&s2:class A *=0 [line 49]\n " shape="box"] +30 [label="30: BinaryOperatorStmt: Assign \n n$5=_fun_createA() [line 39]\n *&s1:class A *=n$5 [line 39]\n REMOVE_TEMPS(n$5); [line 39]\n " shape="box"] 30 -> 29 ; -29 [label="29: DeclStmt \n *&s3:class A *=0 [line 50]\n " shape="box"] +29 [label="29: Message Call: retain \n n$3=*&s1:class A * [line 40]\n n$4=_fun___objc_retain(n$3:class A *) [line 40]\n REMOVE_TEMPS(n$3,n$4); [line 40]\n " shape="box"] 29 -> 28 ; -28 [label="28: BinaryOperatorStmt: Assign \n n$3=_fun_createA() [line 52]\n *&s1:class A *=n$3 [line 52]\n REMOVE_TEMPS(n$3); [line 52]\n " shape="box"] +28 [label="28: BinaryOperatorStmt: Assign \n n$2=_fun_createA() [line 41]\n *&s2:class A *=n$2 [line 41]\n REMOVE_TEMPS(n$2); [line 41]\n " shape="box"] 28 -> 27 ; -27 [label="27: BinaryOperatorStmt: Assign \n n$2=_fun_createA() [line 53]\n *&s2:class A *=n$2 [line 53]\n REMOVE_TEMPS(n$2); [line 53]\n " shape="box"] +27 [label="27: BinaryOperatorStmt: Assign \n n$1=_fun_createA() [line 42]\n *&s3:class A *=n$1 [line 42]\n REMOVE_TEMPS(n$1); [line 42]\n " shape="box"] 27 -> 26 ; -26 [label="26: BinaryOperatorStmt: Assign \n n$1=_fun_createA() [line 54]\n *&s3:class A *=n$1 [line 54]\n REMOVE_TEMPS(n$1); [line 54]\n " shape="box"] +26 [label="26: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool(&s1:class A *,&s2:class A *,&s3:class A *) [line 38]\n REMOVE_TEMPS(n$0); [line 38]\n " shape="box"] 26 -> 25 ; -25 [label="25: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool(&s1:class A *,&s3:class A *,&s2:class A *) [line 51]\n REMOVE_TEMPS(n$0); [line 51]\n " shape="box"] +25 [label="25: Return Stmt \n *&return:int =0 [line 44]\n NULLIFY(&s1,false); [line 44]\n NULLIFY(&s2,false); [line 44]\n NULLIFY(&s3,false); [line 44]\n APPLY_ABSTRACTION; [line 44]\n " shape="box"] 25 -> 24 ; -24 [label="24: Return Stmt \n *&return:int =0 [line 56]\n NULLIFY(&s1,false); [line 56]\n NULLIFY(&s2,false); [line 56]\n NULLIFY(&s3,false); [line 56]\n APPLY_ABSTRACTION; [line 56]\n " shape="box"] +24 [label="24: Exit test1 \n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: Exit test2 \n " color=yellow style=filled] +23 [label="23: Start test1\nFormals: \nLocals: s3:class A * s2:class A * s1:class A * \n DECLARE_LOCALS(&return,&s3,&s2,&s1); [line 34]\n " color=yellow style=filled] -22 [label="22: Start test2\nFormals: \nLocals: s3:class A * s2:class A * s1:class A * \n DECLARE_LOCALS(&return,&s3,&s2,&s1); [line 47]\n " color=yellow style=filled] + 23 -> 33 ; +22 [label="22: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 30]\n n$3=_fun_NSObject_init(n$2:class A *) virtual [line 30]\n *&s1:class A *=n$3 [line 30]\n REMOVE_TEMPS(n$2,n$3); [line 30]\n " shape="box"] - 22 -> 31 ; -21 [label="21: DeclStmt \n *&s1:class A *=0 [line 35]\n " shape="box"] + 22 -> 21 ; +21 [label="21: Return Stmt \n n$0=*&s1:class A * [line 31]\n n$1=_fun___set_autorelease_attribute(n$0:class A *) [line 31]\n *&return:class A *=n$1 [line 31]\n REMOVE_TEMPS(n$0,n$1); [line 31]\n NULLIFY(&s1,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] 21 -> 20 ; -20 [label="20: DeclStmt \n *&s2:class A *=0 [line 36]\n " shape="box"] +20 [label="20: Exit createA \n " color=yellow style=filled] - 20 -> 19 ; -19 [label="19: DeclStmt \n *&s3:class A *=0 [line 37]\n " shape="box"] +19 [label="19: Start createA\nFormals: \nLocals: s1:class A * \n DECLARE_LOCALS(&return,&s1); [line 29]\n NULLIFY(&s1,false); [line 29]\n " color=yellow style=filled] - 19 -> 18 ; -18 [label="18: BinaryOperatorStmt: Assign \n n$5=_fun_createA() [line 39]\n *&s1:class A *=n$5 [line 39]\n REMOVE_TEMPS(n$5); [line 39]\n " shape="box"] + 19 -> 22 ; +18 [label="18: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 23]\n *&s:class NSString *=n$2 [line 23]\n REMOVE_TEMPS(n$2); [line 23]\n " shape="box"] 18 -> 17 ; -17 [label="17: Message Call: retain \n n$3=*&s1:class A * [line 40]\n n$4=_fun___objc_retain(n$3:class A *) [line 40]\n REMOVE_TEMPS(n$3,n$4); [line 40]\n " shape="box"] +17 [label="17: Return Stmt \n n$0=*&s:class NSString * [line 24]\n n$1=_fun___set_autorelease_attribute(n$0:class NSString *) [line 24]\n *&return:class NSString *=n$1 [line 24]\n REMOVE_TEMPS(n$0,n$1); [line 24]\n NULLIFY(&s,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] 17 -> 16 ; -16 [label="16: BinaryOperatorStmt: Assign \n n$2=_fun_createA() [line 41]\n *&s2:class A *=n$2 [line 41]\n REMOVE_TEMPS(n$2); [line 41]\n " shape="box"] +16 [label="16: Exit A_main \n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: BinaryOperatorStmt: Assign \n n$1=_fun_createA() [line 42]\n *&s3:class A *=n$1 [line 42]\n REMOVE_TEMPS(n$1); [line 42]\n " shape="box"] +15 [label="15: Start A_main\nFormals: self:class A *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 22]\n NULLIFY(&s,false); [line 22]\n NULLIFY(&self,false); [line 22]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Release the autorelease pool \n n$0=_fun___objc_release_autorelease_pool(&s1:class A *,&s2:class A *,&s3:class A *) [line 38]\n REMOVE_TEMPS(n$0); [line 38]\n " shape="box"] + 15 -> 18 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Return Stmt \n *&return:int =0 [line 44]\n NULLIFY(&s1,false); [line 44]\n NULLIFY(&s2,false); [line 44]\n NULLIFY(&s3,false); [line 44]\n APPLY_ABSTRACTION; [line 44]\n " shape="box"] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit test1 \n " color=yellow style=filled] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] -11 [label="11: Start test1\nFormals: \nLocals: s3:class A * s2:class A * s1:class A * \n DECLARE_LOCALS(&return,&s3,&s2,&s1); [line 34]\n " color=yellow style=filled] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 11 -> 21 ; -10 [label="10: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 30]\n n$3=_fun_NSObject_init(n$2:class A *) virtual [line 30]\n *&s1:class A *=n$3 [line 30]\n REMOVE_TEMPS(n$2,n$3); [line 30]\n " shape="box"] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Return Stmt \n n$0=*&s1:class A * [line 31]\n n$1=_fun___set_autorelease_attribute(n$0:class A *) [line 31]\n *&return:class A *=n$1 [line 31]\n REMOVE_TEMPS(n$0,n$1); [line 31]\n NULLIFY(&s1,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit createA \n " color=yellow style=filled] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] -7 [label="7: Start createA\nFormals: \nLocals: s1:class A * \n DECLARE_LOCALS(&return,&s1); [line 29]\n NULLIFY(&s1,false); [line 29]\n " color=yellow style=filled] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 7 -> 10 ; -6 [label="6: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 23]\n *&s:class NSString *=n$2 [line 23]\n REMOVE_TEMPS(n$2); [line 23]\n " shape="box"] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&s:class NSString * [line 24]\n n$1=_fun___set_autorelease_attribute(n$0:class NSString *) [line 24]\n *&return:class NSString *=n$1 [line 24]\n REMOVE_TEMPS(n$0,n$1); [line 24]\n NULLIFY(&s,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit A_main \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start A_main\nFormals: self:class A *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 22]\n NULLIFY(&s,false); [line 22]\n NULLIFY(&self,false); [line 22]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/MemoryLeakExample.dot b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/MemoryLeakExample.dot index d208c5040..f4c4ff829 100644 --- a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/MemoryLeakExample.dot +++ b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/MemoryLeakExample.dot @@ -1,283 +1,1200 @@ digraph iCFG { -75 [label="75: DeclStmt \n n$59=_fun_malloc_no_fail(sizeof(int ):int ) [line 103]\n *&x:int *=n$59 [line 103]\n REMOVE_TEMPS(n$59); [line 103]\n " shape="box"] +337 [label="337: DeclStmt \n n$59=_fun_malloc_no_fail(sizeof(int ):int ) [line 103]\n *&x:int *=n$59 [line 103]\n REMOVE_TEMPS(n$59); [line 103]\n " shape="box"] - 75 -> 74 ; -74 [label="74: BinaryOperatorStmt: Assign \n n$58=*&x:int * [line 104]\n *n$58:int =2 [line 104]\n REMOVE_TEMPS(n$58); [line 104]\n " shape="box"] + 337 -> 336 ; +336 [label="336: BinaryOperatorStmt: Assign \n n$58=*&x:int * [line 104]\n *n$58:int =2 [line 104]\n REMOVE_TEMPS(n$58); [line 104]\n " shape="box"] - 74 -> 73 ; -73 [label="73: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2); [line 105]\n n$56=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 ):unsigned long ) [line 105]\n *&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2:class __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 =n$56 [line 105]\n n$57=*&x:int * [line 105]\n *n$56.x:int *=n$57 [line 105]\n n$51=*&x:int * [line 105]\n *&blk:_fn_ (*)=(_fun___objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2,n$51) [line 105]\n REMOVE_TEMPS(n$56,n$57,n$51); [line 105]\n NULLIFY(&x,false); [line 105]\n " shape="box"] + 336 -> 335 ; +335 [label="335: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2); [line 105]\n n$56=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 ):unsigned long ) [line 105]\n *&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2:class __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 =n$56 [line 105]\n n$57=*&x:int * [line 105]\n *n$56.x:int *=n$57 [line 105]\n n$51=*&x:int * [line 105]\n *&blk:_fn_ (*)=(_fun___objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2,n$51) [line 105]\n REMOVE_TEMPS(n$56,n$57,n$51); [line 105]\n NULLIFY(&x,false); [line 105]\n " shape="box"] - 73 -> 67 ; -72 [label="72: DeclStmt \n n$54=*&x:int * [line 106]\n n$55=*n$54:int [line 106]\n *&i:int =n$55 [line 106]\n REMOVE_TEMPS(n$54,n$55); [line 106]\n " shape="box"] + 335 -> 329 ; +334 [label="334: DeclStmt \n n$54=*&x:int * [line 106]\n n$55=*n$54:int [line 106]\n *&i:int =n$55 [line 106]\n REMOVE_TEMPS(n$54,n$55); [line 106]\n " shape="box"] - 72 -> 71 ; -71 [label="71: Call _fun_free \n n$53=*&x:int * [line 107]\n _fun_free(n$53:void *) [line 107]\n REMOVE_TEMPS(n$53); [line 107]\n NULLIFY(&x,false); [line 107]\n " shape="box"] + 334 -> 333 ; +333 [label="333: Call _fun_free \n n$53=*&x:int * [line 107]\n _fun_free(n$53:void *) [line 107]\n REMOVE_TEMPS(n$53); [line 107]\n NULLIFY(&x,false); [line 107]\n " shape="box"] - 71 -> 70 ; -70 [label="70: Return Stmt \n n$52=*&i:int [line 108]\n *&return:int =n$52 [line 108]\n REMOVE_TEMPS(n$52); [line 108]\n NULLIFY(&i,false); [line 108]\n APPLY_ABSTRACTION; [line 108]\n " shape="box"] + 333 -> 332 ; +332 [label="332: Return Stmt \n n$52=*&i:int [line 108]\n *&return:int =n$52 [line 108]\n REMOVE_TEMPS(n$52); [line 108]\n NULLIFY(&i,false); [line 108]\n APPLY_ABSTRACTION; [line 108]\n " shape="box"] - 70 -> 69 ; -69 [label="69: Exit __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 \n " color=yellow style=filled] + 332 -> 331 ; +331 [label="331: Exit __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2 \n " color=yellow style=filled] -68 [label="68: Start __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2\nFormals: x:int *\nLocals: i:int \nCaptured: x:int * \n DECLARE_LOCALS(&return,&i); [line 105]\n NULLIFY(&i,false); [line 105]\n " color=yellow style=filled] +330 [label="330: Start __objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2\nFormals: x:int *\nLocals: i:int \nCaptured: x:int * \n DECLARE_LOCALS(&return,&i); [line 105]\n NULLIFY(&i,false); [line 105]\n " color=yellow style=filled] - 68 -> 72 ; -67 [label="67: Return Stmt \n n$49=*&blk:_fn_ (*) [line 110]\n n$50=n$49() [line 110]\n *&return:int =n$50 [line 110]\n REMOVE_TEMPS(n$49,n$50); [line 110]\n NULLIFY(&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2,true); [line 110]\n NULLIFY(&blk,false); [line 110]\n APPLY_ABSTRACTION; [line 110]\n " shape="box"] + 330 -> 334 ; +329 [label="329: Return Stmt \n n$49=*&blk:_fn_ (*) [line 110]\n n$50=n$49() [line 110]\n *&return:int =n$50 [line 110]\n REMOVE_TEMPS(n$49,n$50); [line 110]\n NULLIFY(&__objc_anonymous_block_MemoryLeakExample_blockFreeNoLeakTODO______2,true); [line 110]\n NULLIFY(&blk,false); [line 110]\n APPLY_ABSTRACTION; [line 110]\n " shape="box"] - 67 -> 66 ; -66 [label="66: Exit MemoryLeakExample_blockFreeNoLeakTODO \n " color=yellow style=filled] + 329 -> 328 ; +328 [label="328: Exit MemoryLeakExample_blockFreeNoLeakTODO \n " color=yellow style=filled] -65 [label="65: Start MemoryLeakExample_blockFreeNoLeakTODO\nFormals: self:class MemoryLeakExample *\nLocals: blk:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&blk,&x); [line 102]\n NULLIFY(&blk,false); [line 102]\n NULLIFY(&self,false); [line 102]\n NULLIFY(&x,false); [line 102]\n " color=yellow style=filled] +327 [label="327: Start MemoryLeakExample_blockFreeNoLeakTODO\nFormals: self:class MemoryLeakExample *\nLocals: blk:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&blk,&x); [line 102]\n NULLIFY(&blk,false); [line 102]\n NULLIFY(&self,false); [line 102]\n NULLIFY(&x,false); [line 102]\n " color=yellow style=filled] - 65 -> 75 ; -64 [label="64: DeclStmt \n n$48=_fun_malloc_no_fail(sizeof(int ):int ) [line 94]\n *&x:int *=n$48 [line 94]\n REMOVE_TEMPS(n$48); [line 94]\n " shape="box"] + 327 -> 337 ; +326 [label="326: DeclStmt \n n$48=_fun_malloc_no_fail(sizeof(int ):int ) [line 94]\n *&x:int *=n$48 [line 94]\n REMOVE_TEMPS(n$48); [line 94]\n " shape="box"] - 64 -> 63 ; -63 [label="63: BinaryOperatorStmt: Assign \n n$47=*&x:int * [line 95]\n *n$47:int =2 [line 95]\n REMOVE_TEMPS(n$47); [line 95]\n " shape="box"] + 326 -> 325 ; +325 [label="325: BinaryOperatorStmt: Assign \n n$47=*&x:int * [line 95]\n *n$47:int =2 [line 95]\n REMOVE_TEMPS(n$47); [line 95]\n " shape="box"] - 63 -> 62 ; -62 [label="62: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1); [line 96]\n n$45=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 ):unsigned long ) [line 96]\n *&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1:class __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 =n$45 [line 96]\n n$46=*&x:int * [line 96]\n *n$45.x:int *=n$46 [line 96]\n n$42=*&x:int * [line 96]\n *&blk:_fn_ (*)=(_fun___objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1,n$42) [line 96]\n REMOVE_TEMPS(n$45,n$46,n$42); [line 96]\n NULLIFY(&x,false); [line 96]\n " shape="box"] + 325 -> 324 ; +324 [label="324: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1); [line 96]\n n$45=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 ):unsigned long ) [line 96]\n *&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1:class __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 =n$45 [line 96]\n n$46=*&x:int * [line 96]\n *n$45.x:int *=n$46 [line 96]\n n$42=*&x:int * [line 96]\n *&blk:_fn_ (*)=(_fun___objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1,n$42) [line 96]\n REMOVE_TEMPS(n$45,n$46,n$42); [line 96]\n NULLIFY(&x,false); [line 96]\n " shape="box"] - 62 -> 58 ; -61 [label="61: Return Stmt \n n$43=*&x:int * [line 97]\n n$44=*n$43:int [line 97]\n *&return:int =n$44 [line 97]\n REMOVE_TEMPS(n$43,n$44); [line 97]\n NULLIFY(&x,false); [line 97]\n APPLY_ABSTRACTION; [line 97]\n " shape="box"] + 324 -> 320 ; +323 [label="323: Return Stmt \n n$43=*&x:int * [line 97]\n n$44=*n$43:int [line 97]\n *&return:int =n$44 [line 97]\n REMOVE_TEMPS(n$43,n$44); [line 97]\n NULLIFY(&x,false); [line 97]\n APPLY_ABSTRACTION; [line 97]\n " shape="box"] - 61 -> 60 ; -60 [label="60: Exit __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 \n " color=yellow style=filled] + 323 -> 322 ; +322 [label="322: Exit __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1 \n " color=yellow style=filled] -59 [label="59: Start __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 96]\n " color=yellow style=filled] +321 [label="321: Start __objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 96]\n " color=yellow style=filled] - 59 -> 61 ; -58 [label="58: Return Stmt \n n$40=*&blk:_fn_ (*) [line 99]\n n$41=n$40() [line 99]\n *&return:int =n$41 [line 99]\n REMOVE_TEMPS(n$40,n$41); [line 99]\n NULLIFY(&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1,true); [line 99]\n NULLIFY(&blk,false); [line 99]\n APPLY_ABSTRACTION; [line 99]\n " shape="box"] + 321 -> 323 ; +320 [label="320: Return Stmt \n n$40=*&blk:_fn_ (*) [line 99]\n n$41=n$40() [line 99]\n *&return:int =n$41 [line 99]\n REMOVE_TEMPS(n$40,n$41); [line 99]\n NULLIFY(&__objc_anonymous_block_MemoryLeakExample_blockCapturedVarLeak______1,true); [line 99]\n NULLIFY(&blk,false); [line 99]\n APPLY_ABSTRACTION; [line 99]\n " shape="box"] - 58 -> 57 ; -57 [label="57: Exit MemoryLeakExample_blockCapturedVarLeak \n " color=yellow style=filled] + 320 -> 319 ; +319 [label="319: Exit MemoryLeakExample_blockCapturedVarLeak \n " color=yellow style=filled] -56 [label="56: Start MemoryLeakExample_blockCapturedVarLeak\nFormals: self:class MemoryLeakExample *\nLocals: blk:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&blk,&x); [line 93]\n NULLIFY(&blk,false); [line 93]\n NULLIFY(&self,false); [line 93]\n NULLIFY(&x,false); [line 93]\n " color=yellow style=filled] +318 [label="318: Start MemoryLeakExample_blockCapturedVarLeak\nFormals: self:class MemoryLeakExample *\nLocals: blk:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&blk,&x); [line 93]\n NULLIFY(&blk,false); [line 93]\n NULLIFY(&self,false); [line 93]\n NULLIFY(&x,false); [line 93]\n " color=yellow style=filled] - 56 -> 64 ; -55 [label="55: DeclStmt \n n$39=_fun_malloc_no_fail(sizeof(int ):int ) [line 88]\n *&x:int *=n$39 [line 88]\n REMOVE_TEMPS(n$39); [line 88]\n " shape="box"] + 318 -> 326 ; +317 [label="317: DeclStmt \n n$39=_fun_malloc_no_fail(sizeof(int ):int ) [line 88]\n *&x:int *=n$39 [line 88]\n REMOVE_TEMPS(n$39); [line 88]\n " shape="box"] - 55 -> 54 ; -54 [label="54: BinaryOperatorStmt: Assign \n n$38=*&x:int * [line 89]\n *n$38:int =7 [line 89]\n REMOVE_TEMPS(n$38); [line 89]\n " shape="box"] + 317 -> 316 ; +316 [label="316: BinaryOperatorStmt: Assign \n n$38=*&x:int * [line 89]\n *n$38:int =7 [line 89]\n REMOVE_TEMPS(n$38); [line 89]\n " shape="box"] - 54 -> 53 ; -53 [label="53: Return Stmt \n n$36=*&x:int * [line 90]\n n$37=*n$36:int [line 90]\n *&return:int =n$37 [line 90]\n REMOVE_TEMPS(n$36,n$37); [line 90]\n NULLIFY(&x,false); [line 90]\n APPLY_ABSTRACTION; [line 90]\n " shape="box"] + 316 -> 315 ; +315 [label="315: Return Stmt \n n$36=*&x:int * [line 90]\n n$37=*n$36:int [line 90]\n *&return:int =n$37 [line 90]\n REMOVE_TEMPS(n$36,n$37); [line 90]\n NULLIFY(&x,false); [line 90]\n APPLY_ABSTRACTION; [line 90]\n " shape="box"] - 53 -> 52 ; -52 [label="52: Exit MemoryLeakExample_regularLeak \n " color=yellow style=filled] + 315 -> 314 ; +314 [label="314: Exit MemoryLeakExample_regularLeak \n " color=yellow style=filled] -51 [label="51: Start MemoryLeakExample_regularLeak\nFormals: self:class MemoryLeakExample *\nLocals: x:int * \n DECLARE_LOCALS(&return,&x); [line 87]\n NULLIFY(&self,false); [line 87]\n NULLIFY(&x,false); [line 87]\n " color=yellow style=filled] +313 [label="313: Start MemoryLeakExample_regularLeak\nFormals: self:class MemoryLeakExample *\nLocals: x:int * \n DECLARE_LOCALS(&return,&x); [line 87]\n NULLIFY(&self,false); [line 87]\n NULLIFY(&x,false); [line 87]\n " color=yellow style=filled] - 51 -> 55 ; -50 [label="50: DeclStmt \n n$35=_fun_FBColorCreateWithGray(0.000000:double ,0.300000:double ) [line 83]\n *&borderColor:struct CGColor *=n$35 [line 83]\n REMOVE_TEMPS(n$35); [line 83]\n " shape="box"] + 313 -> 317 ; +312 [label="312: DeclStmt \n n$35=_fun_FBColorCreateWithGray(0.000000:double ,0.300000:double ) [line 83]\n *&borderColor:struct CGColor *=n$35 [line 83]\n REMOVE_TEMPS(n$35); [line 83]\n " shape="box"] - 50 -> 49 ; -49 [label="49: Call _fun_CGColorRelease \n n$34=*&borderColor:struct CGColor * [line 84]\n _fun_CGColorRelease(n$34:struct CGColor *) [line 84]\n REMOVE_TEMPS(n$34); [line 84]\n NULLIFY(&borderColor,false); [line 84]\n APPLY_ABSTRACTION; [line 84]\n " shape="box"] + 312 -> 311 ; +311 [label="311: Call _fun_CGColorRelease \n n$34=*&borderColor:struct CGColor * [line 84]\n _fun_CGColorRelease(n$34:struct CGColor *) [line 84]\n REMOVE_TEMPS(n$34); [line 84]\n NULLIFY(&borderColor,false); [line 84]\n APPLY_ABSTRACTION; [line 84]\n " shape="box"] - 49 -> 48 ; -48 [label="48: Exit MemoryLeakExample_testFBColorCreateWithGray \n " color=yellow style=filled] + 311 -> 310 ; +310 [label="310: Exit MemoryLeakExample_testFBColorCreateWithGray \n " color=yellow style=filled] -47 [label="47: Start MemoryLeakExample_testFBColorCreateWithGray\nFormals: self:class MemoryLeakExample *\nLocals: borderColor:struct CGColor * \n DECLARE_LOCALS(&return,&borderColor); [line 82]\n NULLIFY(&borderColor,false); [line 82]\n NULLIFY(&self,false); [line 82]\n " color=yellow style=filled] +309 [label="309: Start MemoryLeakExample_testFBColorCreateWithGray\nFormals: self:class MemoryLeakExample *\nLocals: borderColor:struct CGColor * \n DECLARE_LOCALS(&return,&borderColor); [line 82]\n NULLIFY(&borderColor,false); [line 82]\n NULLIFY(&self,false); [line 82]\n " color=yellow style=filled] - 47 -> 50 ; -46 [label="46: DeclStmt \n n$33=_fun_CGBitmapContextCreateImage(0:struct CGContext *) [line 76]\n *&newImage:struct CGImage *=n$33 [line 76]\n REMOVE_TEMPS(n$33); [line 76]\n " shape="box"] + 309 -> 312 ; +308 [label="308: DeclStmt \n n$33=_fun_CGBitmapContextCreateImage(0:struct CGContext *) [line 76]\n *&newImage:struct CGImage *=n$33 [line 76]\n REMOVE_TEMPS(n$33); [line 76]\n " shape="box"] - 46 -> 45 ; -45 [label="45: Call _fun_CGImageRelease \n n$32=*&newImage:struct CGImage * [line 77]\n _fun_CGImageRelease(n$32:struct CGImage *) [line 77]\n REMOVE_TEMPS(n$32); [line 77]\n NULLIFY(&newImage,false); [line 77]\n APPLY_ABSTRACTION; [line 77]\n " shape="box"] + 308 -> 307 ; +307 [label="307: Call _fun_CGImageRelease \n n$32=*&newImage:struct CGImage * [line 77]\n _fun_CGImageRelease(n$32:struct CGImage *) [line 77]\n REMOVE_TEMPS(n$32); [line 77]\n NULLIFY(&newImage,false); [line 77]\n APPLY_ABSTRACTION; [line 77]\n " shape="box"] - 45 -> 44 ; -44 [label="44: Exit MemoryLeakExample_testImageRefRelease \n " color=yellow style=filled] + 307 -> 306 ; +306 [label="306: Exit MemoryLeakExample_testImageRefRelease \n " color=yellow style=filled] -43 [label="43: Start MemoryLeakExample_testImageRefRelease\nFormals: \nLocals: newImage:struct CGImage * \n DECLARE_LOCALS(&return,&newImage); [line 75]\n NULLIFY(&newImage,false); [line 75]\n " color=yellow style=filled] +305 [label="305: Start MemoryLeakExample_testImageRefRelease\nFormals: \nLocals: newImage:struct CGImage * \n DECLARE_LOCALS(&return,&newImage); [line 75]\n NULLIFY(&newImage,false); [line 75]\n " color=yellow style=filled] - 43 -> 46 ; -42 [label="42: DeclStmt \n n$31=_fun_SecTrustCopyPublicKey(0:struct __SecTrust *) [line 71]\n *&allowedPublicKey:struct __SecKey *=n$31 [line 71]\n REMOVE_TEMPS(n$31); [line 71]\n " shape="box"] + 305 -> 308 ; +304 [label="304: DeclStmt \n n$31=_fun_SecTrustCopyPublicKey(0:struct __SecTrust *) [line 71]\n *&allowedPublicKey:struct __SecKey *=n$31 [line 71]\n REMOVE_TEMPS(n$31); [line 71]\n " shape="box"] - 42 -> 41 ; -41 [label="41: Call _fun___objc_release_cf \n n$30=*&allowedPublicKey:struct __SecKey * [line 72]\n _fun___objc_release_cf(1:_Bool ,n$30:void *) [line 72]\n REMOVE_TEMPS(n$30); [line 72]\n NULLIFY(&allowedPublicKey,false); [line 72]\n APPLY_ABSTRACTION; [line 72]\n " shape="box"] + 304 -> 303 ; +303 [label="303: Call _fun___objc_release_cf \n n$30=*&allowedPublicKey:struct __SecKey * [line 72]\n _fun___objc_release_cf(1:_Bool ,n$30:void *) [line 72]\n REMOVE_TEMPS(n$30); [line 72]\n NULLIFY(&allowedPublicKey,false); [line 72]\n APPLY_ABSTRACTION; [line 72]\n " shape="box"] - 41 -> 40 ; -40 [label="40: Exit MemoryLeakExample_test2NoLeak \n " color=yellow style=filled] + 303 -> 302 ; +302 [label="302: Exit MemoryLeakExample_test2NoLeak \n " color=yellow style=filled] -39 [label="39: Start MemoryLeakExample_test2NoLeak\nFormals: \nLocals: allowedPublicKey:struct __SecKey * \n DECLARE_LOCALS(&return,&allowedPublicKey); [line 70]\n NULLIFY(&allowedPublicKey,false); [line 70]\n " color=yellow style=filled] +301 [label="301: Start MemoryLeakExample_test2NoLeak\nFormals: \nLocals: allowedPublicKey:struct __SecKey * \n DECLARE_LOCALS(&return,&allowedPublicKey); [line 70]\n NULLIFY(&allowedPublicKey,false); [line 70]\n " color=yellow style=filled] - 39 -> 42 ; -38 [label="38: Call _fun_SecTrustCopyPublicKey \n n$28=*&trust:struct __SecTrust * [line 67]\n n$29=_fun_SecTrustCopyPublicKey(n$28:struct __SecTrust *) [line 67]\n REMOVE_TEMPS(n$28,n$29); [line 67]\n NULLIFY(&trust,false); [line 67]\n APPLY_ABSTRACTION; [line 67]\n " shape="box"] + 301 -> 304 ; +300 [label="300: Call _fun_SecTrustCopyPublicKey \n n$28=*&trust:struct __SecTrust * [line 67]\n n$29=_fun_SecTrustCopyPublicKey(n$28:struct __SecTrust *) [line 67]\n REMOVE_TEMPS(n$28,n$29); [line 67]\n NULLIFY(&trust,false); [line 67]\n APPLY_ABSTRACTION; [line 67]\n " shape="box"] - 38 -> 37 ; -37 [label="37: Exit MemoryLeakExample_test2: \n " color=yellow style=filled] + 300 -> 299 ; +299 [label="299: Exit MemoryLeakExample_test2: \n " color=yellow style=filled] -36 [label="36: Start MemoryLeakExample_test2:\nFormals: trust:struct __SecTrust *\nLocals: \n DECLARE_LOCALS(&return); [line 66]\n " color=yellow style=filled] +298 [label="298: Start MemoryLeakExample_test2:\nFormals: trust:struct __SecTrust *\nLocals: \n DECLARE_LOCALS(&return); [line 66]\n " color=yellow style=filled] - 36 -> 38 ; -35 [label="35: DeclStmt \n n$26=*&rect:struct CGRect [line 59]\n n$27=_fun_CGRectGetHeight(n$26:struct CGRect ) [line 59]\n *&lineThickness:double =(0.200000 * n$27) [line 59]\n REMOVE_TEMPS(n$26,n$27); [line 59]\n NULLIFY(&rect,false); [line 59]\n NULLIFY(&lineThickness,false); [line 59]\n " shape="box"] + 298 -> 300 ; +297 [label="297: DeclStmt \n n$26=*&rect:struct CGRect [line 59]\n n$27=_fun_CGRectGetHeight(n$26:struct CGRect ) [line 59]\n *&lineThickness:double =(0.200000 * n$27) [line 59]\n REMOVE_TEMPS(n$26,n$27); [line 59]\n NULLIFY(&rect,false); [line 59]\n NULLIFY(&lineThickness,false); [line 59]\n " shape="box"] - 35 -> 34 ; -34 [label="34: DeclStmt \n n$25=_fun_CGPathCreateMutable() [line 62]\n *&path1:struct CGPath *=n$25 [line 62]\n REMOVE_TEMPS(n$25); [line 62]\n " shape="box"] + 297 -> 296 ; +296 [label="296: DeclStmt \n n$25=_fun_CGPathCreateMutable() [line 62]\n *&path1:struct CGPath *=n$25 [line 62]\n REMOVE_TEMPS(n$25); [line 62]\n " shape="box"] - 34 -> 33 ; -33 [label="33: Call _fun___objc_release_cf \n n$24=*&path1:struct CGPath * [line 63]\n _fun___objc_release_cf(1:_Bool ,n$24:void *) [line 63]\n REMOVE_TEMPS(n$24); [line 63]\n NULLIFY(&path1,false); [line 63]\n APPLY_ABSTRACTION; [line 63]\n " shape="box"] + 296 -> 295 ; +295 [label="295: Call _fun___objc_release_cf \n n$24=*&path1:struct CGPath * [line 63]\n _fun___objc_release_cf(1:_Bool ,n$24:void *) [line 63]\n REMOVE_TEMPS(n$24); [line 63]\n NULLIFY(&path1,false); [line 63]\n APPLY_ABSTRACTION; [line 63]\n " shape="box"] - 33 -> 32 ; -32 [label="32: Exit MemoryLeakExample_createCloseCrossGlyphNoLeak: \n " color=yellow style=filled] + 295 -> 294 ; +294 [label="294: Exit MemoryLeakExample_createCloseCrossGlyphNoLeak: \n " color=yellow style=filled] -31 [label="31: Start MemoryLeakExample_createCloseCrossGlyphNoLeak:\nFormals: rect:struct CGRect \nLocals: path1:struct CGPath * lineThickness:double \n DECLARE_LOCALS(&return,&path1,&lineThickness); [line 58]\n NULLIFY(&lineThickness,false); [line 58]\n NULLIFY(&path1,false); [line 58]\n " color=yellow style=filled] +293 [label="293: Start MemoryLeakExample_createCloseCrossGlyphNoLeak:\nFormals: rect:struct CGRect \nLocals: path1:struct CGPath * lineThickness:double \n DECLARE_LOCALS(&return,&path1,&lineThickness); [line 58]\n NULLIFY(&lineThickness,false); [line 58]\n NULLIFY(&path1,false); [line 58]\n " color=yellow style=filled] - 31 -> 35 ; -30 [label="30: BinaryOperatorStmt: Mul \n n$22=*&rect:struct CGRect [line 54]\n n$23=_fun_CGRectGetHeight(n$22:struct CGRect ) [line 54]\n REMOVE_TEMPS(n$22,n$23); [line 54]\n NULLIFY(&rect,false); [line 54]\n " shape="box"] + 293 -> 297 ; +292 [label="292: BinaryOperatorStmt: Mul \n n$22=*&rect:struct CGRect [line 54]\n n$23=_fun_CGRectGetHeight(n$22:struct CGRect ) [line 54]\n REMOVE_TEMPS(n$22,n$23); [line 54]\n NULLIFY(&rect,false); [line 54]\n " shape="box"] - 30 -> 29 ; -29 [label="29: Call _fun_CGPathCreateMutable \n n$21=_fun_CGPathCreateMutable() [line 55]\n REMOVE_TEMPS(n$21); [line 55]\n APPLY_ABSTRACTION; [line 55]\n " shape="box"] + 292 -> 291 ; +291 [label="291: Call _fun_CGPathCreateMutable \n n$21=_fun_CGPathCreateMutable() [line 55]\n REMOVE_TEMPS(n$21); [line 55]\n APPLY_ABSTRACTION; [line 55]\n " shape="box"] - 29 -> 28 ; -28 [label="28: Exit MemoryLeakExample_createCloseCrossGlyph: \n " color=yellow style=filled] + 291 -> 290 ; +290 [label="290: Exit MemoryLeakExample_createCloseCrossGlyph: \n " color=yellow style=filled] -27 [label="27: Start MemoryLeakExample_createCloseCrossGlyph:\nFormals: rect:struct CGRect \nLocals: \n DECLARE_LOCALS(&return); [line 53]\n " color=yellow style=filled] +289 [label="289: Start MemoryLeakExample_createCloseCrossGlyph:\nFormals: rect:struct CGRect \nLocals: \n DECLARE_LOCALS(&return); [line 53]\n " color=yellow style=filled] - 27 -> 30 ; -26 [label="26: DeclStmt \n n$20=_fun_CTFramesetterCreateWithAttributedString(0:struct __CFAttributedString *) [line 49]\n *&framesetter:struct __CTFramesetter *=n$20 [line 49]\n REMOVE_TEMPS(n$20); [line 49]\n " shape="box"] + 289 -> 292 ; +288 [label="288: DeclStmt \n n$20=_fun_CTFramesetterCreateWithAttributedString(0:struct __CFAttributedString *) [line 49]\n *&framesetter:struct __CTFramesetter *=n$20 [line 49]\n REMOVE_TEMPS(n$20); [line 49]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Call _fun___objc_release_cf \n n$19=*&framesetter:struct __CTFramesetter * [line 50]\n _fun___objc_release_cf(1:_Bool ,n$19:void *) [line 50]\n REMOVE_TEMPS(n$19); [line 50]\n NULLIFY(&framesetter,false); [line 50]\n APPLY_ABSTRACTION; [line 50]\n " shape="box"] + 288 -> 287 ; +287 [label="287: Call _fun___objc_release_cf \n n$19=*&framesetter:struct __CTFramesetter * [line 50]\n _fun___objc_release_cf(1:_Bool ,n$19:void *) [line 50]\n REMOVE_TEMPS(n$19); [line 50]\n NULLIFY(&framesetter,false); [line 50]\n APPLY_ABSTRACTION; [line 50]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit MemoryLeakExample_test1NoLeak \n " color=yellow style=filled] + 287 -> 286 ; +286 [label="286: Exit MemoryLeakExample_test1NoLeak \n " color=yellow style=filled] -23 [label="23: Start MemoryLeakExample_test1NoLeak\nFormals: \nLocals: framesetter:struct __CTFramesetter * \n DECLARE_LOCALS(&return,&framesetter); [line 48]\n NULLIFY(&framesetter,false); [line 48]\n " color=yellow style=filled] +285 [label="285: Start MemoryLeakExample_test1NoLeak\nFormals: \nLocals: framesetter:struct __CTFramesetter * \n DECLARE_LOCALS(&return,&framesetter); [line 48]\n NULLIFY(&framesetter,false); [line 48]\n " color=yellow style=filled] - 23 -> 26 ; -22 [label="22: Call _fun_CTFramesetterCreateWithAttributedString \n n$17=*&str:struct __CFAttributedString * [line 45]\n n$18=_fun_CTFramesetterCreateWithAttributedString(n$17:struct __CFAttributedString *) [line 45]\n REMOVE_TEMPS(n$17,n$18); [line 45]\n NULLIFY(&str,false); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] + 285 -> 288 ; +284 [label="284: Call _fun_CTFramesetterCreateWithAttributedString \n n$17=*&str:struct __CFAttributedString * [line 45]\n n$18=_fun_CTFramesetterCreateWithAttributedString(n$17:struct __CFAttributedString *) [line 45]\n REMOVE_TEMPS(n$17,n$18); [line 45]\n NULLIFY(&str,false); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Exit MemoryLeakExample_test1: \n " color=yellow style=filled] + 284 -> 283 ; +283 [label="283: Exit MemoryLeakExample_test1: \n " color=yellow style=filled] -20 [label="20: Start MemoryLeakExample_test1:\nFormals: str:struct __CFAttributedString *\nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] +282 [label="282: Start MemoryLeakExample_test1:\nFormals: str:struct __CFAttributedString *\nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] - 20 -> 22 ; -19 [label="19: DeclStmt \n n$16=_fun_CFAttributedStringCreateMutable(0:struct __CFAllocator *,0:long ) [line 40]\n *&maString:struct __CFAttributedString *=n$16 [line 40]\n REMOVE_TEMPS(n$16); [line 40]\n " shape="box"] + 282 -> 284 ; +281 [label="281: DeclStmt \n n$16=_fun_CFAttributedStringCreateMutable(0:struct __CFAllocator *,0:long ) [line 40]\n *&maString:struct __CFAttributedString *=n$16 [line 40]\n REMOVE_TEMPS(n$16); [line 40]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Call _fun___objc_release_cf \n n$15=*&maString:struct __CFAttributedString * [line 41]\n _fun___objc_release_cf(1:_Bool ,n$15:void *) [line 41]\n REMOVE_TEMPS(n$15); [line 41]\n NULLIFY(&maString,false); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] + 281 -> 280 ; +280 [label="280: Call _fun___objc_release_cf \n n$15=*&maString:struct __CFAttributedString * [line 41]\n _fun___objc_release_cf(1:_Bool ,n$15:void *) [line 41]\n REMOVE_TEMPS(n$15); [line 41]\n NULLIFY(&maString,false); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit MemoryLeakExample_measureFrameSizeForTextNoLeak \n " color=yellow style=filled] + 280 -> 279 ; +279 [label="279: Exit MemoryLeakExample_measureFrameSizeForTextNoLeak \n " color=yellow style=filled] -16 [label="16: Start MemoryLeakExample_measureFrameSizeForTextNoLeak\nFormals: \nLocals: maString:struct __CFAttributedString * \n DECLARE_LOCALS(&return,&maString); [line 38]\n NULLIFY(&maString,false); [line 38]\n " color=yellow style=filled] +278 [label="278: Start MemoryLeakExample_measureFrameSizeForTextNoLeak\nFormals: \nLocals: maString:struct __CFAttributedString * \n DECLARE_LOCALS(&return,&maString); [line 38]\n NULLIFY(&maString,false); [line 38]\n " color=yellow style=filled] - 16 -> 19 ; -15 [label="15: Call _fun_CFAttributedStringCreateMutable \n n$14=_fun_CFAttributedStringCreateMutable(0:struct __CFAllocator *,0:long ) [line 35]\n REMOVE_TEMPS(n$14); [line 35]\n APPLY_ABSTRACTION; [line 35]\n " shape="box"] + 278 -> 281 ; +277 [label="277: Call _fun_CFAttributedStringCreateMutable \n n$14=_fun_CFAttributedStringCreateMutable(0:struct __CFAllocator *,0:long ) [line 35]\n REMOVE_TEMPS(n$14); [line 35]\n APPLY_ABSTRACTION; [line 35]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit MemoryLeakExample_measureFrameSizeForText \n " color=yellow style=filled] + 277 -> 276 ; +276 [label="276: Exit MemoryLeakExample_measureFrameSizeForText \n " color=yellow style=filled] -13 [label="13: Start MemoryLeakExample_measureFrameSizeForText\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] +275 [label="275: Start MemoryLeakExample_measureFrameSizeForText\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: DeclStmt \n n$10=*&self:class MemoryLeakExample * [line 30]\n n$11=_fun_MemoryLeakExample_backgroundCoveringView(n$10:class MemoryLeakExample *) [line 30]\n n$12=_fun_UIView_bounds(n$11:class UIView *) [line 30]\n n$13=_fun_CGPathCreateWithRect(n$12:struct CGRect ,0:struct CGAffineTransform *) [line 30]\n *&shadowPath:struct CGPath *=n$13 [line 30]\n REMOVE_TEMPS(n$10,n$11,n$12,n$13); [line 30]\n " shape="box"] + 275 -> 277 ; +274 [label="274: DeclStmt \n n$10=*&self:class MemoryLeakExample * [line 30]\n n$11=_fun_MemoryLeakExample_backgroundCoveringView(n$10:class MemoryLeakExample *) [line 30]\n n$12=_fun_UIView_bounds(n$11:class UIView *) [line 30]\n n$13=_fun_CGPathCreateWithRect(n$12:struct CGRect ,0:struct CGAffineTransform *) [line 30]\n *&shadowPath:struct CGPath *=n$13 [line 30]\n REMOVE_TEMPS(n$10,n$11,n$12,n$13); [line 30]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Message Call: setShadowPath: \n n$6=*&self:class MemoryLeakExample * [line 31]\n n$7=_fun_MemoryLeakExample_backgroundCoveringView(n$6:class MemoryLeakExample *) [line 31]\n n$8=_fun_UIView_layer(n$7:class UIView *) [line 31]\n n$9=*&shadowPath:struct CGPath * [line 31]\n _fun_CALayer_setShadowPath:(n$8:class CALayer *,n$9:struct CGPath *) [line 31]\n REMOVE_TEMPS(n$6,n$7,n$8,n$9); [line 31]\n NULLIFY(&self,false); [line 31]\n NULLIFY(&shadowPath,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 274 -> 273 ; +273 [label="273: Message Call: setShadowPath: \n n$6=*&self:class MemoryLeakExample * [line 31]\n n$7=_fun_MemoryLeakExample_backgroundCoveringView(n$6:class MemoryLeakExample *) [line 31]\n n$8=_fun_UIView_layer(n$7:class UIView *) [line 31]\n n$9=*&shadowPath:struct CGPath * [line 31]\n _fun_CALayer_setShadowPath:(n$8:class CALayer *,n$9:struct CGPath *) [line 31]\n REMOVE_TEMPS(n$6,n$7,n$8,n$9); [line 31]\n NULLIFY(&self,false); [line 31]\n NULLIFY(&shadowPath,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit MemoryLeakExample_test \n " color=yellow style=filled] + 273 -> 272 ; +272 [label="272: Exit MemoryLeakExample_test \n " color=yellow style=filled] -9 [label="9: Start MemoryLeakExample_test\nFormals: self:class MemoryLeakExample *\nLocals: shadowPath:struct CGPath * \n DECLARE_LOCALS(&return,&shadowPath); [line 28]\n NULLIFY(&shadowPath,false); [line 28]\n " color=yellow style=filled] +271 [label="271: Start MemoryLeakExample_test\nFormals: self:class MemoryLeakExample *\nLocals: shadowPath:struct CGPath * \n DECLARE_LOCALS(&return,&shadowPath); [line 28]\n NULLIFY(&shadowPath,false); [line 28]\n " color=yellow style=filled] - 9 -> 12 ; -8 [label="8: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class UIView ):unsigned long ) [line 20]\n *&attachmentContainerView:class UIView *=n$5 [line 20]\n REMOVE_TEMPS(n$5); [line 20]\n " shape="box"] + 271 -> 274 ; +270 [label="270: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class UIView ):unsigned long ) [line 20]\n *&attachmentContainerView:class UIView *=n$5 [line 20]\n REMOVE_TEMPS(n$5); [line 20]\n " shape="box"] - 8 -> 7 ; -7 [label="7: DeclStmt \n n$2=*&attachmentContainerView:class UIView * [line 22]\n n$3=_fun_UIView_bounds(n$2:class UIView *) [line 22]\n n$4=_fun_CGPathCreateWithRect(n$3:struct CGRect ,0:struct CGAffineTransform *) [line 22]\n *&shadowPath:struct CGPath *=n$4 [line 22]\n REMOVE_TEMPS(n$2,n$3,n$4); [line 22]\n " shape="box"] + 270 -> 269 ; +269 [label="269: DeclStmt \n n$2=*&attachmentContainerView:class UIView * [line 22]\n n$3=_fun_UIView_bounds(n$2:class UIView *) [line 22]\n n$4=_fun_CGPathCreateWithRect(n$3:struct CGRect ,0:struct CGAffineTransform *) [line 22]\n *&shadowPath:struct CGPath *=n$4 [line 22]\n REMOVE_TEMPS(n$2,n$3,n$4); [line 22]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Call _fun_CGPathRelease \n n$1=*&shadowPath:struct CGPath * [line 24]\n _fun_CGPathRelease(n$1:struct CGPath *) [line 24]\n REMOVE_TEMPS(n$1); [line 24]\n NULLIFY(&shadowPath,false); [line 24]\n " shape="box"] + 269 -> 268 ; +268 [label="268: Call _fun_CGPathRelease \n n$1=*&shadowPath:struct CGPath * [line 24]\n _fun_CGPathRelease(n$1:struct CGPath *) [line 24]\n REMOVE_TEMPS(n$1); [line 24]\n NULLIFY(&shadowPath,false); [line 24]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Message Call: release \n n$0=*&attachmentContainerView:class UIView * [line 25]\n _fun___objc_release(n$0:class UIView *) [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n NULLIFY(&attachmentContainerView,false); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] + 268 -> 267 ; +267 [label="267: Message Call: release \n n$0=*&attachmentContainerView:class UIView * [line 25]\n _fun___objc_release(n$0:class UIView *) [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n NULLIFY(&attachmentContainerView,false); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit MemoryLeakExample_layoutSubviews \n " color=yellow style=filled] + 267 -> 266 ; +266 [label="266: Exit MemoryLeakExample_layoutSubviews \n " color=yellow style=filled] -3 [label="3: Start MemoryLeakExample_layoutSubviews\nFormals: self:class MemoryLeakExample *\nLocals: shadowPath:struct CGPath * attachmentContainerView:class UIView * \n DECLARE_LOCALS(&return,&shadowPath,&attachmentContainerView); [line 19]\n NULLIFY(&attachmentContainerView,false); [line 19]\n NULLIFY(&self,false); [line 19]\n NULLIFY(&shadowPath,false); [line 19]\n " color=yellow style=filled] +265 [label="265: Start MemoryLeakExample_layoutSubviews\nFormals: self:class MemoryLeakExample *\nLocals: shadowPath:struct CGPath * attachmentContainerView:class UIView * \n DECLARE_LOCALS(&return,&shadowPath,&attachmentContainerView); [line 19]\n NULLIFY(&attachmentContainerView,false); [line 19]\n NULLIFY(&self,false); [line 19]\n NULLIFY(&shadowPath,false); [line 19]\n " color=yellow style=filled] - 3 -> 8 ; -2 [label="2: Exit MemoryLeakExample_frontendChecks \n " color=yellow style=filled] + 265 -> 270 ; +264 [label="264: Exit MemoryLeakExample_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start MemoryLeakExample_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +263 [label="263: Start MemoryLeakExample_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 263 -> 264 ; +262 [label="262: Exit UICollisionBehaviorDelegate_frontendChecks \n " color=yellow style=filled] + + +261 [label="261: Start UICollisionBehaviorDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 261 -> 262 ; +260 [label="260: Exit UIDynamicAnimatorDelegate_frontendChecks \n " color=yellow style=filled] + + +259 [label="259: Start UIDynamicAnimatorDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 259 -> 260 ; +258 [label="258: Exit UIPopoverPresentationControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +257 [label="257: Start UIPopoverPresentationControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 257 -> 258 ; +256 [label="256: Exit NSTextAttachmentContainer_frontendChecks \n " color=yellow style=filled] + + +255 [label="255: Start NSTextAttachmentContainer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 255 -> 256 ; +254 [label="254: Exit NSTextLayoutOrientationProvider_frontendChecks \n " color=yellow style=filled] + + +253 [label="253: Start NSTextLayoutOrientationProvider_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 253 -> 254 ; +252 [label="252: Exit NSLayoutManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +251 [label="251: Start NSLayoutManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 251 -> 252 ; +250 [label="250: Exit NSTextStorageDelegate_frontendChecks \n " color=yellow style=filled] + + +249 [label="249: Start NSTextStorageDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 249 -> 250 ; +248 [label="248: Exit UIWebViewDelegate_frontendChecks \n " color=yellow style=filled] + + +247 [label="247: Start UIWebViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 247 -> 248 ; +246 [label="246: Exit UIVideoEditorControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +245 [label="245: Start UIVideoEditorControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 245 -> 246 ; +244 [label="244: Exit UIToolbarDelegate_frontendChecks \n " color=yellow style=filled] + + +243 [label="243: Start UIToolbarDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 243 -> 244 ; +242 [label="242: Exit UITextViewDelegate_frontendChecks \n " color=yellow style=filled] + + +241 [label="241: Start UITextViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 241 -> 242 ; +240 [label="240: Exit UITabBarControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +239 [label="239: Start UITabBarControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 239 -> 240 ; +238 [label="238: Exit UITabBarDelegate_frontendChecks \n " color=yellow style=filled] + + +237 [label="237: Start UITabBarDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 237 -> 238 ; +236 [label="236: Exit UISplitViewControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +235 [label="235: Start UISplitViewControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 235 -> 236 ; +234 [label="234: Exit EAGLDrawable_frontendChecks \n " color=yellow style=filled] + + +233 [label="233: Start EAGLDrawable_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 233 -> 234 ; +232 [label="232: Exit CAAction_frontendChecks \n " color=yellow style=filled] + + +231 [label="231: Start CAAction_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 231 -> 232 ; +230 [label="230: Exit CAMediaTiming_frontendChecks \n " color=yellow style=filled] + + +229 [label="229: Start CAMediaTiming_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 229 -> 230 ; +228 [label="228: Exit UISearchDisplayDelegate_frontendChecks \n " color=yellow style=filled] + + +227 [label="227: Start UISearchDisplayDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 227 -> 228 ; +226 [label="226: Exit UISearchResultsUpdating_frontendChecks \n " color=yellow style=filled] + + +225 [label="225: Start UISearchResultsUpdating_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 225 -> 226 ; +224 [label="224: Exit UISearchControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +223 [label="223: Start UISearchControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 223 -> 224 ; +222 [label="222: Exit UIViewControllerContextTransitioning_frontendChecks \n " color=yellow style=filled] + + +221 [label="221: Start UIViewControllerContextTransitioning_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 221 -> 222 ; +220 [label="220: Exit UIAdaptivePresentationControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +219 [label="219: Start UIAdaptivePresentationControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 219 -> 220 ; +218 [label="218: Exit UIViewControllerTransitionCoordinatorContext_frontendChecks \n " color=yellow style=filled] + + +217 [label="217: Start UIViewControllerTransitionCoordinatorContext_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 217 -> 218 ; +216 [label="216: Exit UISearchBarDelegate_frontendChecks \n " color=yellow style=filled] + + +215 [label="215: Start UISearchBarDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 215 -> 216 ; +214 [label="214: Exit UIPrintInteractionControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +213 [label="213: Start UIPrintInteractionControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 213 -> 214 ; +212 [label="212: Exit UIPrinterPickerControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +211 [label="211: Start UIPrinterPickerControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 211 -> 212 ; +210 [label="210: Exit UIPopoverBackgroundViewMethods_frontendChecks \n " color=yellow style=filled] + + +209 [label="209: Start UIPopoverBackgroundViewMethods_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 209 -> 210 ; +208 [label="208: Exit UIPopoverControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +207 [label="207: Start UIPopoverControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 207 -> 208 ; +206 [label="206: Exit UIPageViewControllerDataSource_frontendChecks \n " color=yellow style=filled] + + +205 [label="205: Start UIPageViewControllerDataSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 205 -> 206 ; +204 [label="204: Exit UIPageViewControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +203 [label="203: Start UIPageViewControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 203 -> 204 ; +202 [label="202: Exit UINavigationBarDelegate_frontendChecks \n " color=yellow style=filled] + + +201 [label="201: Start UINavigationBarDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 201 -> 202 ; +200 [label="200: Exit UITextDocumentProxy_frontendChecks \n " color=yellow style=filled] + + +199 [label="199: Start UITextDocumentProxy_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 199 -> 200 ; +198 [label="198: Exit UIImagePickerControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +197 [label="197: Start UIImagePickerControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 197 -> 198 ; +196 [label="196: Exit UIViewControllerAnimatedTransitioning_frontendChecks \n " color=yellow style=filled] + + +195 [label="195: Start UIViewControllerAnimatedTransitioning_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 195 -> 196 ; +194 [label="194: Exit UIViewControllerInteractiveTransitioning_frontendChecks \n " color=yellow style=filled] + + +193 [label="193: Start UIViewControllerInteractiveTransitioning_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 193 -> 194 ; +192 [label="192: Exit UINavigationControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +191 [label="191: Start UINavigationControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 191 -> 192 ; +190 [label="190: Exit UIDocumentMenuDelegate_frontendChecks \n " color=yellow style=filled] + + +189 [label="189: Start UIDocumentMenuDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 189 -> 190 ; +188 [label="188: Exit UIDocumentPickerDelegate_frontendChecks \n " color=yellow style=filled] + + +187 [label="187: Start UIDocumentPickerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 187 -> 188 ; +186 [label="186: Exit UIDocumentInteractionControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +185 [label="185: Start UIDocumentInteractionControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 185 -> 186 ; +184 [label="184: Exit UICollectionViewDelegateFlowLayout_frontendChecks \n " color=yellow style=filled] + + +183 [label="183: Start UICollectionViewDelegateFlowLayout_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 183 -> 184 ; +182 [label="182: Exit UICollectionViewDelegate_frontendChecks \n " color=yellow style=filled] + + +181 [label="181: Start UICollectionViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 181 -> 182 ; +180 [label="180: Exit UICollectionViewDataSource_frontendChecks \n " color=yellow style=filled] + + +179 [label="179: Start UICollectionViewDataSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 179 -> 180 ; +178 [label="178: Exit UIBarPositioningDelegate_frontendChecks \n " color=yellow style=filled] + + +177 [label="177: Start UIBarPositioningDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 177 -> 178 ; +176 [label="176: Exit UIBarPositioning_frontendChecks \n " color=yellow style=filled] + + +175 [label="175: Start UIBarPositioning_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 175 -> 176 ; +174 [label="174: Exit UIPreviewActionItem_frontendChecks \n " color=yellow style=filled] + + +173 [label="173: Start UIPreviewActionItem_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 173 -> 174 ; +172 [label="172: Exit UIViewControllerPreviewing_frontendChecks \n " color=yellow style=filled] + + +171 [label="171: Start UIViewControllerPreviewing_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 171 -> 172 ; +170 [label="170: Exit UIViewControllerPreviewingDelegate_frontendChecks \n " color=yellow style=filled] + + +169 [label="169: Start UIViewControllerPreviewingDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 169 -> 170 ; +168 [label="168: Exit UIViewControllerTransitioningDelegate_frontendChecks \n " color=yellow style=filled] + + +167 [label="167: Start UIViewControllerTransitioningDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 167 -> 168 ; +166 [label="166: Exit UIContentContainer_frontendChecks \n " color=yellow style=filled] + + +165 [label="165: Start UIContentContainer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 165 -> 166 ; +164 [label="164: Exit UIViewControllerTransitionCoordinator_frontendChecks \n " color=yellow style=filled] + + +163 [label="163: Start UIViewControllerTransitionCoordinator_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 163 -> 164 ; +162 [label="162: Exit UIObjectRestoration_frontendChecks \n " color=yellow style=filled] + + +161 [label="161: Start UIObjectRestoration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 161 -> 162 ; +160 [label="160: Exit UIDataSourceModelAssociation_frontendChecks \n " color=yellow style=filled] + + +159 [label="159: Start UIDataSourceModelAssociation_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 159 -> 160 ; +158 [label="158: Exit UIViewControllerRestoration_frontendChecks \n " color=yellow style=filled] + + +157 [label="157: Start UIViewControllerRestoration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 157 -> 158 ; +156 [label="156: Exit UIStateRestoring_frontendChecks \n " color=yellow style=filled] + + +155 [label="155: Start UIStateRestoring_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 155 -> 156 ; +154 [label="154: Exit UIApplicationDelegate_frontendChecks \n " color=yellow style=filled] + + +153 [label="153: Start UIApplicationDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 153 -> 154 ; +152 [label="152: Exit UIAlertViewDelegate_frontendChecks \n " color=yellow style=filled] + + +151 [label="151: Start UIAlertViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 151 -> 152 ; +150 [label="150: Exit UIActionSheetDelegate_frontendChecks \n " color=yellow style=filled] + + +149 [label="149: Start UIActionSheetDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 149 -> 150 ; +148 [label="148: Exit UITextSelecting_frontendChecks \n " color=yellow style=filled] + + +147 [label="147: Start UITextSelecting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 147 -> 148 ; +146 [label="146: Exit UITextFieldDelegate_frontendChecks \n " color=yellow style=filled] + + +145 [label="145: Start UITextFieldDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 145 -> 146 ; +144 [label="144: Exit UITextInput_frontendChecks \n " color=yellow style=filled] + + +143 [label="143: Start UITextInput_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 143 -> 144 ; +142 [label="142: Exit UITextInputDelegate_frontendChecks \n " color=yellow style=filled] + + +141 [label="141: Start UITextInputDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 141 -> 142 ; +140 [label="140: Exit UITextInputTokenizer_frontendChecks \n " color=yellow style=filled] + + +139 [label="139: Start UITextInputTokenizer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 139 -> 140 ; +138 [label="138: Exit UIKeyInput_frontendChecks \n " color=yellow style=filled] + + +137 [label="137: Start UIKeyInput_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 137 -> 138 ; +136 [label="136: Exit UITextInputTraits_frontendChecks \n " color=yellow style=filled] + + +135 [label="135: Start UITextInputTraits_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 135 -> 136 ; +134 [label="134: Exit UIActivityItemSource_frontendChecks \n " color=yellow style=filled] + + +133 [label="133: Start UIActivityItemSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 133 -> 134 ; +132 [label="132: Exit UIAccessibilityReadingContent_frontendChecks \n " color=yellow style=filled] + + +131 [label="131: Start UIAccessibilityReadingContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 131 -> 132 ; +130 [label="130: Exit UIGuidedAccessRestrictionDelegate_frontendChecks \n " color=yellow style=filled] + + +129 [label="129: Start UIGuidedAccessRestrictionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 129 -> 130 ; +128 [label="128: Exit UIAccessibilityIdentification_frontendChecks \n " color=yellow style=filled] + + +127 [label="127: Start UIAccessibilityIdentification_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 127 -> 128 ; +126 [label="126: Exit UIScrollViewAccessibilityDelegate_frontendChecks \n " color=yellow style=filled] + + +125 [label="125: Start UIScrollViewAccessibilityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 125 -> 126 ; +124 [label="124: Exit UIPickerViewAccessibilityDelegate_frontendChecks \n " color=yellow style=filled] + + +123 [label="123: Start UIPickerViewAccessibilityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 123 -> 124 ; +122 [label="122: Exit UIPickerViewDelegate_frontendChecks \n " color=yellow style=filled] + + +121 [label="121: Start UIPickerViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 121 -> 122 ; +120 [label="120: Exit UIPickerViewDataSource_frontendChecks \n " color=yellow style=filled] + + +119 [label="119: Start UIPickerViewDataSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 119 -> 120 ; +118 [label="118: Exit UITableViewDelegate_frontendChecks \n " color=yellow style=filled] + + +117 [label="117: Start UITableViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 117 -> 118 ; +116 [label="116: Exit UITableViewDataSource_frontendChecks \n " color=yellow style=filled] + + +115 [label="115: Start UITableViewDataSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 115 -> 116 ; +114 [label="114: Exit UIGestureRecognizerDelegate_frontendChecks \n " color=yellow style=filled] + + +113 [label="113: Start UIGestureRecognizerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 113 -> 114 ; +112 [label="112: Exit UIScrollViewDelegate_frontendChecks \n " color=yellow style=filled] + + +111 [label="111: Start UIScrollViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 111 -> 112 ; +110 [label="110: Exit UICoordinateSpace_frontendChecks \n " color=yellow style=filled] + + +109 [label="109: Start UICoordinateSpace_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 109 -> 110 ; +108 [label="108: Exit UIFocusEnvironment_frontendChecks \n " color=yellow style=filled] + + +107 [label="107: Start UIFocusEnvironment_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 107 -> 108 ; +106 [label="106: Exit UITraitEnvironment_frontendChecks \n " color=yellow style=filled] + + +105 [label="105: Start UITraitEnvironment_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 105 -> 106 ; +104 [label="104: Exit UIInputViewAudioFeedback_frontendChecks \n " color=yellow style=filled] + + +103 [label="103: Start UIInputViewAudioFeedback_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 103 -> 104 ; +102 [label="102: Exit UILayoutSupport_frontendChecks \n " color=yellow style=filled] + + +101 [label="101: Start UILayoutSupport_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 101 -> 102 ; +100 [label="100: Exit UIDynamicItem_frontendChecks \n " color=yellow style=filled] + + +99 [label="99: Start UIDynamicItem_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 99 -> 100 ; +98 [label="98: Exit UIAppearance_frontendChecks \n " color=yellow style=filled] + + +97 [label="97: Start UIAppearance_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 97 -> 98 ; +96 [label="96: Exit UIAppearanceContainer_frontendChecks \n " color=yellow style=filled] + + +95 [label="95: Start UIAppearanceContainer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 95 -> 96 ; +94 [label="94: Exit CIFilterConstructor_frontendChecks \n " color=yellow style=filled] + + +93 [label="93: Start CIFilterConstructor_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 93 -> 94 ; +92 [label="92: Exit MTLCommandBuffer_frontendChecks \n " color=yellow style=filled] + + +91 [label="91: Start MTLCommandBuffer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 91 -> 92 ; +90 [label="90: Exit MTLDevice_frontendChecks \n " color=yellow style=filled] + + +89 [label="89: Start MTLDevice_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 89 -> 90 ; +88 [label="88: Exit MTLTexture_frontendChecks \n " color=yellow style=filled] + + +87 [label="87: Start MTLTexture_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 87 -> 88 ; +86 [label="86: Exit UIAccelerometerDelegate_frontendChecks \n " color=yellow style=filled] + + +85 [label="85: Start UIAccelerometerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/MemoryLeakExample.h b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/MemoryLeakExample.h index 0669aae46..addf42563 100644 --- a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/MemoryLeakExample.h +++ b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/MemoryLeakExample.h @@ -12,7 +12,7 @@ @interface MemoryLeakExample : NSObject -@property UIView* backgroundCoveringView; -@property UIView* attachmentContainerView; +@property(strong) UIView* backgroundCoveringView; +@property(strong) UIView* attachmentContainerView; @end diff --git a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/RetainReleaseExample.dot b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/RetainReleaseExample.dot index d40579273..701015040 100644 --- a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/RetainReleaseExample.dot +++ b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/RetainReleaseExample.dot @@ -1,27 +1,69 @@ digraph iCFG { -7 [label="7: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 21]\n n$4=_fun_NSObject_init(n$3:class A *) virtual [line 21]\n *&a:class A *=n$4 [line 21]\n REMOVE_TEMPS(n$3,n$4); [line 21]\n " shape="box"] +19 [label="19: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 21]\n n$4=_fun_NSObject_init(n$3:class A *) virtual [line 21]\n *&a:class A *=n$4 [line 21]\n REMOVE_TEMPS(n$3,n$4); [line 21]\n " shape="box"] - 7 -> 6 ; -6 [label="6: Message Call: retain \n n$1=*&a:class A * [line 22]\n n$2=_fun___objc_retain(n$1:class A *) [line 22]\n REMOVE_TEMPS(n$1,n$2); [line 22]\n " shape="box"] + 19 -> 18 ; +18 [label="18: Message Call: retain \n n$1=*&a:class A * [line 22]\n n$2=_fun___objc_retain(n$1:class A *) [line 22]\n REMOVE_TEMPS(n$1,n$2); [line 22]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Message Call: release \n n$0=*&a:class A * [line 23]\n _fun___objc_release(n$0:class A *) [line 23]\n REMOVE_TEMPS(n$0); [line 23]\n NULLIFY(&a,false); [line 23]\n APPLY_ABSTRACTION; [line 23]\n " shape="box"] + 18 -> 17 ; +17 [label="17: Message Call: release \n n$0=*&a:class A * [line 23]\n _fun___objc_release(n$0:class A *) [line 23]\n REMOVE_TEMPS(n$0); [line 23]\n NULLIFY(&a,false); [line 23]\n APPLY_ABSTRACTION; [line 23]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit test \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit test \n " color=yellow style=filled] -3 [label="3: Start test\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 20]\n NULLIFY(&a,false); [line 20]\n " color=yellow style=filled] +15 [label="15: Start test\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 20]\n NULLIFY(&a,false); [line 20]\n " color=yellow style=filled] - 3 -> 7 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 15 -> 19 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/RetainReleaseExample2.dot b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/RetainReleaseExample2.dot index 238587bc9..90d63af42 100644 --- a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/RetainReleaseExample2.dot +++ b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/RetainReleaseExample2.dot @@ -1,130 +1,172 @@ digraph iCFG { -34 [label="34: Call _fun___objc_release \n n$1=*&a:class A * [line 65]\n _fun___objc_release(n$1:class A *) [line 65]\n REMOVE_TEMPS(n$1); [line 65]\n NULLIFY(&a,false); [line 65]\n APPLY_ABSTRACTION; [line 65]\n " shape="box"] +46 [label="46: Call _fun___objc_release \n n$1=*&a:class A * [line 65]\n _fun___objc_release(n$1:class A *) [line 65]\n REMOVE_TEMPS(n$1); [line 65]\n NULLIFY(&a,false); [line 65]\n APPLY_ABSTRACTION; [line 65]\n " shape="box"] - 34 -> 31 ; -33 [label="33: Prune (false branch) \n n$0=*&a:class A * [line 64]\n PRUNE((n$0 == 0), false); [line 64]\n REMOVE_TEMPS(n$0); [line 64]\n APPLY_ABSTRACTION; [line 64]\n " shape="invhouse"] + 46 -> 43 ; +45 [label="45: Prune (false branch) \n n$0=*&a:class A * [line 64]\n PRUNE((n$0 == 0), false); [line 64]\n REMOVE_TEMPS(n$0); [line 64]\n APPLY_ABSTRACTION; [line 64]\n " shape="invhouse"] - 33 -> 31 ; -32 [label="32: Prune (true branch) \n n$0=*&a:class A * [line 64]\n PRUNE((n$0 != 0), true); [line 64]\n REMOVE_TEMPS(n$0); [line 64]\n " shape="invhouse"] + 45 -> 43 ; +44 [label="44: Prune (true branch) \n n$0=*&a:class A * [line 64]\n PRUNE((n$0 != 0), true); [line 64]\n REMOVE_TEMPS(n$0); [line 64]\n " shape="invhouse"] - 32 -> 34 ; -31 [label="31: + \n NULLIFY(&a,false); [line 64]\n " ] + 44 -> 46 ; +43 [label="43: + \n NULLIFY(&a,false); [line 64]\n " ] + + + 43 -> 42 ; +42 [label="42: Exit test7 \n " color=yellow style=filled] + + +41 [label="41: Start test7\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 63]\n " color=yellow style=filled] + + + 41 -> 44 ; + 41 -> 45 ; +40 [label="40: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 57]\n n$4=_fun_NSObject_init(n$3:class A *) virtual [line 57]\n *&a:class A *=n$4 [line 57]\n REMOVE_TEMPS(n$3,n$4); [line 57]\n " shape="box"] + + + 40 -> 39 ; +39 [label="39: Message Call: retain \n n$1=*&a:class A * [line 58]\n n$2=_fun___objc_retain(n$1:class A *) [line 58]\n REMOVE_TEMPS(n$1,n$2); [line 58]\n " shape="box"] + + + 39 -> 38 ; +38 [label="38: Message Call: release \n n$0=*&a:class A * [line 59]\n _fun___objc_release(n$0:class A *) [line 59]\n REMOVE_TEMPS(n$0); [line 59]\n NULLIFY(&a,false); [line 59]\n APPLY_ABSTRACTION; [line 59]\n " shape="box"] + + + 38 -> 37 ; +37 [label="37: Exit test6 \n " color=yellow style=filled] + + +36 [label="36: Start test6\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 56]\n NULLIFY(&a,false); [line 56]\n " color=yellow style=filled] + + + 36 -> 40 ; +35 [label="35: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 51]\n n$2=_fun_NSObject_init(n$1:class A *) virtual [line 51]\n *&a:class A *=n$2 [line 51]\n REMOVE_TEMPS(n$1,n$2); [line 51]\n " shape="box"] + + + 35 -> 34 ; +34 [label="34: Message Call: release \n n$0=*&a:class A * [line 52]\n _fun___objc_release(n$0:class A *) [line 52]\n REMOVE_TEMPS(n$0); [line 52]\n NULLIFY(&a,false); [line 52]\n APPLY_ABSTRACTION; [line 52]\n " shape="box"] + + + 34 -> 33 ; +33 [label="33: Exit test5 \n " color=yellow style=filled] + + +32 [label="32: Start test5\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 50]\n NULLIFY(&a,false); [line 50]\n " color=yellow style=filled] + + + 32 -> 35 ; +31 [label="31: DeclStmt \n n$1=_fun_test() [line 45]\n *&b:class A *=n$1 [line 45]\n REMOVE_TEMPS(n$1); [line 45]\n " shape="box"] 31 -> 30 ; -30 [label="30: Exit test7 \n " color=yellow style=filled] +30 [label="30: Message Call: release \n n$0=*&b:class A * [line 46]\n _fun___objc_release(n$0:class A *) [line 46]\n REMOVE_TEMPS(n$0); [line 46]\n NULLIFY(&b,false); [line 46]\n APPLY_ABSTRACTION; [line 46]\n " shape="box"] -29 [label="29: Start test7\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 63]\n " color=yellow style=filled] + 30 -> 29 ; +29 [label="29: Exit test4 \n " color=yellow style=filled] - 29 -> 32 ; - 29 -> 33 ; -28 [label="28: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 57]\n n$4=_fun_NSObject_init(n$3:class A *) virtual [line 57]\n *&a:class A *=n$4 [line 57]\n REMOVE_TEMPS(n$3,n$4); [line 57]\n " shape="box"] +28 [label="28: Start test4\nFormals: \nLocals: b:class A * \n DECLARE_LOCALS(&return,&b); [line 43]\n NULLIFY(&b,false); [line 43]\n " color=yellow style=filled] - 28 -> 27 ; -27 [label="27: Message Call: retain \n n$1=*&a:class A * [line 58]\n n$2=_fun___objc_retain(n$1:class A *) [line 58]\n REMOVE_TEMPS(n$1,n$2); [line 58]\n " shape="box"] + 28 -> 31 ; +27 [label="27: DeclStmt \n n$0=_fun_test() [line 40]\n *&b:class A *=n$0 [line 40]\n REMOVE_TEMPS(n$0); [line 40]\n NULLIFY(&b,false); [line 40]\n APPLY_ABSTRACTION; [line 40]\n " shape="box"] 27 -> 26 ; -26 [label="26: Message Call: release \n n$0=*&a:class A * [line 59]\n _fun___objc_release(n$0:class A *) [line 59]\n REMOVE_TEMPS(n$0); [line 59]\n NULLIFY(&a,false); [line 59]\n APPLY_ABSTRACTION; [line 59]\n " shape="box"] +26 [label="26: Exit test3 \n " color=yellow style=filled] - 26 -> 25 ; -25 [label="25: Exit test6 \n " color=yellow style=filled] +25 [label="25: Start test3\nFormals: \nLocals: b:class A * \n DECLARE_LOCALS(&return,&b); [line 40]\n NULLIFY(&b,false); [line 40]\n " color=yellow style=filled] -24 [label="24: Start test6\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 56]\n NULLIFY(&a,false); [line 56]\n " color=yellow style=filled] + 25 -> 27 ; +24 [label="24: DeclStmt \n n$1=_fun_test() [line 35]\n *&b:class A *=n$1 [line 35]\n REMOVE_TEMPS(n$1); [line 35]\n " shape="box"] - 24 -> 28 ; -23 [label="23: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 51]\n n$2=_fun_NSObject_init(n$1:class A *) virtual [line 51]\n *&a:class A *=n$2 [line 51]\n REMOVE_TEMPS(n$1,n$2); [line 51]\n " shape="box"] + 24 -> 23 ; +23 [label="23: BinaryOperatorStmt: Assign \n n$0=*&b:class A * [line 36]\n *&#GB$g:class A *=n$0 [line 36]\n REMOVE_TEMPS(n$0); [line 36]\n NULLIFY(&b,false); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] 23 -> 22 ; -22 [label="22: Message Call: release \n n$0=*&a:class A * [line 52]\n _fun___objc_release(n$0:class A *) [line 52]\n REMOVE_TEMPS(n$0); [line 52]\n NULLIFY(&a,false); [line 52]\n APPLY_ABSTRACTION; [line 52]\n " shape="box"] +22 [label="22: Exit test2 \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Exit test5 \n " color=yellow style=filled] +21 [label="21: Start test2\nFormals: \nLocals: b:class A * \n DECLARE_LOCALS(&return,&b); [line 33]\n NULLIFY(&b,false); [line 33]\n " color=yellow style=filled] -20 [label="20: Start test5\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 50]\n NULLIFY(&a,false); [line 50]\n " color=yellow style=filled] + 21 -> 24 ; +20 [label="20: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 25]\n n$5=_fun_NSObject_init(n$4:class A *) virtual [line 25]\n *&a:class A *=n$5 [line 25]\n REMOVE_TEMPS(n$4,n$5); [line 25]\n " shape="box"] - 20 -> 23 ; -19 [label="19: DeclStmt \n n$1=_fun_test() [line 45]\n *&b:class A *=n$1 [line 45]\n REMOVE_TEMPS(n$1); [line 45]\n " shape="box"] + 20 -> 19 ; +19 [label="19: Message Call: retain \n n$2=*&a:class A * [line 26]\n n$3=_fun___objc_retain(n$2:class A *) [line 26]\n REMOVE_TEMPS(n$2,n$3); [line 26]\n " shape="box"] 19 -> 18 ; -18 [label="18: Message Call: release \n n$0=*&b:class A * [line 46]\n _fun___objc_release(n$0:class A *) [line 46]\n REMOVE_TEMPS(n$0); [line 46]\n NULLIFY(&b,false); [line 46]\n APPLY_ABSTRACTION; [line 46]\n " shape="box"] +18 [label="18: Message Call: release \n n$1=*&a:class A * [line 27]\n _fun___objc_release(n$1:class A *) [line 27]\n REMOVE_TEMPS(n$1); [line 27]\n " shape="box"] 18 -> 17 ; -17 [label="17: Exit test4 \n " color=yellow style=filled] +17 [label="17: Return Stmt \n n$0=*&a:class A * [line 29]\n *&return:class A *=n$0 [line 29]\n REMOVE_TEMPS(n$0); [line 29]\n NULLIFY(&a,false); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] -16 [label="16: Start test4\nFormals: \nLocals: b:class A * \n DECLARE_LOCALS(&return,&b); [line 43]\n NULLIFY(&b,false); [line 43]\n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit test \n " color=yellow style=filled] - 16 -> 19 ; -15 [label="15: DeclStmt \n n$0=_fun_test() [line 40]\n *&b:class A *=n$0 [line 40]\n REMOVE_TEMPS(n$0); [line 40]\n NULLIFY(&b,false); [line 40]\n APPLY_ABSTRACTION; [line 40]\n " shape="box"] +15 [label="15: Start test\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 24]\n NULLIFY(&a,false); [line 24]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit test3 \n " color=yellow style=filled] + 15 -> 20 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] -13 [label="13: Start test3\nFormals: \nLocals: b:class A * \n DECLARE_LOCALS(&return,&b); [line 40]\n NULLIFY(&b,false); [line 40]\n " color=yellow style=filled] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: DeclStmt \n n$1=_fun_test() [line 35]\n *&b:class A *=n$1 [line 35]\n REMOVE_TEMPS(n$1); [line 35]\n " shape="box"] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$0=*&b:class A * [line 36]\n *&#GB$g:class A *=n$0 [line 36]\n REMOVE_TEMPS(n$0); [line 36]\n NULLIFY(&b,false); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Exit test2 \n " color=yellow style=filled] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] -9 [label="9: Start test2\nFormals: \nLocals: b:class A * \n DECLARE_LOCALS(&return,&b); [line 33]\n NULLIFY(&b,false); [line 33]\n " color=yellow style=filled] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 9 -> 12 ; -8 [label="8: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 25]\n n$5=_fun_NSObject_init(n$4:class A *) virtual [line 25]\n *&a:class A *=n$5 [line 25]\n REMOVE_TEMPS(n$4,n$5); [line 25]\n " shape="box"] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Message Call: retain \n n$2=*&a:class A * [line 26]\n n$3=_fun___objc_retain(n$2:class A *) [line 26]\n REMOVE_TEMPS(n$2,n$3); [line 26]\n " shape="box"] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: Message Call: release \n n$1=*&a:class A * [line 27]\n _fun___objc_release(n$1:class A *) [line 27]\n REMOVE_TEMPS(n$1); [line 27]\n " shape="box"] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&a:class A * [line 29]\n *&return:class A *=n$0 [line 29]\n REMOVE_TEMPS(n$0); [line 29]\n NULLIFY(&a,false); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit test \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start test\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 24]\n NULLIFY(&a,false); [line 24]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 8 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/TollBridgeExample.dot b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/TollBridgeExample.dot index 749035e1d..a8b828b5b 100644 --- a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/TollBridgeExample.dot +++ b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/TollBridgeExample.dot @@ -1,79 +1,373 @@ digraph iCFG { -21 [label="21: Return Stmt \n n$0=_fun___builtin___CFStringMakeConstantString(\"Icon\":char *) [line 41]\n n$1=_fun_CTFontCreateWithName(n$0:struct __CFString *,17.000000:double ,0:struct CGAffineTransform *) [line 41]\n n$2=_fun___objc_cast(n$1:void *,sizeof(void ):unsigned long ) [line 41]\n *&return:struct __CTFont *=n$2 [line 41]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] +105 [label="105: Return Stmt \n n$0=_fun___builtin___CFStringMakeConstantString(\"Icon\":char *) [line 41]\n n$1=_fun_CTFontCreateWithName(n$0:struct __CFString *,17.000000:double ,0:struct CGAffineTransform *) [line 41]\n n$2=_fun___objc_cast(n$1:void *,sizeof(void ):unsigned long ) [line 41]\n *&return:struct __CTFont *=n$2 [line 41]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Exit cfautorelease_test \n " color=yellow style=filled] + 105 -> 104 ; +104 [label="104: Exit cfautorelease_test \n " color=yellow style=filled] -19 [label="19: Start cfautorelease_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] +103 [label="103: Start cfautorelease_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 40]\n " color=yellow style=filled] - 19 -> 21 ; -18 [label="18: DeclStmt \n n$8=_fun_CFHTTPMessageCopyAllHeaderFields(0:struct __CFHTTPMessage *) [line 36]\n *&ref:struct __CFDictionary *=n$8 [line 36]\n REMOVE_TEMPS(n$8); [line 36]\n " shape="box"] + 103 -> 105 ; +102 [label="102: DeclStmt \n n$8=_fun_CFHTTPMessageCopyAllHeaderFields(0:struct __CFHTTPMessage *) [line 36]\n *&ref:struct __CFDictionary *=n$8 [line 36]\n REMOVE_TEMPS(n$8); [line 36]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Call _fun_CFBridgingRelease \n n$6=*&ref:struct __CFDictionary * [line 37]\n n$7=_fun___objc_cast(n$6:void *,sizeof(struct objc_object ):unsigned long ) [line 37]\n REMOVE_TEMPS(n$6,n$7); [line 37]\n NULLIFY(&ref,false); [line 37]\n APPLY_ABSTRACTION; [line 37]\n " shape="box"] + 102 -> 101 ; +101 [label="101: Call _fun_CFBridgingRelease \n n$6=*&ref:struct __CFDictionary * [line 37]\n n$7=_fun___objc_cast(n$6:void *,sizeof(struct objc_object ):unsigned long ) [line 37]\n REMOVE_TEMPS(n$6,n$7); [line 37]\n NULLIFY(&ref,false); [line 37]\n APPLY_ABSTRACTION; [line 37]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Exit TollBridgeExample__readHTTPHeader \n " color=yellow style=filled] + 101 -> 100 ; +100 [label="100: Exit TollBridgeExample__readHTTPHeader \n " color=yellow style=filled] -15 [label="15: Start TollBridgeExample__readHTTPHeader\nFormals: self:class TollBridgeExample *\nLocals: ref:struct __CFDictionary * \n DECLARE_LOCALS(&return,&ref); [line 34]\n NULLIFY(&ref,false); [line 34]\n NULLIFY(&self,false); [line 34]\n " color=yellow style=filled] +99 [label="99: Start TollBridgeExample__readHTTPHeader\nFormals: self:class TollBridgeExample *\nLocals: ref:struct __CFDictionary * \n DECLARE_LOCALS(&return,&ref); [line 34]\n NULLIFY(&ref,false); [line 34]\n NULLIFY(&self,false); [line 34]\n " color=yellow style=filled] - 15 -> 18 ; -14 [label="14: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class NSLocale ):unsigned long ) [line 30]\n *&observer:struct objc_object *=n$5 [line 30]\n REMOVE_TEMPS(n$5); [line 30]\n " shape="box"] + 99 -> 102 ; +98 [label="98: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class NSLocale ):unsigned long ) [line 30]\n *&observer:struct objc_object *=n$5 [line 30]\n REMOVE_TEMPS(n$5); [line 30]\n " shape="box"] - 14 -> 13 ; -13 [label="13: DeclStmt \n n$4=*&observer:struct objc_object * [line 31]\n *&a:struct __CFLocale *=n$4 [line 31]\n REMOVE_TEMPS(n$4); [line 31]\n NULLIFY(&a,false); [line 31]\n NULLIFY(&observer,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 98 -> 97 ; +97 [label="97: DeclStmt \n n$4=*&observer:struct objc_object * [line 31]\n *&a:struct __CFLocale *=n$4 [line 31]\n REMOVE_TEMPS(n$4); [line 31]\n NULLIFY(&a,false); [line 31]\n NULLIFY(&observer,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit TollBridgeExample_brideRetained \n " color=yellow style=filled] + 97 -> 96 ; +96 [label="96: Exit TollBridgeExample_brideRetained \n " color=yellow style=filled] -11 [label="11: Start TollBridgeExample_brideRetained\nFormals: self:class TollBridgeExample *\nLocals: a:struct __CFLocale * observer:struct objc_object * \n DECLARE_LOCALS(&return,&a,&observer); [line 29]\n NULLIFY(&a,false); [line 29]\n NULLIFY(&observer,false); [line 29]\n NULLIFY(&self,false); [line 29]\n " color=yellow style=filled] +95 [label="95: Start TollBridgeExample_brideRetained\nFormals: self:class TollBridgeExample *\nLocals: a:struct __CFLocale * observer:struct objc_object * \n DECLARE_LOCALS(&return,&a,&observer); [line 29]\n NULLIFY(&a,false); [line 29]\n NULLIFY(&observer,false); [line 29]\n NULLIFY(&self,false); [line 29]\n " color=yellow style=filled] - 11 -> 14 ; -10 [label="10: DeclStmt \n n$3=_fun_CFLocaleCreate(0:struct __CFAllocator *,0:struct __CFString *) [line 25]\n *&nameRef:struct __CFLocale *=n$3 [line 25]\n REMOVE_TEMPS(n$3); [line 25]\n " shape="box"] + 95 -> 98 ; +94 [label="94: DeclStmt \n n$3=_fun_CFLocaleCreate(0:struct __CFAllocator *,0:struct __CFString *) [line 25]\n *&nameRef:struct __CFLocale *=n$3 [line 25]\n REMOVE_TEMPS(n$3); [line 25]\n " shape="box"] - 10 -> 9 ; -9 [label="9: DeclStmt \n n$2=*&nameRef:struct __CFLocale * [line 26]\n *&a:class NSLocale *=(struct __CFLocale *)n$2 [line 26]\n REMOVE_TEMPS(n$2); [line 26]\n NULLIFY(&a,false); [line 26]\n NULLIFY(&nameRef,false); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] + 94 -> 93 ; +93 [label="93: DeclStmt \n n$2=*&nameRef:struct __CFLocale * [line 26]\n *&a:class NSLocale *=(struct __CFLocale *)n$2 [line 26]\n REMOVE_TEMPS(n$2); [line 26]\n NULLIFY(&a,false); [line 26]\n NULLIFY(&nameRef,false); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit TollBridgeExample_bridge \n " color=yellow style=filled] + 93 -> 92 ; +92 [label="92: Exit TollBridgeExample_bridge \n " color=yellow style=filled] -7 [label="7: Start TollBridgeExample_bridge\nFormals: self:class TollBridgeExample *\nLocals: a:class NSLocale * nameRef:struct __CFLocale * \n DECLARE_LOCALS(&return,&a,&nameRef); [line 24]\n NULLIFY(&a,false); [line 24]\n NULLIFY(&nameRef,false); [line 24]\n NULLIFY(&self,false); [line 24]\n " color=yellow style=filled] +91 [label="91: Start TollBridgeExample_bridge\nFormals: self:class TollBridgeExample *\nLocals: a:class NSLocale * nameRef:struct __CFLocale * \n DECLARE_LOCALS(&return,&a,&nameRef); [line 24]\n NULLIFY(&a,false); [line 24]\n NULLIFY(&nameRef,false); [line 24]\n NULLIFY(&self,false); [line 24]\n " color=yellow style=filled] - 7 -> 10 ; -6 [label="6: DeclStmt \n n$1=_fun_CFLocaleCreate(0:struct __CFAllocator *,0:struct __CFString *) [line 20]\n *&nameRef:struct __CFLocale *=n$1 [line 20]\n REMOVE_TEMPS(n$1); [line 20]\n " shape="box"] + 91 -> 94 ; +90 [label="90: DeclStmt \n n$1=_fun_CFLocaleCreate(0:struct __CFAllocator *,0:struct __CFString *) [line 20]\n *&nameRef:struct __CFLocale *=n$1 [line 20]\n REMOVE_TEMPS(n$1); [line 20]\n " shape="box"] - 6 -> 5 ; -5 [label="5: DeclStmt \n n$0=*&nameRef:struct __CFLocale * [line 21]\n *&a:class NSLocale *=(struct __CFLocale *)n$0 [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n NULLIFY(&a,false); [line 21]\n NULLIFY(&nameRef,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] + 90 -> 89 ; +89 [label="89: DeclStmt \n n$0=*&nameRef:struct __CFLocale * [line 21]\n *&a:class NSLocale *=(struct __CFLocale *)n$0 [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n NULLIFY(&a,false); [line 21]\n NULLIFY(&nameRef,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit TollBridgeExample_bridgeTransfer \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit TollBridgeExample_bridgeTransfer \n " color=yellow style=filled] -3 [label="3: Start TollBridgeExample_bridgeTransfer\nFormals: self:class TollBridgeExample *\nLocals: a:class NSLocale * nameRef:struct __CFLocale * \n DECLARE_LOCALS(&return,&a,&nameRef); [line 19]\n NULLIFY(&a,false); [line 19]\n NULLIFY(&nameRef,false); [line 19]\n NULLIFY(&self,false); [line 19]\n " color=yellow style=filled] +87 [label="87: Start TollBridgeExample_bridgeTransfer\nFormals: self:class TollBridgeExample *\nLocals: a:class NSLocale * nameRef:struct __CFLocale * \n DECLARE_LOCALS(&return,&a,&nameRef); [line 19]\n NULLIFY(&a,false); [line 19]\n NULLIFY(&nameRef,false); [line 19]\n NULLIFY(&self,false); [line 19]\n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit TollBridgeExample_frontendChecks \n " color=yellow style=filled] + 87 -> 90 ; +86 [label="86: Exit TollBridgeExample_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start TollBridgeExample_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start TollBridgeExample_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/arc_methods.dot b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/arc_methods.dot index 84e15d776..69bb072dc 100644 --- a/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/arc_methods.dot +++ b/infer/tests/codetoanalyze/objc/errors/memory_leaks_benchmark/arc_methods.dot @@ -1,65 +1,107 @@ digraph iCFG { -17 [label="17: DeclStmt \n n$3=_fun_A_newA() [line 42]\n *&a1:class A *=n$3 [line 42]\n REMOVE_TEMPS(n$3); [line 42]\n " shape="box"] +29 [label="29: DeclStmt \n n$3=_fun_A_newA() [line 42]\n *&a1:class A *=n$3 [line 42]\n REMOVE_TEMPS(n$3); [line 42]\n " shape="box"] + + + 29 -> 28 ; +28 [label="28: DeclStmt \n n$2=*&a1:class A * [line 43]\n _fun___objc_retain(n$2:class A *) [line 43]\n *&aa:class A *=n$2 [line 43]\n REMOVE_TEMPS(n$2); [line 43]\n NULLIFY(&a1,false); [line 43]\n NULLIFY(&aa,false); [line 43]\n " shape="box"] + + + 28 -> 27 ; +27 [label="27: DeclStmt \n n$1=_fun_A_someA() [line 44]\n _fun___objc_retain(n$1:class A *) [line 44]\n *&a2:class A *=n$1 [line 44]\n REMOVE_TEMPS(n$1); [line 44]\n " shape="box"] + + + 27 -> 26 ; +26 [label="26: DeclStmt \n n$0=*&a2:class A * [line 45]\n _fun___objc_retain(n$0:class A *) [line 45]\n *&ab:class A *=n$0 [line 45]\n REMOVE_TEMPS(n$0); [line 45]\n NULLIFY(&a2,false); [line 45]\n NULLIFY(&ab,false); [line 45]\n " shape="box"] + + + 26 -> 25 ; +25 [label="25: Return Stmt \n *&return:int =0 [line 46]\n APPLY_ABSTRACTION; [line 46]\n " shape="box"] + + + 25 -> 24 ; +24 [label="24: Exit main \n " color=yellow style=filled] + + +23 [label="23: Start main\nFormals: \nLocals: ab:class A * a2:class A * aa:class A * a1:class A * \n DECLARE_LOCALS(&return,&ab,&a2,&aa,&a1); [line 35]\n NULLIFY(&a1,false); [line 35]\n NULLIFY(&a2,false); [line 35]\n NULLIFY(&aa,false); [line 35]\n NULLIFY(&ab,false); [line 35]\n " color=yellow style=filled] + + + 23 -> 29 ; +22 [label="22: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 28]\n n$6=_fun_NSObject_init(n$5:class A *) virtual [line 28]\n *&a:class A *=n$6 [line 28]\n REMOVE_TEMPS(n$5,n$6); [line 28]\n " shape="box"] + + + 22 -> 21 ; +21 [label="21: Return Stmt \n n$3=*&a:class A * [line 30]\n *&return:class A *=n$3 [line 30]\n n$4=_fun___set_autorelease_attribute(n$3:class A *) [line 30]\n REMOVE_TEMPS(n$3,n$4); [line 30]\n NULLIFY(&a,false); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] + + + 21 -> 20 ; +20 [label="20: Exit A_someA \n " color=yellow style=filled] + + +19 [label="19: Start A_someA\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 27]\n NULLIFY(&a,false); [line 27]\n " color=yellow style=filled] + + + 19 -> 22 ; +18 [label="18: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 23]\n n$2=_fun_NSObject_init(n$1:class A *) virtual [line 23]\n *&a:class A *=n$2 [line 23]\n REMOVE_TEMPS(n$1,n$2); [line 23]\n " shape="box"] + + + 18 -> 17 ; +17 [label="17: Return Stmt \n n$0=*&a:class A * [line 24]\n *&return:class A *=n$0 [line 24]\n REMOVE_TEMPS(n$0); [line 24]\n NULLIFY(&a,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] 17 -> 16 ; -16 [label="16: DeclStmt \n n$2=*&a1:class A * [line 43]\n _fun___objc_retain(n$2:class A *) [line 43]\n *&aa:class A *=n$2 [line 43]\n REMOVE_TEMPS(n$2); [line 43]\n NULLIFY(&a1,false); [line 43]\n NULLIFY(&aa,false); [line 43]\n " shape="box"] +16 [label="16: Exit A_newA \n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: DeclStmt \n n$1=_fun_A_someA() [line 44]\n _fun___objc_retain(n$1:class A *) [line 44]\n *&a2:class A *=n$1 [line 44]\n REMOVE_TEMPS(n$1); [line 44]\n " shape="box"] +15 [label="15: Start A_newA\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 22]\n NULLIFY(&a,false); [line 22]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: DeclStmt \n n$0=*&a2:class A * [line 45]\n _fun___objc_retain(n$0:class A *) [line 45]\n *&ab:class A *=n$0 [line 45]\n REMOVE_TEMPS(n$0); [line 45]\n NULLIFY(&a2,false); [line 45]\n NULLIFY(&ab,false); [line 45]\n " shape="box"] + 15 -> 18 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Return Stmt \n *&return:int =0 [line 46]\n APPLY_ABSTRACTION; [line 46]\n " shape="box"] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: Exit main \n " color=yellow style=filled] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] -11 [label="11: Start main\nFormals: \nLocals: ab:class A * a2:class A * aa:class A * a1:class A * \n DECLARE_LOCALS(&return,&ab,&a2,&aa,&a1); [line 35]\n NULLIFY(&a1,false); [line 35]\n NULLIFY(&a2,false); [line 35]\n NULLIFY(&aa,false); [line 35]\n NULLIFY(&ab,false); [line 35]\n " color=yellow style=filled] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 11 -> 17 ; -10 [label="10: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 28]\n n$6=_fun_NSObject_init(n$5:class A *) virtual [line 28]\n *&a:class A *=n$6 [line 28]\n REMOVE_TEMPS(n$5,n$6); [line 28]\n " shape="box"] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Return Stmt \n n$3=*&a:class A * [line 30]\n *&return:class A *=n$3 [line 30]\n n$4=_fun___set_autorelease_attribute(n$3:class A *) [line 30]\n REMOVE_TEMPS(n$3,n$4); [line 30]\n NULLIFY(&a,false); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 9 -> 8 ; -8 [label="8: Exit A_someA \n " color=yellow style=filled] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] -7 [label="7: Start A_someA\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 27]\n NULLIFY(&a,false); [line 27]\n " color=yellow style=filled] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 7 -> 10 ; -6 [label="6: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 23]\n n$2=_fun_NSObject_init(n$1:class A *) virtual [line 23]\n *&a:class A *=n$2 [line 23]\n REMOVE_TEMPS(n$1,n$2); [line 23]\n " shape="box"] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&a:class A * [line 24]\n *&return:class A *=n$0 [line 24]\n REMOVE_TEMPS(n$0); [line 24]\n NULLIFY(&a,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit A_newA \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start A_newA\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 22]\n NULLIFY(&a,false); [line 22]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/npe/NPD_core_foundation.h b/infer/tests/codetoanalyze/objc/errors/npe/NPD_core_foundation.h index 67dd12f00..00776d6d5 100644 --- a/infer/tests/codetoanalyze/objc/errors/npe/NPD_core_foundation.h +++ b/infer/tests/codetoanalyze/objc/errors/npe/NPD_core_foundation.h @@ -12,7 +12,7 @@ @interface NullDeref : NSObject -@property UIView* backgroundCoveringView; -@property UIView* attachmentContainerView; +@property(strong) UIView* backgroundCoveringView; +@property(strong) UIView* attachmentContainerView; @end diff --git a/infer/tests/codetoanalyze/objc/errors/npe/Nonnull_attribute_example.dot b/infer/tests/codetoanalyze/objc/errors/npe/Nonnull_attribute_example.dot index bf2df6237..c75aa4ba9 100644 --- a/infer/tests/codetoanalyze/objc/errors/npe/Nonnull_attribute_example.dot +++ b/infer/tests/codetoanalyze/objc/errors/npe/Nonnull_attribute_example.dot @@ -1,64 +1,106 @@ digraph iCFG { -17 [label="17: Call _fun___infer_assume \n n$1=*&callback:_fn_ (*) [line 46]\n n$2=_fun___infer_assume((n$1 != 0):_fn_ (*)) [line 46]\n REMOVE_TEMPS(n$1,n$2); [line 46]\n " shape="box"] +29 [label="29: Call _fun___infer_assume \n n$1=*&callback:_fn_ (*) [line 46]\n n$2=_fun___infer_assume((n$1 != 0):_fn_ (*)) [line 46]\n REMOVE_TEMPS(n$1,n$2); [line 46]\n " shape="box"] + + + 29 -> 28 ; +28 [label="28: Call n$0 \n n$0=*&callback:_fn_ (*) [line 46]\n n$0(0:class NSError *,0:struct objc_object *) [line 46]\n REMOVE_TEMPS(n$0); [line 46]\n NULLIFY(&callback,false); [line 46]\n APPLY_ABSTRACTION; [line 46]\n " shape="box"] + + + 28 -> 27 ; +27 [label="27: Exit test \n " color=yellow style=filled] + + +26 [label="26: Start test\nFormals: callback:_fn_ (*)\nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] + + + 26 -> 29 ; +25 [label="25: Call _fun___infer_assume \n n$5=*&a:class A * [line 38]\n n$6=_fun___infer_assume((n$5 != 0):class A *) [line 38]\n REMOVE_TEMPS(n$5,n$6); [line 38]\n " shape="box"] + + + 25 -> 24 ; +24 [label="24: DeclStmt \n n$3=*&a:class A * [line 39]\n n$4=_fun_A_getA(n$3:class A *) virtual [line 39]\n _fun___objc_retain(n$4:class A *) [line 39]\n *&a1:class A *=n$4 [line 39]\n REMOVE_TEMPS(n$3,n$4); [line 39]\n NULLIFY(&a,false); [line 39]\n " shape="box"] + + + 24 -> 23 ; +23 [label="23: DeclStmt \n n$1=*&a1:class A * [line 40]\n n$2=*n$1.x:int [line 40]\n *&y:int =n$2 [line 40]\n REMOVE_TEMPS(n$1,n$2); [line 40]\n NULLIFY(&a1,false); [line 40]\n NULLIFY(&y,false); [line 40]\n " shape="box"] + + + 23 -> 22 ; +22 [label="22: Return Stmt \n n$0=*&self:class C * [line 41]\n *&return:struct objc_object *=n$0 [line 41]\n REMOVE_TEMPS(n$0); [line 41]\n NULLIFY(&self,false); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] + + + 22 -> 21 ; +21 [label="21: Exit C_initWithCoder:and: \n " color=yellow style=filled] + + +20 [label="20: Start C_initWithCoder:and:\nFormals: self:class C * aDecoder:class NSString * a:class A *\nLocals: y:int a1:class A * \n DECLARE_LOCALS(&return,&y,&a1); [line 38]\n NULLIFY(&a1,false); [line 38]\n NULLIFY(&aDecoder,false); [line 38]\n NULLIFY(&y,false); [line 38]\n " color=yellow style=filled] + + + 20 -> 25 ; +19 [label="19: Exit C_frontendChecks \n " color=yellow style=filled] + + +18 [label="18: Start C_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 18 -> 19 ; +17 [label="17: Return Stmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 26]\n n$1=_fun_NSObject_init(n$0:class A *) virtual [line 26]\n *&return:class A *=n$1 [line 26]\n n$2=_fun___set_autorelease_attribute(n$1:class A *) [line 26]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] 17 -> 16 ; -16 [label="16: Call n$0 \n n$0=*&callback:_fn_ (*) [line 46]\n n$0(0:class NSError *,0:struct objc_object *) [line 46]\n REMOVE_TEMPS(n$0); [line 46]\n NULLIFY(&callback,false); [line 46]\n APPLY_ABSTRACTION; [line 46]\n " shape="box"] +16 [label="16: Exit A_getA \n " color=yellow style=filled] - 16 -> 15 ; -15 [label="15: Exit test \n " color=yellow style=filled] +15 [label="15: Start A_getA\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 25]\n NULLIFY(&self,false); [line 25]\n " color=yellow style=filled] -14 [label="14: Start test\nFormals: callback:_fn_ (*)\nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] - 14 -> 17 ; -13 [label="13: Call _fun___infer_assume \n n$5=*&a:class A * [line 38]\n n$6=_fun___infer_assume((n$5 != 0):class A *) [line 38]\n REMOVE_TEMPS(n$5,n$6); [line 38]\n " shape="box"] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 13 -> 12 ; -12 [label="12: DeclStmt \n n$3=*&a:class A * [line 39]\n n$4=_fun_A_getA(n$3:class A *) virtual [line 39]\n _fun___objc_retain(n$4:class A *) [line 39]\n *&a1:class A *=n$4 [line 39]\n REMOVE_TEMPS(n$3,n$4); [line 39]\n NULLIFY(&a,false); [line 39]\n " shape="box"] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: DeclStmt \n n$1=*&a1:class A * [line 40]\n n$2=*n$1.x:int [line 40]\n *&y:int =n$2 [line 40]\n REMOVE_TEMPS(n$1,n$2); [line 40]\n NULLIFY(&a1,false); [line 40]\n NULLIFY(&y,false); [line 40]\n " shape="box"] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Return Stmt \n n$0=*&self:class C * [line 41]\n *&return:struct objc_object *=n$0 [line 41]\n REMOVE_TEMPS(n$0); [line 41]\n NULLIFY(&self,false); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 10 -> 9 ; -9 [label="9: Exit C_initWithCoder:and: \n " color=yellow style=filled] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -8 [label="8: Start C_initWithCoder:and:\nFormals: self:class C * aDecoder:class NSString * a:class A *\nLocals: y:int a1:class A * \n DECLARE_LOCALS(&return,&y,&a1); [line 38]\n NULLIFY(&a1,false); [line 38]\n NULLIFY(&aDecoder,false); [line 38]\n NULLIFY(&y,false); [line 38]\n " color=yellow style=filled] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 8 -> 13 ; -7 [label="7: Exit C_frontendChecks \n " color=yellow style=filled] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -6 [label="6: Start C_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 7 ; -5 [label="5: Return Stmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 26]\n n$1=_fun_NSObject_init(n$0:class A *) virtual [line 26]\n *&return:class A *=n$1 [line 26]\n n$2=_fun___set_autorelease_attribute(n$1:class A *) [line 26]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit A_getA \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start A_getA\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 25]\n NULLIFY(&self,false); [line 25]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/npe/npe_malloc.dot b/infer/tests/codetoanalyze/objc/errors/npe/npe_malloc.dot index 42c532c07..51ef54883 100644 --- a/infer/tests/codetoanalyze/objc/errors/npe/npe_malloc.dot +++ b/infer/tests/codetoanalyze/objc/errors/npe/npe_malloc.dot @@ -1,27 +1,69 @@ digraph iCFG { -7 [label="7: DeclStmt \n n$2=_fun_malloc_no_fail(sizeof(struct Person ):struct Person ) [line 25]\n *&person:struct Person *=n$2 [line 25]\n REMOVE_TEMPS(n$2); [line 25]\n " shape="box"] +19 [label="19: DeclStmt \n n$2=_fun_malloc_no_fail(sizeof(struct Person ):struct Person ) [line 25]\n *&person:struct Person *=n$2 [line 25]\n REMOVE_TEMPS(n$2); [line 25]\n " shape="box"] - 7 -> 6 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$1=*&person:struct Person * [line 26]\n *n$1.x:int =10 [line 26]\n REMOVE_TEMPS(n$1); [line 26]\n " shape="box"] + 19 -> 18 ; +18 [label="18: BinaryOperatorStmt: Assign \n n$1=*&person:struct Person * [line 26]\n *n$1.x:int =10 [line 26]\n REMOVE_TEMPS(n$1); [line 26]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&person:struct Person * [line 27]\n *&return:struct Person *=n$0 [line 27]\n REMOVE_TEMPS(n$0); [line 27]\n NULLIFY(&person,false); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] + 18 -> 17 ; +17 [label="17: Return Stmt \n n$0=*&person:struct Person * [line 27]\n *&return:struct Person *=n$0 [line 27]\n REMOVE_TEMPS(n$0); [line 27]\n NULLIFY(&person,false); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit C_test \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit C_test \n " color=yellow style=filled] -3 [label="3: Start C_test\nFormals: self:class C *\nLocals: person:struct Person * \n DECLARE_LOCALS(&return,&person); [line 24]\n NULLIFY(&person,false); [line 24]\n NULLIFY(&self,false); [line 24]\n " color=yellow style=filled] +15 [label="15: Start C_test\nFormals: self:class C *\nLocals: person:struct Person * \n DECLARE_LOCALS(&return,&person); [line 24]\n NULLIFY(&person,false); [line 24]\n NULLIFY(&self,false); [line 24]\n " color=yellow style=filled] - 3 -> 7 ; -2 [label="2: Exit C_frontendChecks \n " color=yellow style=filled] + 15 -> 19 ; +14 [label="14: Exit C_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start C_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start C_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/errors/protocol_procdesc/main.dot b/infer/tests/codetoanalyze/objc/errors/protocol_procdesc/main.dot index 228edb403..c63ed35ba 100644 --- a/infer/tests/codetoanalyze/objc/errors/protocol_procdesc/main.dot +++ b/infer/tests/codetoanalyze/objc/errors/protocol_procdesc/main.dot @@ -1,21 +1,70 @@ digraph iCFG { -5 [label="5: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class Bicycle ):unsigned long ) [line 14]\n *&bike:class Bicycle *=n$1 [line 14]\n REMOVE_TEMPS(n$1); [line 14]\n " shape="box"] +19 [label="19: DeclStmt \n n$1=_fun___objc_alloc_no_fail(sizeof(class Bicycle ):unsigned long ) [line 14]\n *&bike:class Bicycle *=n$1 [line 14]\n REMOVE_TEMPS(n$1); [line 14]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Message Call: signalStop \n n$0=*&bike:class Bicycle * [line 16]\n _fun_Bicycle_signalStop(n$0:class Bicycle *) virtual [line 16]\n REMOVE_TEMPS(n$0); [line 16]\n NULLIFY(&bike,false); [line 16]\n " shape="box"] + 19 -> 18 ; +18 [label="18: Message Call: signalStop \n n$0=*&bike:class Bicycle * [line 16]\n _fun_Bicycle_signalStop(n$0:class Bicycle *) virtual [line 16]\n REMOVE_TEMPS(n$0); [line 16]\n NULLIFY(&bike,false); [line 16]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 18]\n APPLY_ABSTRACTION; [line 18]\n " shape="box"] + 18 -> 17 ; +17 [label="17: Return Stmt \n *&return:int =0 [line 18]\n APPLY_ABSTRACTION; [line 18]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: bike:class Bicycle * \n DECLARE_LOCALS(&return,&bike); [line 12]\n NULLIFY(&bike,false); [line 12]\n " color=yellow style=filled] +15 [label="15: Start main\nFormals: \nLocals: bike:class Bicycle * \n DECLARE_LOCALS(&return,&bike); [line 12]\n NULLIFY(&bike,false); [line 12]\n " color=yellow style=filled] - 1 -> 5 ; + 15 -> 19 ; +14 [label="14: Exit StreetVehicle_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start StreetVehicle_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.dot b/infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.dot index 01b4a8962..cce1ada3f 100644 --- a/infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.dot +++ b/infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.dot @@ -1,442 +1,736 @@ digraph iCFG { -107 [label="107: DeclStmt \n n$20=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n _fun___objc_retain(n$20:class NSString *) [line 36]\n *&__assert_fn__:class NSString *=n$20 [line 36]\n REMOVE_TEMPS(n$20); [line 36]\n " shape="box"] +191 [label="191: DeclStmt \n n$20=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n _fun___objc_retain(n$20:class NSString *) [line 36]\n *&__assert_fn__:class NSString *=n$20 [line 36]\n REMOVE_TEMPS(n$20); [line 36]\n " shape="box"] + + + 191 -> 186 ; + 191 -> 187 ; +190 [label="190: BinaryOperatorStmt: Assign \n n$18=*&SIL_temp_conditional___185:class NSString * [line 36]\n NULLIFY(&SIL_temp_conditional___185,true); [line 36]\n _fun___objc_retain(n$18:class NSString *) [line 36]\n n$19=*&__assert_fn__:class NSString * [line 36]\n *&__assert_fn__:class NSString *=n$18 [line 36]\n _fun___objc_release(n$19:class NSString *) [line 36]\n REMOVE_TEMPS(n$18,n$19); [line 36]\n NULLIFY(&__assert_fn__,false); [line 36]\n " shape="box"] + + + 190 -> 184 ; +189 [label="189: ConditinalStmt Branch \n n$17=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n DECLARE_LOCALS(&SIL_temp_conditional___185); [line 36]\n *&SIL_temp_conditional___185:class NSString *=n$17 [line 36]\n REMOVE_TEMPS(n$17); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + + + 189 -> 185 ; +188 [label="188: ConditinalStmt Branch \n n$16=*&__assert_fn__:class NSString * [line 36]\n DECLARE_LOCALS(&SIL_temp_conditional___185); [line 36]\n *&SIL_temp_conditional___185:class NSString *=n$16 [line 36]\n REMOVE_TEMPS(n$16); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + + + 188 -> 185 ; +187 [label="187: Prune (false branch) \n n$15=*&__assert_fn__:class NSString * [line 36]\n PRUNE((n$15 == 0), false); [line 36]\n REMOVE_TEMPS(n$15); [line 36]\n " shape="invhouse"] + + + 187 -> 189 ; +186 [label="186: Prune (true branch) \n n$15=*&__assert_fn__:class NSString * [line 36]\n PRUNE((n$15 != 0), true); [line 36]\n REMOVE_TEMPS(n$15); [line 36]\n " shape="invhouse"] + + + 186 -> 188 ; +185 [label="185: + \n " ] + + + 185 -> 190 ; +184 [label="184: DeclStmt \n n$14=_fun_NSString_stringWithUTF8String:(\"infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.m\":char *) [line 36]\n _fun___objc_retain(n$14:class NSString *) [line 36]\n *&__assert_file__:class NSString *=n$14 [line 36]\n REMOVE_TEMPS(n$14); [line 36]\n " shape="box"] + + + 184 -> 179 ; + 184 -> 180 ; +183 [label="183: BinaryOperatorStmt: Assign \n n$12=*&SIL_temp_conditional___178:class NSString * [line 36]\n NULLIFY(&SIL_temp_conditional___178,true); [line 36]\n _fun___objc_retain(n$12:class NSString *) [line 36]\n n$13=*&__assert_file__:class NSString * [line 36]\n *&__assert_file__:class NSString *=n$12 [line 36]\n _fun___objc_release(n$13:class NSString *) [line 36]\n REMOVE_TEMPS(n$12,n$13); [line 36]\n NULLIFY(&__assert_file__,false); [line 36]\n " shape="box"] + + + 183 -> 177 ; +182 [label="182: ConditinalStmt Branch \n n$11=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n DECLARE_LOCALS(&SIL_temp_conditional___178); [line 36]\n *&SIL_temp_conditional___178:class NSString *=n$11 [line 36]\n REMOVE_TEMPS(n$11); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + + + 182 -> 178 ; +181 [label="181: ConditinalStmt Branch \n n$10=*&__assert_file__:class NSString * [line 36]\n DECLARE_LOCALS(&SIL_temp_conditional___178); [line 36]\n *&SIL_temp_conditional___178:class NSString *=n$10 [line 36]\n REMOVE_TEMPS(n$10); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + + + 181 -> 178 ; +180 [label="180: Prune (false branch) \n n$9=*&__assert_file__:class NSString * [line 36]\n PRUNE((n$9 == 0), false); [line 36]\n REMOVE_TEMPS(n$9); [line 36]\n " shape="invhouse"] + + + 180 -> 182 ; +179 [label="179: Prune (true branch) \n n$9=*&__assert_file__:class NSString * [line 36]\n PRUNE((n$9 != 0), true); [line 36]\n REMOVE_TEMPS(n$9); [line 36]\n " shape="invhouse"] + + + 179 -> 181 ; +178 [label="178: + \n " ] + + + 178 -> 183 ; +177 [label="177: Assertion failure \n _fun___infer_fail(\"ASSERTION_FAILURE\":void ) [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + + + 177 -> 164 ; +176 [label="176: Prune (false branch) \n n$3=*&SIL_temp_conditional___170:int [line 36]\n NULLIFY(&SIL_temp_conditional___170,true); [line 36]\n PRUNE((n$3 == 0), false); [line 36]\n REMOVE_TEMPS(n$3); [line 36]\n " shape="invhouse"] + + + 176 -> 169 ; +175 [label="175: Prune (true branch) \n n$3=*&SIL_temp_conditional___170:int [line 36]\n NULLIFY(&SIL_temp_conditional___170,true); [line 36]\n PRUNE((n$3 != 0), true); [line 36]\n REMOVE_TEMPS(n$3); [line 36]\n NULLIFY(&target,false); [line 36]\n " shape="invhouse"] + + + 175 -> 191 ; +174 [label="174: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___170); [line 36]\n *&SIL_temp_conditional___170:int =1 [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + + + 174 -> 170 ; +173 [label="173: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___170); [line 36]\n *&SIL_temp_conditional___170:int =0 [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + + + 173 -> 170 ; +172 [label="172: Prune (false branch) \n n$2=*&target:class A * [line 36]\n PRUNE((n$2 == 0), false); [line 36]\n REMOVE_TEMPS(n$2); [line 36]\n " shape="invhouse"] + + + 172 -> 174 ; +171 [label="171: Prune (true branch) \n n$2=*&target:class A * [line 36]\n PRUNE((n$2 != 0), true); [line 36]\n REMOVE_TEMPS(n$2); [line 36]\n " shape="invhouse"] + + + 171 -> 173 ; +170 [label="170: + \n " ] + + + 170 -> 175 ; + 170 -> 176 ; +169 [label="169: + \n " ] + + + 169 -> 167 ; + 169 -> 168 ; +168 [label="168: Prune (false branch) \n PRUNE((0 == 0), false); [line 36]\n " shape="invhouse"] + + + 168 -> 165 ; +167 [label="167: Prune (true branch) \n PRUNE((0 != 0), true); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="invhouse"] + + + 167 -> 166 ; +166 [label="166: + \n " ] + + + 166 -> 171 ; + 166 -> 172 ; +165 [label="165: Return Stmt \n n$0=*&target:class A * [line 37]\n n$1=_fun_A_x(n$0:class A *) [line 37]\n *&return:int =n$1 [line 37]\n REMOVE_TEMPS(n$0,n$1); [line 37]\n NULLIFY(&target,false); [line 37]\n APPLY_ABSTRACTION; [line 37]\n " shape="box"] + + + 165 -> 164 ; +164 [label="164: Exit test2 \n " color=yellow style=filled] + + +163 [label="163: Start test2\nFormals: target:class A *\nLocals: __assert_file__:class NSString * __assert_fn__:class NSString * \n DECLARE_LOCALS(&return,&__assert_file__,&__assert_fn__); [line 35]\n NULLIFY(&__assert_file__,false); [line 35]\n NULLIFY(&__assert_fn__,false); [line 35]\n " color=yellow style=filled] + + + 163 -> 166 ; +162 [label="162: DeclStmt \n n$19=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n _fun___objc_retain(n$19:class NSString *) [line 31]\n *&__assert_fn__:class NSString *=n$19 [line 31]\n REMOVE_TEMPS(n$19); [line 31]\n " shape="box"] + + + 162 -> 157 ; + 162 -> 158 ; +161 [label="161: BinaryOperatorStmt: Assign \n n$17=*&SIL_temp_conditional___156:class NSString * [line 31]\n NULLIFY(&SIL_temp_conditional___156,true); [line 31]\n _fun___objc_retain(n$17:class NSString *) [line 31]\n n$18=*&__assert_fn__:class NSString * [line 31]\n *&__assert_fn__:class NSString *=n$17 [line 31]\n _fun___objc_release(n$18:class NSString *) [line 31]\n REMOVE_TEMPS(n$17,n$18); [line 31]\n NULLIFY(&__assert_fn__,false); [line 31]\n " shape="box"] + + + 161 -> 155 ; +160 [label="160: ConditinalStmt Branch \n n$16=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n DECLARE_LOCALS(&SIL_temp_conditional___156); [line 31]\n *&SIL_temp_conditional___156:class NSString *=n$16 [line 31]\n REMOVE_TEMPS(n$16); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + + + 160 -> 156 ; +159 [label="159: ConditinalStmt Branch \n n$15=*&__assert_fn__:class NSString * [line 31]\n DECLARE_LOCALS(&SIL_temp_conditional___156); [line 31]\n *&SIL_temp_conditional___156:class NSString *=n$15 [line 31]\n REMOVE_TEMPS(n$15); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + + + 159 -> 156 ; +158 [label="158: Prune (false branch) \n n$14=*&__assert_fn__:class NSString * [line 31]\n PRUNE((n$14 == 0), false); [line 31]\n REMOVE_TEMPS(n$14); [line 31]\n " shape="invhouse"] + + + 158 -> 160 ; +157 [label="157: Prune (true branch) \n n$14=*&__assert_fn__:class NSString * [line 31]\n PRUNE((n$14 != 0), true); [line 31]\n REMOVE_TEMPS(n$14); [line 31]\n " shape="invhouse"] + + + 157 -> 159 ; +156 [label="156: + \n " ] + + + 156 -> 161 ; +155 [label="155: DeclStmt \n n$13=_fun_NSString_stringWithUTF8String:(\"infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.m\":char *) [line 31]\n _fun___objc_retain(n$13:class NSString *) [line 31]\n *&__assert_file__:class NSString *=n$13 [line 31]\n REMOVE_TEMPS(n$13); [line 31]\n " shape="box"] + + + 155 -> 150 ; + 155 -> 151 ; +154 [label="154: BinaryOperatorStmt: Assign \n n$11=*&SIL_temp_conditional___149:class NSString * [line 31]\n NULLIFY(&SIL_temp_conditional___149,true); [line 31]\n _fun___objc_retain(n$11:class NSString *) [line 31]\n n$12=*&__assert_file__:class NSString * [line 31]\n *&__assert_file__:class NSString *=n$11 [line 31]\n _fun___objc_release(n$12:class NSString *) [line 31]\n REMOVE_TEMPS(n$11,n$12); [line 31]\n NULLIFY(&__assert_file__,false); [line 31]\n " shape="box"] + + + 154 -> 148 ; +153 [label="153: ConditinalStmt Branch \n n$10=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n DECLARE_LOCALS(&SIL_temp_conditional___149); [line 31]\n *&SIL_temp_conditional___149:class NSString *=n$10 [line 31]\n REMOVE_TEMPS(n$10); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + + + 153 -> 149 ; +152 [label="152: ConditinalStmt Branch \n n$9=*&__assert_file__:class NSString * [line 31]\n DECLARE_LOCALS(&SIL_temp_conditional___149); [line 31]\n *&SIL_temp_conditional___149:class NSString *=n$9 [line 31]\n REMOVE_TEMPS(n$9); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + + + 152 -> 149 ; +151 [label="151: Prune (false branch) \n n$8=*&__assert_file__:class NSString * [line 31]\n PRUNE((n$8 == 0), false); [line 31]\n REMOVE_TEMPS(n$8); [line 31]\n " shape="invhouse"] + + + 151 -> 153 ; +150 [label="150: Prune (true branch) \n n$8=*&__assert_file__:class NSString * [line 31]\n PRUNE((n$8 != 0), true); [line 31]\n REMOVE_TEMPS(n$8); [line 31]\n " shape="invhouse"] + + + 150 -> 152 ; +149 [label="149: + \n " ] + + + 149 -> 154 ; +148 [label="148: Assertion failure \n _fun___infer_fail(\"ASSERTION_FAILURE\":void ) [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + + + 148 -> 134 ; +147 [label="147: Prune (false branch) \n n$3=*&SIL_temp_conditional___140:int [line 31]\n NULLIFY(&SIL_temp_conditional___140,true); [line 31]\n PRUNE((n$3 == 0), false); [line 31]\n REMOVE_TEMPS(n$3); [line 31]\n " shape="invhouse"] + + + 147 -> 139 ; +146 [label="146: Prune (true branch) \n n$3=*&SIL_temp_conditional___140:int [line 31]\n NULLIFY(&SIL_temp_conditional___140,true); [line 31]\n PRUNE((n$3 != 0), true); [line 31]\n REMOVE_TEMPS(n$3); [line 31]\n NULLIFY(&target,false); [line 31]\n " shape="invhouse"] + + + 146 -> 162 ; +145 [label="145: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___140); [line 31]\n *&SIL_temp_conditional___140:int =1 [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + + + 145 -> 140 ; +144 [label="144: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___140); [line 31]\n *&SIL_temp_conditional___140:int =0 [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + + + 144 -> 140 ; +143 [label="143: Prune (false branch) \n PRUNE(((n$2 != (void *)0) == 0), false); [line 31]\n REMOVE_TEMPS(n$2); [line 31]\n " shape="invhouse"] + + + 143 -> 145 ; +142 [label="142: Prune (true branch) \n PRUNE(((n$2 != (void *)0) != 0), true); [line 31]\n REMOVE_TEMPS(n$2); [line 31]\n " shape="invhouse"] + + + 142 -> 144 ; +141 [label="141: BinaryOperatorStmt: NE \n n$2=*&target:class A * [line 31]\n " shape="box"] + + + 141 -> 142 ; + 141 -> 143 ; +140 [label="140: + \n " ] + + + 140 -> 146 ; + 140 -> 147 ; +139 [label="139: + \n " ] + + + 139 -> 137 ; + 139 -> 138 ; +138 [label="138: Prune (false branch) \n PRUNE((0 == 0), false); [line 31]\n " shape="invhouse"] + + + 138 -> 135 ; +137 [label="137: Prune (true branch) \n PRUNE((0 != 0), true); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="invhouse"] + + + 137 -> 136 ; +136 [label="136: + \n " ] + + + 136 -> 141 ; +135 [label="135: Return Stmt \n n$0=*&target:class A * [line 32]\n n$1=_fun_A_x(n$0:class A *) [line 32]\n *&return:int =n$1 [line 32]\n REMOVE_TEMPS(n$0,n$1); [line 32]\n NULLIFY(&target,false); [line 32]\n APPLY_ABSTRACTION; [line 32]\n " shape="box"] + + + 135 -> 134 ; +134 [label="134: Exit test1 \n " color=yellow style=filled] + + +133 [label="133: Start test1\nFormals: target:class A *\nLocals: __assert_file__:class NSString * __assert_fn__:class NSString * \n DECLARE_LOCALS(&return,&__assert_file__,&__assert_fn__); [line 30]\n NULLIFY(&__assert_file__,false); [line 30]\n NULLIFY(&__assert_fn__,false); [line 30]\n " color=yellow style=filled] + + + 133 -> 136 ; +132 [label="132: DeclStmt \n n$29=_fun_NSString_stringWithUTF8String:(\"infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.m\":char *) [line 24]\n _fun___objc_retain(n$29:class NSString *) [line 24]\n *&__assert_file__:class NSString *=n$29 [line 24]\n REMOVE_TEMPS(n$29); [line 24]\n " shape="box"] + + + 132 -> 127 ; + 132 -> 128 ; +131 [label="131: BinaryOperatorStmt: Assign \n n$27=*&SIL_temp_conditional___126:class NSString * [line 24]\n NULLIFY(&SIL_temp_conditional___126,true); [line 24]\n _fun___objc_retain(n$27:class NSString *) [line 24]\n n$28=*&__assert_file__:class NSString * [line 24]\n *&__assert_file__:class NSString *=n$27 [line 24]\n _fun___objc_release(n$28:class NSString *) [line 24]\n REMOVE_TEMPS(n$27,n$28); [line 24]\n NULLIFY(&__assert_file__,false); [line 24]\n " shape="box"] + + + 131 -> 125 ; +130 [label="130: ConditinalStmt Branch \n n$26=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 24]\n DECLARE_LOCALS(&SIL_temp_conditional___126); [line 24]\n *&SIL_temp_conditional___126:class NSString *=n$26 [line 24]\n REMOVE_TEMPS(n$26); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + + + 130 -> 126 ; +129 [label="129: ConditinalStmt Branch \n n$25=*&__assert_file__:class NSString * [line 24]\n DECLARE_LOCALS(&SIL_temp_conditional___126); [line 24]\n *&SIL_temp_conditional___126:class NSString *=n$25 [line 24]\n REMOVE_TEMPS(n$25); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + + + 129 -> 126 ; +128 [label="128: Prune (false branch) \n n$24=*&__assert_file__:class NSString * [line 24]\n PRUNE((n$24 == 0), false); [line 24]\n REMOVE_TEMPS(n$24); [line 24]\n " shape="invhouse"] + + + 128 -> 130 ; +127 [label="127: Prune (true branch) \n n$24=*&__assert_file__:class NSString * [line 24]\n PRUNE((n$24 != 0), true); [line 24]\n REMOVE_TEMPS(n$24); [line 24]\n " shape="invhouse"] + + + 127 -> 129 ; +126 [label="126: + \n " ] + + + 126 -> 131 ; +125 [label="125: Assertion failure \n _fun___infer_fail(\"ASSERTION_FAILURE\":void ) [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + + + 125 -> 111 ; +124 [label="124: Prune (false branch) \n n$18=*&SIL_temp_conditional___117:int [line 24]\n NULLIFY(&SIL_temp_conditional___117,true); [line 24]\n PRUNE((n$18 == 0), false); [line 24]\n REMOVE_TEMPS(n$18); [line 24]\n " shape="invhouse"] + + + 124 -> 116 ; +123 [label="123: Prune (true branch) \n n$18=*&SIL_temp_conditional___117:int [line 24]\n NULLIFY(&SIL_temp_conditional___117,true); [line 24]\n PRUNE((n$18 != 0), true); [line 24]\n REMOVE_TEMPS(n$18); [line 24]\n NULLIFY(&a,false); [line 24]\n " shape="invhouse"] + + + 123 -> 132 ; +122 [label="122: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___117); [line 24]\n *&SIL_temp_conditional___117:int =1 [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + + + 122 -> 117 ; +121 [label="121: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___117); [line 24]\n *&SIL_temp_conditional___117:int =0 [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + + + 121 -> 117 ; +120 [label="120: Prune (false branch) \n PRUNE(((n$17 != (void *)0) == 0), false); [line 24]\n REMOVE_TEMPS(n$17); [line 24]\n " shape="invhouse"] + + + 120 -> 122 ; +119 [label="119: Prune (true branch) \n PRUNE(((n$17 != (void *)0) != 0), true); [line 24]\n REMOVE_TEMPS(n$17); [line 24]\n " shape="invhouse"] + + + 119 -> 121 ; +118 [label="118: BinaryOperatorStmt: NE \n n$17=*&a:class A * [line 24]\n " shape="box"] + + + 118 -> 119 ; + 118 -> 120 ; +117 [label="117: + \n " ] + + + 117 -> 123 ; + 117 -> 124 ; +116 [label="116: + \n " ] + + + 116 -> 114 ; + 116 -> 115 ; +115 [label="115: Prune (false branch) \n PRUNE((0 == 0), false); [line 24]\n " shape="invhouse"] + + + 115 -> 112 ; +114 [label="114: Prune (true branch) \n PRUNE((0 != 0), true); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="invhouse"] + + + 114 -> 113 ; +113 [label="113: + \n " ] + + + 113 -> 118 ; +112 [label="112: Return Stmt \n n$15=*&a:class A * [line 25]\n n$16=_fun_A_x(n$15:class A *) [line 25]\n *&return:int =n$16 [line 25]\n REMOVE_TEMPS(n$15,n$16); [line 25]\n NULLIFY(&a,false); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] + + + 112 -> 111 ; +111 [label="111: Exit A_initWithRequest: \n " color=yellow style=filled] + + +110 [label="110: Start A_initWithRequest:\nFormals: self:class A * a:class A *\nLocals: __assert_file__:class NSString * \n DECLARE_LOCALS(&return,&__assert_file__); [line 23]\n NULLIFY(&__assert_file__,false); [line 23]\n NULLIFY(&self,false); [line 23]\n " color=yellow style=filled] + + + 110 -> 113 ; +109 [label="109: DeclStmt \n n$14=_fun_NSString_stringWithUTF8String:(\"infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.m\":char *) [line 19]\n _fun___objc_retain(n$14:class NSString *) [line 19]\n *&__assert_file__:class NSString *=n$14 [line 19]\n REMOVE_TEMPS(n$14); [line 19]\n " shape="box"] + + + 109 -> 104 ; + 109 -> 105 ; +108 [label="108: BinaryOperatorStmt: Assign \n n$12=*&SIL_temp_conditional___103:class NSString * [line 19]\n NULLIFY(&SIL_temp_conditional___103,true); [line 19]\n _fun___objc_retain(n$12:class NSString *) [line 19]\n n$13=*&__assert_file__:class NSString * [line 19]\n *&__assert_file__:class NSString *=n$12 [line 19]\n _fun___objc_release(n$13:class NSString *) [line 19]\n REMOVE_TEMPS(n$12,n$13); [line 19]\n NULLIFY(&__assert_file__,false); [line 19]\n " shape="box"] + + + 108 -> 102 ; +107 [label="107: ConditinalStmt Branch \n n$11=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 19]\n DECLARE_LOCALS(&SIL_temp_conditional___103); [line 19]\n *&SIL_temp_conditional___103:class NSString *=n$11 [line 19]\n REMOVE_TEMPS(n$11); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 107 -> 102 ; 107 -> 103 ; -106 [label="106: BinaryOperatorStmt: Assign \n n$18=*&SIL_temp_conditional___101:class NSString * [line 36]\n NULLIFY(&SIL_temp_conditional___101,true); [line 36]\n _fun___objc_retain(n$18:class NSString *) [line 36]\n n$19=*&__assert_fn__:class NSString * [line 36]\n *&__assert_fn__:class NSString *=n$18 [line 36]\n _fun___objc_release(n$19:class NSString *) [line 36]\n REMOVE_TEMPS(n$18,n$19); [line 36]\n NULLIFY(&__assert_fn__,false); [line 36]\n " shape="box"] +106 [label="106: ConditinalStmt Branch \n n$10=*&__assert_file__:class NSString * [line 19]\n DECLARE_LOCALS(&SIL_temp_conditional___103); [line 19]\n *&SIL_temp_conditional___103:class NSString *=n$10 [line 19]\n REMOVE_TEMPS(n$10); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 106 -> 100 ; -105 [label="105: ConditinalStmt Branch \n n$17=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n DECLARE_LOCALS(&SIL_temp_conditional___101); [line 36]\n *&SIL_temp_conditional___101:class NSString *=n$17 [line 36]\n REMOVE_TEMPS(n$17); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + 106 -> 103 ; +105 [label="105: Prune (false branch) \n n$9=*&__assert_file__:class NSString * [line 19]\n PRUNE((n$9 == 0), false); [line 19]\n REMOVE_TEMPS(n$9); [line 19]\n " shape="invhouse"] - 105 -> 101 ; -104 [label="104: ConditinalStmt Branch \n n$16=*&__assert_fn__:class NSString * [line 36]\n DECLARE_LOCALS(&SIL_temp_conditional___101); [line 36]\n *&SIL_temp_conditional___101:class NSString *=n$16 [line 36]\n REMOVE_TEMPS(n$16); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + 105 -> 107 ; +104 [label="104: Prune (true branch) \n n$9=*&__assert_file__:class NSString * [line 19]\n PRUNE((n$9 != 0), true); [line 19]\n REMOVE_TEMPS(n$9); [line 19]\n " shape="invhouse"] - 104 -> 101 ; -103 [label="103: Prune (false branch) \n n$15=*&__assert_fn__:class NSString * [line 36]\n PRUNE((n$15 == 0), false); [line 36]\n REMOVE_TEMPS(n$15); [line 36]\n " shape="invhouse"] + 104 -> 106 ; +103 [label="103: + \n " ] - 103 -> 105 ; -102 [label="102: Prune (true branch) \n n$15=*&__assert_fn__:class NSString * [line 36]\n PRUNE((n$15 != 0), true); [line 36]\n REMOVE_TEMPS(n$15); [line 36]\n " shape="invhouse"] + 103 -> 108 ; +102 [label="102: Assertion failure \n _fun___infer_fail(\"ASSERTION_FAILURE\":void ) [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 102 -> 104 ; -101 [label="101: + \n " ] + 102 -> 88 ; +101 [label="101: Prune (false branch) \n n$3=*&SIL_temp_conditional___94:int [line 19]\n NULLIFY(&SIL_temp_conditional___94,true); [line 19]\n PRUNE((n$3 == 0), false); [line 19]\n REMOVE_TEMPS(n$3); [line 19]\n " shape="invhouse"] - 101 -> 106 ; -100 [label="100: DeclStmt \n n$14=_fun_NSString_stringWithUTF8String:(\"infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.m\":char *) [line 36]\n _fun___objc_retain(n$14:class NSString *) [line 36]\n *&__assert_file__:class NSString *=n$14 [line 36]\n REMOVE_TEMPS(n$14); [line 36]\n " shape="box"] + 101 -> 93 ; +100 [label="100: Prune (true branch) \n n$3=*&SIL_temp_conditional___94:int [line 19]\n NULLIFY(&SIL_temp_conditional___94,true); [line 19]\n PRUNE((n$3 != 0), true); [line 19]\n REMOVE_TEMPS(n$3); [line 19]\n NULLIFY(&target,false); [line 19]\n " shape="invhouse"] - 100 -> 95 ; - 100 -> 96 ; -99 [label="99: BinaryOperatorStmt: Assign \n n$12=*&SIL_temp_conditional___94:class NSString * [line 36]\n NULLIFY(&SIL_temp_conditional___94,true); [line 36]\n _fun___objc_retain(n$12:class NSString *) [line 36]\n n$13=*&__assert_file__:class NSString * [line 36]\n *&__assert_file__:class NSString *=n$12 [line 36]\n _fun___objc_release(n$13:class NSString *) [line 36]\n REMOVE_TEMPS(n$12,n$13); [line 36]\n NULLIFY(&__assert_file__,false); [line 36]\n " shape="box"] + 100 -> 109 ; +99 [label="99: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___94); [line 19]\n *&SIL_temp_conditional___94:int =1 [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 99 -> 93 ; -98 [label="98: ConditinalStmt Branch \n n$11=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 36]\n DECLARE_LOCALS(&SIL_temp_conditional___94); [line 36]\n *&SIL_temp_conditional___94:class NSString *=n$11 [line 36]\n REMOVE_TEMPS(n$11); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + 99 -> 94 ; +98 [label="98: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___94); [line 19]\n *&SIL_temp_conditional___94:int =0 [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] 98 -> 94 ; -97 [label="97: ConditinalStmt Branch \n n$10=*&__assert_file__:class NSString * [line 36]\n DECLARE_LOCALS(&SIL_temp_conditional___94); [line 36]\n *&SIL_temp_conditional___94:class NSString *=n$10 [line 36]\n REMOVE_TEMPS(n$10); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] +97 [label="97: Prune (false branch) \n PRUNE(((n$2 != (void *)0) == 0), false); [line 19]\n REMOVE_TEMPS(n$2); [line 19]\n " shape="invhouse"] - 97 -> 94 ; -96 [label="96: Prune (false branch) \n n$9=*&__assert_file__:class NSString * [line 36]\n PRUNE((n$9 == 0), false); [line 36]\n REMOVE_TEMPS(n$9); [line 36]\n " shape="invhouse"] + 97 -> 99 ; +96 [label="96: Prune (true branch) \n PRUNE(((n$2 != (void *)0) != 0), true); [line 19]\n REMOVE_TEMPS(n$2); [line 19]\n " shape="invhouse"] 96 -> 98 ; -95 [label="95: Prune (true branch) \n n$9=*&__assert_file__:class NSString * [line 36]\n PRUNE((n$9 != 0), true); [line 36]\n REMOVE_TEMPS(n$9); [line 36]\n " shape="invhouse"] +95 [label="95: BinaryOperatorStmt: NE \n n$2=*&target:class A * [line 19]\n " shape="box"] + 95 -> 96 ; 95 -> 97 ; 94 [label="94: + \n " ] - 94 -> 99 ; -93 [label="93: Assertion failure \n _fun___infer_fail(\"ASSERTION_FAILURE\":void ) [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + 94 -> 100 ; + 94 -> 101 ; +93 [label="93: + \n " ] - 93 -> 80 ; -92 [label="92: Prune (false branch) \n n$3=*&SIL_temp_conditional___86:int [line 36]\n NULLIFY(&SIL_temp_conditional___86,true); [line 36]\n PRUNE((n$3 == 0), false); [line 36]\n REMOVE_TEMPS(n$3); [line 36]\n " shape="invhouse"] + 93 -> 91 ; + 93 -> 92 ; +92 [label="92: Prune (false branch) \n PRUNE((0 == 0), false); [line 19]\n " shape="invhouse"] - 92 -> 85 ; -91 [label="91: Prune (true branch) \n n$3=*&SIL_temp_conditional___86:int [line 36]\n NULLIFY(&SIL_temp_conditional___86,true); [line 36]\n PRUNE((n$3 != 0), true); [line 36]\n REMOVE_TEMPS(n$3); [line 36]\n NULLIFY(&target,false); [line 36]\n " shape="invhouse"] + 92 -> 89 ; +91 [label="91: Prune (true branch) \n PRUNE((0 != 0), true); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="invhouse"] - 91 -> 107 ; -90 [label="90: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___86); [line 36]\n *&SIL_temp_conditional___86:int =1 [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + 91 -> 90 ; +90 [label="90: + \n " ] - 90 -> 86 ; -89 [label="89: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___86); [line 36]\n *&SIL_temp_conditional___86:int =0 [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + 90 -> 95 ; +89 [label="89: Return Stmt \n n$0=*&target:class A * [line 20]\n n$1=_fun_A_x(n$0:class A *) [line 20]\n *&return:int =n$1 [line 20]\n REMOVE_TEMPS(n$0,n$1); [line 20]\n NULLIFY(&target,false); [line 20]\n APPLY_ABSTRACTION; [line 20]\n " shape="box"] - 89 -> 86 ; -88 [label="88: Prune (false branch) \n n$2=*&target:class A * [line 36]\n PRUNE((n$2 == 0), false); [line 36]\n REMOVE_TEMPS(n$2); [line 36]\n " shape="invhouse"] + 89 -> 88 ; +88 [label="88: Exit A_addTarget: \n " color=yellow style=filled] - 88 -> 90 ; -87 [label="87: Prune (true branch) \n n$2=*&target:class A * [line 36]\n PRUNE((n$2 != 0), true); [line 36]\n REMOVE_TEMPS(n$2); [line 36]\n " shape="invhouse"] +87 [label="87: Start A_addTarget:\nFormals: self:class A * target:class A *\nLocals: __assert_file__:class NSString * \n DECLARE_LOCALS(&return,&__assert_file__); [line 18]\n NULLIFY(&__assert_file__,false); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] - 87 -> 89 ; -86 [label="86: + \n " ] + 87 -> 90 ; +86 [label="86: Exit A_frontendChecks \n " color=yellow style=filled] - 86 -> 91 ; - 86 -> 92 ; -85 [label="85: + \n " ] +85 [label="85: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 85 -> 83 ; - 85 -> 84 ; -84 [label="84: Prune (false branch) \n PRUNE((0 == 0), false); [line 36]\n " shape="invhouse"] + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] - 84 -> 81 ; -83 [label="83: Prune (true branch) \n PRUNE((0 != 0), true); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="invhouse"] +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 83 -> 82 ; -82 [label="82: + \n " ] + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] - 82 -> 87 ; - 82 -> 88 ; -81 [label="81: Return Stmt \n n$0=*&target:class A * [line 37]\n n$1=_fun_A_x(n$0:class A *) [line 37]\n *&return:int =n$1 [line 37]\n REMOVE_TEMPS(n$0,n$1); [line 37]\n NULLIFY(&target,false); [line 37]\n APPLY_ABSTRACTION; [line 37]\n " shape="box"] +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 81 -> 80 ; -80 [label="80: Exit test2 \n " color=yellow style=filled] + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] -79 [label="79: Start test2\nFormals: target:class A *\nLocals: __assert_file__:class NSString * __assert_fn__:class NSString * \n DECLARE_LOCALS(&return,&__assert_file__,&__assert_fn__); [line 35]\n NULLIFY(&__assert_file__,false); [line 35]\n NULLIFY(&__assert_fn__,false); [line 35]\n " color=yellow style=filled] +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 79 -> 82 ; -78 [label="78: DeclStmt \n n$19=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n _fun___objc_retain(n$19:class NSString *) [line 31]\n *&__assert_fn__:class NSString *=n$19 [line 31]\n REMOVE_TEMPS(n$19); [line 31]\n " shape="box"] + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] - 78 -> 73 ; - 78 -> 74 ; -77 [label="77: BinaryOperatorStmt: Assign \n n$17=*&SIL_temp_conditional___72:class NSString * [line 31]\n NULLIFY(&SIL_temp_conditional___72,true); [line 31]\n _fun___objc_retain(n$17:class NSString *) [line 31]\n n$18=*&__assert_fn__:class NSString * [line 31]\n *&__assert_fn__:class NSString *=n$17 [line 31]\n _fun___objc_release(n$18:class NSString *) [line 31]\n REMOVE_TEMPS(n$17,n$18); [line 31]\n NULLIFY(&__assert_fn__,false); [line 31]\n " shape="box"] +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 77 -> 71 ; -76 [label="76: ConditinalStmt Branch \n n$16=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n DECLARE_LOCALS(&SIL_temp_conditional___72); [line 31]\n *&SIL_temp_conditional___72:class NSString *=n$16 [line 31]\n REMOVE_TEMPS(n$16); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] - 76 -> 72 ; -75 [label="75: ConditinalStmt Branch \n n$15=*&__assert_fn__:class NSString * [line 31]\n DECLARE_LOCALS(&SIL_temp_conditional___72); [line 31]\n *&SIL_temp_conditional___72:class NSString *=n$15 [line 31]\n REMOVE_TEMPS(n$15); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 75 -> 72 ; -74 [label="74: Prune (false branch) \n n$14=*&__assert_fn__:class NSString * [line 31]\n PRUNE((n$14 == 0), false); [line 31]\n REMOVE_TEMPS(n$14); [line 31]\n " shape="invhouse"] + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] - 74 -> 76 ; -73 [label="73: Prune (true branch) \n n$14=*&__assert_fn__:class NSString * [line 31]\n PRUNE((n$14 != 0), true); [line 31]\n REMOVE_TEMPS(n$14); [line 31]\n " shape="invhouse"] +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 73 -> 75 ; -72 [label="72: + \n " ] + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] - 72 -> 77 ; -71 [label="71: DeclStmt \n n$13=_fun_NSString_stringWithUTF8String:(\"infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.m\":char *) [line 31]\n _fun___objc_retain(n$13:class NSString *) [line 31]\n *&__assert_file__:class NSString *=n$13 [line 31]\n REMOVE_TEMPS(n$13); [line 31]\n " shape="box"] +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 71 -> 66 ; - 71 -> 67 ; -70 [label="70: BinaryOperatorStmt: Assign \n n$11=*&SIL_temp_conditional___65:class NSString * [line 31]\n NULLIFY(&SIL_temp_conditional___65,true); [line 31]\n _fun___objc_retain(n$11:class NSString *) [line 31]\n n$12=*&__assert_file__:class NSString * [line 31]\n *&__assert_file__:class NSString *=n$11 [line 31]\n _fun___objc_release(n$12:class NSString *) [line 31]\n REMOVE_TEMPS(n$11,n$12); [line 31]\n NULLIFY(&__assert_file__,false); [line 31]\n " shape="box"] + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] - 70 -> 64 ; -69 [label="69: ConditinalStmt Branch \n n$10=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 31]\n DECLARE_LOCALS(&SIL_temp_conditional___65); [line 31]\n *&SIL_temp_conditional___65:class NSString *=n$10 [line 31]\n REMOVE_TEMPS(n$10); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 69 -> 65 ; -68 [label="68: ConditinalStmt Branch \n n$9=*&__assert_file__:class NSString * [line 31]\n DECLARE_LOCALS(&SIL_temp_conditional___65); [line 31]\n *&SIL_temp_conditional___65:class NSString *=n$9 [line 31]\n REMOVE_TEMPS(n$9); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] - 68 -> 65 ; -67 [label="67: Prune (false branch) \n n$8=*&__assert_file__:class NSString * [line 31]\n PRUNE((n$8 == 0), false); [line 31]\n REMOVE_TEMPS(n$8); [line 31]\n " shape="invhouse"] +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 67 -> 69 ; -66 [label="66: Prune (true branch) \n n$8=*&__assert_file__:class NSString * [line 31]\n PRUNE((n$8 != 0), true); [line 31]\n REMOVE_TEMPS(n$8); [line 31]\n " shape="invhouse"] + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] - 66 -> 68 ; -65 [label="65: + \n " ] +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 65 -> 70 ; -64 [label="64: Assertion failure \n _fun___infer_fail(\"ASSERTION_FAILURE\":void ) [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] - 64 -> 50 ; -63 [label="63: Prune (false branch) \n n$3=*&SIL_temp_conditional___56:int [line 31]\n NULLIFY(&SIL_temp_conditional___56,true); [line 31]\n PRUNE((n$3 == 0), false); [line 31]\n REMOVE_TEMPS(n$3); [line 31]\n " shape="invhouse"] +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 63 -> 55 ; -62 [label="62: Prune (true branch) \n n$3=*&SIL_temp_conditional___56:int [line 31]\n NULLIFY(&SIL_temp_conditional___56,true); [line 31]\n PRUNE((n$3 != 0), true); [line 31]\n REMOVE_TEMPS(n$3); [line 31]\n NULLIFY(&target,false); [line 31]\n " shape="invhouse"] + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] - 62 -> 78 ; -61 [label="61: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___56); [line 31]\n *&SIL_temp_conditional___56:int =1 [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 61 -> 56 ; -60 [label="60: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___56); [line 31]\n *&SIL_temp_conditional___56:int =0 [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] - 60 -> 56 ; -59 [label="59: Prune (false branch) \n PRUNE(((n$2 != (void *)0) == 0), false); [line 31]\n REMOVE_TEMPS(n$2); [line 31]\n " shape="invhouse"] +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 59 -> 61 ; -58 [label="58: Prune (true branch) \n PRUNE(((n$2 != (void *)0) != 0), true); [line 31]\n REMOVE_TEMPS(n$2); [line 31]\n " shape="invhouse"] + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] - 58 -> 60 ; -57 [label="57: BinaryOperatorStmt: NE \n n$2=*&target:class A * [line 31]\n " shape="box"] +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 57 -> 58 ; - 57 -> 59 ; -56 [label="56: + \n " ] +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] - 56 -> 62 ; - 56 -> 63 ; -55 [label="55: + \n " ] +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 55 -> 53 ; - 55 -> 54 ; -54 [label="54: Prune (false branch) \n PRUNE((0 == 0), false); [line 31]\n " shape="invhouse"] + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] - 54 -> 51 ; -53 [label="53: Prune (true branch) \n PRUNE((0 != 0), true); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="invhouse"] +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 53 -> 52 ; -52 [label="52: + \n " ] + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] - 52 -> 57 ; -51 [label="51: Return Stmt \n n$0=*&target:class A * [line 32]\n n$1=_fun_A_x(n$0:class A *) [line 32]\n *&return:int =n$1 [line 32]\n REMOVE_TEMPS(n$0,n$1); [line 32]\n NULLIFY(&target,false); [line 32]\n APPLY_ABSTRACTION; [line 32]\n " shape="box"] +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 51 -> 50 ; -50 [label="50: Exit test1 \n " color=yellow style=filled] + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] -49 [label="49: Start test1\nFormals: target:class A *\nLocals: __assert_file__:class NSString * __assert_fn__:class NSString * \n DECLARE_LOCALS(&return,&__assert_file__,&__assert_fn__); [line 30]\n NULLIFY(&__assert_file__,false); [line 30]\n NULLIFY(&__assert_fn__,false); [line 30]\n " color=yellow style=filled] +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 49 -> 52 ; -48 [label="48: DeclStmt \n n$29=_fun_NSString_stringWithUTF8String:(\"infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.m\":char *) [line 24]\n _fun___objc_retain(n$29:class NSString *) [line 24]\n *&__assert_file__:class NSString *=n$29 [line 24]\n REMOVE_TEMPS(n$29); [line 24]\n " shape="box"] + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] - 48 -> 43 ; - 48 -> 44 ; -47 [label="47: BinaryOperatorStmt: Assign \n n$27=*&SIL_temp_conditional___42:class NSString * [line 24]\n NULLIFY(&SIL_temp_conditional___42,true); [line 24]\n _fun___objc_retain(n$27:class NSString *) [line 24]\n n$28=*&__assert_file__:class NSString * [line 24]\n *&__assert_file__:class NSString *=n$27 [line 24]\n _fun___objc_release(n$28:class NSString *) [line 24]\n REMOVE_TEMPS(n$27,n$28); [line 24]\n NULLIFY(&__assert_file__,false); [line 24]\n " shape="box"] +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 47 -> 41 ; -46 [label="46: ConditinalStmt Branch \n n$26=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 24]\n DECLARE_LOCALS(&SIL_temp_conditional___42); [line 24]\n *&SIL_temp_conditional___42:class NSString *=n$26 [line 24]\n REMOVE_TEMPS(n$26); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] - 46 -> 42 ; -45 [label="45: ConditinalStmt Branch \n n$25=*&__assert_file__:class NSString * [line 24]\n DECLARE_LOCALS(&SIL_temp_conditional___42); [line 24]\n *&SIL_temp_conditional___42:class NSString *=n$25 [line 24]\n REMOVE_TEMPS(n$25); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 45 -> 42 ; -44 [label="44: Prune (false branch) \n n$24=*&__assert_file__:class NSString * [line 24]\n PRUNE((n$24 == 0), false); [line 24]\n REMOVE_TEMPS(n$24); [line 24]\n " shape="invhouse"] + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] - 44 -> 46 ; -43 [label="43: Prune (true branch) \n n$24=*&__assert_file__:class NSString * [line 24]\n PRUNE((n$24 != 0), true); [line 24]\n REMOVE_TEMPS(n$24); [line 24]\n " shape="invhouse"] +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 43 -> 45 ; -42 [label="42: + \n " ] + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] - 42 -> 47 ; -41 [label="41: Assertion failure \n _fun___infer_fail(\"ASSERTION_FAILURE\":void ) [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 41 -> 27 ; -40 [label="40: Prune (false branch) \n n$18=*&SIL_temp_conditional___33:int [line 24]\n NULLIFY(&SIL_temp_conditional___33,true); [line 24]\n PRUNE((n$18 == 0), false); [line 24]\n REMOVE_TEMPS(n$18); [line 24]\n " shape="invhouse"] + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] - 40 -> 32 ; -39 [label="39: Prune (true branch) \n n$18=*&SIL_temp_conditional___33:int [line 24]\n NULLIFY(&SIL_temp_conditional___33,true); [line 24]\n PRUNE((n$18 != 0), true); [line 24]\n REMOVE_TEMPS(n$18); [line 24]\n NULLIFY(&a,false); [line 24]\n " shape="invhouse"] +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 39 -> 48 ; -38 [label="38: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___33); [line 24]\n *&SIL_temp_conditional___33:int =1 [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] - 38 -> 33 ; -37 [label="37: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___33); [line 24]\n *&SIL_temp_conditional___33:int =0 [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 37 -> 33 ; -36 [label="36: Prune (false branch) \n PRUNE(((n$17 != (void *)0) == 0), false); [line 24]\n REMOVE_TEMPS(n$17); [line 24]\n " shape="invhouse"] + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] - 36 -> 38 ; -35 [label="35: Prune (true branch) \n PRUNE(((n$17 != (void *)0) != 0), true); [line 24]\n REMOVE_TEMPS(n$17); [line 24]\n " shape="invhouse"] +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 35 -> 37 ; -34 [label="34: BinaryOperatorStmt: NE \n n$17=*&a:class A * [line 24]\n " shape="box"] + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] - 34 -> 35 ; - 34 -> 36 ; -33 [label="33: + \n " ] +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 33 -> 39 ; - 33 -> 40 ; -32 [label="32: + \n " ] + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] - 32 -> 30 ; - 32 -> 31 ; -31 [label="31: Prune (false branch) \n PRUNE((0 == 0), false); [line 24]\n " shape="invhouse"] +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 31 -> 28 ; -30 [label="30: Prune (true branch) \n PRUNE((0 != 0), true); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="invhouse"] + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] - 30 -> 29 ; -29 [label="29: + \n " ] +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 29 -> 34 ; -28 [label="28: Return Stmt \n n$15=*&a:class A * [line 25]\n n$16=_fun_A_x(n$15:class A *) [line 25]\n *&return:int =n$16 [line 25]\n REMOVE_TEMPS(n$15,n$16); [line 25]\n NULLIFY(&a,false); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 28 -> 27 ; -27 [label="27: Exit A_initWithRequest: \n " color=yellow style=filled] +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -26 [label="26: Start A_initWithRequest:\nFormals: self:class A * a:class A *\nLocals: __assert_file__:class NSString * \n DECLARE_LOCALS(&return,&__assert_file__); [line 23]\n NULLIFY(&__assert_file__,false); [line 23]\n NULLIFY(&self,false); [line 23]\n " color=yellow style=filled] + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 26 -> 29 ; -25 [label="25: DeclStmt \n n$14=_fun_NSString_stringWithUTF8String:(\"infer/tests/codetoanalyze/objc/frontend/assertions/NSAssert_example.m\":char *) [line 19]\n _fun___objc_retain(n$14:class NSString *) [line 19]\n *&__assert_file__:class NSString *=n$14 [line 19]\n REMOVE_TEMPS(n$14); [line 19]\n " shape="box"] +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 25 -> 20 ; - 25 -> 21 ; -24 [label="24: BinaryOperatorStmt: Assign \n n$12=*&SIL_temp_conditional___19:class NSString * [line 19]\n NULLIFY(&SIL_temp_conditional___19,true); [line 19]\n _fun___objc_retain(n$12:class NSString *) [line 19]\n n$13=*&__assert_file__:class NSString * [line 19]\n *&__assert_file__:class NSString *=n$12 [line 19]\n _fun___objc_release(n$13:class NSString *) [line 19]\n REMOVE_TEMPS(n$12,n$13); [line 19]\n NULLIFY(&__assert_file__,false); [line 19]\n " shape="box"] + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 24 -> 18 ; -23 [label="23: ConditinalStmt Branch \n n$11=_fun_NSString_stringWithUTF8String:(\"\":char *) [line 19]\n DECLARE_LOCALS(&SIL_temp_conditional___19); [line 19]\n *&SIL_temp_conditional___19:class NSString *=n$11 [line 19]\n REMOVE_TEMPS(n$11); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 23 -> 19 ; -22 [label="22: ConditinalStmt Branch \n n$10=*&__assert_file__:class NSString * [line 19]\n DECLARE_LOCALS(&SIL_temp_conditional___19); [line 19]\n *&SIL_temp_conditional___19:class NSString *=n$10 [line 19]\n REMOVE_TEMPS(n$10); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 22 -> 19 ; -21 [label="21: Prune (false branch) \n n$9=*&__assert_file__:class NSString * [line 19]\n PRUNE((n$9 == 0), false); [line 19]\n REMOVE_TEMPS(n$9); [line 19]\n " shape="invhouse"] +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 21 -> 23 ; -20 [label="20: Prune (true branch) \n n$9=*&__assert_file__:class NSString * [line 19]\n PRUNE((n$9 != 0), true); [line 19]\n REMOVE_TEMPS(n$9); [line 19]\n " shape="invhouse"] + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] - 20 -> 22 ; -19 [label="19: + \n " ] +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 19 -> 24 ; -18 [label="18: Assertion failure \n _fun___infer_fail(\"ASSERTION_FAILURE\":void ) [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] - 18 -> 4 ; -17 [label="17: Prune (false branch) \n n$3=*&SIL_temp_conditional___10:int [line 19]\n NULLIFY(&SIL_temp_conditional___10,true); [line 19]\n PRUNE((n$3 == 0), false); [line 19]\n REMOVE_TEMPS(n$3); [line 19]\n " shape="invhouse"] +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 17 -> 9 ; -16 [label="16: Prune (true branch) \n n$3=*&SIL_temp_conditional___10:int [line 19]\n NULLIFY(&SIL_temp_conditional___10,true); [line 19]\n PRUNE((n$3 != 0), true); [line 19]\n REMOVE_TEMPS(n$3); [line 19]\n NULLIFY(&target,false); [line 19]\n " shape="invhouse"] + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] - 16 -> 25 ; -15 [label="15: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___10); [line 19]\n *&SIL_temp_conditional___10:int =1 [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 15 -> 10 ; -14 [label="14: ConditinalStmt Branch \n DECLARE_LOCALS(&SIL_temp_conditional___10); [line 19]\n *&SIL_temp_conditional___10:int =0 [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] - 14 -> 10 ; -13 [label="13: Prune (false branch) \n PRUNE(((n$2 != (void *)0) == 0), false); [line 19]\n REMOVE_TEMPS(n$2); [line 19]\n " shape="invhouse"] +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Prune (true branch) \n PRUNE(((n$2 != (void *)0) != 0), true); [line 19]\n REMOVE_TEMPS(n$2); [line 19]\n " shape="invhouse"] + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: BinaryOperatorStmt: NE \n n$2=*&target:class A * [line 19]\n " shape="box"] +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 11 -> 12 ; - 11 -> 13 ; -10 [label="10: + \n " ] +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] - 10 -> 16 ; - 10 -> 17 ; -9 [label="9: + \n " ] +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 9 -> 7 ; - 9 -> 8 ; -8 [label="8: Prune (false branch) \n PRUNE((0 == 0), false); [line 19]\n " shape="invhouse"] + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] - 8 -> 5 ; -7 [label="7: Prune (true branch) \n PRUNE((0 != 0), true); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="invhouse"] +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: + \n " ] + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] - 6 -> 11 ; -5 [label="5: Return Stmt \n n$0=*&target:class A * [line 20]\n n$1=_fun_A_x(n$0:class A *) [line 20]\n *&return:int =n$1 [line 20]\n REMOVE_TEMPS(n$0,n$1); [line 20]\n NULLIFY(&target,false); [line 20]\n APPLY_ABSTRACTION; [line 20]\n " shape="box"] +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit A_addTarget: \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start A_addTarget:\nFormals: self:class A * target:class A *\nLocals: __assert_file__:class NSString * \n DECLARE_LOCALS(&return,&__assert_file__); [line 18]\n NULLIFY(&__assert_file__,false); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/block/BlockVar.dot b/infer/tests/codetoanalyze/objc/frontend/block/BlockVar.dot index 584b17ad8..6a951148b 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/BlockVar.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/BlockVar.dot @@ -1,210 +1,504 @@ digraph iCFG { -55 [label="55: DeclStmt \n *&i:int =5 [line 57]\n " shape="box"] +139 [label="139: DeclStmt \n *&i:int =5 [line 57]\n " shape="box"] - 55 -> 54 ; -54 [label="54: DeclStmt \n *&x:int *=&i [line 58]\n " shape="box"] + 139 -> 138 ; +138 [label="138: DeclStmt \n *&x:int *=&i [line 58]\n " shape="box"] - 54 -> 53 ; -53 [label="53: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5); [line 59]\n n$37=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 ):unsigned long ) [line 59]\n *&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5:class __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 =n$37 [line 59]\n n$38=*&x:int * [line 59]\n *n$37.x:int *=n$38 [line 59]\n n$34=*&x:int * [line 59]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_capturedNoNullDeref______5,n$34) [line 59]\n REMOVE_TEMPS(n$37,n$38,n$34); [line 59]\n NULLIFY(&x,false); [line 59]\n " shape="box"] + 138 -> 137 ; +137 [label="137: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5); [line 59]\n n$37=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 ):unsigned long ) [line 59]\n *&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5:class __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 =n$37 [line 59]\n n$38=*&x:int * [line 59]\n *n$37.x:int *=n$38 [line 59]\n n$34=*&x:int * [line 59]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_capturedNoNullDeref______5,n$34) [line 59]\n REMOVE_TEMPS(n$37,n$38,n$34); [line 59]\n NULLIFY(&x,false); [line 59]\n " shape="box"] - 53 -> 49 ; -52 [label="52: Return Stmt \n n$35=*&x:int * [line 60]\n n$36=*n$35:int [line 60]\n *&return:int =n$36 [line 60]\n REMOVE_TEMPS(n$35,n$36); [line 60]\n NULLIFY(&x,false); [line 60]\n APPLY_ABSTRACTION; [line 60]\n " shape="box"] + 137 -> 133 ; +136 [label="136: Return Stmt \n n$35=*&x:int * [line 60]\n n$36=*n$35:int [line 60]\n *&return:int =n$36 [line 60]\n REMOVE_TEMPS(n$35,n$36); [line 60]\n NULLIFY(&x,false); [line 60]\n APPLY_ABSTRACTION; [line 60]\n " shape="box"] - 52 -> 51 ; -51 [label="51: Exit __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 \n " color=yellow style=filled] + 136 -> 135 ; +135 [label="135: Exit __objc_anonymous_block_BlockVar_capturedNoNullDeref______5 \n " color=yellow style=filled] -50 [label="50: Start __objc_anonymous_block_BlockVar_capturedNoNullDeref______5\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 59]\n " color=yellow style=filled] +134 [label="134: Start __objc_anonymous_block_BlockVar_capturedNoNullDeref______5\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 59]\n " color=yellow style=filled] - 50 -> 52 ; -49 [label="49: BinaryOperatorStmt: Assign \n *&x:int *=0 [line 62]\n NULLIFY(&x,false); [line 62]\n " shape="box"] + 134 -> 136 ; +133 [label="133: BinaryOperatorStmt: Assign \n *&x:int *=0 [line 62]\n NULLIFY(&x,false); [line 62]\n " shape="box"] - 49 -> 48 ; -48 [label="48: Return Stmt \n n$32=*&my_block:_fn_ (*) [line 63]\n n$33=n$32() [line 63]\n *&return:int =n$33 [line 63]\n REMOVE_TEMPS(n$32,n$33); [line 63]\n NULLIFY(&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5,true); [line 63]\n NULLIFY(&my_block,false); [line 63]\n NULLIFY(&i,false); [line 63]\n APPLY_ABSTRACTION; [line 63]\n " shape="box"] + 133 -> 132 ; +132 [label="132: Return Stmt \n n$32=*&my_block:_fn_ (*) [line 63]\n n$33=n$32() [line 63]\n *&return:int =n$33 [line 63]\n REMOVE_TEMPS(n$32,n$33); [line 63]\n NULLIFY(&__objc_anonymous_block_BlockVar_capturedNoNullDeref______5,true); [line 63]\n NULLIFY(&my_block,false); [line 63]\n NULLIFY(&i,false); [line 63]\n APPLY_ABSTRACTION; [line 63]\n " shape="box"] - 48 -> 47 ; -47 [label="47: Exit BlockVar_capturedNoNullDeref \n " color=yellow style=filled] + 132 -> 131 ; +131 [label="131: Exit BlockVar_capturedNoNullDeref \n " color=yellow style=filled] -46 [label="46: Start BlockVar_capturedNoNullDeref\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * i:int \n DECLARE_LOCALS(&return,&my_block,&x,&i); [line 56]\n NULLIFY(&my_block,false); [line 56]\n NULLIFY(&self,false); [line 56]\n NULLIFY(&x,false); [line 56]\n " color=yellow style=filled] +130 [label="130: Start BlockVar_capturedNoNullDeref\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * i:int \n DECLARE_LOCALS(&return,&my_block,&x,&i); [line 56]\n NULLIFY(&my_block,false); [line 56]\n NULLIFY(&self,false); [line 56]\n NULLIFY(&x,false); [line 56]\n " color=yellow style=filled] - 46 -> 55 ; -45 [label="45: DeclStmt \n *&x:int *=0 [line 49]\n " shape="box"] + 130 -> 139 ; +129 [label="129: DeclStmt \n *&x:int *=0 [line 49]\n " shape="box"] - 45 -> 44 ; -44 [label="44: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_capturedNullDeref______4); [line 50]\n n$30=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_capturedNullDeref______4 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_BlockVar_capturedNullDeref______4:class __objc_anonymous_block_BlockVar_capturedNullDeref______4 =n$30 [line 50]\n n$31=*&x:int * [line 50]\n *n$30.x:int *=n$31 [line 50]\n n$27=*&x:int * [line 50]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_capturedNullDeref______4,n$27) [line 50]\n REMOVE_TEMPS(n$30,n$31,n$27); [line 50]\n NULLIFY(&x,false); [line 50]\n " shape="box"] + 129 -> 128 ; +128 [label="128: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_capturedNullDeref______4); [line 50]\n n$30=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_capturedNullDeref______4 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_BlockVar_capturedNullDeref______4:class __objc_anonymous_block_BlockVar_capturedNullDeref______4 =n$30 [line 50]\n n$31=*&x:int * [line 50]\n *n$30.x:int *=n$31 [line 50]\n n$27=*&x:int * [line 50]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_capturedNullDeref______4,n$27) [line 50]\n REMOVE_TEMPS(n$30,n$31,n$27); [line 50]\n NULLIFY(&x,false); [line 50]\n " shape="box"] - 44 -> 40 ; -43 [label="43: Return Stmt \n n$28=*&x:int * [line 51]\n n$29=*n$28:int [line 51]\n *&return:int =n$29 [line 51]\n REMOVE_TEMPS(n$28,n$29); [line 51]\n NULLIFY(&x,false); [line 51]\n APPLY_ABSTRACTION; [line 51]\n " shape="box"] + 128 -> 124 ; +127 [label="127: Return Stmt \n n$28=*&x:int * [line 51]\n n$29=*n$28:int [line 51]\n *&return:int =n$29 [line 51]\n REMOVE_TEMPS(n$28,n$29); [line 51]\n NULLIFY(&x,false); [line 51]\n APPLY_ABSTRACTION; [line 51]\n " shape="box"] - 43 -> 42 ; -42 [label="42: Exit __objc_anonymous_block_BlockVar_capturedNullDeref______4 \n " color=yellow style=filled] + 127 -> 126 ; +126 [label="126: Exit __objc_anonymous_block_BlockVar_capturedNullDeref______4 \n " color=yellow style=filled] -41 [label="41: Start __objc_anonymous_block_BlockVar_capturedNullDeref______4\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] +125 [label="125: Start __objc_anonymous_block_BlockVar_capturedNullDeref______4\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] - 41 -> 43 ; -40 [label="40: Return Stmt \n n$25=*&my_block:_fn_ (*) [line 53]\n n$26=n$25() [line 53]\n *&return:int =n$26 [line 53]\n REMOVE_TEMPS(n$25,n$26); [line 53]\n NULLIFY(&__objc_anonymous_block_BlockVar_capturedNullDeref______4,true); [line 53]\n NULLIFY(&my_block,false); [line 53]\n APPLY_ABSTRACTION; [line 53]\n " shape="box"] + 125 -> 127 ; +124 [label="124: Return Stmt \n n$25=*&my_block:_fn_ (*) [line 53]\n n$26=n$25() [line 53]\n *&return:int =n$26 [line 53]\n REMOVE_TEMPS(n$25,n$26); [line 53]\n NULLIFY(&__objc_anonymous_block_BlockVar_capturedNullDeref______4,true); [line 53]\n NULLIFY(&my_block,false); [line 53]\n APPLY_ABSTRACTION; [line 53]\n " shape="box"] - 40 -> 39 ; -39 [label="39: Exit BlockVar_capturedNullDeref \n " color=yellow style=filled] + 124 -> 123 ; +123 [label="123: Exit BlockVar_capturedNullDeref \n " color=yellow style=filled] -38 [label="38: Start BlockVar_capturedNullDeref\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&my_block,&x); [line 48]\n NULLIFY(&my_block,false); [line 48]\n NULLIFY(&self,false); [line 48]\n NULLIFY(&x,false); [line 48]\n " color=yellow style=filled] +122 [label="122: Start BlockVar_capturedNullDeref\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&my_block,&x); [line 48]\n NULLIFY(&my_block,false); [line 48]\n NULLIFY(&self,false); [line 48]\n NULLIFY(&x,false); [line 48]\n " color=yellow style=filled] - 38 -> 45 ; -37 [label="37: DeclStmt \n *&i:int =7 [line 40]\n " shape="box"] + 122 -> 129 ; +121 [label="121: DeclStmt \n *&i:int =7 [line 40]\n " shape="box"] - 37 -> 36 ; -36 [label="36: DeclStmt \n *&x:int *=&i [line 41]\n " shape="box"] + 121 -> 120 ; +120 [label="120: DeclStmt \n *&x:int *=&i [line 41]\n " shape="box"] - 36 -> 35 ; -35 [label="35: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_blockPostOk______3); [line 42]\n n$23=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_blockPostOk______3 ):unsigned long ) [line 42]\n *&__objc_anonymous_block_BlockVar_blockPostOk______3:class __objc_anonymous_block_BlockVar_blockPostOk______3 =n$23 [line 42]\n n$24=*&x:int * [line 42]\n *n$23.x:int *=n$24 [line 42]\n n$21=*&x:int * [line 42]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_blockPostOk______3,n$21) [line 42]\n REMOVE_TEMPS(n$23,n$24,n$21); [line 42]\n NULLIFY(&x,false); [line 42]\n " shape="box"] + 120 -> 119 ; +119 [label="119: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_blockPostOk______3); [line 42]\n n$23=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_blockPostOk______3 ):unsigned long ) [line 42]\n *&__objc_anonymous_block_BlockVar_blockPostOk______3:class __objc_anonymous_block_BlockVar_blockPostOk______3 =n$23 [line 42]\n n$24=*&x:int * [line 42]\n *n$23.x:int *=n$24 [line 42]\n n$21=*&x:int * [line 42]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_blockPostOk______3,n$21) [line 42]\n REMOVE_TEMPS(n$23,n$24,n$21); [line 42]\n NULLIFY(&x,false); [line 42]\n " shape="box"] - 35 -> 31 ; -34 [label="34: Return Stmt \n n$22=*&x:int * [line 43]\n *&return:int *=n$22 [line 43]\n REMOVE_TEMPS(n$22); [line 43]\n NULLIFY(&x,false); [line 43]\n APPLY_ABSTRACTION; [line 43]\n " shape="box"] + 119 -> 115 ; +118 [label="118: Return Stmt \n n$22=*&x:int * [line 43]\n *&return:int *=n$22 [line 43]\n REMOVE_TEMPS(n$22); [line 43]\n NULLIFY(&x,false); [line 43]\n APPLY_ABSTRACTION; [line 43]\n " shape="box"] - 34 -> 33 ; -33 [label="33: Exit __objc_anonymous_block_BlockVar_blockPostOk______3 \n " color=yellow style=filled] + 118 -> 117 ; +117 [label="117: Exit __objc_anonymous_block_BlockVar_blockPostOk______3 \n " color=yellow style=filled] -32 [label="32: Start __objc_anonymous_block_BlockVar_blockPostOk______3\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] +116 [label="116: Start __objc_anonymous_block_BlockVar_blockPostOk______3\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 42]\n " color=yellow style=filled] - 32 -> 34 ; -31 [label="31: Return Stmt \n n$18=*&my_block:_fn_ (*) [line 45]\n n$19=n$18() [line 45]\n n$20=*n$19:int [line 45]\n *&return:int =n$20 [line 45]\n REMOVE_TEMPS(n$18,n$19,n$20); [line 45]\n NULLIFY(&__objc_anonymous_block_BlockVar_blockPostOk______3,true); [line 45]\n NULLIFY(&my_block,false); [line 45]\n NULLIFY(&i,false); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] + 116 -> 118 ; +115 [label="115: Return Stmt \n n$18=*&my_block:_fn_ (*) [line 45]\n n$19=n$18() [line 45]\n n$20=*n$19:int [line 45]\n *&return:int =n$20 [line 45]\n REMOVE_TEMPS(n$18,n$19,n$20); [line 45]\n NULLIFY(&__objc_anonymous_block_BlockVar_blockPostOk______3,true); [line 45]\n NULLIFY(&my_block,false); [line 45]\n NULLIFY(&i,false); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] - 31 -> 30 ; -30 [label="30: Exit BlockVar_blockPostOk \n " color=yellow style=filled] + 115 -> 114 ; +114 [label="114: Exit BlockVar_blockPostOk \n " color=yellow style=filled] -29 [label="29: Start BlockVar_blockPostOk\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * i:int \n DECLARE_LOCALS(&return,&my_block,&x,&i); [line 39]\n NULLIFY(&my_block,false); [line 39]\n NULLIFY(&self,false); [line 39]\n NULLIFY(&x,false); [line 39]\n " color=yellow style=filled] +113 [label="113: Start BlockVar_blockPostOk\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * i:int \n DECLARE_LOCALS(&return,&my_block,&x,&i); [line 39]\n NULLIFY(&my_block,false); [line 39]\n NULLIFY(&self,false); [line 39]\n NULLIFY(&x,false); [line 39]\n " color=yellow style=filled] - 29 -> 37 ; -28 [label="28: DeclStmt \n *&x:int *=0 [line 32]\n " shape="box"] + 113 -> 121 ; +112 [label="112: DeclStmt \n *&x:int *=0 [line 32]\n " shape="box"] - 28 -> 27 ; -27 [label="27: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_blockPostBad______2); [line 33]\n n$16=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_blockPostBad______2 ):unsigned long ) [line 33]\n *&__objc_anonymous_block_BlockVar_blockPostBad______2:class __objc_anonymous_block_BlockVar_blockPostBad______2 =n$16 [line 33]\n n$17=*&x:int * [line 33]\n *n$16.x:int *=n$17 [line 33]\n n$14=*&x:int * [line 33]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_blockPostBad______2,n$14) [line 33]\n REMOVE_TEMPS(n$16,n$17,n$14); [line 33]\n NULLIFY(&x,false); [line 33]\n " shape="box"] + 112 -> 111 ; +111 [label="111: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_blockPostBad______2); [line 33]\n n$16=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_blockPostBad______2 ):unsigned long ) [line 33]\n *&__objc_anonymous_block_BlockVar_blockPostBad______2:class __objc_anonymous_block_BlockVar_blockPostBad______2 =n$16 [line 33]\n n$17=*&x:int * [line 33]\n *n$16.x:int *=n$17 [line 33]\n n$14=*&x:int * [line 33]\n *&my_block:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_blockPostBad______2,n$14) [line 33]\n REMOVE_TEMPS(n$16,n$17,n$14); [line 33]\n NULLIFY(&x,false); [line 33]\n " shape="box"] - 27 -> 23 ; -26 [label="26: Return Stmt \n n$15=*&x:int * [line 34]\n *&return:int *=n$15 [line 34]\n REMOVE_TEMPS(n$15); [line 34]\n NULLIFY(&x,false); [line 34]\n APPLY_ABSTRACTION; [line 34]\n " shape="box"] + 111 -> 107 ; +110 [label="110: Return Stmt \n n$15=*&x:int * [line 34]\n *&return:int *=n$15 [line 34]\n REMOVE_TEMPS(n$15); [line 34]\n NULLIFY(&x,false); [line 34]\n APPLY_ABSTRACTION; [line 34]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Exit __objc_anonymous_block_BlockVar_blockPostBad______2 \n " color=yellow style=filled] + 110 -> 109 ; +109 [label="109: Exit __objc_anonymous_block_BlockVar_blockPostBad______2 \n " color=yellow style=filled] -24 [label="24: Start __objc_anonymous_block_BlockVar_blockPostBad______2\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 33]\n " color=yellow style=filled] +108 [label="108: Start __objc_anonymous_block_BlockVar_blockPostBad______2\nFormals: x:int *\nLocals: \nCaptured: x:int * \n DECLARE_LOCALS(&return); [line 33]\n " color=yellow style=filled] - 24 -> 26 ; -23 [label="23: Return Stmt \n n$11=*&my_block:_fn_ (*) [line 36]\n n$12=n$11() [line 36]\n n$13=*n$12:int [line 36]\n *&return:int =n$13 [line 36]\n REMOVE_TEMPS(n$11,n$12,n$13); [line 36]\n NULLIFY(&__objc_anonymous_block_BlockVar_blockPostBad______2,true); [line 36]\n NULLIFY(&my_block,false); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] + 108 -> 110 ; +107 [label="107: Return Stmt \n n$11=*&my_block:_fn_ (*) [line 36]\n n$12=n$11() [line 36]\n n$13=*n$12:int [line 36]\n *&return:int =n$13 [line 36]\n REMOVE_TEMPS(n$11,n$12,n$13); [line 36]\n NULLIFY(&__objc_anonymous_block_BlockVar_blockPostBad______2,true); [line 36]\n NULLIFY(&my_block,false); [line 36]\n APPLY_ABSTRACTION; [line 36]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Exit BlockVar_blockPostBad \n " color=yellow style=filled] + 107 -> 106 ; +106 [label="106: Exit BlockVar_blockPostBad \n " color=yellow style=filled] -21 [label="21: Start BlockVar_blockPostBad\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&my_block,&x); [line 31]\n NULLIFY(&my_block,false); [line 31]\n NULLIFY(&self,false); [line 31]\n NULLIFY(&x,false); [line 31]\n " color=yellow style=filled] +105 [label="105: Start BlockVar_blockPostBad\nFormals: self:class BlockVar *\nLocals: my_block:_fn_ (*) x:int * \n DECLARE_LOCALS(&return,&my_block,&x); [line 31]\n NULLIFY(&my_block,false); [line 31]\n NULLIFY(&self,false); [line 31]\n NULLIFY(&x,false); [line 31]\n " color=yellow style=filled] - 21 -> 28 ; -20 [label="20: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1); [line 19]\n n$10=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 ):unsigned long ) [line 19]\n *&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1:class __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 =n$10 [line 19]\n *&addBlock:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_navigateToURLInBackground______1) [line 19]\n REMOVE_TEMPS(n$10); [line 19]\n " shape="box"] + 105 -> 112 ; +104 [label="104: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1); [line 19]\n n$10=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 ):unsigned long ) [line 19]\n *&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1:class __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 =n$10 [line 19]\n *&addBlock:_fn_ (*)=(_fun___objc_anonymous_block_BlockVar_navigateToURLInBackground______1) [line 19]\n REMOVE_TEMPS(n$10); [line 19]\n " shape="box"] - 20 -> 15 ; -19 [label="19: DeclStmt \n n$9=_fun_BlockVar_test() [line 20]\n *&res:int =n$9 [line 20]\n REMOVE_TEMPS(n$9); [line 20]\n " shape="box"] + 104 -> 99 ; +103 [label="103: DeclStmt \n n$9=_fun_BlockVar_test() [line 20]\n *&res:int =n$9 [line 20]\n REMOVE_TEMPS(n$9); [line 20]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Return Stmt \n n$6=*&a:int [line 21]\n n$7=*&b:int [line 21]\n n$8=*&res:int [line 21]\n *&return:int =((n$6 + n$7) + n$8) [line 21]\n REMOVE_TEMPS(n$6,n$7,n$8); [line 21]\n NULLIFY(&a,false); [line 21]\n NULLIFY(&b,false); [line 21]\n NULLIFY(&res,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] + 103 -> 102 ; +102 [label="102: Return Stmt \n n$6=*&a:int [line 21]\n n$7=*&b:int [line 21]\n n$8=*&res:int [line 21]\n *&return:int =((n$6 + n$7) + n$8) [line 21]\n REMOVE_TEMPS(n$6,n$7,n$8); [line 21]\n NULLIFY(&a,false); [line 21]\n NULLIFY(&b,false); [line 21]\n NULLIFY(&res,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 \n " color=yellow style=filled] + 102 -> 101 ; +101 [label="101: Exit __objc_anonymous_block_BlockVar_navigateToURLInBackground______1 \n " color=yellow style=filled] -16 [label="16: Start __objc_anonymous_block_BlockVar_navigateToURLInBackground______1\nFormals: a:int b:int \nLocals: res:int \n DECLARE_LOCALS(&return,&res); [line 19]\n NULLIFY(&res,false); [line 19]\n " color=yellow style=filled] +100 [label="100: Start __objc_anonymous_block_BlockVar_navigateToURLInBackground______1\nFormals: a:int b:int \nLocals: res:int \n DECLARE_LOCALS(&return,&res); [line 19]\n NULLIFY(&res,false); [line 19]\n " color=yellow style=filled] - 16 -> 19 ; -15 [label="15: DeclStmt \n n$4=*&addBlock:_fn_ (*) [line 23]\n n$5=n$4(1:int ,2:int ) [line 23]\n *&x:int =n$5 [line 23]\n REMOVE_TEMPS(n$4,n$5); [line 23]\n NULLIFY(&addBlock,false); [line 23]\n " shape="box"] + 100 -> 103 ; +99 [label="99: DeclStmt \n n$4=*&addBlock:_fn_ (*) [line 23]\n n$5=n$4(1:int ,2:int ) [line 23]\n *&x:int =n$5 [line 23]\n REMOVE_TEMPS(n$4,n$5); [line 23]\n NULLIFY(&addBlock,false); [line 23]\n " shape="box"] - 15 -> 14 ; -14 [label="14: DeclStmt \n *&p:int *=0 [line 24]\n " shape="box"] + 99 -> 98 ; +98 [label="98: DeclStmt \n *&p:int *=0 [line 24]\n " shape="box"] - 14 -> 9 ; -13 [label="13: Return Stmt \n NULLIFY(&p,false); [line 28]\n n$3=*&x:int [line 28]\n *&return:int =n$3 [line 28]\n REMOVE_TEMPS(n$3); [line 28]\n NULLIFY(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1,true); [line 28]\n NULLIFY(&x,false); [line 28]\n APPLY_ABSTRACTION; [line 28]\n " shape="box"] + 98 -> 93 ; +97 [label="97: Return Stmt \n NULLIFY(&p,false); [line 28]\n n$3=*&x:int [line 28]\n *&return:int =n$3 [line 28]\n REMOVE_TEMPS(n$3); [line 28]\n NULLIFY(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1,true); [line 28]\n NULLIFY(&x,false); [line 28]\n APPLY_ABSTRACTION; [line 28]\n " shape="box"] - 13 -> 7 ; -12 [label="12: Return Stmt \n NULLIFY(&x,false); [line 26]\n n$1=*&p:int * [line 26]\n n$2=*n$1:int [line 26]\n *&return:int =n$2 [line 26]\n REMOVE_TEMPS(n$1,n$2); [line 26]\n NULLIFY(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1,true); [line 26]\n NULLIFY(&p,false); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] + 97 -> 91 ; +96 [label="96: Return Stmt \n NULLIFY(&x,false); [line 26]\n n$1=*&p:int * [line 26]\n n$2=*n$1:int [line 26]\n *&return:int =n$2 [line 26]\n REMOVE_TEMPS(n$1,n$2); [line 26]\n NULLIFY(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1,true); [line 26]\n NULLIFY(&p,false); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] - 12 -> 7 ; -11 [label="11: Prune (false branch) \n PRUNE(((n$0 == 8) == 0), false); [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n " shape="invhouse"] + 96 -> 91 ; +95 [label="95: Prune (false branch) \n PRUNE(((n$0 == 8) == 0), false); [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n " shape="invhouse"] - 11 -> 13 ; -10 [label="10: Prune (true branch) \n PRUNE(((n$0 == 8) != 0), true); [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n " shape="invhouse"] + 95 -> 97 ; +94 [label="94: Prune (true branch) \n PRUNE(((n$0 == 8) != 0), true); [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: BinaryOperatorStmt: EQ \n n$0=*&x:int [line 25]\n " shape="box"] + 94 -> 96 ; +93 [label="93: BinaryOperatorStmt: EQ \n n$0=*&x:int [line 25]\n " shape="box"] + + + 93 -> 94 ; + 93 -> 95 ; +92 [label="92: + \n NULLIFY(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1,true); [line 25]\n NULLIFY(&addBlock,false); [line 25]\n NULLIFY(&p,false); [line 25]\n NULLIFY(&x,false); [line 25]\n " ] + + + 92 -> 91 ; +91 [label="91: Exit BlockVar_navigateToURLInBackground \n " color=yellow style=filled] + + +90 [label="90: Start BlockVar_navigateToURLInBackground\nFormals: \nLocals: p:int * x:int addBlock:_fn_ (*) \n DECLARE_LOCALS(&return,&p,&x,&addBlock); [line 18]\n NULLIFY(&addBlock,false); [line 18]\n NULLIFY(&p,false); [line 18]\n NULLIFY(&x,false); [line 18]\n " color=yellow style=filled] + + + 90 -> 104 ; +89 [label="89: Return Stmt \n *&return:int =5 [line 15]\n APPLY_ABSTRACTION; [line 15]\n " shape="box"] + + + 89 -> 88 ; +88 [label="88: Exit BlockVar_test \n " color=yellow style=filled] + + +87 [label="87: Start BlockVar_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] + + + 87 -> 89 ; +86 [label="86: Exit BlockVar_frontendChecks \n " color=yellow style=filled] + + +85 [label="85: Start BlockVar_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 9 -> 10 ; - 9 -> 11 ; -8 [label="8: + \n NULLIFY(&__objc_anonymous_block_BlockVar_navigateToURLInBackground______1,true); [line 25]\n NULLIFY(&addBlock,false); [line 25]\n NULLIFY(&p,false); [line 25]\n NULLIFY(&x,false); [line 25]\n " ] +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit BlockVar_navigateToURLInBackground \n " color=yellow style=filled] +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -6 [label="6: Start BlockVar_navigateToURLInBackground\nFormals: \nLocals: p:int * x:int addBlock:_fn_ (*) \n DECLARE_LOCALS(&return,&p,&x,&addBlock); [line 18]\n NULLIFY(&addBlock,false); [line 18]\n NULLIFY(&p,false); [line 18]\n NULLIFY(&x,false); [line 18]\n " color=yellow style=filled] + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] - 6 -> 20 ; -5 [label="5: Return Stmt \n *&return:int =5 [line 15]\n APPLY_ABSTRACTION; [line 15]\n " shape="box"] +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit BlockVar_test \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start BlockVar_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit BlockVar_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start BlockVar_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/block/block-it.dot b/infer/tests/codetoanalyze/objc/frontend/block/block-it.dot index ac6a46b41..4d28a4cba 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/block-it.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/block-it.dot @@ -1,218 +1,512 @@ digraph iCFG { -54 [label="54: DeclStmt \n n$44=_fun___objc_alloc_no_fail(sizeof(class NSArray ):unsigned long ) [line 34]\n n$45=_fun_NSArray_init(n$44:class NSArray *) virtual [line 34]\n *&a:class NSArray *=n$45 [line 34]\n REMOVE_TEMPS(n$44,n$45); [line 34]\n " shape="box"] +138 [label="138: DeclStmt \n n$44=_fun___objc_alloc_no_fail(sizeof(class NSArray ):unsigned long ) [line 34]\n n$45=_fun_NSArray_init(n$44:class NSArray *) virtual [line 34]\n *&a:class NSArray *=n$45 [line 34]\n REMOVE_TEMPS(n$44,n$45); [line 34]\n " shape="box"] - 54 -> 53 ; -53 [label="53: DeclStmt \n n$43=*&a:class NSArray * [line 36]\n *&objects:class NSArray *=n$43 [line 36]\n REMOVE_TEMPS(n$43); [line 36]\n NULLIFY(&a,false); [line 36]\n " shape="box"] + 138 -> 137 ; +137 [label="137: DeclStmt \n n$43=*&a:class NSArray * [line 36]\n *&objects:class NSArray *=n$43 [line 36]\n REMOVE_TEMPS(n$43); [line 36]\n NULLIFY(&a,false); [line 36]\n " shape="box"] - 53 -> 52 ; -52 [label="52: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MyBlock_array_trans______2); [line 40]\n n$42=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MyBlock_array_trans______2 ):unsigned long ) [line 40]\n *&__objc_anonymous_block_MyBlock_array_trans______2:class __objc_anonymous_block_MyBlock_array_trans______2 =n$42 [line 40]\n *&enumerateObjectsUsingBlock:_fn_ (*)=(_fun___objc_anonymous_block_MyBlock_array_trans______2) [line 40]\n REMOVE_TEMPS(n$42); [line 40]\n " shape="box"] + 137 -> 136 ; +136 [label="136: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MyBlock_array_trans______2); [line 40]\n n$42=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MyBlock_array_trans______2 ):unsigned long ) [line 40]\n *&__objc_anonymous_block_MyBlock_array_trans______2:class __objc_anonymous_block_MyBlock_array_trans______2 =n$42 [line 40]\n *&enumerateObjectsUsingBlock:_fn_ (*)=(_fun___objc_anonymous_block_MyBlock_array_trans______2) [line 40]\n REMOVE_TEMPS(n$42); [line 40]\n " shape="box"] - 52 -> 45 ; -51 [label="51: BinaryOperatorStmt: Assign \n NULLIFY(&ShouldStop,false); [line 45]\n n$41=*&stop:_Bool * [line 45]\n *n$41:_Bool =1 [line 45]\n REMOVE_TEMPS(n$41); [line 45]\n NULLIFY(&stop,false); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] + 136 -> 129 ; +135 [label="135: BinaryOperatorStmt: Assign \n NULLIFY(&ShouldStop,false); [line 45]\n n$41=*&stop:_Bool * [line 45]\n *n$41:_Bool =1 [line 45]\n REMOVE_TEMPS(n$41); [line 45]\n NULLIFY(&stop,false); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] - 51 -> 48 ; -50 [label="50: Prune (false branch) \n n$40=*&ShouldStop:int [line 44]\n PRUNE((n$40 == 0), false); [line 44]\n REMOVE_TEMPS(n$40); [line 44]\n APPLY_ABSTRACTION; [line 44]\n " shape="invhouse"] + 135 -> 132 ; +134 [label="134: Prune (false branch) \n n$40=*&ShouldStop:int [line 44]\n PRUNE((n$40 == 0), false); [line 44]\n REMOVE_TEMPS(n$40); [line 44]\n APPLY_ABSTRACTION; [line 44]\n " shape="invhouse"] - 50 -> 48 ; -49 [label="49: Prune (true branch) \n n$40=*&ShouldStop:int [line 44]\n PRUNE((n$40 != 0), true); [line 44]\n REMOVE_TEMPS(n$40); [line 44]\n " shape="invhouse"] + 134 -> 132 ; +133 [label="133: Prune (true branch) \n n$40=*&ShouldStop:int [line 44]\n PRUNE((n$40 != 0), true); [line 44]\n REMOVE_TEMPS(n$40); [line 44]\n " shape="invhouse"] - 49 -> 51 ; -48 [label="48: + \n NULLIFY(&ShouldStop,false); [line 44]\n NULLIFY(&stop,false); [line 44]\n " ] + 133 -> 135 ; +132 [label="132: + \n NULLIFY(&ShouldStop,false); [line 44]\n NULLIFY(&stop,false); [line 44]\n " ] - 48 -> 47 ; -47 [label="47: Exit __objc_anonymous_block_MyBlock_array_trans______2 \n " color=yellow style=filled] + 132 -> 131 ; +131 [label="131: Exit __objc_anonymous_block_MyBlock_array_trans______2 \n " color=yellow style=filled] -46 [label="46: Start __objc_anonymous_block_MyBlock_array_trans______2\nFormals: object:struct objc_object * idx:unsigned long stop:_Bool *\nLocals: ShouldStop:int \n DECLARE_LOCALS(&return,&ShouldStop); [line 40]\n NULLIFY(&idx,false); [line 40]\n NULLIFY(&object,false); [line 40]\n " color=yellow style=filled] +130 [label="130: Start __objc_anonymous_block_MyBlock_array_trans______2\nFormals: object:struct objc_object * idx:unsigned long stop:_Bool *\nLocals: ShouldStop:int \n DECLARE_LOCALS(&return,&ShouldStop); [line 40]\n NULLIFY(&idx,false); [line 40]\n NULLIFY(&object,false); [line 40]\n " color=yellow style=filled] - 46 -> 49 ; - 46 -> 50 ; -45 [label="45: DeclStmt \n n$39=_fun_malloc_no_fail(sizeof(_Bool ):_Bool ) [line 48]\n *&stop:_Bool *=n$39 [line 48]\n REMOVE_TEMPS(n$39); [line 48]\n " shape="box"] + 130 -> 133 ; + 130 -> 134 ; +129 [label="129: DeclStmt \n n$39=_fun_malloc_no_fail(sizeof(_Bool ):_Bool ) [line 48]\n *&stop:_Bool *=n$39 [line 48]\n REMOVE_TEMPS(n$39); [line 48]\n " shape="box"] - 45 -> 44 ; -44 [label="44: BinaryOperatorStmt: Assign \n n$38=*&stop:_Bool * [line 49]\n *n$38:_Bool =0 [line 49]\n REMOVE_TEMPS(n$38); [line 49]\n " shape="box"] + 129 -> 128 ; +128 [label="128: BinaryOperatorStmt: Assign \n n$38=*&stop:_Bool * [line 49]\n *n$38:_Bool =0 [line 49]\n REMOVE_TEMPS(n$38); [line 49]\n " shape="box"] - 44 -> 33 ; -43 [label="43: DeclStmt \n n$35=*&objects:class NSArray * [line 53]\n n$36=*&idx:unsigned long [line 53]\n n$37=_fun_NSArray_objectAtIndexedSubscript:(n$35:class NSArray *,n$36:unsigned long ) virtual [line 53]\n *&object:struct objc_object *=n$37 [line 53]\n REMOVE_TEMPS(n$35,n$36,n$37); [line 53]\n " shape="box"] + 128 -> 117 ; +127 [label="127: DeclStmt \n n$35=*&objects:class NSArray * [line 53]\n n$36=*&idx:unsigned long [line 53]\n n$37=_fun_NSArray_objectAtIndexedSubscript:(n$35:class NSArray *,n$36:unsigned long ) virtual [line 53]\n *&object:struct objc_object *=n$37 [line 53]\n REMOVE_TEMPS(n$35,n$36,n$37); [line 53]\n " shape="box"] - 43 -> 42 ; -42 [label="42: Call n$31 \n n$31=*&enumerateObjectsUsingBlock:_fn_ (*) [line 54]\n n$32=*&object:struct objc_object * [line 54]\n n$33=*&idx:unsigned long [line 54]\n n$34=*&stop:_Bool * [line 54]\n n$31(n$32:struct objc_object *,n$33:unsigned long ,n$34:_Bool *) [line 54]\n REMOVE_TEMPS(n$31,n$32,n$33,n$34); [line 54]\n NULLIFY(&object,false); [line 54]\n " shape="box"] + 127 -> 126 ; +126 [label="126: Call n$31 \n n$31=*&enumerateObjectsUsingBlock:_fn_ (*) [line 54]\n n$32=*&object:struct objc_object * [line 54]\n n$33=*&idx:unsigned long [line 54]\n n$34=*&stop:_Bool * [line 54]\n n$31(n$32:struct objc_object *,n$33:unsigned long ,n$34:_Bool *) [line 54]\n REMOVE_TEMPS(n$31,n$32,n$33,n$34); [line 54]\n NULLIFY(&object,false); [line 54]\n " shape="box"] - 42 -> 39 ; -41 [label="41: Prune (false branch) \n PRUNE(((n$30 == 1) == 0), false); [line 55]\n REMOVE_TEMPS(n$29,n$30); [line 55]\n " shape="invhouse"] + 126 -> 123 ; +125 [label="125: Prune (false branch) \n PRUNE(((n$30 == 1) == 0), false); [line 55]\n REMOVE_TEMPS(n$29,n$30); [line 55]\n " shape="invhouse"] - 41 -> 38 ; -40 [label="40: Prune (true branch) \n PRUNE(((n$30 == 1) != 0), true); [line 55]\n REMOVE_TEMPS(n$29,n$30); [line 55]\n APPLY_ABSTRACTION; [line 55]\n " shape="invhouse"] + 125 -> 122 ; +124 [label="124: Prune (true branch) \n PRUNE(((n$30 == 1) != 0), true); [line 55]\n REMOVE_TEMPS(n$29,n$30); [line 55]\n APPLY_ABSTRACTION; [line 55]\n " shape="invhouse"] - 40 -> 31 ; -39 [label="39: BinaryOperatorStmt: EQ \n n$29=*&stop:_Bool * [line 55]\n n$30=*n$29:_Bool [line 55]\n " shape="box"] + 124 -> 115 ; +123 [label="123: BinaryOperatorStmt: EQ \n n$29=*&stop:_Bool * [line 55]\n n$30=*n$29:_Bool [line 55]\n " shape="box"] + + + 123 -> 124 ; + 123 -> 125 ; +122 [label="122: + \n " ] + + + 122 -> 118 ; +121 [label="121: Prune (false branch) \n PRUNE(((n$26 < n$28) == 0), false); [line 51]\n REMOVE_TEMPS(n$26,n$27,n$28); [line 51]\n APPLY_ABSTRACTION; [line 51]\n " shape="invhouse"] + + + 121 -> 115 ; +120 [label="120: Prune (true branch) \n PRUNE(((n$26 < n$28) != 0), true); [line 51]\n REMOVE_TEMPS(n$26,n$27,n$28); [line 51]\n " shape="invhouse"] + + + 120 -> 127 ; +119 [label="119: BinaryOperatorStmt: LT \n n$26=*&idx:unsigned long [line 51]\n n$27=*&objects:class NSArray * [line 51]\n n$28=_fun_NSArray_count(n$27:class NSArray *) [line 51]\n " shape="box"] + + + 119 -> 120 ; + 119 -> 121 ; +118 [label="118: UnaryOperator \n n$25=*&idx:unsigned long [line 51]\n *&idx:unsigned long =(n$25 + 1) [line 51]\n REMOVE_TEMPS(n$25); [line 51]\n APPLY_ABSTRACTION; [line 51]\n " shape="box"] + + + 118 -> 116 ; +117 [label="117: DeclStmt \n *&idx:unsigned long =0 [line 51]\n APPLY_ABSTRACTION; [line 51]\n " shape="box"] + + + 117 -> 116 ; +116 [label="116: + \n " ] + + + 116 -> 119 ; +115 [label="115: Call _fun_free \n NULLIFY(&enumerateObjectsUsingBlock,false); [line 58]\n NULLIFY(&idx,false); [line 58]\n NULLIFY(&objects,false); [line 58]\n n$24=*&stop:_Bool * [line 58]\n _fun_free(n$24:void *) [line 58]\n REMOVE_TEMPS(n$24); [line 58]\n NULLIFY(&__objc_anonymous_block_MyBlock_array_trans______2,true); [line 58]\n NULLIFY(&stop,false); [line 58]\n APPLY_ABSTRACTION; [line 58]\n " shape="box"] + + + 115 -> 114 ; +114 [label="114: Exit MyBlock_array_trans \n " color=yellow style=filled] + + +113 [label="113: Start MyBlock_array_trans\nFormals: self:class MyBlock *\nLocals: idx:unsigned long object:struct objc_object * stop:_Bool * enumerateObjectsUsingBlock:_fn_ (*) objects:class NSArray * a:class NSArray * \n DECLARE_LOCALS(&return,&idx,&object,&stop,&enumerateObjectsUsingBlock,&objects,&a); [line 32]\n NULLIFY(&a,false); [line 32]\n NULLIFY(&enumerateObjectsUsingBlock,false); [line 32]\n NULLIFY(&idx,false); [line 32]\n NULLIFY(&object,false); [line 32]\n NULLIFY(&objects,false); [line 32]\n NULLIFY(&self,false); [line 32]\n NULLIFY(&stop,false); [line 32]\n " color=yellow style=filled] + + + 113 -> 138 ; +112 [label="112: DeclStmt \n n$22=_fun___objc_alloc_no_fail(sizeof(class NSArray ):unsigned long ) [line 20]\n n$23=_fun_NSArray_init(n$22:class NSArray *) virtual [line 20]\n *&a:class NSArray *=n$23 [line 20]\n REMOVE_TEMPS(n$22,n$23); [line 20]\n " shape="box"] + + + 112 -> 111 ; +111 [label="111: DeclStmt \n n$21=*&a:class NSArray * [line 21]\n *&objects:class NSArray *=n$21 [line 21]\n REMOVE_TEMPS(n$21); [line 21]\n NULLIFY(&a,false); [line 21]\n " shape="box"] + + + 111 -> 110 ; +110 [label="110: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MyBlock_array______1); [line 21]\n n$20=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MyBlock_array______1 ):unsigned long ) [line 21]\n *&__objc_anonymous_block_MyBlock_array______1:class __objc_anonymous_block_MyBlock_array______1 =n$20 [line 21]\n *&infer___objc_anonymous_block_MyBlock_array______1:_fn_ (*)=(_fun___objc_anonymous_block_MyBlock_array______1) [line 21]\n REMOVE_TEMPS(n$20); [line 21]\n " shape="box"] + + + 110 -> 103 ; +109 [label="109: BinaryOperatorStmt: Assign \n NULLIFY(&ShouldStop,false); [line 27]\n n$19=*&stop:_Bool * [line 27]\n *n$19:_Bool =1 [line 27]\n REMOVE_TEMPS(n$19); [line 27]\n NULLIFY(&stop,false); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] + + + 109 -> 106 ; +108 [label="108: Prune (false branch) \n n$18=*&ShouldStop:int [line 26]\n PRUNE((n$18 == 0), false); [line 26]\n REMOVE_TEMPS(n$18); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="invhouse"] + + + 108 -> 106 ; +107 [label="107: Prune (true branch) \n n$18=*&ShouldStop:int [line 26]\n PRUNE((n$18 != 0), true); [line 26]\n REMOVE_TEMPS(n$18); [line 26]\n " shape="invhouse"] + + + 107 -> 109 ; +106 [label="106: + \n NULLIFY(&ShouldStop,false); [line 26]\n NULLIFY(&stop,false); [line 26]\n " ] + + + 106 -> 105 ; +105 [label="105: Exit __objc_anonymous_block_MyBlock_array______1 \n " color=yellow style=filled] + + +104 [label="104: Start __objc_anonymous_block_MyBlock_array______1\nFormals: object:struct objc_object * idx:unsigned long stop:_Bool *\nLocals: ShouldStop:int \n DECLARE_LOCALS(&return,&ShouldStop); [line 21]\n NULLIFY(&idx,false); [line 21]\n NULLIFY(&object,false); [line 21]\n " color=yellow style=filled] + + + 104 -> 107 ; + 104 -> 108 ; +103 [label="103: DeclStmt \n n$17=_fun_malloc_no_fail(sizeof(signed char ):signed char ) [line 21]\n *&stop:_Bool *=n$17 [line 21]\n REMOVE_TEMPS(n$17); [line 21]\n " shape="box"] + + + 103 -> 102 ; +102 [label="102: BinaryOperatorStmt: Assign \n n$16=*&stop:_Bool * [line 21]\n *n$16:void =0 [line 21]\n REMOVE_TEMPS(n$16); [line 21]\n " shape="box"] + + + 102 -> 91 ; +101 [label="101: DeclStmt \n n$13=*&objects:class NSArray * [line 21]\n n$14=*&idx:unsigned long [line 21]\n n$15=_fun_NSArray_objectAtIndexedSubscript:(n$13:class NSArray *,n$14:unsigned long ) virtual [line 21]\n *&object:struct objc_object *=n$15 [line 21]\n REMOVE_TEMPS(n$13,n$14,n$15); [line 21]\n NULLIFY(&object,false); [line 21]\n " shape="box"] + + + 101 -> 100 ; +100 [label="100: Call n$8 \n n$8=*&infer___objc_anonymous_block_MyBlock_array______1:_fn_ (*) [line 21]\n n$9=*&object:struct objc_object * [line 21]\n n$10=*&idx:unsigned long [line 21]\n n$11=*&stop:_Bool * [line 21]\n n$12=n$8(n$9:struct objc_object *,n$10:unsigned long ,n$11:_Bool *) [line 21]\n REMOVE_TEMPS(n$8,n$9,n$10,n$11,n$12); [line 21]\n " shape="box"] + + + 100 -> 97 ; +99 [label="99: Prune (false branch) \n n$7=*n$6:signed char [line 21]\n PRUNE((n$7 == 0), false); [line 21]\n REMOVE_TEMPS(n$6,n$7); [line 21]\n " shape="invhouse"] + + + 99 -> 96 ; +98 [label="98: Prune (true branch) \n n$7=*n$6:signed char [line 21]\n PRUNE((n$7 != 0), true); [line 21]\n REMOVE_TEMPS(n$6,n$7); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="invhouse"] + + + 98 -> 89 ; +97 [label="97: UnaryOperator \n n$6=*&stop:_Bool * [line 21]\n " shape="box"] + + + 97 -> 98 ; + 97 -> 99 ; +96 [label="96: + \n " ] + + + 96 -> 92 ; +95 [label="95: Prune (false branch) \n PRUNE(((n$3 < n$5) == 0), false); [line 21]\n REMOVE_TEMPS(n$3,n$4,n$5); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="invhouse"] + + + 95 -> 89 ; +94 [label="94: Prune (true branch) \n PRUNE(((n$3 < n$5) != 0), true); [line 21]\n REMOVE_TEMPS(n$3,n$4,n$5); [line 21]\n " shape="invhouse"] + + + 94 -> 101 ; +93 [label="93: BinaryOperatorStmt: LT \n n$3=*&idx:unsigned long [line 21]\n n$4=*&objects:class NSArray * [line 21]\n n$5=_fun_NSArray_count(n$4:class NSArray *) virtual [line 21]\n " shape="box"] + + + 93 -> 94 ; + 93 -> 95 ; +92 [label="92: UnaryOperator \n n$2=*&idx:unsigned long [line 21]\n *&idx:unsigned long =(n$2 + 1) [line 21]\n REMOVE_TEMPS(n$2); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] + + + 92 -> 90 ; +91 [label="91: DeclStmt \n *&idx:unsigned long =0 [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] + + + 91 -> 90 ; +90 [label="90: + \n " ] + + + 90 -> 93 ; +89 [label="89: Call _fun_free \n NULLIFY(&idx,false); [line 21]\n NULLIFY(&infer___objc_anonymous_block_MyBlock_array______1,false); [line 21]\n NULLIFY(&objects,false); [line 21]\n n$0=*&stop:_Bool * [line 21]\n n$1=_fun_free(n$0:void *) [line 21]\n NULLIFY(&object,true); [line 21]\n NULLIFY(&idx,true); [line 21]\n NULLIFY(&stop,true); [line 21]\n NULLIFY(&objects,true); [line 21]\n REMOVE_TEMPS(n$0,n$1); [line 21]\n NULLIFY(&__objc_anonymous_block_MyBlock_array______1,true); [line 21]\n NULLIFY(&infer___objc_anonymous_block_MyBlock_array______1,true); [line 21]\n NULLIFY(&idx,false); [line 21]\n NULLIFY(&infer___objc_anonymous_block_MyBlock_array______1,false); [line 21]\n NULLIFY(&objects,false); [line 21]\n NULLIFY(&stop,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] + + + 89 -> 88 ; +88 [label="88: Exit MyBlock_array \n " color=yellow style=filled] + + +87 [label="87: Start MyBlock_array\nFormals: self:class MyBlock *\nLocals: idx:unsigned long object:struct objc_object * stop:_Bool * infer___objc_anonymous_block_MyBlock_array______1:_fn_ (*) objects:class NSArray * a:class NSArray * \n DECLARE_LOCALS(&return,&idx,&object,&stop,&infer___objc_anonymous_block_MyBlock_array______1,&objects,&a); [line 18]\n NULLIFY(&a,false); [line 18]\n NULLIFY(&idx,false); [line 18]\n NULLIFY(&infer___objc_anonymous_block_MyBlock_array______1,false); [line 18]\n NULLIFY(&object,false); [line 18]\n NULLIFY(&objects,false); [line 18]\n NULLIFY(&self,false); [line 18]\n NULLIFY(&stop,false); [line 18]\n " color=yellow style=filled] + + + 87 -> 112 ; +86 [label="86: Exit MyBlock_frontendChecks \n " color=yellow style=filled] + + +85 [label="85: Start MyBlock_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 39 -> 40 ; - 39 -> 41 ; -38 [label="38: + \n " ] +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] - 38 -> 34 ; -37 [label="37: Prune (false branch) \n PRUNE(((n$26 < n$28) == 0), false); [line 51]\n REMOVE_TEMPS(n$26,n$27,n$28); [line 51]\n APPLY_ABSTRACTION; [line 51]\n " shape="invhouse"] +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 37 -> 31 ; -36 [label="36: Prune (true branch) \n PRUNE(((n$26 < n$28) != 0), true); [line 51]\n REMOVE_TEMPS(n$26,n$27,n$28); [line 51]\n " shape="invhouse"] + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] - 36 -> 43 ; -35 [label="35: BinaryOperatorStmt: LT \n n$26=*&idx:unsigned long [line 51]\n n$27=*&objects:class NSArray * [line 51]\n n$28=_fun_NSArray_count(n$27:class NSArray *) [line 51]\n " shape="box"] +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 35 -> 36 ; - 35 -> 37 ; -34 [label="34: UnaryOperator \n n$25=*&idx:unsigned long [line 51]\n *&idx:unsigned long =(n$25 + 1) [line 51]\n REMOVE_TEMPS(n$25); [line 51]\n APPLY_ABSTRACTION; [line 51]\n " shape="box"] +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] - 34 -> 32 ; -33 [label="33: DeclStmt \n *&idx:unsigned long =0 [line 51]\n APPLY_ABSTRACTION; [line 51]\n " shape="box"] +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 33 -> 32 ; -32 [label="32: + \n " ] + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] - 32 -> 35 ; -31 [label="31: Call _fun_free \n NULLIFY(&enumerateObjectsUsingBlock,false); [line 58]\n NULLIFY(&idx,false); [line 58]\n NULLIFY(&objects,false); [line 58]\n n$24=*&stop:_Bool * [line 58]\n _fun_free(n$24:void *) [line 58]\n REMOVE_TEMPS(n$24); [line 58]\n NULLIFY(&__objc_anonymous_block_MyBlock_array_trans______2,true); [line 58]\n NULLIFY(&stop,false); [line 58]\n APPLY_ABSTRACTION; [line 58]\n " shape="box"] +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 31 -> 30 ; -30 [label="30: Exit MyBlock_array_trans \n " color=yellow style=filled] + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] -29 [label="29: Start MyBlock_array_trans\nFormals: self:class MyBlock *\nLocals: idx:unsigned long object:struct objc_object * stop:_Bool * enumerateObjectsUsingBlock:_fn_ (*) objects:class NSArray * a:class NSArray * \n DECLARE_LOCALS(&return,&idx,&object,&stop,&enumerateObjectsUsingBlock,&objects,&a); [line 32]\n NULLIFY(&a,false); [line 32]\n NULLIFY(&enumerateObjectsUsingBlock,false); [line 32]\n NULLIFY(&idx,false); [line 32]\n NULLIFY(&object,false); [line 32]\n NULLIFY(&objects,false); [line 32]\n NULLIFY(&self,false); [line 32]\n NULLIFY(&stop,false); [line 32]\n " color=yellow style=filled] +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 29 -> 54 ; -28 [label="28: DeclStmt \n n$22=_fun___objc_alloc_no_fail(sizeof(class NSArray ):unsigned long ) [line 20]\n n$23=_fun_NSArray_init(n$22:class NSArray *) virtual [line 20]\n *&a:class NSArray *=n$23 [line 20]\n REMOVE_TEMPS(n$22,n$23); [line 20]\n " shape="box"] + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 28 -> 27 ; -27 [label="27: DeclStmt \n n$21=*&a:class NSArray * [line 21]\n *&objects:class NSArray *=n$21 [line 21]\n REMOVE_TEMPS(n$21); [line 21]\n NULLIFY(&a,false); [line 21]\n " shape="box"] +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 27 -> 26 ; -26 [label="26: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_MyBlock_array______1); [line 21]\n n$20=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_MyBlock_array______1 ):unsigned long ) [line 21]\n *&__objc_anonymous_block_MyBlock_array______1:class __objc_anonymous_block_MyBlock_array______1 =n$20 [line 21]\n *&infer___objc_anonymous_block_MyBlock_array______1:_fn_ (*)=(_fun___objc_anonymous_block_MyBlock_array______1) [line 21]\n REMOVE_TEMPS(n$20); [line 21]\n " shape="box"] + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 26 -> 19 ; -25 [label="25: BinaryOperatorStmt: Assign \n NULLIFY(&ShouldStop,false); [line 27]\n n$19=*&stop:_Bool * [line 27]\n *n$19:_Bool =1 [line 27]\n REMOVE_TEMPS(n$19); [line 27]\n NULLIFY(&stop,false); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 25 -> 22 ; -24 [label="24: Prune (false branch) \n n$18=*&ShouldStop:int [line 26]\n PRUNE((n$18 == 0), false); [line 26]\n REMOVE_TEMPS(n$18); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="invhouse"] + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 24 -> 22 ; -23 [label="23: Prune (true branch) \n n$18=*&ShouldStop:int [line 26]\n PRUNE((n$18 != 0), true); [line 26]\n REMOVE_TEMPS(n$18); [line 26]\n " shape="invhouse"] +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 23 -> 25 ; -22 [label="22: + \n NULLIFY(&ShouldStop,false); [line 26]\n NULLIFY(&stop,false); [line 26]\n " ] + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Exit __objc_anonymous_block_MyBlock_array______1 \n " color=yellow style=filled] +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -20 [label="20: Start __objc_anonymous_block_MyBlock_array______1\nFormals: object:struct objc_object * idx:unsigned long stop:_Bool *\nLocals: ShouldStop:int \n DECLARE_LOCALS(&return,&ShouldStop); [line 21]\n NULLIFY(&idx,false); [line 21]\n NULLIFY(&object,false); [line 21]\n " color=yellow style=filled] + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] - 20 -> 23 ; - 20 -> 24 ; -19 [label="19: DeclStmt \n n$17=_fun_malloc_no_fail(sizeof(signed char ):signed char ) [line 21]\n *&stop:_Bool *=n$17 [line 21]\n REMOVE_TEMPS(n$17); [line 21]\n " shape="box"] +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 19 -> 18 ; -18 [label="18: BinaryOperatorStmt: Assign \n n$16=*&stop:_Bool * [line 21]\n *n$16:void =0 [line 21]\n REMOVE_TEMPS(n$16); [line 21]\n " shape="box"] + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] - 18 -> 7 ; -17 [label="17: DeclStmt \n n$13=*&objects:class NSArray * [line 21]\n n$14=*&idx:unsigned long [line 21]\n n$15=_fun_NSArray_objectAtIndexedSubscript:(n$13:class NSArray *,n$14:unsigned long ) virtual [line 21]\n *&object:struct objc_object *=n$15 [line 21]\n REMOVE_TEMPS(n$13,n$14,n$15); [line 21]\n NULLIFY(&object,false); [line 21]\n " shape="box"] +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 17 -> 16 ; -16 [label="16: Call n$8 \n n$8=*&infer___objc_anonymous_block_MyBlock_array______1:_fn_ (*) [line 21]\n n$9=*&object:struct objc_object * [line 21]\n n$10=*&idx:unsigned long [line 21]\n n$11=*&stop:_Bool * [line 21]\n n$12=n$8(n$9:struct objc_object *,n$10:unsigned long ,n$11:_Bool *) [line 21]\n REMOVE_TEMPS(n$8,n$9,n$10,n$11,n$12); [line 21]\n " shape="box"] + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] - 16 -> 13 ; -15 [label="15: Prune (false branch) \n n$7=*n$6:signed char [line 21]\n PRUNE((n$7 == 0), false); [line 21]\n REMOVE_TEMPS(n$6,n$7); [line 21]\n " shape="invhouse"] +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 15 -> 12 ; -14 [label="14: Prune (true branch) \n n$7=*n$6:signed char [line 21]\n PRUNE((n$7 != 0), true); [line 21]\n REMOVE_TEMPS(n$6,n$7); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="invhouse"] + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] - 14 -> 5 ; -13 [label="13: UnaryOperator \n n$6=*&stop:_Bool * [line 21]\n " shape="box"] +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 13 -> 14 ; - 13 -> 15 ; -12 [label="12: + \n " ] +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] - 12 -> 8 ; -11 [label="11: Prune (false branch) \n PRUNE(((n$3 < n$5) == 0), false); [line 21]\n REMOVE_TEMPS(n$3,n$4,n$5); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="invhouse"] +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 11 -> 5 ; -10 [label="10: Prune (true branch) \n PRUNE(((n$3 < n$5) != 0), true); [line 21]\n REMOVE_TEMPS(n$3,n$4,n$5); [line 21]\n " shape="invhouse"] + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] - 10 -> 17 ; -9 [label="9: BinaryOperatorStmt: LT \n n$3=*&idx:unsigned long [line 21]\n n$4=*&objects:class NSArray * [line 21]\n n$5=_fun_NSArray_count(n$4:class NSArray *) virtual [line 21]\n " shape="box"] +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 9 -> 10 ; - 9 -> 11 ; -8 [label="8: UnaryOperator \n n$2=*&idx:unsigned long [line 21]\n *&idx:unsigned long =(n$2 + 1) [line 21]\n REMOVE_TEMPS(n$2); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] - 8 -> 6 ; -7 [label="7: DeclStmt \n *&idx:unsigned long =0 [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: + \n " ] + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] - 6 -> 9 ; -5 [label="5: Call _fun_free \n NULLIFY(&idx,false); [line 21]\n NULLIFY(&infer___objc_anonymous_block_MyBlock_array______1,false); [line 21]\n NULLIFY(&objects,false); [line 21]\n n$0=*&stop:_Bool * [line 21]\n n$1=_fun_free(n$0:void *) [line 21]\n NULLIFY(&object,true); [line 21]\n NULLIFY(&idx,true); [line 21]\n NULLIFY(&stop,true); [line 21]\n NULLIFY(&objects,true); [line 21]\n REMOVE_TEMPS(n$0,n$1); [line 21]\n NULLIFY(&__objc_anonymous_block_MyBlock_array______1,true); [line 21]\n NULLIFY(&infer___objc_anonymous_block_MyBlock_array______1,true); [line 21]\n NULLIFY(&idx,false); [line 21]\n NULLIFY(&infer___objc_anonymous_block_MyBlock_array______1,false); [line 21]\n NULLIFY(&objects,false); [line 21]\n NULLIFY(&stop,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit MyBlock_array \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start MyBlock_array\nFormals: self:class MyBlock *\nLocals: idx:unsigned long object:struct objc_object * stop:_Bool * infer___objc_anonymous_block_MyBlock_array______1:_fn_ (*) objects:class NSArray * a:class NSArray * \n DECLARE_LOCALS(&return,&idx,&object,&stop,&infer___objc_anonymous_block_MyBlock_array______1,&objects,&a); [line 18]\n NULLIFY(&a,false); [line 18]\n NULLIFY(&idx,false); [line 18]\n NULLIFY(&infer___objc_anonymous_block_MyBlock_array______1,false); [line 18]\n NULLIFY(&object,false); [line 18]\n NULLIFY(&objects,false); [line 18]\n NULLIFY(&self,false); [line 18]\n NULLIFY(&stop,false); [line 18]\n " color=yellow style=filled] +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 28 ; -2 [label="2: Exit MyBlock_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start MyBlock_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/block/block_no_args.dot b/infer/tests/codetoanalyze/objc/frontend/block/block_no_args.dot index d4265d1ca..4b88cc07b 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/block_no_args.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/block_no_args.dot @@ -1,71 +1,113 @@ digraph iCFG { -18 [label="18: BinaryOperatorStmt: Assign \n *&#GB$g:int =7 [line 22]\n " shape="box"] +30 [label="30: BinaryOperatorStmt: Assign \n *&#GB$g:int =7 [line 22]\n " shape="box"] - 18 -> 17 ; -17 [label="17: DeclStmt \n *&z:int =3 [line 24]\n " shape="box"] + 30 -> 29 ; +29 [label="29: DeclStmt \n *&z:int =3 [line 24]\n " shape="box"] + + + 29 -> 28 ; +28 [label="28: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_My_manager_m______1); [line 25]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_My_manager_m______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_My_manager_m______1:class __objc_anonymous_block_My_manager_m______1 =n$7 [line 25]\n n$8=*&z:int [line 25]\n n$9=*&#GB$g:int [line 25]\n *n$7.z:int =n$8 [line 25]\n *n$7.g:int =n$9 [line 25]\n n$5=*&z:int [line 25]\n *&b:_fn_ (*)=(_fun___objc_anonymous_block_My_manager_m______1,n$5) [line 25]\n REMOVE_TEMPS(n$7,n$8,n$9,n$5); [line 25]\n " shape="box"] + + + 28 -> 24 ; +27 [label="27: BinaryOperatorStmt: Assign \n n$6=*&z:int [line 26]\n *&#GB$g:int =(n$6 + 3) [line 26]\n REMOVE_TEMPS(n$6); [line 26]\n NULLIFY(&z,false); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] + + + 27 -> 26 ; +26 [label="26: Exit __objc_anonymous_block_My_manager_m______1 \n " color=yellow style=filled] + + +25 [label="25: Start __objc_anonymous_block_My_manager_m______1\nFormals: z:int \nLocals: \nCaptured: z:int \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] + + + 25 -> 27 ; +24 [label="24: Call n$4 \n n$4=*&b:_fn_ (*) [line 28]\n n$4() [line 28]\n REMOVE_TEMPS(n$4); [line 28]\n NULLIFY(&b,false); [line 28]\n " shape="box"] + + + 24 -> 23 ; +23 [label="23: DeclStmt \n *&p:int *=0 [line 29]\n " shape="box"] + + + 23 -> 18 ; +22 [label="22: Return Stmt \n NULLIFY(&p,false); [line 33]\n n$3=*&z:int [line 33]\n *&return:int =n$3 [line 33]\n REMOVE_TEMPS(n$3); [line 33]\n NULLIFY(&__objc_anonymous_block_My_manager_m______1,true); [line 33]\n NULLIFY(&z,false); [line 33]\n APPLY_ABSTRACTION; [line 33]\n " shape="box"] + + + 22 -> 16 ; +21 [label="21: Return Stmt \n NULLIFY(&z,false); [line 31]\n n$1=*&p:int * [line 31]\n n$2=*n$1:int [line 31]\n *&return:int =n$2 [line 31]\n REMOVE_TEMPS(n$1,n$2); [line 31]\n NULLIFY(&__objc_anonymous_block_My_manager_m______1,true); [line 31]\n NULLIFY(&p,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + + + 21 -> 16 ; +20 [label="20: Prune (false branch) \n PRUNE(((n$0 == 6) == 0), false); [line 30]\n REMOVE_TEMPS(n$0); [line 30]\n " shape="invhouse"] + + + 20 -> 22 ; +19 [label="19: Prune (true branch) \n PRUNE(((n$0 == 6) != 0), true); [line 30]\n REMOVE_TEMPS(n$0); [line 30]\n " shape="invhouse"] + + + 19 -> 21 ; +18 [label="18: BinaryOperatorStmt: EQ \n n$0=*&#GB$g:int [line 30]\n " shape="box"] + + + 18 -> 19 ; + 18 -> 20 ; +17 [label="17: + \n NULLIFY(&__objc_anonymous_block_My_manager_m______1,true); [line 30]\n NULLIFY(&b,false); [line 30]\n NULLIFY(&p,false); [line 30]\n NULLIFY(&self,false); [line 30]\n NULLIFY(&z,false); [line 30]\n " ] 17 -> 16 ; -16 [label="16: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_My_manager_m______1); [line 25]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_My_manager_m______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_My_manager_m______1:class __objc_anonymous_block_My_manager_m______1 =n$7 [line 25]\n n$8=*&z:int [line 25]\n n$9=*&#GB$g:int [line 25]\n *n$7.z:int =n$8 [line 25]\n *n$7.g:int =n$9 [line 25]\n n$5=*&z:int [line 25]\n *&b:_fn_ (*)=(_fun___objc_anonymous_block_My_manager_m______1,n$5) [line 25]\n REMOVE_TEMPS(n$7,n$8,n$9,n$5); [line 25]\n " shape="box"] +16 [label="16: Exit My_manager_m \n " color=yellow style=filled] - 16 -> 12 ; -15 [label="15: BinaryOperatorStmt: Assign \n n$6=*&z:int [line 26]\n *&#GB$g:int =(n$6 + 3) [line 26]\n REMOVE_TEMPS(n$6); [line 26]\n NULLIFY(&z,false); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] +15 [label="15: Start My_manager_m\nFormals: self:class My_manager *\nLocals: p:int * z:int b:_fn_ (*) \n DECLARE_LOCALS(&return,&p,&z,&b); [line 21]\n NULLIFY(&b,false); [line 21]\n NULLIFY(&p,false); [line 21]\n NULLIFY(&self,false); [line 21]\n NULLIFY(&z,false); [line 21]\n " color=yellow style=filled] - 15 -> 14 ; -14 [label="14: Exit __objc_anonymous_block_My_manager_m______1 \n " color=yellow style=filled] + 15 -> 30 ; +14 [label="14: Exit My_manager_frontendChecks \n " color=yellow style=filled] -13 [label="13: Start __objc_anonymous_block_My_manager_m______1\nFormals: z:int \nLocals: \nCaptured: z:int \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] +13 [label="13: Start My_manager_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 13 -> 15 ; -12 [label="12: Call n$4 \n n$4=*&b:_fn_ (*) [line 28]\n n$4() [line 28]\n REMOVE_TEMPS(n$4); [line 28]\n NULLIFY(&b,false); [line 28]\n " shape="box"] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: DeclStmt \n *&p:int *=0 [line 29]\n " shape="box"] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 11 -> 6 ; -10 [label="10: Return Stmt \n NULLIFY(&p,false); [line 33]\n n$3=*&z:int [line 33]\n *&return:int =n$3 [line 33]\n REMOVE_TEMPS(n$3); [line 33]\n NULLIFY(&__objc_anonymous_block_My_manager_m______1,true); [line 33]\n NULLIFY(&z,false); [line 33]\n APPLY_ABSTRACTION; [line 33]\n " shape="box"] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 10 -> 4 ; -9 [label="9: Return Stmt \n NULLIFY(&z,false); [line 31]\n n$1=*&p:int * [line 31]\n n$2=*n$1:int [line 31]\n *&return:int =n$2 [line 31]\n REMOVE_TEMPS(n$1,n$2); [line 31]\n NULLIFY(&__objc_anonymous_block_My_manager_m______1,true); [line 31]\n NULLIFY(&p,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 9 -> 4 ; -8 [label="8: Prune (false branch) \n PRUNE(((n$0 == 6) == 0), false); [line 30]\n REMOVE_TEMPS(n$0); [line 30]\n " shape="invhouse"] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 8 -> 10 ; -7 [label="7: Prune (true branch) \n PRUNE(((n$0 == 6) != 0), true); [line 30]\n REMOVE_TEMPS(n$0); [line 30]\n " shape="invhouse"] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: BinaryOperatorStmt: EQ \n n$0=*&#GB$g:int [line 30]\n " shape="box"] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 7 ; - 6 -> 8 ; -5 [label="5: + \n NULLIFY(&__objc_anonymous_block_My_manager_m______1,true); [line 30]\n NULLIFY(&b,false); [line 30]\n NULLIFY(&p,false); [line 30]\n NULLIFY(&self,false); [line 30]\n NULLIFY(&z,false); [line 30]\n " ] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit My_manager_m \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start My_manager_m\nFormals: self:class My_manager *\nLocals: p:int * z:int b:_fn_ (*) \n DECLARE_LOCALS(&return,&p,&z,&b); [line 21]\n NULLIFY(&b,false); [line 21]\n NULLIFY(&p,false); [line 21]\n NULLIFY(&self,false); [line 21]\n NULLIFY(&z,false); [line 21]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 18 ; -2 [label="2: Exit My_manager_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start My_manager_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/block/block_release.dot b/infer/tests/codetoanalyze/objc/frontend/block/block_release.dot index 425f7144d..2a3ea7943 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/block_release.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/block_release.dot @@ -1,80 +1,997 @@ digraph iCFG { -20 [label="20: DeclStmt \n *&z:int =3 [line 22]\n " shape="box"] +282 [label="282: DeclStmt \n *&z:int =3 [line 22]\n " shape="box"] - 20 -> 19 ; -19 [label="19: DeclStmt \n n$12=_fun_CGBitmapContextCreate(0:void *,0:unsigned long ,0:unsigned long ,8:unsigned long ,0:unsigned long ,0:struct CGColorSpace *,0:unsigned int ) [line 23]\n *&context:struct CGContext *=n$12 [line 23]\n REMOVE_TEMPS(n$12); [line 23]\n " shape="box"] + 282 -> 281 ; +281 [label="281: DeclStmt \n n$12=_fun_CGBitmapContextCreate(0:void *,0:unsigned long ,0:unsigned long ,8:unsigned long ,0:unsigned long ,0:struct CGColorSpace *,0:unsigned int ) [line 23]\n *&context:struct CGContext *=n$12 [line 23]\n REMOVE_TEMPS(n$12); [line 23]\n " shape="box"] - 19 -> 18 ; -18 [label="18: DeclStmt \n n$10=*&context:struct CGContext * [line 24]\n n$11=_fun_CGBitmapContextCreateImage(n$10:struct CGContext *) [line 24]\n *&newImage:struct CGImage *=n$11 [line 24]\n REMOVE_TEMPS(n$10,n$11); [line 24]\n " shape="box"] + 281 -> 280 ; +280 [label="280: DeclStmt \n n$10=*&context:struct CGContext * [line 24]\n n$11=_fun_CGBitmapContextCreateImage(n$10:struct CGContext *) [line 24]\n *&newImage:struct CGImage *=n$11 [line 24]\n REMOVE_TEMPS(n$10,n$11); [line 24]\n " shape="box"] - 18 -> 17 ; -17 [label="17: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_My_manager_blockReleaseTODO______1); [line 25]\n n$8=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_My_manager_blockReleaseTODO______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_My_manager_blockReleaseTODO______1:class __objc_anonymous_block_My_manager_blockReleaseTODO______1 =n$8 [line 25]\n n$9=*&newImage:struct CGImage * [line 25]\n *n$8.newImage:struct CGImage *=n$9 [line 25]\n n$5=*&newImage:struct CGImage * [line 25]\n *&b:_fn_ (*)=(_fun___objc_anonymous_block_My_manager_blockReleaseTODO______1,n$5) [line 25]\n REMOVE_TEMPS(n$8,n$9,n$5); [line 25]\n NULLIFY(&newImage,false); [line 25]\n " shape="box"] + 280 -> 279 ; +279 [label="279: BinaryOperatorStmt: Assign \n DECLARE_LOCALS(&__objc_anonymous_block_My_manager_blockReleaseTODO______1); [line 25]\n n$8=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_My_manager_blockReleaseTODO______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_My_manager_blockReleaseTODO______1:class __objc_anonymous_block_My_manager_blockReleaseTODO______1 =n$8 [line 25]\n n$9=*&newImage:struct CGImage * [line 25]\n *n$8.newImage:struct CGImage *=n$9 [line 25]\n n$5=*&newImage:struct CGImage * [line 25]\n *&b:_fn_ (*)=(_fun___objc_anonymous_block_My_manager_blockReleaseTODO______1,n$5) [line 25]\n REMOVE_TEMPS(n$8,n$9,n$5); [line 25]\n NULLIFY(&newImage,false); [line 25]\n " shape="box"] - 17 -> 10 ; -16 [label="16: Call _fun_CGImageRelease \n n$7=*&newImage:struct CGImage * [line 27]\n _fun_CGImageRelease(n$7:struct CGImage *) [line 27]\n REMOVE_TEMPS(n$7); [line 27]\n NULLIFY(&newImage,false); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] + 279 -> 272 ; +278 [label="278: Call _fun_CGImageRelease \n n$7=*&newImage:struct CGImage * [line 27]\n _fun_CGImageRelease(n$7:struct CGImage *) [line 27]\n REMOVE_TEMPS(n$7); [line 27]\n NULLIFY(&newImage,false); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] - 16 -> 13 ; -15 [label="15: Prune (false branch) \n n$6=*&newImage:struct CGImage * [line 26]\n PRUNE((n$6 == 0), false); [line 26]\n REMOVE_TEMPS(n$6); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="invhouse"] + 278 -> 275 ; +277 [label="277: Prune (false branch) \n n$6=*&newImage:struct CGImage * [line 26]\n PRUNE((n$6 == 0), false); [line 26]\n REMOVE_TEMPS(n$6); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="invhouse"] - 15 -> 13 ; -14 [label="14: Prune (true branch) \n n$6=*&newImage:struct CGImage * [line 26]\n PRUNE((n$6 != 0), true); [line 26]\n REMOVE_TEMPS(n$6); [line 26]\n " shape="invhouse"] + 277 -> 275 ; +276 [label="276: Prune (true branch) \n n$6=*&newImage:struct CGImage * [line 26]\n PRUNE((n$6 != 0), true); [line 26]\n REMOVE_TEMPS(n$6); [line 26]\n " shape="invhouse"] - 14 -> 16 ; -13 [label="13: + \n NULLIFY(&newImage,false); [line 26]\n " ] + 276 -> 278 ; +275 [label="275: + \n NULLIFY(&newImage,false); [line 26]\n " ] - 13 -> 12 ; -12 [label="12: Exit __objc_anonymous_block_My_manager_blockReleaseTODO______1 \n " color=yellow style=filled] + 275 -> 274 ; +274 [label="274: Exit __objc_anonymous_block_My_manager_blockReleaseTODO______1 \n " color=yellow style=filled] -11 [label="11: Start __objc_anonymous_block_My_manager_blockReleaseTODO______1\nFormals: newImage:struct CGImage * a:int \nLocals: \nCaptured: newImage:struct CGImage * \n DECLARE_LOCALS(&return); [line 25]\n NULLIFY(&a,false); [line 25]\n " color=yellow style=filled] +273 [label="273: Start __objc_anonymous_block_My_manager_blockReleaseTODO______1\nFormals: newImage:struct CGImage * a:int \nLocals: \nCaptured: newImage:struct CGImage * \n DECLARE_LOCALS(&return); [line 25]\n NULLIFY(&a,false); [line 25]\n " color=yellow style=filled] - 11 -> 14 ; - 11 -> 15 ; -10 [label="10: Call n$3 \n n$3=*&b:_fn_ (*) [line 29]\n n$4=*&z:int [line 29]\n n$3(n$4:int ) [line 29]\n REMOVE_TEMPS(n$3,n$4); [line 29]\n NULLIFY(&b,false); [line 29]\n " shape="box"] + 273 -> 276 ; + 273 -> 277 ; +272 [label="272: Call n$3 \n n$3=*&b:_fn_ (*) [line 29]\n n$4=*&z:int [line 29]\n n$3(n$4:int ) [line 29]\n REMOVE_TEMPS(n$3,n$4); [line 29]\n NULLIFY(&b,false); [line 29]\n " shape="box"] - 10 -> 7 ; - 10 -> 8 ; -9 [label="9: Call _fun_CGContextRelease \n n$2=*&context:struct CGContext * [line 31]\n _fun_CGContextRelease(n$2:struct CGContext *) [line 31]\n REMOVE_TEMPS(n$2); [line 31]\n NULLIFY(&context,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 272 -> 269 ; + 272 -> 270 ; +271 [label="271: Call _fun_CGContextRelease \n n$2=*&context:struct CGContext * [line 31]\n _fun_CGContextRelease(n$2:struct CGContext *) [line 31]\n REMOVE_TEMPS(n$2); [line 31]\n NULLIFY(&context,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] - 9 -> 6 ; -8 [label="8: Prune (false branch) \n n$1=*&context:struct CGContext * [line 30]\n PRUNE((n$1 == 0), false); [line 30]\n REMOVE_TEMPS(n$1); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="invhouse"] + 271 -> 268 ; +270 [label="270: Prune (false branch) \n n$1=*&context:struct CGContext * [line 30]\n PRUNE((n$1 == 0), false); [line 30]\n REMOVE_TEMPS(n$1); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="invhouse"] - 8 -> 6 ; -7 [label="7: Prune (true branch) \n n$1=*&context:struct CGContext * [line 30]\n PRUNE((n$1 != 0), true); [line 30]\n REMOVE_TEMPS(n$1); [line 30]\n " shape="invhouse"] + 270 -> 268 ; +269 [label="269: Prune (true branch) \n n$1=*&context:struct CGContext * [line 30]\n PRUNE((n$1 != 0), true); [line 30]\n REMOVE_TEMPS(n$1); [line 30]\n " shape="invhouse"] - 7 -> 9 ; -6 [label="6: + \n " ] + 269 -> 271 ; +268 [label="268: + \n " ] - 6 -> 5 ; -5 [label="5: Return Stmt \n NULLIFY(&context,false); [line 32]\n n$0=*&z:int [line 32]\n *&return:int =n$0 [line 32]\n REMOVE_TEMPS(n$0); [line 32]\n NULLIFY(&__objc_anonymous_block_My_manager_blockReleaseTODO______1,true); [line 32]\n NULLIFY(&z,false); [line 32]\n APPLY_ABSTRACTION; [line 32]\n " shape="box"] + 268 -> 267 ; +267 [label="267: Return Stmt \n NULLIFY(&context,false); [line 32]\n n$0=*&z:int [line 32]\n *&return:int =n$0 [line 32]\n REMOVE_TEMPS(n$0); [line 32]\n NULLIFY(&__objc_anonymous_block_My_manager_blockReleaseTODO______1,true); [line 32]\n NULLIFY(&z,false); [line 32]\n APPLY_ABSTRACTION; [line 32]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit My_manager_blockReleaseTODO \n " color=yellow style=filled] + 267 -> 266 ; +266 [label="266: Exit My_manager_blockReleaseTODO \n " color=yellow style=filled] -3 [label="3: Start My_manager_blockReleaseTODO\nFormals: self:class My_manager *\nLocals: newImage:struct CGImage * context:struct CGContext * z:int b:_fn_ (*) \n DECLARE_LOCALS(&return,&newImage,&context,&z,&b); [line 20]\n NULLIFY(&b,false); [line 20]\n NULLIFY(&context,false); [line 20]\n NULLIFY(&newImage,false); [line 20]\n NULLIFY(&self,false); [line 20]\n NULLIFY(&z,false); [line 20]\n " color=yellow style=filled] +265 [label="265: Start My_manager_blockReleaseTODO\nFormals: self:class My_manager *\nLocals: newImage:struct CGImage * context:struct CGContext * z:int b:_fn_ (*) \n DECLARE_LOCALS(&return,&newImage,&context,&z,&b); [line 20]\n NULLIFY(&b,false); [line 20]\n NULLIFY(&context,false); [line 20]\n NULLIFY(&newImage,false); [line 20]\n NULLIFY(&self,false); [line 20]\n NULLIFY(&z,false); [line 20]\n " color=yellow style=filled] - 3 -> 20 ; -2 [label="2: Exit My_manager_frontendChecks \n " color=yellow style=filled] + 265 -> 282 ; +264 [label="264: Exit My_manager_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start My_manager_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +263 [label="263: Start My_manager_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 263 -> 264 ; +262 [label="262: Exit UICollisionBehaviorDelegate_frontendChecks \n " color=yellow style=filled] + + +261 [label="261: Start UICollisionBehaviorDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 261 -> 262 ; +260 [label="260: Exit UIDynamicAnimatorDelegate_frontendChecks \n " color=yellow style=filled] + + +259 [label="259: Start UIDynamicAnimatorDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 259 -> 260 ; +258 [label="258: Exit UIPopoverPresentationControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +257 [label="257: Start UIPopoverPresentationControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 257 -> 258 ; +256 [label="256: Exit NSTextAttachmentContainer_frontendChecks \n " color=yellow style=filled] + + +255 [label="255: Start NSTextAttachmentContainer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 255 -> 256 ; +254 [label="254: Exit NSTextLayoutOrientationProvider_frontendChecks \n " color=yellow style=filled] + + +253 [label="253: Start NSTextLayoutOrientationProvider_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 253 -> 254 ; +252 [label="252: Exit NSLayoutManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +251 [label="251: Start NSLayoutManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 251 -> 252 ; +250 [label="250: Exit NSTextStorageDelegate_frontendChecks \n " color=yellow style=filled] + + +249 [label="249: Start NSTextStorageDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 249 -> 250 ; +248 [label="248: Exit UIWebViewDelegate_frontendChecks \n " color=yellow style=filled] + + +247 [label="247: Start UIWebViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 247 -> 248 ; +246 [label="246: Exit UIVideoEditorControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +245 [label="245: Start UIVideoEditorControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 245 -> 246 ; +244 [label="244: Exit UIToolbarDelegate_frontendChecks \n " color=yellow style=filled] + + +243 [label="243: Start UIToolbarDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 243 -> 244 ; +242 [label="242: Exit UITextViewDelegate_frontendChecks \n " color=yellow style=filled] + + +241 [label="241: Start UITextViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 241 -> 242 ; +240 [label="240: Exit UITabBarControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +239 [label="239: Start UITabBarControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 239 -> 240 ; +238 [label="238: Exit UITabBarDelegate_frontendChecks \n " color=yellow style=filled] + + +237 [label="237: Start UITabBarDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 237 -> 238 ; +236 [label="236: Exit UISplitViewControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +235 [label="235: Start UISplitViewControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 235 -> 236 ; +234 [label="234: Exit EAGLDrawable_frontendChecks \n " color=yellow style=filled] + + +233 [label="233: Start EAGLDrawable_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 233 -> 234 ; +232 [label="232: Exit CAAction_frontendChecks \n " color=yellow style=filled] + + +231 [label="231: Start CAAction_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 231 -> 232 ; +230 [label="230: Exit CAMediaTiming_frontendChecks \n " color=yellow style=filled] + + +229 [label="229: Start CAMediaTiming_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 229 -> 230 ; +228 [label="228: Exit UISearchDisplayDelegate_frontendChecks \n " color=yellow style=filled] + + +227 [label="227: Start UISearchDisplayDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 227 -> 228 ; +226 [label="226: Exit UISearchResultsUpdating_frontendChecks \n " color=yellow style=filled] + + +225 [label="225: Start UISearchResultsUpdating_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 225 -> 226 ; +224 [label="224: Exit UISearchControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +223 [label="223: Start UISearchControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 223 -> 224 ; +222 [label="222: Exit UIViewControllerContextTransitioning_frontendChecks \n " color=yellow style=filled] + + +221 [label="221: Start UIViewControllerContextTransitioning_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 221 -> 222 ; +220 [label="220: Exit UIAdaptivePresentationControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +219 [label="219: Start UIAdaptivePresentationControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 219 -> 220 ; +218 [label="218: Exit UIViewControllerTransitionCoordinatorContext_frontendChecks \n " color=yellow style=filled] + + +217 [label="217: Start UIViewControllerTransitionCoordinatorContext_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 217 -> 218 ; +216 [label="216: Exit UISearchBarDelegate_frontendChecks \n " color=yellow style=filled] + + +215 [label="215: Start UISearchBarDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 215 -> 216 ; +214 [label="214: Exit UIPrintInteractionControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +213 [label="213: Start UIPrintInteractionControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 213 -> 214 ; +212 [label="212: Exit UIPrinterPickerControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +211 [label="211: Start UIPrinterPickerControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 211 -> 212 ; +210 [label="210: Exit UIPopoverBackgroundViewMethods_frontendChecks \n " color=yellow style=filled] + + +209 [label="209: Start UIPopoverBackgroundViewMethods_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 209 -> 210 ; +208 [label="208: Exit UIPopoverControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +207 [label="207: Start UIPopoverControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 207 -> 208 ; +206 [label="206: Exit UIPageViewControllerDataSource_frontendChecks \n " color=yellow style=filled] + + +205 [label="205: Start UIPageViewControllerDataSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 205 -> 206 ; +204 [label="204: Exit UIPageViewControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +203 [label="203: Start UIPageViewControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 203 -> 204 ; +202 [label="202: Exit UINavigationBarDelegate_frontendChecks \n " color=yellow style=filled] + + +201 [label="201: Start UINavigationBarDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 201 -> 202 ; +200 [label="200: Exit UITextDocumentProxy_frontendChecks \n " color=yellow style=filled] + + +199 [label="199: Start UITextDocumentProxy_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 199 -> 200 ; +198 [label="198: Exit UIImagePickerControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +197 [label="197: Start UIImagePickerControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 197 -> 198 ; +196 [label="196: Exit UIViewControllerAnimatedTransitioning_frontendChecks \n " color=yellow style=filled] + + +195 [label="195: Start UIViewControllerAnimatedTransitioning_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 195 -> 196 ; +194 [label="194: Exit UIViewControllerInteractiveTransitioning_frontendChecks \n " color=yellow style=filled] + + +193 [label="193: Start UIViewControllerInteractiveTransitioning_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 193 -> 194 ; +192 [label="192: Exit UINavigationControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +191 [label="191: Start UINavigationControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 191 -> 192 ; +190 [label="190: Exit UIDocumentMenuDelegate_frontendChecks \n " color=yellow style=filled] + + +189 [label="189: Start UIDocumentMenuDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 189 -> 190 ; +188 [label="188: Exit UIDocumentPickerDelegate_frontendChecks \n " color=yellow style=filled] + + +187 [label="187: Start UIDocumentPickerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 187 -> 188 ; +186 [label="186: Exit UIDocumentInteractionControllerDelegate_frontendChecks \n " color=yellow style=filled] + + +185 [label="185: Start UIDocumentInteractionControllerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 185 -> 186 ; +184 [label="184: Exit UICollectionViewDelegateFlowLayout_frontendChecks \n " color=yellow style=filled] + + +183 [label="183: Start UICollectionViewDelegateFlowLayout_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 183 -> 184 ; +182 [label="182: Exit UICollectionViewDelegate_frontendChecks \n " color=yellow style=filled] + + +181 [label="181: Start UICollectionViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 181 -> 182 ; +180 [label="180: Exit UICollectionViewDataSource_frontendChecks \n " color=yellow style=filled] + + +179 [label="179: Start UICollectionViewDataSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 179 -> 180 ; +178 [label="178: Exit UIBarPositioningDelegate_frontendChecks \n " color=yellow style=filled] + + +177 [label="177: Start UIBarPositioningDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 177 -> 178 ; +176 [label="176: Exit UIBarPositioning_frontendChecks \n " color=yellow style=filled] + + +175 [label="175: Start UIBarPositioning_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 175 -> 176 ; +174 [label="174: Exit UIPreviewActionItem_frontendChecks \n " color=yellow style=filled] + + +173 [label="173: Start UIPreviewActionItem_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 173 -> 174 ; +172 [label="172: Exit UIViewControllerPreviewing_frontendChecks \n " color=yellow style=filled] + + +171 [label="171: Start UIViewControllerPreviewing_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 171 -> 172 ; +170 [label="170: Exit UIViewControllerPreviewingDelegate_frontendChecks \n " color=yellow style=filled] + + +169 [label="169: Start UIViewControllerPreviewingDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 169 -> 170 ; +168 [label="168: Exit UIViewControllerTransitioningDelegate_frontendChecks \n " color=yellow style=filled] + + +167 [label="167: Start UIViewControllerTransitioningDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 167 -> 168 ; +166 [label="166: Exit UIContentContainer_frontendChecks \n " color=yellow style=filled] + + +165 [label="165: Start UIContentContainer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 165 -> 166 ; +164 [label="164: Exit UIViewControllerTransitionCoordinator_frontendChecks \n " color=yellow style=filled] + + +163 [label="163: Start UIViewControllerTransitionCoordinator_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 163 -> 164 ; +162 [label="162: Exit UIObjectRestoration_frontendChecks \n " color=yellow style=filled] + + +161 [label="161: Start UIObjectRestoration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 161 -> 162 ; +160 [label="160: Exit UIDataSourceModelAssociation_frontendChecks \n " color=yellow style=filled] + + +159 [label="159: Start UIDataSourceModelAssociation_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 159 -> 160 ; +158 [label="158: Exit UIViewControllerRestoration_frontendChecks \n " color=yellow style=filled] + + +157 [label="157: Start UIViewControllerRestoration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 157 -> 158 ; +156 [label="156: Exit UIStateRestoring_frontendChecks \n " color=yellow style=filled] + + +155 [label="155: Start UIStateRestoring_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 155 -> 156 ; +154 [label="154: Exit UIApplicationDelegate_frontendChecks \n " color=yellow style=filled] + + +153 [label="153: Start UIApplicationDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 153 -> 154 ; +152 [label="152: Exit UIAlertViewDelegate_frontendChecks \n " color=yellow style=filled] + + +151 [label="151: Start UIAlertViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 151 -> 152 ; +150 [label="150: Exit UIActionSheetDelegate_frontendChecks \n " color=yellow style=filled] + + +149 [label="149: Start UIActionSheetDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 149 -> 150 ; +148 [label="148: Exit UITextSelecting_frontendChecks \n " color=yellow style=filled] + + +147 [label="147: Start UITextSelecting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 147 -> 148 ; +146 [label="146: Exit UITextFieldDelegate_frontendChecks \n " color=yellow style=filled] + + +145 [label="145: Start UITextFieldDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 145 -> 146 ; +144 [label="144: Exit UITextInput_frontendChecks \n " color=yellow style=filled] + + +143 [label="143: Start UITextInput_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 143 -> 144 ; +142 [label="142: Exit UITextInputDelegate_frontendChecks \n " color=yellow style=filled] + + +141 [label="141: Start UITextInputDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 141 -> 142 ; +140 [label="140: Exit UITextInputTokenizer_frontendChecks \n " color=yellow style=filled] + + +139 [label="139: Start UITextInputTokenizer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 139 -> 140 ; +138 [label="138: Exit UIKeyInput_frontendChecks \n " color=yellow style=filled] + + +137 [label="137: Start UIKeyInput_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 137 -> 138 ; +136 [label="136: Exit UITextInputTraits_frontendChecks \n " color=yellow style=filled] + + +135 [label="135: Start UITextInputTraits_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 135 -> 136 ; +134 [label="134: Exit UIActivityItemSource_frontendChecks \n " color=yellow style=filled] + + +133 [label="133: Start UIActivityItemSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 133 -> 134 ; +132 [label="132: Exit UIAccessibilityReadingContent_frontendChecks \n " color=yellow style=filled] + + +131 [label="131: Start UIAccessibilityReadingContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 131 -> 132 ; +130 [label="130: Exit UIGuidedAccessRestrictionDelegate_frontendChecks \n " color=yellow style=filled] + + +129 [label="129: Start UIGuidedAccessRestrictionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 129 -> 130 ; +128 [label="128: Exit UIAccessibilityIdentification_frontendChecks \n " color=yellow style=filled] + + +127 [label="127: Start UIAccessibilityIdentification_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 127 -> 128 ; +126 [label="126: Exit UIScrollViewAccessibilityDelegate_frontendChecks \n " color=yellow style=filled] + + +125 [label="125: Start UIScrollViewAccessibilityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 125 -> 126 ; +124 [label="124: Exit UIPickerViewAccessibilityDelegate_frontendChecks \n " color=yellow style=filled] + + +123 [label="123: Start UIPickerViewAccessibilityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 123 -> 124 ; +122 [label="122: Exit UIPickerViewDelegate_frontendChecks \n " color=yellow style=filled] + + +121 [label="121: Start UIPickerViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 121 -> 122 ; +120 [label="120: Exit UIPickerViewDataSource_frontendChecks \n " color=yellow style=filled] + + +119 [label="119: Start UIPickerViewDataSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 119 -> 120 ; +118 [label="118: Exit UITableViewDelegate_frontendChecks \n " color=yellow style=filled] + + +117 [label="117: Start UITableViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 117 -> 118 ; +116 [label="116: Exit UITableViewDataSource_frontendChecks \n " color=yellow style=filled] + + +115 [label="115: Start UITableViewDataSource_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 115 -> 116 ; +114 [label="114: Exit UIGestureRecognizerDelegate_frontendChecks \n " color=yellow style=filled] + + +113 [label="113: Start UIGestureRecognizerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 113 -> 114 ; +112 [label="112: Exit UIScrollViewDelegate_frontendChecks \n " color=yellow style=filled] + + +111 [label="111: Start UIScrollViewDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 111 -> 112 ; +110 [label="110: Exit UICoordinateSpace_frontendChecks \n " color=yellow style=filled] + + +109 [label="109: Start UICoordinateSpace_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 109 -> 110 ; +108 [label="108: Exit UIFocusEnvironment_frontendChecks \n " color=yellow style=filled] + + +107 [label="107: Start UIFocusEnvironment_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 107 -> 108 ; +106 [label="106: Exit UITraitEnvironment_frontendChecks \n " color=yellow style=filled] + + +105 [label="105: Start UITraitEnvironment_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 105 -> 106 ; +104 [label="104: Exit UIInputViewAudioFeedback_frontendChecks \n " color=yellow style=filled] + + +103 [label="103: Start UIInputViewAudioFeedback_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 103 -> 104 ; +102 [label="102: Exit UILayoutSupport_frontendChecks \n " color=yellow style=filled] + + +101 [label="101: Start UILayoutSupport_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 101 -> 102 ; +100 [label="100: Exit UIDynamicItem_frontendChecks \n " color=yellow style=filled] + + +99 [label="99: Start UIDynamicItem_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 99 -> 100 ; +98 [label="98: Exit UIAppearance_frontendChecks \n " color=yellow style=filled] + + +97 [label="97: Start UIAppearance_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 97 -> 98 ; +96 [label="96: Exit UIAppearanceContainer_frontendChecks \n " color=yellow style=filled] + + +95 [label="95: Start UIAppearanceContainer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 95 -> 96 ; +94 [label="94: Exit CIFilterConstructor_frontendChecks \n " color=yellow style=filled] + + +93 [label="93: Start CIFilterConstructor_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 93 -> 94 ; +92 [label="92: Exit MTLCommandBuffer_frontendChecks \n " color=yellow style=filled] + + +91 [label="91: Start MTLCommandBuffer_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 91 -> 92 ; +90 [label="90: Exit MTLDevice_frontendChecks \n " color=yellow style=filled] + + +89 [label="89: Start MTLDevice_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 89 -> 90 ; +88 [label="88: Exit MTLTexture_frontendChecks \n " color=yellow style=filled] + + +87 [label="87: Start MTLTexture_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 87 -> 88 ; +86 [label="86: Exit UIAccelerometerDelegate_frontendChecks \n " color=yellow style=filled] + + +85 [label="85: Start UIAccelerometerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/block/dispatch.dot b/infer/tests/codetoanalyze/objc/frontend/block/dispatch.dot index c50a98120..26e2b311a 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/dispatch.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/dispatch.dot @@ -1,108 +1,402 @@ digraph iCFG { -28 [label="28: DeclStmt \n n$3=_fun_A_sharedInstance() [line 43]\n *&b:class A *=n$3 [line 43]\n REMOVE_TEMPS(n$3); [line 43]\n " shape="box"] +112 [label="112: DeclStmt \n n$3=_fun_A_sharedInstance() [line 43]\n *&b:class A *=n$3 [line 43]\n REMOVE_TEMPS(n$3); [line 43]\n " shape="box"] - 28 -> 27 ; -27 [label="27: DeclStmt \n *&p:int *=0 [line 44]\n " shape="box"] + 112 -> 111 ; +111 [label="111: DeclStmt \n *&p:int *=0 [line 44]\n " shape="box"] - 27 -> 22 ; -26 [label="26: Return Stmt \n NULLIFY(&p,false); [line 48]\n *&return:int =0 [line 48]\n APPLY_ABSTRACTION; [line 48]\n " shape="box"] + 111 -> 106 ; +110 [label="110: Return Stmt \n NULLIFY(&p,false); [line 48]\n *&return:int =0 [line 48]\n APPLY_ABSTRACTION; [line 48]\n " shape="box"] - 26 -> 20 ; -25 [label="25: Return Stmt \n n$1=*&p:int * [line 46]\n n$2=*n$1:int [line 46]\n *&return:int =n$2 [line 46]\n REMOVE_TEMPS(n$1,n$2); [line 46]\n NULLIFY(&p,false); [line 46]\n APPLY_ABSTRACTION; [line 46]\n " shape="box"] + 110 -> 104 ; +109 [label="109: Return Stmt \n n$1=*&p:int * [line 46]\n n$2=*n$1:int [line 46]\n *&return:int =n$2 [line 46]\n REMOVE_TEMPS(n$1,n$2); [line 46]\n NULLIFY(&p,false); [line 46]\n APPLY_ABSTRACTION; [line 46]\n " shape="box"] - 25 -> 20 ; -24 [label="24: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 45]\n REMOVE_TEMPS(n$0); [line 45]\n " shape="invhouse"] + 109 -> 104 ; +108 [label="108: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 45]\n REMOVE_TEMPS(n$0); [line 45]\n " shape="invhouse"] - 24 -> 26 ; -23 [label="23: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 45]\n REMOVE_TEMPS(n$0); [line 45]\n " shape="invhouse"] + 108 -> 110 ; +107 [label="107: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 45]\n REMOVE_TEMPS(n$0); [line 45]\n " shape="invhouse"] - 23 -> 25 ; -22 [label="22: BinaryOperatorStmt: EQ \n n$0=*&b:class A * [line 45]\n NULLIFY(&b,false); [line 45]\n " shape="box"] + 107 -> 109 ; +106 [label="106: BinaryOperatorStmt: EQ \n n$0=*&b:class A * [line 45]\n NULLIFY(&b,false); [line 45]\n " shape="box"] - 22 -> 23 ; - 22 -> 24 ; -21 [label="21: + \n NULLIFY(&b,false); [line 45]\n NULLIFY(&p,false); [line 45]\n " ] + 106 -> 107 ; + 106 -> 108 ; +105 [label="105: + \n NULLIFY(&b,false); [line 45]\n NULLIFY(&p,false); [line 45]\n " ] - 21 -> 20 ; -20 [label="20: Exit main \n " color=yellow style=filled] + 105 -> 104 ; +104 [label="104: Exit main \n " color=yellow style=filled] -19 [label="19: Start main\nFormals: \nLocals: p:int * b:class A * \n DECLARE_LOCALS(&return,&p,&b); [line 42]\n NULLIFY(&b,false); [line 42]\n NULLIFY(&p,false); [line 42]\n " color=yellow style=filled] +103 [label="103: Start main\nFormals: \nLocals: p:int * b:class A * \n DECLARE_LOCALS(&return,&p,&b); [line 42]\n NULLIFY(&b,false); [line 42]\n NULLIFY(&p,false); [line 42]\n " color=yellow style=filled] - 19 -> 28 ; -18 [label="18: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_trans______2); [line 34]\n n$11=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_trans______2 ):unsigned long ) [line 34]\n *&__objc_anonymous_block_A_trans______2:class __objc_anonymous_block_A_trans______2 =n$11 [line 34]\n n$12=*&#GB$A_trans_sharedInstance:struct objc_object * [line 34]\n *n$11.A_trans_sharedInstance:struct objc_object *=n$12 [line 34]\n *&dummy_block:_fn_ (*)=(_fun___objc_anonymous_block_A_trans______2) [line 34]\n REMOVE_TEMPS(n$11,n$12); [line 34]\n " shape="box"] + 103 -> 112 ; +102 [label="102: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_trans______2); [line 34]\n n$11=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_trans______2 ):unsigned long ) [line 34]\n *&__objc_anonymous_block_A_trans______2:class __objc_anonymous_block_A_trans______2 =n$11 [line 34]\n n$12=*&#GB$A_trans_sharedInstance:struct objc_object * [line 34]\n *n$11.A_trans_sharedInstance:struct objc_object *=n$12 [line 34]\n *&dummy_block:_fn_ (*)=(_fun___objc_anonymous_block_A_trans______2) [line 34]\n REMOVE_TEMPS(n$11,n$12); [line 34]\n " shape="box"] - 18 -> 14 ; -17 [label="17: BinaryOperatorStmt: Assign \n n$9=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 35]\n n$10=_fun_A_init(n$9:class A *) virtual [line 35]\n *&#GB$A_trans_sharedInstance:struct objc_object *=n$10 [line 35]\n REMOVE_TEMPS(n$9,n$10); [line 35]\n APPLY_ABSTRACTION; [line 35]\n " shape="box"] + 102 -> 98 ; +101 [label="101: BinaryOperatorStmt: Assign \n n$9=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 35]\n n$10=_fun_A_init(n$9:class A *) virtual [line 35]\n *&#GB$A_trans_sharedInstance:struct objc_object *=n$10 [line 35]\n REMOVE_TEMPS(n$9,n$10); [line 35]\n APPLY_ABSTRACTION; [line 35]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Exit __objc_anonymous_block_A_trans______2 \n " color=yellow style=filled] + 101 -> 100 ; +100 [label="100: Exit __objc_anonymous_block_A_trans______2 \n " color=yellow style=filled] -15 [label="15: Start __objc_anonymous_block_A_trans______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] +99 [label="99: Start __objc_anonymous_block_A_trans______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 34]\n " color=yellow style=filled] - 15 -> 17 ; -14 [label="14: Call n$8 \n n$8=*&dummy_block:_fn_ (*) [line 37]\n n$8() [line 37]\n REMOVE_TEMPS(n$8); [line 37]\n NULLIFY(&dummy_block,false); [line 37]\n " shape="box"] + 99 -> 101 ; +98 [label="98: Call n$8 \n n$8=*&dummy_block:_fn_ (*) [line 37]\n n$8() [line 37]\n REMOVE_TEMPS(n$8); [line 37]\n NULLIFY(&dummy_block,false); [line 37]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Return Stmt \n n$7=*&#GB$A_trans_sharedInstance:struct objc_object * [line 38]\n *&return:struct objc_object *=n$7 [line 38]\n REMOVE_TEMPS(n$7); [line 38]\n NULLIFY(&__objc_anonymous_block_A_trans______2,true); [line 38]\n APPLY_ABSTRACTION; [line 38]\n " shape="box"] + 98 -> 97 ; +97 [label="97: Return Stmt \n n$7=*&#GB$A_trans_sharedInstance:struct objc_object * [line 38]\n *&return:struct objc_object *=n$7 [line 38]\n REMOVE_TEMPS(n$7); [line 38]\n NULLIFY(&__objc_anonymous_block_A_trans______2,true); [line 38]\n APPLY_ABSTRACTION; [line 38]\n " shape="box"] - 13 -> 12 ; -12 [label="12: Exit A_trans \n " color=yellow style=filled] + 97 -> 96 ; +96 [label="96: Exit A_trans \n " color=yellow style=filled] -11 [label="11: Start A_trans\nFormals: \nLocals: dummy_block:_fn_ (*) \n DECLARE_LOCALS(&return,&dummy_block); [line 32]\n NULLIFY(&dummy_block,false); [line 32]\n " color=yellow style=filled] +95 [label="95: Start A_trans\nFormals: \nLocals: dummy_block:_fn_ (*) \n DECLARE_LOCALS(&return,&dummy_block); [line 32]\n NULLIFY(&dummy_block,false); [line 32]\n " color=yellow style=filled] - 11 -> 18 ; -10 [label="10: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_sharedInstance______1); [line 26]\n n$5=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_sharedInstance______1 ):unsigned long ) [line 26]\n *&__objc_anonymous_block_A_sharedInstance______1:class __objc_anonymous_block_A_sharedInstance______1 =n$5 [line 26]\n n$6=*&#GB$A_sharedInstance_sharedInstance:struct objc_object * [line 26]\n *n$5.A_sharedInstance_sharedInstance:struct objc_object *=n$6 [line 26]\n *&infer___objc_anonymous_block_A_sharedInstance______1:_fn_ (*)=(_fun___objc_anonymous_block_A_sharedInstance______1) [line 26]\n REMOVE_TEMPS(n$5,n$6); [line 26]\n " shape="box"] + 95 -> 102 ; +94 [label="94: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_sharedInstance______1); [line 26]\n n$5=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_sharedInstance______1 ):unsigned long ) [line 26]\n *&__objc_anonymous_block_A_sharedInstance______1:class __objc_anonymous_block_A_sharedInstance______1 =n$5 [line 26]\n n$6=*&#GB$A_sharedInstance_sharedInstance:struct objc_object * [line 26]\n *n$5.A_sharedInstance_sharedInstance:struct objc_object *=n$6 [line 26]\n *&infer___objc_anonymous_block_A_sharedInstance______1:_fn_ (*)=(_fun___objc_anonymous_block_A_sharedInstance______1) [line 26]\n REMOVE_TEMPS(n$5,n$6); [line 26]\n " shape="box"] - 10 -> 6 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 27]\n n$4=_fun_A_init(n$3:class A *) virtual [line 27]\n *&#GB$A_sharedInstance_sharedInstance:struct objc_object *=n$4 [line 27]\n REMOVE_TEMPS(n$3,n$4); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] + 94 -> 90 ; +93 [label="93: BinaryOperatorStmt: Assign \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 27]\n n$4=_fun_A_init(n$3:class A *) virtual [line 27]\n *&#GB$A_sharedInstance_sharedInstance:struct objc_object *=n$4 [line 27]\n REMOVE_TEMPS(n$3,n$4); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit __objc_anonymous_block_A_sharedInstance______1 \n " color=yellow style=filled] + 93 -> 92 ; +92 [label="92: Exit __objc_anonymous_block_A_sharedInstance______1 \n " color=yellow style=filled] -7 [label="7: Start __objc_anonymous_block_A_sharedInstance______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] +91 [label="91: Start __objc_anonymous_block_A_sharedInstance______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 26]\n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: Call n$1 \n n$1=*&infer___objc_anonymous_block_A_sharedInstance______1:_fn_ (*) [line 26]\n n$2=n$1() [line 26]\n REMOVE_TEMPS(n$1,n$2); [line 26]\n NULLIFY(&infer___objc_anonymous_block_A_sharedInstance______1,false); [line 26]\n " shape="box"] + 91 -> 93 ; +90 [label="90: Call n$1 \n n$1=*&infer___objc_anonymous_block_A_sharedInstance______1:_fn_ (*) [line 26]\n n$2=n$1() [line 26]\n REMOVE_TEMPS(n$1,n$2); [line 26]\n NULLIFY(&infer___objc_anonymous_block_A_sharedInstance______1,false); [line 26]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&#GB$A_sharedInstance_sharedInstance:struct objc_object * [line 29]\n *&return:struct objc_object *=n$0 [line 29]\n REMOVE_TEMPS(n$0); [line 29]\n NULLIFY(&__objc_anonymous_block_A_sharedInstance______1,true); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] + 90 -> 89 ; +89 [label="89: Return Stmt \n n$0=*&#GB$A_sharedInstance_sharedInstance:struct objc_object * [line 29]\n *&return:struct objc_object *=n$0 [line 29]\n REMOVE_TEMPS(n$0); [line 29]\n NULLIFY(&__objc_anonymous_block_A_sharedInstance______1,true); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit A_sharedInstance \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit A_sharedInstance \n " color=yellow style=filled] -3 [label="3: Start A_sharedInstance\nFormals: \nLocals: infer___objc_anonymous_block_A_sharedInstance______1:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_sharedInstance______1); [line 23]\n NULLIFY(&infer___objc_anonymous_block_A_sharedInstance______1,false); [line 23]\n " color=yellow style=filled] +87 [label="87: Start A_sharedInstance\nFormals: \nLocals: infer___objc_anonymous_block_A_sharedInstance______1:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_sharedInstance______1); [line 23]\n NULLIFY(&infer___objc_anonymous_block_A_sharedInstance______1,false); [line 23]\n " color=yellow style=filled] - 3 -> 10 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 87 -> 94 ; +86 [label="86: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/block/dispatch_examples.dot b/infer/tests/codetoanalyze/objc/frontend/block/dispatch_examples.dot index 8520d4057..8f9ea5103 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/dispatch_examples.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/dispatch_examples.dot @@ -1,236 +1,530 @@ digraph iCFG { -62 [label="62: DeclStmt \n *&#GB$A_dispatch_barrier_example_a:class A *=0 [line 72]\n " shape="box"] +146 [label="146: DeclStmt \n *&#GB$A_dispatch_barrier_example_a:class A *=0 [line 72]\n " shape="box"] - 62 -> 61 ; -61 [label="61: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_barrier_example______6); [line 73]\n n$52=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_barrier_example______6 ):unsigned long ) [line 73]\n *&__objc_anonymous_block_A_dispatch_barrier_example______6:class __objc_anonymous_block_A_dispatch_barrier_example______6 =n$52 [line 73]\n n$53=*&#GB$A_dispatch_barrier_example_a:class A * [line 73]\n *n$52.A_dispatch_barrier_example_a:class A *=n$53 [line 73]\n *&infer___objc_anonymous_block_A_dispatch_barrier_example______6:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_barrier_example______6) [line 73]\n REMOVE_TEMPS(n$52,n$53); [line 73]\n " shape="box"] + 146 -> 145 ; +145 [label="145: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_barrier_example______6); [line 73]\n n$52=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_barrier_example______6 ):unsigned long ) [line 73]\n *&__objc_anonymous_block_A_dispatch_barrier_example______6:class __objc_anonymous_block_A_dispatch_barrier_example______6 =n$52 [line 73]\n n$53=*&#GB$A_dispatch_barrier_example_a:class A * [line 73]\n *n$52.A_dispatch_barrier_example_a:class A *=n$53 [line 73]\n *&infer___objc_anonymous_block_A_dispatch_barrier_example______6:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_barrier_example______6) [line 73]\n REMOVE_TEMPS(n$52,n$53); [line 73]\n " shape="box"] - 61 -> 56 ; -60 [label="60: BinaryOperatorStmt: Assign \n n$50=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 74]\n n$51=_fun_NSObject_init(n$50:class A *) virtual [line 74]\n *&#GB$A_dispatch_barrier_example_a:class A *=n$51 [line 74]\n REMOVE_TEMPS(n$50,n$51); [line 74]\n " shape="box"] + 145 -> 140 ; +144 [label="144: BinaryOperatorStmt: Assign \n n$50=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 74]\n n$51=_fun_NSObject_init(n$50:class A *) virtual [line 74]\n *&#GB$A_dispatch_barrier_example_a:class A *=n$51 [line 74]\n REMOVE_TEMPS(n$50,n$51); [line 74]\n " shape="box"] - 60 -> 59 ; -59 [label="59: BinaryOperatorStmt: Assign \n n$49=*&#GB$A_dispatch_barrier_example_a:class A * [line 75]\n *n$49.x:int =10 [line 75]\n REMOVE_TEMPS(n$49); [line 75]\n APPLY_ABSTRACTION; [line 75]\n " shape="box"] + 144 -> 143 ; +143 [label="143: BinaryOperatorStmt: Assign \n n$49=*&#GB$A_dispatch_barrier_example_a:class A * [line 75]\n *n$49.x:int =10 [line 75]\n REMOVE_TEMPS(n$49); [line 75]\n APPLY_ABSTRACTION; [line 75]\n " shape="box"] - 59 -> 58 ; -58 [label="58: Exit __objc_anonymous_block_A_dispatch_barrier_example______6 \n " color=yellow style=filled] + 143 -> 142 ; +142 [label="142: Exit __objc_anonymous_block_A_dispatch_barrier_example______6 \n " color=yellow style=filled] -57 [label="57: Start __objc_anonymous_block_A_dispatch_barrier_example______6\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 73]\n " color=yellow style=filled] +141 [label="141: Start __objc_anonymous_block_A_dispatch_barrier_example______6\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 73]\n " color=yellow style=filled] - 57 -> 60 ; -56 [label="56: Call n$47 \n n$47=*&infer___objc_anonymous_block_A_dispatch_barrier_example______6:_fn_ (*) [line 73]\n n$48=n$47() [line 73]\n REMOVE_TEMPS(n$47,n$48); [line 73]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_barrier_example______6,false); [line 73]\n " shape="box"] + 141 -> 144 ; +140 [label="140: Call n$47 \n n$47=*&infer___objc_anonymous_block_A_dispatch_barrier_example______6:_fn_ (*) [line 73]\n n$48=n$47() [line 73]\n REMOVE_TEMPS(n$47,n$48); [line 73]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_barrier_example______6,false); [line 73]\n " shape="box"] - 56 -> 55 ; -55 [label="55: Return Stmt \n n$45=*&#GB$A_dispatch_barrier_example_a:class A * [line 77]\n n$46=*n$45.x:int [line 77]\n *&return:int =n$46 [line 77]\n REMOVE_TEMPS(n$45,n$46); [line 77]\n NULLIFY(&__objc_anonymous_block_A_dispatch_barrier_example______6,true); [line 77]\n APPLY_ABSTRACTION; [line 77]\n " shape="box"] + 140 -> 139 ; +139 [label="139: Return Stmt \n n$45=*&#GB$A_dispatch_barrier_example_a:class A * [line 77]\n n$46=*n$45.x:int [line 77]\n *&return:int =n$46 [line 77]\n REMOVE_TEMPS(n$45,n$46); [line 77]\n NULLIFY(&__objc_anonymous_block_A_dispatch_barrier_example______6,true); [line 77]\n APPLY_ABSTRACTION; [line 77]\n " shape="box"] - 55 -> 54 ; -54 [label="54: Exit A_dispatch_barrier_example \n " color=yellow style=filled] + 139 -> 138 ; +138 [label="138: Exit A_dispatch_barrier_example \n " color=yellow style=filled] -53 [label="53: Start A_dispatch_barrier_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_barrier_example______6:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_barrier_example______6); [line 71]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_barrier_example______6,false); [line 71]\n " color=yellow style=filled] +137 [label="137: Start A_dispatch_barrier_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_barrier_example______6:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_barrier_example______6); [line 71]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_barrier_example______6,false); [line 71]\n " color=yellow style=filled] - 53 -> 62 ; -52 [label="52: DeclStmt \n *&#GB$A_dispatch_group_notify_example_a:class A *=0 [line 63]\n " shape="box"] + 137 -> 146 ; +136 [label="136: DeclStmt \n *&#GB$A_dispatch_group_notify_example_a:class A *=0 [line 63]\n " shape="box"] - 52 -> 51 ; -51 [label="51: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_group_notify_example______5); [line 64]\n n$43=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_group_notify_example______5 ):unsigned long ) [line 64]\n *&__objc_anonymous_block_A_dispatch_group_notify_example______5:class __objc_anonymous_block_A_dispatch_group_notify_example______5 =n$43 [line 64]\n n$44=*&#GB$A_dispatch_group_notify_example_a:class A * [line 64]\n *n$43.A_dispatch_group_notify_example_a:class A *=n$44 [line 64]\n *&infer___objc_anonymous_block_A_dispatch_group_notify_example______5:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_group_notify_example______5) [line 64]\n REMOVE_TEMPS(n$43,n$44); [line 64]\n " shape="box"] + 136 -> 135 ; +135 [label="135: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_group_notify_example______5); [line 64]\n n$43=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_group_notify_example______5 ):unsigned long ) [line 64]\n *&__objc_anonymous_block_A_dispatch_group_notify_example______5:class __objc_anonymous_block_A_dispatch_group_notify_example______5 =n$43 [line 64]\n n$44=*&#GB$A_dispatch_group_notify_example_a:class A * [line 64]\n *n$43.A_dispatch_group_notify_example_a:class A *=n$44 [line 64]\n *&infer___objc_anonymous_block_A_dispatch_group_notify_example______5:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_group_notify_example______5) [line 64]\n REMOVE_TEMPS(n$43,n$44); [line 64]\n " shape="box"] - 51 -> 46 ; -50 [label="50: BinaryOperatorStmt: Assign \n n$41=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 65]\n n$42=_fun_NSObject_init(n$41:class A *) virtual [line 65]\n *&#GB$A_dispatch_group_notify_example_a:class A *=n$42 [line 65]\n REMOVE_TEMPS(n$41,n$42); [line 65]\n " shape="box"] + 135 -> 130 ; +134 [label="134: BinaryOperatorStmt: Assign \n n$41=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 65]\n n$42=_fun_NSObject_init(n$41:class A *) virtual [line 65]\n *&#GB$A_dispatch_group_notify_example_a:class A *=n$42 [line 65]\n REMOVE_TEMPS(n$41,n$42); [line 65]\n " shape="box"] - 50 -> 49 ; -49 [label="49: BinaryOperatorStmt: Assign \n n$40=*&#GB$A_dispatch_group_notify_example_a:class A * [line 66]\n *n$40.x:int =10 [line 66]\n REMOVE_TEMPS(n$40); [line 66]\n APPLY_ABSTRACTION; [line 66]\n " shape="box"] + 134 -> 133 ; +133 [label="133: BinaryOperatorStmt: Assign \n n$40=*&#GB$A_dispatch_group_notify_example_a:class A * [line 66]\n *n$40.x:int =10 [line 66]\n REMOVE_TEMPS(n$40); [line 66]\n APPLY_ABSTRACTION; [line 66]\n " shape="box"] - 49 -> 48 ; -48 [label="48: Exit __objc_anonymous_block_A_dispatch_group_notify_example______5 \n " color=yellow style=filled] + 133 -> 132 ; +132 [label="132: Exit __objc_anonymous_block_A_dispatch_group_notify_example______5 \n " color=yellow style=filled] -47 [label="47: Start __objc_anonymous_block_A_dispatch_group_notify_example______5\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 64]\n " color=yellow style=filled] +131 [label="131: Start __objc_anonymous_block_A_dispatch_group_notify_example______5\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 64]\n " color=yellow style=filled] - 47 -> 50 ; -46 [label="46: Call n$38 \n n$38=*&infer___objc_anonymous_block_A_dispatch_group_notify_example______5:_fn_ (*) [line 64]\n n$39=n$38() [line 64]\n REMOVE_TEMPS(n$38,n$39); [line 64]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_group_notify_example______5,false); [line 64]\n " shape="box"] + 131 -> 134 ; +130 [label="130: Call n$38 \n n$38=*&infer___objc_anonymous_block_A_dispatch_group_notify_example______5:_fn_ (*) [line 64]\n n$39=n$38() [line 64]\n REMOVE_TEMPS(n$38,n$39); [line 64]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_group_notify_example______5,false); [line 64]\n " shape="box"] - 46 -> 45 ; -45 [label="45: Return Stmt \n n$36=*&#GB$A_dispatch_group_notify_example_a:class A * [line 68]\n n$37=*n$36.x:int [line 68]\n *&return:int =n$37 [line 68]\n REMOVE_TEMPS(n$36,n$37); [line 68]\n NULLIFY(&__objc_anonymous_block_A_dispatch_group_notify_example______5,true); [line 68]\n APPLY_ABSTRACTION; [line 68]\n " shape="box"] + 130 -> 129 ; +129 [label="129: Return Stmt \n n$36=*&#GB$A_dispatch_group_notify_example_a:class A * [line 68]\n n$37=*n$36.x:int [line 68]\n *&return:int =n$37 [line 68]\n REMOVE_TEMPS(n$36,n$37); [line 68]\n NULLIFY(&__objc_anonymous_block_A_dispatch_group_notify_example______5,true); [line 68]\n APPLY_ABSTRACTION; [line 68]\n " shape="box"] - 45 -> 44 ; -44 [label="44: Exit A_dispatch_group_notify_example \n " color=yellow style=filled] + 129 -> 128 ; +128 [label="128: Exit A_dispatch_group_notify_example \n " color=yellow style=filled] -43 [label="43: Start A_dispatch_group_notify_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_group_notify_example______5:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_group_notify_example______5); [line 62]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_group_notify_example______5,false); [line 62]\n " color=yellow style=filled] +127 [label="127: Start A_dispatch_group_notify_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_group_notify_example______5:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_group_notify_example______5); [line 62]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_group_notify_example______5,false); [line 62]\n " color=yellow style=filled] - 43 -> 52 ; -42 [label="42: DeclStmt \n *&#GB$A_dispatch_group_example_a:class A *=0 [line 54]\n " shape="box"] + 127 -> 136 ; +126 [label="126: DeclStmt \n *&#GB$A_dispatch_group_example_a:class A *=0 [line 54]\n " shape="box"] - 42 -> 41 ; -41 [label="41: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_group_example______4); [line 55]\n n$34=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_group_example______4 ):unsigned long ) [line 55]\n *&__objc_anonymous_block_A_dispatch_group_example______4:class __objc_anonymous_block_A_dispatch_group_example______4 =n$34 [line 55]\n n$35=*&#GB$A_dispatch_group_example_a:class A * [line 55]\n *n$34.A_dispatch_group_example_a:class A *=n$35 [line 55]\n *&infer___objc_anonymous_block_A_dispatch_group_example______4:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_group_example______4) [line 55]\n REMOVE_TEMPS(n$34,n$35); [line 55]\n " shape="box"] + 126 -> 125 ; +125 [label="125: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_group_example______4); [line 55]\n n$34=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_group_example______4 ):unsigned long ) [line 55]\n *&__objc_anonymous_block_A_dispatch_group_example______4:class __objc_anonymous_block_A_dispatch_group_example______4 =n$34 [line 55]\n n$35=*&#GB$A_dispatch_group_example_a:class A * [line 55]\n *n$34.A_dispatch_group_example_a:class A *=n$35 [line 55]\n *&infer___objc_anonymous_block_A_dispatch_group_example______4:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_group_example______4) [line 55]\n REMOVE_TEMPS(n$34,n$35); [line 55]\n " shape="box"] - 41 -> 36 ; -40 [label="40: BinaryOperatorStmt: Assign \n n$32=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 56]\n n$33=_fun_NSObject_init(n$32:class A *) virtual [line 56]\n *&#GB$A_dispatch_group_example_a:class A *=n$33 [line 56]\n REMOVE_TEMPS(n$32,n$33); [line 56]\n " shape="box"] + 125 -> 120 ; +124 [label="124: BinaryOperatorStmt: Assign \n n$32=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 56]\n n$33=_fun_NSObject_init(n$32:class A *) virtual [line 56]\n *&#GB$A_dispatch_group_example_a:class A *=n$33 [line 56]\n REMOVE_TEMPS(n$32,n$33); [line 56]\n " shape="box"] - 40 -> 39 ; -39 [label="39: BinaryOperatorStmt: Assign \n n$31=*&#GB$A_dispatch_group_example_a:class A * [line 57]\n *n$31.x:int =10 [line 57]\n REMOVE_TEMPS(n$31); [line 57]\n APPLY_ABSTRACTION; [line 57]\n " shape="box"] + 124 -> 123 ; +123 [label="123: BinaryOperatorStmt: Assign \n n$31=*&#GB$A_dispatch_group_example_a:class A * [line 57]\n *n$31.x:int =10 [line 57]\n REMOVE_TEMPS(n$31); [line 57]\n APPLY_ABSTRACTION; [line 57]\n " shape="box"] - 39 -> 38 ; -38 [label="38: Exit __objc_anonymous_block_A_dispatch_group_example______4 \n " color=yellow style=filled] + 123 -> 122 ; +122 [label="122: Exit __objc_anonymous_block_A_dispatch_group_example______4 \n " color=yellow style=filled] -37 [label="37: Start __objc_anonymous_block_A_dispatch_group_example______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 55]\n " color=yellow style=filled] +121 [label="121: Start __objc_anonymous_block_A_dispatch_group_example______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 55]\n " color=yellow style=filled] - 37 -> 40 ; -36 [label="36: Call n$29 \n n$29=*&infer___objc_anonymous_block_A_dispatch_group_example______4:_fn_ (*) [line 55]\n n$30=n$29() [line 55]\n REMOVE_TEMPS(n$29,n$30); [line 55]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_group_example______4,false); [line 55]\n " shape="box"] + 121 -> 124 ; +120 [label="120: Call n$29 \n n$29=*&infer___objc_anonymous_block_A_dispatch_group_example______4:_fn_ (*) [line 55]\n n$30=n$29() [line 55]\n REMOVE_TEMPS(n$29,n$30); [line 55]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_group_example______4,false); [line 55]\n " shape="box"] - 36 -> 35 ; -35 [label="35: Return Stmt \n n$27=*&#GB$A_dispatch_group_example_a:class A * [line 59]\n n$28=*n$27.x:int [line 59]\n *&return:int =n$28 [line 59]\n REMOVE_TEMPS(n$27,n$28); [line 59]\n NULLIFY(&__objc_anonymous_block_A_dispatch_group_example______4,true); [line 59]\n APPLY_ABSTRACTION; [line 59]\n " shape="box"] + 120 -> 119 ; +119 [label="119: Return Stmt \n n$27=*&#GB$A_dispatch_group_example_a:class A * [line 59]\n n$28=*n$27.x:int [line 59]\n *&return:int =n$28 [line 59]\n REMOVE_TEMPS(n$27,n$28); [line 59]\n NULLIFY(&__objc_anonymous_block_A_dispatch_group_example______4,true); [line 59]\n APPLY_ABSTRACTION; [line 59]\n " shape="box"] - 35 -> 34 ; -34 [label="34: Exit A_dispatch_group_example \n " color=yellow style=filled] + 119 -> 118 ; +118 [label="118: Exit A_dispatch_group_example \n " color=yellow style=filled] -33 [label="33: Start A_dispatch_group_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_group_example______4:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_group_example______4); [line 53]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_group_example______4,false); [line 53]\n " color=yellow style=filled] +117 [label="117: Start A_dispatch_group_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_group_example______4:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_group_example______4); [line 53]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_group_example______4,false); [line 53]\n " color=yellow style=filled] - 33 -> 42 ; -32 [label="32: DeclStmt \n *&#GB$A_dispatch_after_example_a:class A *=0 [line 43]\n " shape="box"] + 117 -> 126 ; +116 [label="116: DeclStmt \n *&#GB$A_dispatch_after_example_a:class A *=0 [line 43]\n " shape="box"] - 32 -> 31 ; -31 [label="31: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_after_example______3); [line 46]\n n$25=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_after_example______3 ):unsigned long ) [line 46]\n *&__objc_anonymous_block_A_dispatch_after_example______3:class __objc_anonymous_block_A_dispatch_after_example______3 =n$25 [line 46]\n n$26=*&#GB$A_dispatch_after_example_a:class A * [line 46]\n *n$25.A_dispatch_after_example_a:class A *=n$26 [line 46]\n *&infer___objc_anonymous_block_A_dispatch_after_example______3:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_after_example______3) [line 44]\n REMOVE_TEMPS(n$25,n$26); [line 44]\n " shape="box"] + 116 -> 115 ; +115 [label="115: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_after_example______3); [line 46]\n n$25=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_after_example______3 ):unsigned long ) [line 46]\n *&__objc_anonymous_block_A_dispatch_after_example______3:class __objc_anonymous_block_A_dispatch_after_example______3 =n$25 [line 46]\n n$26=*&#GB$A_dispatch_after_example_a:class A * [line 46]\n *n$25.A_dispatch_after_example_a:class A *=n$26 [line 46]\n *&infer___objc_anonymous_block_A_dispatch_after_example______3:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_after_example______3) [line 44]\n REMOVE_TEMPS(n$25,n$26); [line 44]\n " shape="box"] - 31 -> 26 ; -30 [label="30: BinaryOperatorStmt: Assign \n n$23=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 47]\n n$24=_fun_NSObject_init(n$23:class A *) virtual [line 47]\n *&#GB$A_dispatch_after_example_a:class A *=n$24 [line 47]\n REMOVE_TEMPS(n$23,n$24); [line 47]\n " shape="box"] + 115 -> 110 ; +114 [label="114: BinaryOperatorStmt: Assign \n n$23=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 47]\n n$24=_fun_NSObject_init(n$23:class A *) virtual [line 47]\n *&#GB$A_dispatch_after_example_a:class A *=n$24 [line 47]\n REMOVE_TEMPS(n$23,n$24); [line 47]\n " shape="box"] - 30 -> 29 ; -29 [label="29: BinaryOperatorStmt: Assign \n n$22=*&#GB$A_dispatch_after_example_a:class A * [line 48]\n *n$22.x:int =10 [line 48]\n REMOVE_TEMPS(n$22); [line 48]\n APPLY_ABSTRACTION; [line 48]\n " shape="box"] + 114 -> 113 ; +113 [label="113: BinaryOperatorStmt: Assign \n n$22=*&#GB$A_dispatch_after_example_a:class A * [line 48]\n *n$22.x:int =10 [line 48]\n REMOVE_TEMPS(n$22); [line 48]\n APPLY_ABSTRACTION; [line 48]\n " shape="box"] - 29 -> 28 ; -28 [label="28: Exit __objc_anonymous_block_A_dispatch_after_example______3 \n " color=yellow style=filled] + 113 -> 112 ; +112 [label="112: Exit __objc_anonymous_block_A_dispatch_after_example______3 \n " color=yellow style=filled] -27 [label="27: Start __objc_anonymous_block_A_dispatch_after_example______3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] +111 [label="111: Start __objc_anonymous_block_A_dispatch_after_example______3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] - 27 -> 30 ; -26 [label="26: Call n$20 \n n$20=*&infer___objc_anonymous_block_A_dispatch_after_example______3:_fn_ (*) [line 44]\n n$21=n$20() [line 44]\n REMOVE_TEMPS(n$20,n$21); [line 44]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_after_example______3,false); [line 44]\n " shape="box"] + 111 -> 114 ; +110 [label="110: Call n$20 \n n$20=*&infer___objc_anonymous_block_A_dispatch_after_example______3:_fn_ (*) [line 44]\n n$21=n$20() [line 44]\n REMOVE_TEMPS(n$20,n$21); [line 44]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_after_example______3,false); [line 44]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Return Stmt \n n$18=*&#GB$A_dispatch_after_example_a:class A * [line 50]\n n$19=*n$18.x:int [line 50]\n *&return:int =n$19 [line 50]\n REMOVE_TEMPS(n$18,n$19); [line 50]\n NULLIFY(&__objc_anonymous_block_A_dispatch_after_example______3,true); [line 50]\n APPLY_ABSTRACTION; [line 50]\n " shape="box"] + 110 -> 109 ; +109 [label="109: Return Stmt \n n$18=*&#GB$A_dispatch_after_example_a:class A * [line 50]\n n$19=*n$18.x:int [line 50]\n *&return:int =n$19 [line 50]\n REMOVE_TEMPS(n$18,n$19); [line 50]\n NULLIFY(&__objc_anonymous_block_A_dispatch_after_example______3,true); [line 50]\n APPLY_ABSTRACTION; [line 50]\n " shape="box"] - 25 -> 24 ; -24 [label="24: Exit A_dispatch_after_example \n " color=yellow style=filled] + 109 -> 108 ; +108 [label="108: Exit A_dispatch_after_example \n " color=yellow style=filled] -23 [label="23: Start A_dispatch_after_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_after_example______3:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_after_example______3); [line 42]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_after_example______3,false); [line 42]\n " color=yellow style=filled] +107 [label="107: Start A_dispatch_after_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_after_example______3:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_after_example______3); [line 42]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_after_example______3,false); [line 42]\n " color=yellow style=filled] - 23 -> 32 ; -22 [label="22: DeclStmt \n *&#GB$A_dispatch_async_example_a:class A *=0 [line 33]\n " shape="box"] + 107 -> 116 ; +106 [label="106: DeclStmt \n *&#GB$A_dispatch_async_example_a:class A *=0 [line 33]\n " shape="box"] - 22 -> 21 ; -21 [label="21: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_async_example______2); [line 35]\n n$16=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_async_example______2 ):unsigned long ) [line 35]\n *&__objc_anonymous_block_A_dispatch_async_example______2:class __objc_anonymous_block_A_dispatch_async_example______2 =n$16 [line 35]\n n$17=*&#GB$A_dispatch_async_example_a:class A * [line 35]\n *n$16.A_dispatch_async_example_a:class A *=n$17 [line 35]\n *&infer___objc_anonymous_block_A_dispatch_async_example______2:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_async_example______2) [line 34]\n REMOVE_TEMPS(n$16,n$17); [line 34]\n " shape="box"] + 106 -> 105 ; +105 [label="105: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_async_example______2); [line 35]\n n$16=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_async_example______2 ):unsigned long ) [line 35]\n *&__objc_anonymous_block_A_dispatch_async_example______2:class __objc_anonymous_block_A_dispatch_async_example______2 =n$16 [line 35]\n n$17=*&#GB$A_dispatch_async_example_a:class A * [line 35]\n *n$16.A_dispatch_async_example_a:class A *=n$17 [line 35]\n *&infer___objc_anonymous_block_A_dispatch_async_example______2:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_async_example______2) [line 34]\n REMOVE_TEMPS(n$16,n$17); [line 34]\n " shape="box"] - 21 -> 16 ; -20 [label="20: BinaryOperatorStmt: Assign \n n$14=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 36]\n n$15=_fun_NSObject_init(n$14:class A *) virtual [line 36]\n *&#GB$A_dispatch_async_example_a:class A *=n$15 [line 36]\n REMOVE_TEMPS(n$14,n$15); [line 36]\n " shape="box"] + 105 -> 100 ; +104 [label="104: BinaryOperatorStmt: Assign \n n$14=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 36]\n n$15=_fun_NSObject_init(n$14:class A *) virtual [line 36]\n *&#GB$A_dispatch_async_example_a:class A *=n$15 [line 36]\n REMOVE_TEMPS(n$14,n$15); [line 36]\n " shape="box"] - 20 -> 19 ; -19 [label="19: BinaryOperatorStmt: Assign \n n$13=*&#GB$A_dispatch_async_example_a:class A * [line 37]\n *n$13.x:int =10 [line 37]\n REMOVE_TEMPS(n$13); [line 37]\n APPLY_ABSTRACTION; [line 37]\n " shape="box"] + 104 -> 103 ; +103 [label="103: BinaryOperatorStmt: Assign \n n$13=*&#GB$A_dispatch_async_example_a:class A * [line 37]\n *n$13.x:int =10 [line 37]\n REMOVE_TEMPS(n$13); [line 37]\n APPLY_ABSTRACTION; [line 37]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit __objc_anonymous_block_A_dispatch_async_example______2 \n " color=yellow style=filled] + 103 -> 102 ; +102 [label="102: Exit __objc_anonymous_block_A_dispatch_async_example______2 \n " color=yellow style=filled] -17 [label="17: Start __objc_anonymous_block_A_dispatch_async_example______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] +101 [label="101: Start __objc_anonymous_block_A_dispatch_async_example______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 35]\n " color=yellow style=filled] - 17 -> 20 ; -16 [label="16: Call n$11 \n n$11=*&infer___objc_anonymous_block_A_dispatch_async_example______2:_fn_ (*) [line 34]\n n$12=n$11() [line 34]\n REMOVE_TEMPS(n$11,n$12); [line 34]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_async_example______2,false); [line 34]\n " shape="box"] + 101 -> 104 ; +100 [label="100: Call n$11 \n n$11=*&infer___objc_anonymous_block_A_dispatch_async_example______2:_fn_ (*) [line 34]\n n$12=n$11() [line 34]\n REMOVE_TEMPS(n$11,n$12); [line 34]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_async_example______2,false); [line 34]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Return Stmt \n n$9=*&#GB$A_dispatch_async_example_a:class A * [line 39]\n n$10=*n$9.x:int [line 39]\n *&return:int =n$10 [line 39]\n REMOVE_TEMPS(n$9,n$10); [line 39]\n NULLIFY(&__objc_anonymous_block_A_dispatch_async_example______2,true); [line 39]\n APPLY_ABSTRACTION; [line 39]\n " shape="box"] + 100 -> 99 ; +99 [label="99: Return Stmt \n n$9=*&#GB$A_dispatch_async_example_a:class A * [line 39]\n n$10=*n$9.x:int [line 39]\n *&return:int =n$10 [line 39]\n REMOVE_TEMPS(n$9,n$10); [line 39]\n NULLIFY(&__objc_anonymous_block_A_dispatch_async_example______2,true); [line 39]\n APPLY_ABSTRACTION; [line 39]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit A_dispatch_async_example \n " color=yellow style=filled] + 99 -> 98 ; +98 [label="98: Exit A_dispatch_async_example \n " color=yellow style=filled] -13 [label="13: Start A_dispatch_async_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_async_example______2:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_async_example______2); [line 32]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_async_example______2,false); [line 32]\n " color=yellow style=filled] +97 [label="97: Start A_dispatch_async_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_async_example______2:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_async_example______2); [line 32]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_async_example______2,false); [line 32]\n " color=yellow style=filled] - 13 -> 22 ; -12 [label="12: DeclStmt \n *&#GB$A_dispatch_once_example_a:class A *=0 [line 21]\n " shape="box"] + 97 -> 106 ; +96 [label="96: DeclStmt \n *&#GB$A_dispatch_once_example_a:class A *=0 [line 21]\n " shape="box"] - 12 -> 11 ; -11 [label="11: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_once_example______1); [line 25]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_once_example______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_A_dispatch_once_example______1:class __objc_anonymous_block_A_dispatch_once_example______1 =n$7 [line 25]\n n$8=*&#GB$A_dispatch_once_example_a:class A * [line 25]\n *n$7.A_dispatch_once_example_a:class A *=n$8 [line 25]\n *&infer___objc_anonymous_block_A_dispatch_once_example______1:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_once_example______1) [line 25]\n REMOVE_TEMPS(n$7,n$8); [line 25]\n " shape="box"] + 96 -> 95 ; +95 [label="95: DeclStmt \n DECLARE_LOCALS(&__objc_anonymous_block_A_dispatch_once_example______1); [line 25]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_dispatch_once_example______1 ):unsigned long ) [line 25]\n *&__objc_anonymous_block_A_dispatch_once_example______1:class __objc_anonymous_block_A_dispatch_once_example______1 =n$7 [line 25]\n n$8=*&#GB$A_dispatch_once_example_a:class A * [line 25]\n *n$7.A_dispatch_once_example_a:class A *=n$8 [line 25]\n *&infer___objc_anonymous_block_A_dispatch_once_example______1:_fn_ (*)=(_fun___objc_anonymous_block_A_dispatch_once_example______1) [line 25]\n REMOVE_TEMPS(n$7,n$8); [line 25]\n " shape="box"] - 11 -> 6 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$5=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 26]\n n$6=_fun_NSObject_init(n$5:class A *) virtual [line 26]\n *&#GB$A_dispatch_once_example_a:class A *=n$6 [line 26]\n REMOVE_TEMPS(n$5,n$6); [line 26]\n " shape="box"] + 95 -> 90 ; +94 [label="94: BinaryOperatorStmt: Assign \n n$5=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 26]\n n$6=_fun_NSObject_init(n$5:class A *) virtual [line 26]\n *&#GB$A_dispatch_once_example_a:class A *=n$6 [line 26]\n REMOVE_TEMPS(n$5,n$6); [line 26]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$4=*&#GB$A_dispatch_once_example_a:class A * [line 27]\n *n$4.x:int =10 [line 27]\n REMOVE_TEMPS(n$4); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] + 94 -> 93 ; +93 [label="93: BinaryOperatorStmt: Assign \n n$4=*&#GB$A_dispatch_once_example_a:class A * [line 27]\n *n$4.x:int =10 [line 27]\n REMOVE_TEMPS(n$4); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] - 9 -> 8 ; -8 [label="8: Exit __objc_anonymous_block_A_dispatch_once_example______1 \n " color=yellow style=filled] + 93 -> 92 ; +92 [label="92: Exit __objc_anonymous_block_A_dispatch_once_example______1 \n " color=yellow style=filled] -7 [label="7: Start __objc_anonymous_block_A_dispatch_once_example______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] +91 [label="91: Start __objc_anonymous_block_A_dispatch_once_example______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 25]\n " color=yellow style=filled] - 7 -> 10 ; -6 [label="6: Call n$2 \n n$2=*&infer___objc_anonymous_block_A_dispatch_once_example______1:_fn_ (*) [line 25]\n n$3=n$2() [line 25]\n REMOVE_TEMPS(n$2,n$3); [line 25]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_once_example______1,false); [line 25]\n " shape="box"] + 91 -> 94 ; +90 [label="90: Call n$2 \n n$2=*&infer___objc_anonymous_block_A_dispatch_once_example______1:_fn_ (*) [line 25]\n n$3=n$2() [line 25]\n REMOVE_TEMPS(n$2,n$3); [line 25]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_once_example______1,false); [line 25]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&#GB$A_dispatch_once_example_a:class A * [line 29]\n n$1=*n$0.x:int [line 29]\n *&return:int =n$1 [line 29]\n REMOVE_TEMPS(n$0,n$1); [line 29]\n NULLIFY(&__objc_anonymous_block_A_dispatch_once_example______1,true); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] + 90 -> 89 ; +89 [label="89: Return Stmt \n n$0=*&#GB$A_dispatch_once_example_a:class A * [line 29]\n n$1=*n$0.x:int [line 29]\n *&return:int =n$1 [line 29]\n REMOVE_TEMPS(n$0,n$1); [line 29]\n NULLIFY(&__objc_anonymous_block_A_dispatch_once_example______1,true); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit A_dispatch_once_example \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit A_dispatch_once_example \n " color=yellow style=filled] -3 [label="3: Start A_dispatch_once_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_once_example______1:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_once_example______1); [line 20]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_once_example______1,false); [line 20]\n " color=yellow style=filled] +87 [label="87: Start A_dispatch_once_example\nFormals: \nLocals: infer___objc_anonymous_block_A_dispatch_once_example______1:_fn_ (*) \n DECLARE_LOCALS(&return,&infer___objc_anonymous_block_A_dispatch_once_example______1); [line 20]\n NULLIFY(&infer___objc_anonymous_block_A_dispatch_once_example______1,false); [line 20]\n " color=yellow style=filled] - 3 -> 12 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 87 -> 96 ; +86 [label="86: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/block/retain_cycle.dot b/infer/tests/codetoanalyze/objc/frontend/block/retain_cycle.dot index 2685ef349..fe1d06818 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/retain_cycle.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/retain_cycle.dot @@ -1,86 +1,128 @@ digraph iCFG { -23 [label="23: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 63]\n *&a:class A *=n$2 [line 63]\n REMOVE_TEMPS(n$2); [line 63]\n " shape="box"] +35 [label="35: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 63]\n *&a:class A *=n$2 [line 63]\n REMOVE_TEMPS(n$2); [line 63]\n " shape="box"] - 23 -> 22 ; -22 [label="22: BinaryOperatorStmt: Assign \n n$0=*&a:class A * [line 65]\n n$1=_fun_foo(n$0:class A *) [line 65]\n *&a:class A *=n$1 [line 65]\n REMOVE_TEMPS(n$0,n$1); [line 65]\n NULLIFY(&a,false); [line 65]\n " shape="box"] + 35 -> 34 ; +34 [label="34: BinaryOperatorStmt: Assign \n n$0=*&a:class A * [line 65]\n n$1=_fun_foo(n$0:class A *) [line 65]\n *&a:class A *=n$1 [line 65]\n REMOVE_TEMPS(n$0,n$1); [line 65]\n NULLIFY(&a,false); [line 65]\n " shape="box"] - 22 -> 21 ; -21 [label="21: Return Stmt \n *&return:int =0 [line 67]\n APPLY_ABSTRACTION; [line 67]\n " shape="box"] + 34 -> 33 ; +33 [label="33: Return Stmt \n *&return:int =0 [line 67]\n APPLY_ABSTRACTION; [line 67]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Exit main \n " color=yellow style=filled] + 33 -> 32 ; +32 [label="32: Exit main \n " color=yellow style=filled] -19 [label="19: Start main\nFormals: argc:int argv:char **\nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 61]\n NULLIFY(&a,false); [line 61]\n NULLIFY(&argc,false); [line 61]\n NULLIFY(&argv,false); [line 61]\n " color=yellow style=filled] +31 [label="31: Start main\nFormals: argc:int argv:char **\nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 61]\n NULLIFY(&a,false); [line 61]\n NULLIFY(&argc,false); [line 61]\n NULLIFY(&argv,false); [line 61]\n " color=yellow style=filled] - 19 -> 23 ; -18 [label="18: Message Call: capture \n n$1=*&a:class A * [line 56]\n _fun_A_capture(n$1:class A *) virtual [line 56]\n REMOVE_TEMPS(n$1); [line 56]\n " shape="box"] + 31 -> 35 ; +30 [label="30: Message Call: capture \n n$1=*&a:class A * [line 56]\n _fun_A_capture(n$1:class A *) virtual [line 56]\n REMOVE_TEMPS(n$1); [line 56]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Return Stmt \n n$0=*&a:class A * [line 58]\n *&return:class A *=n$0 [line 58]\n REMOVE_TEMPS(n$0); [line 58]\n NULLIFY(&a,false); [line 58]\n APPLY_ABSTRACTION; [line 58]\n " shape="box"] + 30 -> 29 ; +29 [label="29: Return Stmt \n n$0=*&a:class A * [line 58]\n *&return:class A *=n$0 [line 58]\n REMOVE_TEMPS(n$0); [line 58]\n NULLIFY(&a,false); [line 58]\n APPLY_ABSTRACTION; [line 58]\n " shape="box"] + + + 29 -> 28 ; +28 [label="28: Exit foo \n " color=yellow style=filled] + + +27 [label="27: Start foo\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 54]\n " color=yellow style=filled] + + + 27 -> 30 ; +26 [label="26: BinaryOperatorStmt: Assign \n n$8=*&self:class A * [line 46]\n n$9=_fun___objc_alloc_no_fail(sizeof(class B ):unsigned long ) [line 46]\n *n$8._b:class B *=n$9 [line 46]\n REMOVE_TEMPS(n$8,n$9); [line 46]\n " shape="box"] + + + 26 -> 25 ; +25 [label="25: Message Call: sHandler: \n n$0=*&self:class A * [line 47]\n n$1=*n$0._b:class B * [line 47]\n DECLARE_LOCALS(&__objc_anonymous_block_A_capture______1); [line 47]\n n$5=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_capture______1 ):unsigned long ) [line 47]\n *&__objc_anonymous_block_A_capture______1:class __objc_anonymous_block_A_capture______1 =n$5 [line 47]\n n$6=*&self:class A * [line 47]\n *n$5.self:class A *=n$6 [line 47]\n n$2=*&self:class A * [line 47]\n n$7=*&__objc_anonymous_block_A_capture______1:_fn_ (*) [line 47]\n _fun_B_sHandler:(n$1:class B *,n$7:_fn_ (*),n$2:_fn_ (*)) virtual [line 47]\n REMOVE_TEMPS(n$0,n$1,n$5,n$6,n$2,n$7); [line 47]\n NULLIFY(&__objc_anonymous_block_A_capture______1,true); [line 47]\n NULLIFY(&self,false); [line 47]\n APPLY_ABSTRACTION; [line 47]\n " shape="box"] + + + 25 -> 21 ; +24 [label="24: BinaryOperatorStmt: Assign \n n$3=*&self:class A * [line 48]\n n$4=*&d:class D * [line 48]\n *n$3._data:class D *=n$4 [line 48]\n REMOVE_TEMPS(n$3,n$4); [line 48]\n NULLIFY(&d,false); [line 48]\n NULLIFY(&self,false); [line 48]\n APPLY_ABSTRACTION; [line 48]\n " shape="box"] + + + 24 -> 23 ; +23 [label="23: Exit __objc_anonymous_block_A_capture______1 \n " color=yellow style=filled] + + +22 [label="22: Start __objc_anonymous_block_A_capture______1\nFormals: self:class A * d:class D *\nLocals: \nCaptured: self:class A * \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] + + + 22 -> 24 ; +21 [label="21: Exit A_capture \n " color=yellow style=filled] + + +20 [label="20: Start A_capture\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 45]\n " color=yellow style=filled] + + + 20 -> 26 ; +19 [label="19: Exit A_frontendChecks \n " color=yellow style=filled] + + +18 [label="18: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 18 -> 19 ; +17 [label="17: BinaryOperatorStmt: Assign \n n$0=*&self:class B * [line 30]\n n$1=*&h:_fn_ (*) [line 30]\n *n$0._h:_fn_ (*)=n$1 [line 30]\n REMOVE_TEMPS(n$0,n$1); [line 30]\n NULLIFY(&h,false); [line 30]\n NULLIFY(&self,false); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] 17 -> 16 ; -16 [label="16: Exit foo \n " color=yellow style=filled] +16 [label="16: Exit B_sHandler: \n " color=yellow style=filled] -15 [label="15: Start foo\nFormals: a:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 54]\n " color=yellow style=filled] +15 [label="15: Start B_sHandler:\nFormals: self:class B * h:_fn_ (*)\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] - 15 -> 18 ; -14 [label="14: BinaryOperatorStmt: Assign \n n$8=*&self:class A * [line 46]\n n$9=_fun___objc_alloc_no_fail(sizeof(class B ):unsigned long ) [line 46]\n *n$8._b:class B *=n$9 [line 46]\n REMOVE_TEMPS(n$8,n$9); [line 46]\n " shape="box"] + 15 -> 17 ; +14 [label="14: Exit B_frontendChecks \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Message Call: sHandler: \n n$0=*&self:class A * [line 47]\n n$1=*n$0._b:class B * [line 47]\n DECLARE_LOCALS(&__objc_anonymous_block_A_capture______1); [line 47]\n n$5=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_capture______1 ):unsigned long ) [line 47]\n *&__objc_anonymous_block_A_capture______1:class __objc_anonymous_block_A_capture______1 =n$5 [line 47]\n n$6=*&self:class A * [line 47]\n *n$5.self:class A *=n$6 [line 47]\n n$2=*&self:class A * [line 47]\n n$7=*&__objc_anonymous_block_A_capture______1:_fn_ (*) [line 47]\n _fun_B_sHandler:(n$1:class B *,n$7:_fn_ (*),n$2:_fn_ (*)) virtual [line 47]\n REMOVE_TEMPS(n$0,n$1,n$5,n$6,n$2,n$7); [line 47]\n NULLIFY(&__objc_anonymous_block_A_capture______1,true); [line 47]\n NULLIFY(&self,false); [line 47]\n APPLY_ABSTRACTION; [line 47]\n " shape="box"] +13 [label="13: Start B_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 13 -> 9 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$3=*&self:class A * [line 48]\n n$4=*&d:class D * [line 48]\n *n$3._data:class D *=n$4 [line 48]\n REMOVE_TEMPS(n$3,n$4); [line 48]\n NULLIFY(&d,false); [line 48]\n NULLIFY(&self,false); [line 48]\n APPLY_ABSTRACTION; [line 48]\n " shape="box"] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 12 -> 11 ; -11 [label="11: Exit __objc_anonymous_block_A_capture______1 \n " color=yellow style=filled] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -10 [label="10: Start __objc_anonymous_block_A_capture______1\nFormals: self:class A * d:class D *\nLocals: \nCaptured: self:class A * \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 10 -> 12 ; -9 [label="9: Exit A_capture \n " color=yellow style=filled] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -8 [label="8: Start A_capture\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 45]\n " color=yellow style=filled] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 8 -> 14 ; -7 [label="7: Exit A_frontendChecks \n " color=yellow style=filled] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -6 [label="6: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 7 ; -5 [label="5: BinaryOperatorStmt: Assign \n n$0=*&self:class B * [line 30]\n n$1=*&h:_fn_ (*) [line 30]\n *n$0._h:_fn_ (*)=n$1 [line 30]\n REMOVE_TEMPS(n$0,n$1); [line 30]\n NULLIFY(&h,false); [line 30]\n NULLIFY(&self,false); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit B_sHandler: \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start B_sHandler:\nFormals: self:class B * h:_fn_ (*)\nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit B_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start B_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/block/static.dot b/infer/tests/codetoanalyze/objc/frontend/block/static.dot index 83365bfa8..aa53c1d35 100644 --- a/infer/tests/codetoanalyze/objc/frontend/block/static.dot +++ b/infer/tests/codetoanalyze/objc/frontend/block/static.dot @@ -1,123 +1,417 @@ digraph iCFG { -33 [label="33: Return Stmt \n *&return:int =0 [line 60]\n APPLY_ABSTRACTION; [line 60]\n " shape="box"] +117 [label="117: Return Stmt \n *&return:int =0 [line 60]\n APPLY_ABSTRACTION; [line 60]\n " shape="box"] - 33 -> 32 ; -32 [label="32: Exit main \n " color=yellow style=filled] + 117 -> 116 ; +116 [label="116: Exit main \n " color=yellow style=filled] -31 [label="31: Start main\nFormals: argc:int argv:char **\nLocals: \n DECLARE_LOCALS(&return); [line 60]\n NULLIFY(&argc,false); [line 60]\n NULLIFY(&argv,false); [line 60]\n " color=yellow style=filled] +115 [label="115: Start main\nFormals: argc:int argv:char **\nLocals: \n DECLARE_LOCALS(&return); [line 60]\n NULLIFY(&argc,false); [line 60]\n NULLIFY(&argv,false); [line 60]\n " color=yellow style=filled] - 31 -> 33 ; -30 [label="30: Call (_fun___objc_anonymous_block_A_test3______4) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test3______4); [line 50]\n n$17=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test3______4 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_A_test3______4:class __objc_anonymous_block_A_test3______4 =n$17 [line 50]\n n$18=*&#GB$A_test3_i:int [line 50]\n *n$17.A_test3_i:int =n$18 [line 50]\n (_fun___objc_anonymous_block_A_test3______4)() [line 50]\n REMOVE_TEMPS(n$17,n$18); [line 50]\n " shape="box"] + 115 -> 117 ; +114 [label="114: Call (_fun___objc_anonymous_block_A_test3______4) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test3______4); [line 50]\n n$17=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test3______4 ):unsigned long ) [line 50]\n *&__objc_anonymous_block_A_test3______4:class __objc_anonymous_block_A_test3______4 =n$17 [line 50]\n n$18=*&#GB$A_test3_i:int [line 50]\n *n$17.A_test3_i:int =n$18 [line 50]\n (_fun___objc_anonymous_block_A_test3______4)() [line 50]\n REMOVE_TEMPS(n$17,n$18); [line 50]\n " shape="box"] - 30 -> 26 ; -29 [label="29: UnaryOperator \n n$16=*&#GB$A_test3_i:int [line 52]\n *&#GB$A_test3_i:int =(n$16 + 1) [line 52]\n REMOVE_TEMPS(n$16); [line 52]\n APPLY_ABSTRACTION; [line 52]\n " shape="box"] + 114 -> 110 ; +113 [label="113: UnaryOperator \n n$16=*&#GB$A_test3_i:int [line 52]\n *&#GB$A_test3_i:int =(n$16 + 1) [line 52]\n REMOVE_TEMPS(n$16); [line 52]\n APPLY_ABSTRACTION; [line 52]\n " shape="box"] - 29 -> 28 ; -28 [label="28: Exit __objc_anonymous_block_A_test3______4 \n " color=yellow style=filled] + 113 -> 112 ; +112 [label="112: Exit __objc_anonymous_block_A_test3______4 \n " color=yellow style=filled] -27 [label="27: Start __objc_anonymous_block_A_test3______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] +111 [label="111: Start __objc_anonymous_block_A_test3______4\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] - 27 -> 29 ; -26 [label="26: Return Stmt \n n$15=*&#GB$A_test3_i:int [line 55]\n *&return:int =n$15 [line 55]\n REMOVE_TEMPS(n$15); [line 55]\n NULLIFY(&__objc_anonymous_block_A_test3______4,true); [line 55]\n APPLY_ABSTRACTION; [line 55]\n " shape="box"] + 111 -> 113 ; +110 [label="110: Return Stmt \n n$15=*&#GB$A_test3_i:int [line 55]\n *&return:int =n$15 [line 55]\n REMOVE_TEMPS(n$15); [line 55]\n NULLIFY(&__objc_anonymous_block_A_test3______4,true); [line 55]\n APPLY_ABSTRACTION; [line 55]\n " shape="box"] - 26 -> 25 ; -25 [label="25: Exit A_test3 \n " color=yellow style=filled] + 110 -> 109 ; +109 [label="109: Exit A_test3 \n " color=yellow style=filled] -24 [label="24: Start A_test3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] +108 [label="108: Start A_test3\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 47]\n " color=yellow style=filled] - 24 -> 30 ; -23 [label="23: BinaryOperatorStmt: Assign \n n$13=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 38]\n n$14=_fun_A_init(n$13:class A *) virtual [line 38]\n *&#GB$A_test2_sharedInstance:struct objc_object *=n$14 [line 38]\n REMOVE_TEMPS(n$13,n$14); [line 38]\n " shape="box"] + 108 -> 114 ; +107 [label="107: BinaryOperatorStmt: Assign \n n$13=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 38]\n n$14=_fun_A_init(n$13:class A *) virtual [line 38]\n *&#GB$A_test2_sharedInstance:struct objc_object *=n$14 [line 38]\n REMOVE_TEMPS(n$13,n$14); [line 38]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Call (_fun___objc_anonymous_block_A_test2______3) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test2______3); [line 39]\n n$11=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test2______3 ):unsigned long ) [line 39]\n *&__objc_anonymous_block_A_test2______3:class __objc_anonymous_block_A_test2______3 =n$11 [line 39]\n n$12=*&#GB$A_test2_sharedInstance:struct objc_object * [line 39]\n *n$11.A_test2_sharedInstance:struct objc_object *=n$12 [line 39]\n (_fun___objc_anonymous_block_A_test2______3)() [line 39]\n REMOVE_TEMPS(n$11,n$12); [line 39]\n " shape="box"] + 107 -> 106 ; +106 [label="106: Call (_fun___objc_anonymous_block_A_test2______3) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test2______3); [line 39]\n n$11=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test2______3 ):unsigned long ) [line 39]\n *&__objc_anonymous_block_A_test2______3:class __objc_anonymous_block_A_test2______3 =n$11 [line 39]\n n$12=*&#GB$A_test2_sharedInstance:struct objc_object * [line 39]\n *n$11.A_test2_sharedInstance:struct objc_object *=n$12 [line 39]\n (_fun___objc_anonymous_block_A_test2______3)() [line 39]\n REMOVE_TEMPS(n$11,n$12); [line 39]\n " shape="box"] - 22 -> 18 ; -21 [label="21: DeclStmt \n n$10=*&#GB$A_test2_sharedInstance:struct objc_object * [line 41]\n *&p:struct objc_object *=n$10 [line 41]\n REMOVE_TEMPS(n$10); [line 41]\n NULLIFY(&p,false); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] + 106 -> 102 ; +105 [label="105: DeclStmt \n n$10=*&#GB$A_test2_sharedInstance:struct objc_object * [line 41]\n *&p:struct objc_object *=n$10 [line 41]\n REMOVE_TEMPS(n$10); [line 41]\n NULLIFY(&p,false); [line 41]\n APPLY_ABSTRACTION; [line 41]\n " shape="box"] - 21 -> 20 ; -20 [label="20: Exit __objc_anonymous_block_A_test2______3 \n " color=yellow style=filled] + 105 -> 104 ; +104 [label="104: Exit __objc_anonymous_block_A_test2______3 \n " color=yellow style=filled] -19 [label="19: Start __objc_anonymous_block_A_test2______3\nFormals: \nLocals: p:struct objc_object * \n DECLARE_LOCALS(&return,&p); [line 39]\n NULLIFY(&p,false); [line 39]\n " color=yellow style=filled] +103 [label="103: Start __objc_anonymous_block_A_test2______3\nFormals: \nLocals: p:struct objc_object * \n DECLARE_LOCALS(&return,&p); [line 39]\n NULLIFY(&p,false); [line 39]\n " color=yellow style=filled] - 19 -> 21 ; -18 [label="18: Return Stmt \n n$9=*&#GB$A_test2_sharedInstance:struct objc_object * [line 44]\n *&return:struct objc_object *=n$9 [line 44]\n REMOVE_TEMPS(n$9); [line 44]\n NULLIFY(&__objc_anonymous_block_A_test2______3,true); [line 44]\n APPLY_ABSTRACTION; [line 44]\n " shape="box"] + 103 -> 105 ; +102 [label="102: Return Stmt \n n$9=*&#GB$A_test2_sharedInstance:struct objc_object * [line 44]\n *&return:struct objc_object *=n$9 [line 44]\n REMOVE_TEMPS(n$9); [line 44]\n NULLIFY(&__objc_anonymous_block_A_test2______3,true); [line 44]\n APPLY_ABSTRACTION; [line 44]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Exit A_test2 \n " color=yellow style=filled] + 102 -> 101 ; +101 [label="101: Exit A_test2 \n " color=yellow style=filled] -16 [label="16: Start A_test2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] +100 [label="100: Start A_test2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] - 16 -> 23 ; -15 [label="15: Call (_fun___objc_anonymous_block_A_test_leak______2) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test_leak______2); [line 30]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test_leak______2 ):unsigned long ) [line 30]\n *&__objc_anonymous_block_A_test_leak______2:class __objc_anonymous_block_A_test_leak______2 =n$7 [line 30]\n n$8=*&#GB$A_test_leak_sharedInstance:struct objc_object * [line 30]\n *n$7.A_test_leak_sharedInstance:struct objc_object *=n$8 [line 30]\n (_fun___objc_anonymous_block_A_test_leak______2)() [line 30]\n REMOVE_TEMPS(n$7,n$8); [line 30]\n NULLIFY(&__objc_anonymous_block_A_test_leak______2,true); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] + 100 -> 107 ; +99 [label="99: Call (_fun___objc_anonymous_block_A_test_leak______2) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test_leak______2); [line 30]\n n$7=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test_leak______2 ):unsigned long ) [line 30]\n *&__objc_anonymous_block_A_test_leak______2:class __objc_anonymous_block_A_test_leak______2 =n$7 [line 30]\n n$8=*&#GB$A_test_leak_sharedInstance:struct objc_object * [line 30]\n *n$7.A_test_leak_sharedInstance:struct objc_object *=n$8 [line 30]\n (_fun___objc_anonymous_block_A_test_leak______2)() [line 30]\n REMOVE_TEMPS(n$7,n$8); [line 30]\n NULLIFY(&__objc_anonymous_block_A_test_leak______2,true); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] - 15 -> 11 ; -14 [label="14: BinaryOperatorStmt: Assign \n n$5=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 31]\n n$6=_fun_A_init(n$5:class A *) virtual [line 31]\n *&#GB$A_test_leak_sharedInstance:struct objc_object *=n$6 [line 31]\n REMOVE_TEMPS(n$5,n$6); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 99 -> 95 ; +98 [label="98: BinaryOperatorStmt: Assign \n n$5=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 31]\n n$6=_fun_A_init(n$5:class A *) virtual [line 31]\n *&#GB$A_test_leak_sharedInstance:struct objc_object *=n$6 [line 31]\n REMOVE_TEMPS(n$5,n$6); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] - 14 -> 13 ; -13 [label="13: Exit __objc_anonymous_block_A_test_leak______2 \n " color=yellow style=filled] + 98 -> 97 ; +97 [label="97: Exit __objc_anonymous_block_A_test_leak______2 \n " color=yellow style=filled] -12 [label="12: Start __objc_anonymous_block_A_test_leak______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] +96 [label="96: Start __objc_anonymous_block_A_test_leak______2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 30]\n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: Exit A_test_leak \n " color=yellow style=filled] + 96 -> 98 ; +95 [label="95: Exit A_test_leak \n " color=yellow style=filled] -10 [label="10: Start A_test_leak\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] +94 [label="94: Start A_test_leak\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] - 10 -> 15 ; -9 [label="9: Call (_fun___objc_anonymous_block_A_test______1) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test______1); [line 20]\n n$3=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test______1 ):unsigned long ) [line 20]\n *&__objc_anonymous_block_A_test______1:class __objc_anonymous_block_A_test______1 =n$3 [line 20]\n n$4=*&#GB$A_test_sharedInstance:struct objc_object * [line 20]\n *n$3.A_test_sharedInstance:struct objc_object *=n$4 [line 20]\n (_fun___objc_anonymous_block_A_test______1)() [line 20]\n REMOVE_TEMPS(n$3,n$4); [line 20]\n " shape="box"] + 94 -> 99 ; +93 [label="93: Call (_fun___objc_anonymous_block_A_test______1) \n DECLARE_LOCALS(&__objc_anonymous_block_A_test______1); [line 20]\n n$3=_fun___objc_alloc_no_fail(sizeof(class __objc_anonymous_block_A_test______1 ):unsigned long ) [line 20]\n *&__objc_anonymous_block_A_test______1:class __objc_anonymous_block_A_test______1 =n$3 [line 20]\n n$4=*&#GB$A_test_sharedInstance:struct objc_object * [line 20]\n *n$3.A_test_sharedInstance:struct objc_object *=n$4 [line 20]\n (_fun___objc_anonymous_block_A_test______1)() [line 20]\n REMOVE_TEMPS(n$3,n$4); [line 20]\n " shape="box"] - 9 -> 5 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 21]\n n$2=_fun_A_init(n$1:class A *) virtual [line 21]\n *&#GB$A_test_sharedInstance:struct objc_object *=n$2 [line 21]\n REMOVE_TEMPS(n$1,n$2); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] + 93 -> 89 ; +92 [label="92: BinaryOperatorStmt: Assign \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 21]\n n$2=_fun_A_init(n$1:class A *) virtual [line 21]\n *&#GB$A_test_sharedInstance:struct objc_object *=n$2 [line 21]\n REMOVE_TEMPS(n$1,n$2); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit __objc_anonymous_block_A_test______1 \n " color=yellow style=filled] + 92 -> 91 ; +91 [label="91: Exit __objc_anonymous_block_A_test______1 \n " color=yellow style=filled] -6 [label="6: Start __objc_anonymous_block_A_test______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +90 [label="90: Start __objc_anonymous_block_A_test______1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: Return Stmt \n n$0=*&#GB$A_test_sharedInstance:struct objc_object * [line 25]\n *&return:struct objc_object *=n$0 [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n NULLIFY(&__objc_anonymous_block_A_test______1,true); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] + 90 -> 92 ; +89 [label="89: Return Stmt \n n$0=*&#GB$A_test_sharedInstance:struct objc_object * [line 25]\n *&return:struct objc_object *=n$0 [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n NULLIFY(&__objc_anonymous_block_A_test______1,true); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit A_test \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit A_test \n " color=yellow style=filled] -3 [label="3: Start A_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] +87 [label="87: Start A_test\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 18]\n " color=yellow style=filled] - 3 -> 9 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 87 -> 93 ; +86 [label="86: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/Boxing.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/Boxing.dot index 41aa5231c..6eb5ecf25 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/Boxing.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/Boxing.dot @@ -1,106 +1,400 @@ digraph iCFG { -28 [label="28: DeclStmt \n n$15=_fun_strdup(\"hello world\":char *) [line 42]\n n$16=_fun_NSString_stringWithUTF8String:(n$15:char *) [line 42]\n *&s:class NSString *=n$16 [line 42]\n REMOVE_TEMPS(n$15,n$16); [line 42]\n NULLIFY(&s,false); [line 42]\n " shape="box"] +112 [label="112: DeclStmt \n n$15=_fun_strdup(\"hello world\":char *) [line 42]\n n$16=_fun_NSString_stringWithUTF8String:(n$15:char *) [line 42]\n *&s:class NSString *=n$16 [line 42]\n REMOVE_TEMPS(n$15,n$16); [line 42]\n NULLIFY(&s,false); [line 42]\n " shape="box"] - 28 -> 27 ; -27 [label="27: Return Stmt \n n$14=_fun_NSString_stringWithUTF8String:(\"hello world\":char *) [line 43]\n *&return:class NSString *=n$14 [line 43]\n REMOVE_TEMPS(n$14); [line 43]\n APPLY_ABSTRACTION; [line 43]\n " shape="box"] + 112 -> 111 ; +111 [label="111: Return Stmt \n n$14=_fun_NSString_stringWithUTF8String:(\"hello world\":char *) [line 43]\n *&return:class NSString *=n$14 [line 43]\n REMOVE_TEMPS(n$14); [line 43]\n APPLY_ABSTRACTION; [line 43]\n " shape="box"] - 27 -> 26 ; -26 [label="26: Exit Boxing_getS \n " color=yellow style=filled] + 111 -> 110 ; +110 [label="110: Exit Boxing_getS \n " color=yellow style=filled] -25 [label="25: Start Boxing_getS\nFormals: self:class Boxing *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 41]\n NULLIFY(&s,false); [line 41]\n NULLIFY(&self,false); [line 41]\n " color=yellow style=filled] +109 [label="109: Start Boxing_getS\nFormals: self:class Boxing *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 41]\n NULLIFY(&s,false); [line 41]\n NULLIFY(&self,false); [line 41]\n " color=yellow style=filled] - 25 -> 28 ; -24 [label="24: DeclStmt \n n$13=_fun_NSNumber_numberWithBool:(1:_Bool ) [line 37]\n *&n:class NSNumber *=n$13 [line 37]\n REMOVE_TEMPS(n$13); [line 37]\n NULLIFY(&n,false); [line 37]\n " shape="box"] + 109 -> 112 ; +108 [label="108: DeclStmt \n n$13=_fun_NSNumber_numberWithBool:(1:_Bool ) [line 37]\n *&n:class NSNumber *=n$13 [line 37]\n REMOVE_TEMPS(n$13); [line 37]\n NULLIFY(&n,false); [line 37]\n " shape="box"] - 24 -> 23 ; -23 [label="23: Return Stmt \n n$12=_fun_NSNumber_numberWithBool:(1:_Bool ) [line 38]\n *&return:class NSNumber *=n$12 [line 38]\n REMOVE_TEMPS(n$12); [line 38]\n APPLY_ABSTRACTION; [line 38]\n " shape="box"] + 108 -> 107 ; +107 [label="107: Return Stmt \n n$12=_fun_NSNumber_numberWithBool:(1:_Bool ) [line 38]\n *&return:class NSNumber *=n$12 [line 38]\n REMOVE_TEMPS(n$12); [line 38]\n APPLY_ABSTRACTION; [line 38]\n " shape="box"] - 23 -> 22 ; -22 [label="22: Exit Boxing_getBool \n " color=yellow style=filled] + 107 -> 106 ; +106 [label="106: Exit Boxing_getBool \n " color=yellow style=filled] -21 [label="21: Start Boxing_getBool\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 36]\n NULLIFY(&n,false); [line 36]\n NULLIFY(&self,false); [line 36]\n " color=yellow style=filled] +105 [label="105: Start Boxing_getBool\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 36]\n NULLIFY(&n,false); [line 36]\n NULLIFY(&self,false); [line 36]\n " color=yellow style=filled] - 21 -> 24 ; -20 [label="20: DeclStmt \n n$11=_fun_NSNumber_numberWithDouble:(1.500000:double ) [line 32]\n *&n:class NSNumber *=n$11 [line 32]\n REMOVE_TEMPS(n$11); [line 32]\n NULLIFY(&n,false); [line 32]\n " shape="box"] + 105 -> 108 ; +104 [label="104: DeclStmt \n n$11=_fun_NSNumber_numberWithDouble:(1.500000:double ) [line 32]\n *&n:class NSNumber *=n$11 [line 32]\n REMOVE_TEMPS(n$11); [line 32]\n NULLIFY(&n,false); [line 32]\n " shape="box"] - 20 -> 19 ; -19 [label="19: Return Stmt \n n$10=_fun_NSNumber_numberWithDouble:(1.500000:double ) [line 33]\n *&return:class NSNumber *=n$10 [line 33]\n REMOVE_TEMPS(n$10); [line 33]\n APPLY_ABSTRACTION; [line 33]\n " shape="box"] + 104 -> 103 ; +103 [label="103: Return Stmt \n n$10=_fun_NSNumber_numberWithDouble:(1.500000:double ) [line 33]\n *&return:class NSNumber *=n$10 [line 33]\n REMOVE_TEMPS(n$10); [line 33]\n APPLY_ABSTRACTION; [line 33]\n " shape="box"] - 19 -> 18 ; -18 [label="18: Exit Boxing_getDouble \n " color=yellow style=filled] + 103 -> 102 ; +102 [label="102: Exit Boxing_getDouble \n " color=yellow style=filled] -17 [label="17: Start Boxing_getDouble\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 31]\n NULLIFY(&n,false); [line 31]\n NULLIFY(&self,false); [line 31]\n " color=yellow style=filled] +101 [label="101: Start Boxing_getDouble\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 31]\n NULLIFY(&n,false); [line 31]\n NULLIFY(&self,false); [line 31]\n " color=yellow style=filled] - 17 -> 20 ; -16 [label="16: DeclStmt \n n$9=_fun_NSNumber_numberWithFloat:(1.500000:float ) [line 27]\n *&n:class NSNumber *=n$9 [line 27]\n REMOVE_TEMPS(n$9); [line 27]\n NULLIFY(&n,false); [line 27]\n " shape="box"] + 101 -> 104 ; +100 [label="100: DeclStmt \n n$9=_fun_NSNumber_numberWithFloat:(1.500000:float ) [line 27]\n *&n:class NSNumber *=n$9 [line 27]\n REMOVE_TEMPS(n$9); [line 27]\n NULLIFY(&n,false); [line 27]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Return Stmt \n n$8=_fun_NSNumber_numberWithFloat:(1.500000:float ) [line 28]\n *&return:class NSNumber *=n$8 [line 28]\n REMOVE_TEMPS(n$8); [line 28]\n APPLY_ABSTRACTION; [line 28]\n " shape="box"] + 100 -> 99 ; +99 [label="99: Return Stmt \n n$8=_fun_NSNumber_numberWithFloat:(1.500000:float ) [line 28]\n *&return:class NSNumber *=n$8 [line 28]\n REMOVE_TEMPS(n$8); [line 28]\n APPLY_ABSTRACTION; [line 28]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit Boxing_getFloat \n " color=yellow style=filled] + 99 -> 98 ; +98 [label="98: Exit Boxing_getFloat \n " color=yellow style=filled] -13 [label="13: Start Boxing_getFloat\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 26]\n NULLIFY(&n,false); [line 26]\n NULLIFY(&self,false); [line 26]\n " color=yellow style=filled] +97 [label="97: Start Boxing_getFloat\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 26]\n NULLIFY(&n,false); [line 26]\n NULLIFY(&self,false); [line 26]\n " color=yellow style=filled] - 13 -> 16 ; -12 [label="12: DeclStmt \n n$7=_fun_NSNumber_numberWithInt:(5:int ) [line 22]\n *&n:class NSNumber *=n$7 [line 22]\n REMOVE_TEMPS(n$7); [line 22]\n NULLIFY(&n,false); [line 22]\n " shape="box"] + 97 -> 100 ; +96 [label="96: DeclStmt \n n$7=_fun_NSNumber_numberWithInt:(5:int ) [line 22]\n *&n:class NSNumber *=n$7 [line 22]\n REMOVE_TEMPS(n$7); [line 22]\n NULLIFY(&n,false); [line 22]\n " shape="box"] - 12 -> 11 ; -11 [label="11: Return Stmt \n n$6=_fun_NSNumber_numberWithInt:(5:int ) [line 23]\n *&return:class NSNumber *=n$6 [line 23]\n REMOVE_TEMPS(n$6); [line 23]\n APPLY_ABSTRACTION; [line 23]\n " shape="box"] + 96 -> 95 ; +95 [label="95: Return Stmt \n n$6=_fun_NSNumber_numberWithInt:(5:int ) [line 23]\n *&return:class NSNumber *=n$6 [line 23]\n REMOVE_TEMPS(n$6); [line 23]\n APPLY_ABSTRACTION; [line 23]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit Boxing_getInt \n " color=yellow style=filled] + 95 -> 94 ; +94 [label="94: Exit Boxing_getInt \n " color=yellow style=filled] -9 [label="9: Start Boxing_getInt\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 21]\n NULLIFY(&n,false); [line 21]\n NULLIFY(&self,false); [line 21]\n " color=yellow style=filled] +93 [label="93: Start Boxing_getInt\nFormals: self:class Boxing *\nLocals: n:class NSNumber * \n DECLARE_LOCALS(&return,&n); [line 21]\n NULLIFY(&n,false); [line 21]\n NULLIFY(&self,false); [line 21]\n " color=yellow style=filled] - 9 -> 12 ; -8 [label="8: DeclStmt \n *&x:int =4 [line 15]\n " shape="box"] + 93 -> 96 ; +92 [label="92: DeclStmt \n *&x:int =4 [line 15]\n " shape="box"] - 8 -> 7 ; -7 [label="7: DeclStmt \n *&y:int =5 [line 16]\n " shape="box"] + 92 -> 91 ; +91 [label="91: DeclStmt \n *&y:int =5 [line 16]\n " shape="box"] - 7 -> 6 ; -6 [label="6: DeclStmt \n n$3=*&x:int [line 17]\n n$4=*&y:int [line 17]\n n$5=_fun_NSNumber_numberWithInt:((n$3 + n$4):int ) [line 17]\n *&n:class NSNumber *=n$5 [line 17]\n REMOVE_TEMPS(n$3,n$4,n$5); [line 17]\n NULLIFY(&n,false); [line 17]\n " shape="box"] + 91 -> 90 ; +90 [label="90: DeclStmt \n n$3=*&x:int [line 17]\n n$4=*&y:int [line 17]\n n$5=_fun_NSNumber_numberWithInt:((n$3 + n$4):int ) [line 17]\n *&n:class NSNumber *=n$5 [line 17]\n REMOVE_TEMPS(n$3,n$4,n$5); [line 17]\n NULLIFY(&n,false); [line 17]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&x:int [line 18]\n n$1=*&y:int [line 18]\n n$2=_fun_NSNumber_numberWithInt:((n$0 + n$1):int ) [line 18]\n *&return:class NSNumber *=n$2 [line 18]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 18]\n NULLIFY(&x,false); [line 18]\n NULLIFY(&y,false); [line 18]\n APPLY_ABSTRACTION; [line 18]\n " shape="box"] + 90 -> 89 ; +89 [label="89: Return Stmt \n n$0=*&x:int [line 18]\n n$1=*&y:int [line 18]\n n$2=_fun_NSNumber_numberWithInt:((n$0 + n$1):int ) [line 18]\n *&return:class NSNumber *=n$2 [line 18]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 18]\n NULLIFY(&x,false); [line 18]\n NULLIFY(&y,false); [line 18]\n APPLY_ABSTRACTION; [line 18]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit Boxing_getIntExp \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit Boxing_getIntExp \n " color=yellow style=filled] -3 [label="3: Start Boxing_getIntExp\nFormals: self:class Boxing *\nLocals: n:class NSNumber * y:int x:int \n DECLARE_LOCALS(&return,&n,&y,&x); [line 14]\n NULLIFY(&n,false); [line 14]\n NULLIFY(&self,false); [line 14]\n NULLIFY(&x,false); [line 14]\n NULLIFY(&y,false); [line 14]\n " color=yellow style=filled] +87 [label="87: Start Boxing_getIntExp\nFormals: self:class Boxing *\nLocals: n:class NSNumber * y:int x:int \n DECLARE_LOCALS(&return,&n,&y,&x); [line 14]\n NULLIFY(&n,false); [line 14]\n NULLIFY(&self,false); [line 14]\n NULLIFY(&x,false); [line 14]\n NULLIFY(&y,false); [line 14]\n " color=yellow style=filled] - 3 -> 8 ; -2 [label="2: Exit Boxing_frontendChecks \n " color=yellow style=filled] + 87 -> 92 ; +86 [label="86: Exit Boxing_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start Boxing_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start Boxing_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/array.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/array.dot index b223aa303..40295572e 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/array.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/array.dot @@ -1,50 +1,344 @@ digraph iCFG { -12 [label="12: DeclStmt \n n$9=_fun_NSString_stringWithUTF8String:(\"Mercedes-Benz\":char *) [line 17]\n n$10=_fun_NSString_stringWithUTF8String:(\"BMW\":char *) [line 18]\n n$11=_fun_NSString_stringWithUTF8String:(\"Porsche\":char *) [line 19]\n n$12=_fun_NSString_stringWithUTF8String:(\"Opel\":char *) [line 20]\n n$13=_fun_NSString_stringWithUTF8String:(\"Volkswagen\":char *) [line 21]\n n$14=_fun_NSString_stringWithUTF8String:(\"Audi\":char *) [line 22]\n n$15=_fun_NSArray_arrayWithObjects:count:(n$9:struct objc_object *,n$10:struct objc_object *,n$11:struct objc_object *,n$12:struct objc_object *,n$13:struct objc_object *,n$14:struct objc_object *,0:struct objc_object *) [line 16]\n *&germanCars:class NSArray *=n$15 [line 16]\n REMOVE_TEMPS(n$9,n$10,n$11,n$12,n$13,n$14,n$15); [line 16]\n " shape="box"] +96 [label="96: DeclStmt \n n$9=_fun_NSString_stringWithUTF8String:(\"Mercedes-Benz\":char *) [line 17]\n n$10=_fun_NSString_stringWithUTF8String:(\"BMW\":char *) [line 18]\n n$11=_fun_NSString_stringWithUTF8String:(\"Porsche\":char *) [line 19]\n n$12=_fun_NSString_stringWithUTF8String:(\"Opel\":char *) [line 20]\n n$13=_fun_NSString_stringWithUTF8String:(\"Volkswagen\":char *) [line 21]\n n$14=_fun_NSString_stringWithUTF8String:(\"Audi\":char *) [line 22]\n n$15=_fun_NSArray_arrayWithObjects:count:(n$9:struct objc_object *,n$10:struct objc_object *,n$11:struct objc_object *,n$12:struct objc_object *,n$13:struct objc_object *,n$14:struct objc_object *,0:struct objc_object *) [line 16]\n *&germanCars:class NSArray *=n$15 [line 16]\n REMOVE_TEMPS(n$9,n$10,n$11,n$12,n$13,n$14,n$15); [line 16]\n " shape="box"] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$7=*&germanCars:class NSArray * [line 24]\n n$8=_fun_NSArray_objectAtIndexedSubscript:(n$7:class NSArray *,3:unsigned long ) virtual [line 24]\n *&s:class NSString *=n$8 [line 24]\n REMOVE_TEMPS(n$7,n$8); [line 24]\n NULLIFY(&s,false); [line 24]\n " shape="box"] + 96 -> 95 ; +95 [label="95: BinaryOperatorStmt: Assign \n n$7=*&germanCars:class NSArray * [line 24]\n n$8=_fun_NSArray_objectAtIndexedSubscript:(n$7:class NSArray *,3:unsigned long ) virtual [line 24]\n *&s:class NSString *=n$8 [line 24]\n REMOVE_TEMPS(n$7,n$8); [line 24]\n NULLIFY(&s,false); [line 24]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$5=*&germanCars:class NSArray * [line 26]\n n$6=_fun_NSArray_nextObject(n$5:class NSArray *) virtual [line 26]\n *&item:class NSString *=n$6 [line 26]\n REMOVE_TEMPS(n$5,n$6); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] + 95 -> 94 ; +94 [label="94: BinaryOperatorStmt: Assign \n n$5=*&germanCars:class NSArray * [line 26]\n n$6=_fun_NSArray_nextObject(n$5:class NSArray *) virtual [line 26]\n *&item:class NSString *=n$6 [line 26]\n REMOVE_TEMPS(n$5,n$6); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] - 10 -> 4 ; -9 [label="9: Call _fun_NSLog \n n$3=_fun_NSString_stringWithUTF8String:(\"%@\":char *) [line 27]\n n$4=*&item:class NSString * [line 27]\n _fun_NSLog(n$3:struct objc_object *,n$4:class NSString *) [line 27]\n REMOVE_TEMPS(n$3,n$4); [line 27]\n NULLIFY(&item,false); [line 27]\n " shape="box"] + 94 -> 88 ; +93 [label="93: Call _fun_NSLog \n n$3=_fun_NSString_stringWithUTF8String:(\"%@\":char *) [line 27]\n n$4=*&item:class NSString * [line 27]\n _fun_NSLog(n$3:struct objc_object *,n$4:class NSString *) [line 27]\n REMOVE_TEMPS(n$3,n$4); [line 27]\n NULLIFY(&item,false); [line 27]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$1=*&germanCars:class NSArray * [line 26]\n n$2=_fun_NSArray_nextObject(n$1:class NSArray *) virtual [line 26]\n *&item:class NSString *=n$2 [line 26]\n REMOVE_TEMPS(n$1,n$2); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] + 93 -> 92 ; +92 [label="92: BinaryOperatorStmt: Assign \n n$1=*&germanCars:class NSArray * [line 26]\n n$2=_fun_NSArray_nextObject(n$1:class NSArray *) virtual [line 26]\n *&item:class NSString *=n$2 [line 26]\n REMOVE_TEMPS(n$1,n$2); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] - 8 -> 4 ; -7 [label="7: Prune (false branch) \n PRUNE(((n$0 != 0) == 0), false); [line 26]\n REMOVE_TEMPS(n$0); [line 26]\n " shape="invhouse"] + 92 -> 88 ; +91 [label="91: Prune (false branch) \n PRUNE(((n$0 != 0) == 0), false); [line 26]\n REMOVE_TEMPS(n$0); [line 26]\n " shape="invhouse"] - 7 -> 3 ; -6 [label="6: Prune (true branch) \n PRUNE(((n$0 != 0) != 0), true); [line 26]\n REMOVE_TEMPS(n$0); [line 26]\n " shape="invhouse"] + 91 -> 87 ; +90 [label="90: Prune (true branch) \n PRUNE(((n$0 != 0) != 0), true); [line 26]\n REMOVE_TEMPS(n$0); [line 26]\n " shape="invhouse"] - 6 -> 9 ; -5 [label="5: BinaryOperatorStmt: NE \n n$0=*&item:class NSString * [line 26]\n " shape="box"] + 90 -> 93 ; +89 [label="89: BinaryOperatorStmt: NE \n n$0=*&item:class NSString * [line 26]\n " shape="box"] + + + 89 -> 90 ; + 89 -> 91 ; +88 [label="88: + \n " ] + + + 88 -> 89 ; +87 [label="87: Return Stmt \n NULLIFY(&germanCars,false); [line 30]\n NULLIFY(&item,false); [line 30]\n *&return:int =0 [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] + + + 87 -> 86 ; +86 [label="86: Exit main \n " color=yellow style=filled] + + +85 [label="85: Start main\nFormals: \nLocals: item:class NSString * germanCars:class NSArray * s:class NSString * \n DECLARE_LOCALS(&return,&item,&germanCars,&s); [line 12]\n NULLIFY(&germanCars,false); [line 12]\n NULLIFY(&item,false); [line 12]\n NULLIFY(&s,false); [line 12]\n " color=yellow style=filled] + + + 85 -> 96 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 5 -> 6 ; - 5 -> 7 ; -4 [label="4: + \n " ] +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] - 4 -> 5 ; -3 [label="3: Return Stmt \n NULLIFY(&germanCars,false); [line 30]\n NULLIFY(&item,false); [line 30]\n *&return:int =0 [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: item:class NSString * germanCars:class NSArray * s:class NSString * \n DECLARE_LOCALS(&return,&item,&germanCars,&s); [line 12]\n NULLIFY(&germanCars,false); [line 12]\n NULLIFY(&item,false); [line 12]\n NULLIFY(&s,false); [line 12]\n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 1 -> 12 ; + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/array_literal.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/array_literal.dot index 07f1669ed..413eac01e 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/array_literal.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/array_literal.dot @@ -1,17 +1,311 @@ digraph iCFG { -4 [label="4: DeclStmt \n n$3=_fun_NSString_stringWithUTF8String:(\"cat\":char *) [line 13]\n n$4=_fun_NSString_stringWithUTF8String:(\"dog\":char *) [line 13]\n n$5=_fun_NSArray_arrayWithObjects:(n$3:struct objc_object *,n$4:class NSString *,0:void *) [line 13]\n *&animals:class NSArray *=n$5 [line 13]\n REMOVE_TEMPS(n$3,n$4,n$5); [line 13]\n NULLIFY(&animals,false); [line 13]\n " shape="box"] +88 [label="88: DeclStmt \n n$3=_fun_NSString_stringWithUTF8String:(\"cat\":char *) [line 13]\n n$4=_fun_NSString_stringWithUTF8String:(\"dog\":char *) [line 13]\n n$5=_fun_NSArray_arrayWithObjects:(n$3:struct objc_object *,n$4:class NSString *,0:void *) [line 13]\n *&animals:class NSArray *=n$5 [line 13]\n REMOVE_TEMPS(n$3,n$4,n$5); [line 13]\n NULLIFY(&animals,false); [line 13]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"cat\":char *) [line 14]\n n$1=_fun_NSString_stringWithUTF8String:(\"dog\":char *) [line 14]\n n$2=_fun_NSArray_arrayWithObjects:count:(n$0:struct objc_object *,n$1:struct objc_object *,0:struct objc_object *) [line 14]\n *&return:class NSArray *=n$2 [line 14]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] + 88 -> 87 ; +87 [label="87: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"cat\":char *) [line 14]\n n$1=_fun_NSString_stringWithUTF8String:(\"dog\":char *) [line 14]\n n$2=_fun_NSArray_arrayWithObjects:count:(n$0:struct objc_object *,n$1:struct objc_object *,0:struct objc_object *) [line 14]\n *&return:class NSArray *=n$2 [line 14]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit get_array \n " color=yellow style=filled] + 87 -> 86 ; +86 [label="86: Exit get_array \n " color=yellow style=filled] -1 [label="1: Start get_array\nFormals: \nLocals: animals:class NSArray * \n DECLARE_LOCALS(&return,&animals); [line 12]\n NULLIFY(&animals,false); [line 12]\n " color=yellow style=filled] +85 [label="85: Start get_array\nFormals: \nLocals: animals:class NSArray * \n DECLARE_LOCALS(&return,&animals); [line 12]\n NULLIFY(&animals,false); [line 12]\n " color=yellow style=filled] - 1 -> 4 ; + 85 -> 88 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/dict_literal.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/dict_literal.dot index 39b4a2e1f..94d26c95e 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/dict_literal.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/dict_literal.dot @@ -1,24 +1,318 @@ digraph iCFG { -6 [label="6: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Matt\":char *) [line 25]\n n$1=_fun_NSString_stringWithUTF8String:(\"firstName\":char *) [line 25]\n n$2=_fun_NSString_stringWithUTF8String:(\"Galloway\":char *) [line 25]\n n$3=_fun_NSString_stringWithUTF8String:(\"lastName\":char *) [line 25]\n n$4=_fun_NSNumber_numberWithInt:(28:int ) [line 25]\n n$5=_fun_NSString_stringWithUTF8String:(\"age\":char *) [line 25]\n n$6=_fun_NSDictionary___objc_dictionary_literal:(n$0:struct objc_object *,n$1:struct objc_object *,n$2:struct objc_object *,n$3:struct objc_object *,n$4:struct objc_object *,n$5:struct objc_object *,0:struct objc_object *) [line 25]\n *&return:class NSDictionary *=n$6 [line 25]\n REMOVE_TEMPS(n$0,n$1,n$2,n$3,n$4,n$5,n$6); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] +90 [label="90: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Matt\":char *) [line 25]\n n$1=_fun_NSString_stringWithUTF8String:(\"firstName\":char *) [line 25]\n n$2=_fun_NSString_stringWithUTF8String:(\"Galloway\":char *) [line 25]\n n$3=_fun_NSString_stringWithUTF8String:(\"lastName\":char *) [line 25]\n n$4=_fun_NSNumber_numberWithInt:(28:int ) [line 25]\n n$5=_fun_NSString_stringWithUTF8String:(\"age\":char *) [line 25]\n n$6=_fun_NSDictionary___objc_dictionary_literal:(n$0:struct objc_object *,n$1:struct objc_object *,n$2:struct objc_object *,n$3:struct objc_object *,n$4:struct objc_object *,n$5:struct objc_object *,0:struct objc_object *) [line 25]\n *&return:class NSDictionary *=n$6 [line 25]\n REMOVE_TEMPS(n$0,n$1,n$2,n$3,n$4,n$5,n$6); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit get_array2 \n " color=yellow style=filled] + 90 -> 89 ; +89 [label="89: Exit get_array2 \n " color=yellow style=filled] -4 [label="4: Start get_array2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] +88 [label="88: Start get_array2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Matt\":char *) [line 14]\n n$1=_fun_NSString_stringWithUTF8String:(\"firstName\":char *) [line 15]\n n$2=_fun_NSString_stringWithUTF8String:(\"Galloway\":char *) [line 16]\n n$3=_fun_NSString_stringWithUTF8String:(\"lastName\":char *) [line 17]\n n$4=_fun_NSNumber_numberWithInt:(28:int ) [line 18]\n n$5=_fun_NSString_stringWithUTF8String:(\"age\":char *) [line 19]\n n$6=_fun_NSDictionary_dictionaryWithObjectsAndKeys:(n$0:struct objc_object *,n$1:class NSString *,n$2:class NSString *,n$3:class NSString *,n$4:class NSNumber *,n$5:class NSString *,0:void *) [line 14]\n *&return:class NSDictionary *=n$6 [line 14]\n REMOVE_TEMPS(n$0,n$1,n$2,n$3,n$4,n$5,n$6); [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] + 88 -> 90 ; +87 [label="87: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Matt\":char *) [line 14]\n n$1=_fun_NSString_stringWithUTF8String:(\"firstName\":char *) [line 15]\n n$2=_fun_NSString_stringWithUTF8String:(\"Galloway\":char *) [line 16]\n n$3=_fun_NSString_stringWithUTF8String:(\"lastName\":char *) [line 17]\n n$4=_fun_NSNumber_numberWithInt:(28:int ) [line 18]\n n$5=_fun_NSString_stringWithUTF8String:(\"age\":char *) [line 19]\n n$6=_fun_NSDictionary_dictionaryWithObjectsAndKeys:(n$0:struct objc_object *,n$1:class NSString *,n$2:class NSString *,n$3:class NSString *,n$4:class NSNumber *,n$5:class NSString *,0:void *) [line 14]\n *&return:class NSDictionary *=n$6 [line 14]\n REMOVE_TEMPS(n$0,n$1,n$2,n$3,n$4,n$5,n$6); [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit get_array1 \n " color=yellow style=filled] + 87 -> 86 ; +86 [label="86: Exit get_array1 \n " color=yellow style=filled] -1 [label="1: Start get_array1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +85 [label="85: Start get_array1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + 85 -> 87 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/boxing/string_literal.dot b/infer/tests/codetoanalyze/objc/frontend/boxing/string_literal.dot index 277a15461..dbe02f317 100644 --- a/infer/tests/codetoanalyze/objc/frontend/boxing/string_literal.dot +++ b/infer/tests/codetoanalyze/objc/frontend/boxing/string_literal.dot @@ -1,24 +1,318 @@ digraph iCFG { -6 [label="6: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Hello World!\":char *) [line 17]\n *&return:class NSString *=n$0 [line 17]\n REMOVE_TEMPS(n$0); [line 17]\n APPLY_ABSTRACTION; [line 17]\n " shape="box"] +90 [label="90: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Hello World!\":char *) [line 17]\n *&return:class NSString *=n$0 [line 17]\n REMOVE_TEMPS(n$0); [line 17]\n APPLY_ABSTRACTION; [line 17]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit get_string2 \n " color=yellow style=filled] + 90 -> 89 ; +89 [label="89: Exit get_string2 \n " color=yellow style=filled] -4 [label="4: Start get_string2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] +88 [label="88: Start get_string2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 17]\n " color=yellow style=filled] - 4 -> 6 ; -3 [label="3: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Hello World!\":char *) [line 14]\n *&return:class NSString *=n$0 [line 14]\n REMOVE_TEMPS(n$0); [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] + 88 -> 90 ; +87 [label="87: Return Stmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Hello World!\":char *) [line 14]\n *&return:class NSString *=n$0 [line 14]\n REMOVE_TEMPS(n$0); [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit get_string1 \n " color=yellow style=filled] + 87 -> 86 ; +86 [label="86: Exit get_string1 \n " color=yellow style=filled] -1 [label="1: Start get_string1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] +85 [label="85: Start get_string1\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + 85 -> 87 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/conditional_operation/ConditionalOperation.dot b/infer/tests/codetoanalyze/objc/frontend/conditional_operation/ConditionalOperation.dot index b8b11da83..a7ed885e3 100644 --- a/infer/tests/codetoanalyze/objc/frontend/conditional_operation/ConditionalOperation.dot +++ b/infer/tests/codetoanalyze/objc/frontend/conditional_operation/ConditionalOperation.dot @@ -1,51 +1,345 @@ digraph iCFG { -13 [label="13: Return Stmt \n n$1=*&self:class A * [line 24]\n n$4=*&SIL_temp_conditional___8:int [line 24]\n NULLIFY(&SIL_temp_conditional___8,true); [line 24]\n n$5=_fun_A_test4:(n$1:class A *,n$4:int ) virtual [line 24]\n *&return:int =n$5 [line 24]\n REMOVE_TEMPS(n$1,n$4,n$5); [line 24]\n NULLIFY(&self,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] +97 [label="97: Return Stmt \n n$1=*&self:class A * [line 24]\n n$4=*&SIL_temp_conditional___92:int [line 24]\n NULLIFY(&SIL_temp_conditional___92,true); [line 24]\n n$5=_fun_A_test4:(n$1:class A *,n$4:int ) virtual [line 24]\n *&return:int =n$5 [line 24]\n REMOVE_TEMPS(n$1,n$4,n$5); [line 24]\n NULLIFY(&self,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] - 13 -> 7 ; -12 [label="12: ConditinalStmt Branch \n NULLIFY(&b,false); [line 24]\n DECLARE_LOCALS(&SIL_temp_conditional___8); [line 24]\n *&SIL_temp_conditional___8:int =1 [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + 97 -> 91 ; +96 [label="96: ConditinalStmt Branch \n NULLIFY(&b,false); [line 24]\n DECLARE_LOCALS(&SIL_temp_conditional___92); [line 24]\n *&SIL_temp_conditional___92:int =1 [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] - 12 -> 8 ; -11 [label="11: ConditinalStmt Branch \n n$3=*&b:_Bool [line 24]\n DECLARE_LOCALS(&SIL_temp_conditional___8); [line 24]\n *&SIL_temp_conditional___8:int =n$3 [line 24]\n REMOVE_TEMPS(n$3); [line 24]\n NULLIFY(&b,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + 96 -> 92 ; +95 [label="95: ConditinalStmt Branch \n n$3=*&b:_Bool [line 24]\n DECLARE_LOCALS(&SIL_temp_conditional___92); [line 24]\n *&SIL_temp_conditional___92:int =n$3 [line 24]\n REMOVE_TEMPS(n$3); [line 24]\n NULLIFY(&b,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] - 11 -> 8 ; -10 [label="10: Prune (false branch) \n n$2=*&b:_Bool [line 24]\n PRUNE((n$2 == 0), false); [line 24]\n REMOVE_TEMPS(n$2); [line 24]\n " shape="invhouse"] + 95 -> 92 ; +94 [label="94: Prune (false branch) \n n$2=*&b:_Bool [line 24]\n PRUNE((n$2 == 0), false); [line 24]\n REMOVE_TEMPS(n$2); [line 24]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: Prune (true branch) \n n$2=*&b:_Bool [line 24]\n PRUNE((n$2 != 0), true); [line 24]\n REMOVE_TEMPS(n$2); [line 24]\n " shape="invhouse"] + 94 -> 96 ; +93 [label="93: Prune (true branch) \n n$2=*&b:_Bool [line 24]\n PRUNE((n$2 != 0), true); [line 24]\n REMOVE_TEMPS(n$2); [line 24]\n " shape="invhouse"] - 9 -> 11 ; -8 [label="8: + \n " ] + 93 -> 95 ; +92 [label="92: + \n " ] - 8 -> 13 ; -7 [label="7: Exit A_test5: \n " color=yellow style=filled] + 92 -> 97 ; +91 [label="91: Exit A_test5: \n " color=yellow style=filled] -6 [label="6: Start A_test5:\nFormals: self:class A * b:_Bool \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] +90 [label="90: Start A_test5:\nFormals: self:class A * b:_Bool \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n " color=yellow style=filled] - 6 -> 9 ; - 6 -> 10 ; -5 [label="5: Return Stmt \n n$0=*&x:int [line 20]\n *&return:int =n$0 [line 20]\n REMOVE_TEMPS(n$0); [line 20]\n NULLIFY(&x,false); [line 20]\n APPLY_ABSTRACTION; [line 20]\n " shape="box"] + 90 -> 93 ; + 90 -> 94 ; +89 [label="89: Return Stmt \n n$0=*&x:int [line 20]\n *&return:int =n$0 [line 20]\n REMOVE_TEMPS(n$0); [line 20]\n NULLIFY(&x,false); [line 20]\n APPLY_ABSTRACTION; [line 20]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit A_test4: \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit A_test4: \n " color=yellow style=filled] -3 [label="3: Start A_test4:\nFormals: self:class A * x:int \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n NULLIFY(&self,false); [line 19]\n " color=yellow style=filled] +87 [label="87: Start A_test4:\nFormals: self:class A * x:int \nLocals: \n DECLARE_LOCALS(&return); [line 19]\n NULLIFY(&self,false); [line 19]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 87 -> 89 ; +86 [label="86: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/exceptions/ExceptionExample.dot b/infer/tests/codetoanalyze/objc/frontend/exceptions/ExceptionExample.dot index f8df74651..e234efa8c 100644 --- a/infer/tests/codetoanalyze/objc/frontend/exceptions/ExceptionExample.dot +++ b/infer/tests/codetoanalyze/objc/frontend/exceptions/ExceptionExample.dot @@ -1,51 +1,345 @@ digraph iCFG { -13 [label="13: DeclStmt \n n$7=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 28]\n *&s:class NSString *=n$7 [line 28]\n REMOVE_TEMPS(n$7); [line 28]\n " shape="box"] +97 [label="97: DeclStmt \n n$7=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 28]\n *&s:class NSString *=n$7 [line 28]\n REMOVE_TEMPS(n$7); [line 28]\n " shape="box"] - 13 -> 10 ; - 13 -> 11 ; -12 [label="12: Return Stmt \n NULLIFY(&s,false); [line 30]\n n$4=_fun_NSString_stringWithUTF8String:(\"Something is not right exception\":char *) [line 31]\n n$5=_fun_NSString_stringWithUTF8String:(\"Can't perform this operation because of this or that\":char *) [line 33]\n n$6=_fun_NSException_exceptionWithName:reason:userInfo:(n$4:class NSString *,n$5:class NSString *,0:class NSDictionary *) [line 30]\n *&return:void =n$6 [line 30]\n REMOVE_TEMPS(n$4,n$5,n$6); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] + 97 -> 94 ; + 97 -> 95 ; +96 [label="96: Return Stmt \n NULLIFY(&s,false); [line 30]\n n$4=_fun_NSString_stringWithUTF8String:(\"Something is not right exception\":char *) [line 31]\n n$5=_fun_NSString_stringWithUTF8String:(\"Can't perform this operation because of this or that\":char *) [line 33]\n n$6=_fun_NSException_exceptionWithName:reason:userInfo:(n$4:class NSString *,n$5:class NSString *,0:class NSDictionary *) [line 30]\n *&return:void =n$6 [line 30]\n REMOVE_TEMPS(n$4,n$5,n$6); [line 30]\n APPLY_ABSTRACTION; [line 30]\n " shape="box"] - 12 -> 8 ; -11 [label="11: Prune (false branch) \n n$3=*&s:class NSString * [line 29]\n PRUNE((n$3 == 0), false); [line 29]\n REMOVE_TEMPS(n$3); [line 29]\n " shape="invhouse"] + 96 -> 92 ; +95 [label="95: Prune (false branch) \n n$3=*&s:class NSString * [line 29]\n PRUNE((n$3 == 0), false); [line 29]\n REMOVE_TEMPS(n$3); [line 29]\n " shape="invhouse"] - 11 -> 9 ; -10 [label="10: Prune (true branch) \n n$3=*&s:class NSString * [line 29]\n PRUNE((n$3 != 0), true); [line 29]\n REMOVE_TEMPS(n$3); [line 29]\n " shape="invhouse"] + 95 -> 93 ; +94 [label="94: Prune (true branch) \n n$3=*&s:class NSString * [line 29]\n PRUNE((n$3 != 0), true); [line 29]\n REMOVE_TEMPS(n$3); [line 29]\n " shape="invhouse"] - 10 -> 12 ; -9 [label="9: + \n NULLIFY(&s,false); [line 29]\n " ] + 94 -> 96 ; +93 [label="93: + \n NULLIFY(&s,false); [line 29]\n " ] - 9 -> 8 ; -8 [label="8: Exit ExceptionExample_test1 \n " color=yellow style=filled] + 93 -> 92 ; +92 [label="92: Exit ExceptionExample_test1 \n " color=yellow style=filled] -7 [label="7: Start ExceptionExample_test1\nFormals: self:class ExceptionExample *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 27]\n NULLIFY(&s,false); [line 27]\n NULLIFY(&self,false); [line 27]\n " color=yellow style=filled] +91 [label="91: Start ExceptionExample_test1\nFormals: self:class ExceptionExample *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 27]\n NULLIFY(&s,false); [line 27]\n NULLIFY(&self,false); [line 27]\n " color=yellow style=filled] - 7 -> 13 ; -6 [label="6: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 20]\n *&s:class NSString *=n$2 [line 20]\n REMOVE_TEMPS(n$2); [line 20]\n NULLIFY(&s,false); [line 20]\n " shape="box"] + 91 -> 97 ; +90 [label="90: DeclStmt \n n$2=_fun___objc_alloc_no_fail(sizeof(class NSString ):unsigned long ) [line 20]\n *&s:class NSString *=n$2 [line 20]\n REMOVE_TEMPS(n$2); [line 20]\n NULLIFY(&s,false); [line 20]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Message Call: description \n n$0=*&self:class ExceptionExample * [line 23]\n n$1=_fun_ExceptionExample_description(n$0:class ExceptionExample *) [line 23]\n REMOVE_TEMPS(n$0,n$1); [line 23]\n NULLIFY(&self,false); [line 23]\n APPLY_ABSTRACTION; [line 23]\n " shape="box"] + 90 -> 89 ; +89 [label="89: Message Call: description \n n$0=*&self:class ExceptionExample * [line 23]\n n$1=_fun_ExceptionExample_description(n$0:class ExceptionExample *) [line 23]\n REMOVE_TEMPS(n$0,n$1); [line 23]\n NULLIFY(&self,false); [line 23]\n APPLY_ABSTRACTION; [line 23]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit ExceptionExample_test \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit ExceptionExample_test \n " color=yellow style=filled] -3 [label="3: Start ExceptionExample_test\nFormals: self:class ExceptionExample *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 18]\n NULLIFY(&s,false); [line 18]\n " color=yellow style=filled] +87 [label="87: Start ExceptionExample_test\nFormals: self:class ExceptionExample *\nLocals: s:class NSString * \n DECLARE_LOCALS(&return,&s); [line 18]\n NULLIFY(&s,false); [line 18]\n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit ExceptionExample_frontendChecks \n " color=yellow style=filled] + 87 -> 90 ; +86 [label="86: Exit ExceptionExample_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start ExceptionExample_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start ExceptionExample_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/fast_enumeration/Fast_enumeration.dot b/infer/tests/codetoanalyze/objc/frontend/fast_enumeration/Fast_enumeration.dot index aa115ce36..125eccc11 100644 --- a/infer/tests/codetoanalyze/objc/frontend/fast_enumeration/Fast_enumeration.dot +++ b/infer/tests/codetoanalyze/objc/frontend/fast_enumeration/Fast_enumeration.dot @@ -1,92 +1,141 @@ digraph iCFG { -23 [label="23: DeclStmt \n *&size:int =0 [line 26]\n " shape="box"] +37 [label="37: DeclStmt \n *&size:int =0 [line 26]\n " shape="box"] - 23 -> 22 ; -22 [label="22: DeclStmt \n *&item:class NSArray *=0 [line 27]\n NULLIFY(&item,false); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] + 37 -> 36 ; +36 [label="36: DeclStmt \n *&item:class NSArray *=0 [line 27]\n NULLIFY(&item,false); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] - 22 -> 17 ; -21 [label="21: BinaryOperatorStmt: AddAssign \n n$13=*&item:class NSArray * [line 29]\n n$14=_fun_NSArray_count(n$13:class NSArray *) [line 29]\n n$15=*&size:int [line 29]\n *&size:int =(n$15 + n$14) [line 29]\n REMOVE_TEMPS(n$13,n$14,n$15); [line 29]\n NULLIFY(&item,false); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] + 36 -> 31 ; +35 [label="35: BinaryOperatorStmt: AddAssign \n n$13=*&item:class NSArray * [line 29]\n n$14=_fun_NSArray_count(n$13:class NSArray *) [line 29]\n n$15=*&size:int [line 29]\n *&size:int =(n$15 + n$14) [line 29]\n REMOVE_TEMPS(n$13,n$14,n$15); [line 29]\n NULLIFY(&item,false); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] - 21 -> 17 ; -20 [label="20: Prune (false branch) \n PRUNE((n$12 == 0), false); [line 28]\n REMOVE_TEMPS(n$10,n$11,n$12); [line 28]\n " shape="invhouse"] + 35 -> 31 ; +34 [label="34: Prune (false branch) \n PRUNE((n$12 == 0), false); [line 28]\n REMOVE_TEMPS(n$10,n$11,n$12); [line 28]\n " shape="invhouse"] - 20 -> 16 ; -19 [label="19: Prune (true branch) \n PRUNE((n$12 != 0), true); [line 28]\n REMOVE_TEMPS(n$10,n$11,n$12); [line 28]\n " shape="invhouse"] + 34 -> 30 ; +33 [label="33: Prune (true branch) \n PRUNE((n$12 != 0), true); [line 28]\n REMOVE_TEMPS(n$10,n$11,n$12); [line 28]\n " shape="invhouse"] - 19 -> 21 ; -18 [label="18: BinaryOperatorStmt: Assign \n n$10=*&items:class NSArray * [line 28]\n n$11=_fun_NSArray_nextObject(n$10:class NSArray *) virtual [line 28]\n *&item:class NSArray *=n$11 [line 28]\n n$12=*&item:class NSArray * [line 28]\n " shape="box"] + 33 -> 35 ; +32 [label="32: BinaryOperatorStmt: Assign \n n$10=*&items:class NSArray * [line 28]\n n$11=_fun_NSArray_nextObject(n$10:class NSArray *) virtual [line 28]\n *&item:class NSArray *=n$11 [line 28]\n n$12=*&item:class NSArray * [line 28]\n " shape="box"] - 18 -> 19 ; - 18 -> 20 ; -17 [label="17: + \n " ] + 32 -> 33 ; + 32 -> 34 ; +31 [label="31: + \n " ] - 17 -> 18 ; -16 [label="16: Return Stmt \n NULLIFY(&item,false); [line 31]\n NULLIFY(&items,false); [line 31]\n n$9=*&size:int [line 31]\n *&return:int =n$9 [line 31]\n REMOVE_TEMPS(n$9); [line 31]\n NULLIFY(&size,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 31 -> 32 ; +30 [label="30: Return Stmt \n NULLIFY(&item,false); [line 31]\n NULLIFY(&items,false); [line 31]\n n$9=*&size:int [line 31]\n *&return:int =n$9 [line 31]\n REMOVE_TEMPS(n$9); [line 31]\n NULLIFY(&size,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Exit A_while_loop: \n " color=yellow style=filled] + 30 -> 29 ; +29 [label="29: Exit A_while_loop: \n " color=yellow style=filled] -14 [label="14: Start A_while_loop:\nFormals: self:class A * items:class NSArray *\nLocals: item:class NSArray * size:int \n DECLARE_LOCALS(&return,&item,&size); [line 25]\n NULLIFY(&item,false); [line 25]\n NULLIFY(&self,false); [line 25]\n NULLIFY(&size,false); [line 25]\n " color=yellow style=filled] +28 [label="28: Start A_while_loop:\nFormals: self:class A * items:class NSArray *\nLocals: item:class NSArray * size:int \n DECLARE_LOCALS(&return,&item,&size); [line 25]\n NULLIFY(&item,false); [line 25]\n NULLIFY(&self,false); [line 25]\n NULLIFY(&size,false); [line 25]\n " color=yellow style=filled] - 14 -> 23 ; -13 [label="13: DeclStmt \n *&size:int =0 [line 18]\n " shape="box"] + 28 -> 37 ; +27 [label="27: DeclStmt \n *&size:int =0 [line 18]\n " shape="box"] - 13 -> 12 ; -12 [label="12: BinaryOperatorStmt: Assign \n n$7=*&items:class NSArray * [line 19]\n n$8=_fun_NSArray_nextObject(n$7:class NSArray *) virtual [line 19]\n *&item:class NSArray *=n$8 [line 19]\n REMOVE_TEMPS(n$7,n$8); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] + 27 -> 26 ; +26 [label="26: BinaryOperatorStmt: Assign \n n$7=*&items:class NSArray * [line 19]\n n$8=_fun_NSArray_nextObject(n$7:class NSArray *) virtual [line 19]\n *&item:class NSArray *=n$8 [line 19]\n REMOVE_TEMPS(n$7,n$8); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 12 -> 6 ; -11 [label="11: BinaryOperatorStmt: AddAssign \n n$4=*&item:class NSArray * [line 20]\n n$5=_fun_NSArray_count(n$4:class NSArray *) [line 20]\n n$6=*&size:int [line 20]\n *&size:int =(n$6 + n$5) [line 20]\n REMOVE_TEMPS(n$4,n$5,n$6); [line 20]\n NULLIFY(&item,false); [line 20]\n " shape="box"] + 26 -> 20 ; +25 [label="25: BinaryOperatorStmt: AddAssign \n n$4=*&item:class NSArray * [line 20]\n n$5=_fun_NSArray_count(n$4:class NSArray *) [line 20]\n n$6=*&size:int [line 20]\n *&size:int =(n$6 + n$5) [line 20]\n REMOVE_TEMPS(n$4,n$5,n$6); [line 20]\n NULLIFY(&item,false); [line 20]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$2=*&items:class NSArray * [line 19]\n n$3=_fun_NSArray_nextObject(n$2:class NSArray *) virtual [line 19]\n *&item:class NSArray *=n$3 [line 19]\n REMOVE_TEMPS(n$2,n$3); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] + 25 -> 24 ; +24 [label="24: BinaryOperatorStmt: Assign \n n$2=*&items:class NSArray * [line 19]\n n$3=_fun_NSArray_nextObject(n$2:class NSArray *) virtual [line 19]\n *&item:class NSArray *=n$3 [line 19]\n REMOVE_TEMPS(n$2,n$3); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 10 -> 6 ; -9 [label="9: Prune (false branch) \n PRUNE(((n$1 != 0) == 0), false); [line 19]\n REMOVE_TEMPS(n$1); [line 19]\n " shape="invhouse"] + 24 -> 20 ; +23 [label="23: Prune (false branch) \n PRUNE(((n$1 != 0) == 0), false); [line 19]\n REMOVE_TEMPS(n$1); [line 19]\n " shape="invhouse"] - 9 -> 5 ; -8 [label="8: Prune (true branch) \n PRUNE(((n$1 != 0) != 0), true); [line 19]\n REMOVE_TEMPS(n$1); [line 19]\n " shape="invhouse"] + 23 -> 19 ; +22 [label="22: Prune (true branch) \n PRUNE(((n$1 != 0) != 0), true); [line 19]\n REMOVE_TEMPS(n$1); [line 19]\n " shape="invhouse"] - 8 -> 11 ; -7 [label="7: BinaryOperatorStmt: NE \n n$1=*&item:class NSArray * [line 19]\n " shape="box"] + 22 -> 25 ; +21 [label="21: BinaryOperatorStmt: NE \n n$1=*&item:class NSArray * [line 19]\n " shape="box"] + + + 21 -> 22 ; + 21 -> 23 ; +20 [label="20: + \n " ] + + + 20 -> 21 ; +19 [label="19: Return Stmt \n NULLIFY(&item,false); [line 22]\n NULLIFY(&items,false); [line 22]\n n$0=*&size:int [line 22]\n *&return:int =n$0 [line 22]\n REMOVE_TEMPS(n$0); [line 22]\n NULLIFY(&size,false); [line 22]\n APPLY_ABSTRACTION; [line 22]\n " shape="box"] + + + 19 -> 18 ; +18 [label="18: Exit A_fast_loop: \n " color=yellow style=filled] + + +17 [label="17: Start A_fast_loop:\nFormals: self:class A * items:class NSArray *\nLocals: item:class NSArray * size:int \n DECLARE_LOCALS(&return,&item,&size); [line 17]\n NULLIFY(&item,false); [line 17]\n NULLIFY(&self,false); [line 17]\n NULLIFY(&size,false); [line 17]\n " color=yellow style=filled] + + + 17 -> 27 ; +16 [label="16: Exit A_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 7 -> 8 ; - 7 -> 9 ; -6 [label="6: + \n " ] +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 7 ; -5 [label="5: Return Stmt \n NULLIFY(&item,false); [line 22]\n NULLIFY(&items,false); [line 22]\n n$0=*&size:int [line 22]\n *&return:int =n$0 [line 22]\n REMOVE_TEMPS(n$0); [line 22]\n NULLIFY(&size,false); [line 22]\n APPLY_ABSTRACTION; [line 22]\n " shape="box"] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit A_fast_loop: \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start A_fast_loop:\nFormals: self:class A * items:class NSArray *\nLocals: item:class NSArray * size:int \n DECLARE_LOCALS(&return,&item,&size); [line 17]\n NULLIFY(&item,false); [line 17]\n NULLIFY(&self,false); [line 17]\n NULLIFY(&size,false); [line 17]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 13 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/predefined_expr/PredefinedExprExample.dot b/infer/tests/codetoanalyze/objc/frontend/predefined_expr/PredefinedExprExample.dot index 8f3870827..c5b4c6c6c 100644 --- a/infer/tests/codetoanalyze/objc/frontend/predefined_expr/PredefinedExprExample.dot +++ b/infer/tests/codetoanalyze/objc/frontend/predefined_expr/PredefinedExprExample.dot @@ -1,41 +1,83 @@ digraph iCFG { -11 [label="11: Call _fun_NSLog \n n$2=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 27]\n _fun_NSLog(n$2:struct objc_object *,\"\":char *) [line 27]\n REMOVE_TEMPS(n$2); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] +23 [label="23: Call _fun_NSLog \n n$2=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 27]\n _fun_NSLog(n$2:struct objc_object *,\"\":char *) [line 27]\n REMOVE_TEMPS(n$2); [line 27]\n APPLY_ABSTRACTION; [line 27]\n " shape="box"] - 11 -> 10 ; -10 [label="10: Exit A_testFunct \n " color=yellow style=filled] + 23 -> 22 ; +22 [label="22: Exit A_testFunct \n " color=yellow style=filled] -9 [label="9: Start A_testFunct\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n NULLIFY(&self,false); [line 26]\n " color=yellow style=filled] +21 [label="21: Start A_testFunct\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 26]\n NULLIFY(&self,false); [line 26]\n " color=yellow style=filled] - 9 -> 11 ; -8 [label="8: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 23]\n _fun_NSLog(n$1:struct objc_object *,\"\":char *) [line 23]\n REMOVE_TEMPS(n$1); [line 23]\n APPLY_ABSTRACTION; [line 23]\n " shape="box"] + 21 -> 23 ; +20 [label="20: Call _fun_NSLog \n n$1=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 23]\n _fun_NSLog(n$1:struct objc_object *,\"\":char *) [line 23]\n REMOVE_TEMPS(n$1); [line 23]\n APPLY_ABSTRACTION; [line 23]\n " shape="box"] - 8 -> 7 ; -7 [label="7: Exit A_testFunction \n " color=yellow style=filled] + 20 -> 19 ; +19 [label="19: Exit A_testFunction \n " color=yellow style=filled] -6 [label="6: Start A_testFunction\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n NULLIFY(&self,false); [line 22]\n " color=yellow style=filled] +18 [label="18: Start A_testFunction\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 22]\n NULLIFY(&self,false); [line 22]\n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 19]\n _fun_NSLog(n$0:struct objc_object *,\"\":char *) [line 19]\n REMOVE_TEMPS(n$0); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] + 18 -> 20 ; +17 [label="17: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"%s\":char *) [line 19]\n _fun_NSLog(n$0:struct objc_object *,\"\":char *) [line 19]\n REMOVE_TEMPS(n$0); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit A_testPrettyFunction \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit A_testPrettyFunction \n " color=yellow style=filled] -3 [label="3: Start A_testPrettyFunction\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] +15 [label="15: Start A_testPrettyFunction\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/property/PropertyAttributes.dot b/infer/tests/codetoanalyze/objc/frontend/property/PropertyAttributes.dot index 1fb17c902..7e6aa6dd1 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/PropertyAttributes.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/PropertyAttributes.dot @@ -1,71 +1,365 @@ digraph iCFG { -18 [label="18: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 39]\n n$4=_fun_NSObject_init(n$3:class A *) virtual [line 39]\n *&a:class A *=n$4 [line 39]\n REMOVE_TEMPS(n$3,n$4); [line 39]\n " shape="box"] +102 [label="102: DeclStmt \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 39]\n n$4=_fun_NSObject_init(n$3:class A *) virtual [line 39]\n *&a:class A *=n$4 [line 39]\n REMOVE_TEMPS(n$3,n$4); [line 39]\n " shape="box"] - 18 -> 17 ; -17 [label="17: Message Call: setLast_name: \n n$1=*&a:class A * [line 40]\n n$2=*&a2:class A * [line 40]\n _fun_A_setLast_name:(n$1:class A *,n$2:class A *) [line 40]\n REMOVE_TEMPS(n$1,n$2); [line 40]\n NULLIFY(&a2,false); [line 40]\n " shape="box"] + 102 -> 101 ; +101 [label="101: Message Call: setLast_name: \n n$1=*&a:class A * [line 40]\n n$2=*&a2:class A * [line 40]\n _fun_A_setLast_name:(n$1:class A *,n$2:class A *) [line 40]\n REMOVE_TEMPS(n$1,n$2); [line 40]\n NULLIFY(&a2,false); [line 40]\n " shape="box"] - 17 -> 16 ; -16 [label="16: Message Call: release \n n$0=*&a:class A * [line 41]\n _fun___objc_release(n$0:class A *) [line 41]\n REMOVE_TEMPS(n$0); [line 41]\n NULLIFY(&a,false); [line 41]\n " shape="box"] + 101 -> 100 ; +100 [label="100: Message Call: release \n n$0=*&a:class A * [line 41]\n _fun___objc_release(n$0:class A *) [line 41]\n REMOVE_TEMPS(n$0); [line 41]\n NULLIFY(&a,false); [line 41]\n " shape="box"] - 16 -> 15 ; -15 [label="15: Return Stmt \n *&return:int =0 [line 42]\n APPLY_ABSTRACTION; [line 42]\n " shape="box"] + 100 -> 99 ; +99 [label="99: Return Stmt \n *&return:int =0 [line 42]\n APPLY_ABSTRACTION; [line 42]\n " shape="box"] - 15 -> 14 ; -14 [label="14: Exit test \n " color=yellow style=filled] + 99 -> 98 ; +98 [label="98: Exit test \n " color=yellow style=filled] -13 [label="13: Start test\nFormals: a2:class A *\nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 38]\n NULLIFY(&a,false); [line 38]\n " color=yellow style=filled] +97 [label="97: Start test\nFormals: a2:class A *\nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 38]\n NULLIFY(&a,false); [line 38]\n " color=yellow style=filled] - 13 -> 18 ; -12 [label="12: DeclStmt \n n$11=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 27]\n n$12=_fun_NSObject_init(n$11:class A *) virtual [line 27]\n *&other:class A *=n$12 [line 27]\n REMOVE_TEMPS(n$11,n$12); [line 27]\n " shape="box"] + 97 -> 102 ; +96 [label="96: DeclStmt \n n$11=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 27]\n n$12=_fun_NSObject_init(n$11:class A *) virtual [line 27]\n *&other:class A *=n$12 [line 27]\n REMOVE_TEMPS(n$11,n$12); [line 27]\n " shape="box"] - 12 -> 7 ; - 12 -> 8 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$8=*&other:class A * [line 29]\n n$9=*&self:class A * [line 29]\n n$10=*n$9._name:class A * [line 29]\n *n$8._name:class A *=n$10 [line 29]\n REMOVE_TEMPS(n$8,n$9,n$10); [line 29]\n " shape="box"] + 96 -> 91 ; + 96 -> 92 ; +95 [label="95: BinaryOperatorStmt: Assign \n n$8=*&other:class A * [line 29]\n n$9=*&self:class A * [line 29]\n n$10=*n$9._name:class A * [line 29]\n *n$8._name:class A *=n$10 [line 29]\n REMOVE_TEMPS(n$8,n$9,n$10); [line 29]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$5=*&other:class A * [line 30]\n n$6=*&self:class A * [line 30]\n n$7=*n$6._last_name:class A * [line 30]\n *n$5._last_name:class A *=n$7 [line 30]\n REMOVE_TEMPS(n$5,n$6,n$7); [line 30]\n " shape="box"] + 95 -> 94 ; +94 [label="94: BinaryOperatorStmt: Assign \n n$5=*&other:class A * [line 30]\n n$6=*&self:class A * [line 30]\n n$7=*n$6._last_name:class A * [line 30]\n *n$5._last_name:class A *=n$7 [line 30]\n REMOVE_TEMPS(n$5,n$6,n$7); [line 30]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n n$2=*&other:class A * [line 31]\n n$3=*&self:class A * [line 31]\n n$4=*n$3._child:class A * [line 31]\n *n$2._child:class A *=n$4 [line 31]\n REMOVE_TEMPS(n$2,n$3,n$4); [line 31]\n NULLIFY(&self,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 94 -> 93 ; +93 [label="93: BinaryOperatorStmt: Assign \n n$2=*&other:class A * [line 31]\n n$3=*&self:class A * [line 31]\n n$4=*n$3._child:class A * [line 31]\n *n$2._child:class A *=n$4 [line 31]\n REMOVE_TEMPS(n$2,n$3,n$4); [line 31]\n NULLIFY(&self,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] - 9 -> 6 ; -8 [label="8: Prune (false branch) \n n$1=*&other:class A * [line 28]\n PRUNE((n$1 == 0), false); [line 28]\n REMOVE_TEMPS(n$1); [line 28]\n APPLY_ABSTRACTION; [line 28]\n " shape="invhouse"] + 93 -> 90 ; +92 [label="92: Prune (false branch) \n n$1=*&other:class A * [line 28]\n PRUNE((n$1 == 0), false); [line 28]\n REMOVE_TEMPS(n$1); [line 28]\n APPLY_ABSTRACTION; [line 28]\n " shape="invhouse"] - 8 -> 6 ; -7 [label="7: Prune (true branch) \n n$1=*&other:class A * [line 28]\n PRUNE((n$1 != 0), true); [line 28]\n REMOVE_TEMPS(n$1); [line 28]\n " shape="invhouse"] + 92 -> 90 ; +91 [label="91: Prune (true branch) \n n$1=*&other:class A * [line 28]\n PRUNE((n$1 != 0), true); [line 28]\n REMOVE_TEMPS(n$1); [line 28]\n " shape="invhouse"] - 7 -> 11 ; -6 [label="6: + \n " ] + 91 -> 95 ; +90 [label="90: + \n " ] - 6 -> 5 ; -5 [label="5: Return Stmt \n NULLIFY(&self,false); [line 33]\n n$0=*&other:class A * [line 33]\n *&return:class A *=n$0 [line 33]\n REMOVE_TEMPS(n$0); [line 33]\n NULLIFY(&other,false); [line 33]\n APPLY_ABSTRACTION; [line 33]\n " shape="box"] + 90 -> 89 ; +89 [label="89: Return Stmt \n NULLIFY(&self,false); [line 33]\n n$0=*&other:class A * [line 33]\n *&return:class A *=n$0 [line 33]\n REMOVE_TEMPS(n$0); [line 33]\n NULLIFY(&other,false); [line 33]\n APPLY_ABSTRACTION; [line 33]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit A_copy \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit A_copy \n " color=yellow style=filled] -3 [label="3: Start A_copy\nFormals: self:class A *\nLocals: other:class A * \n DECLARE_LOCALS(&return,&other); [line 26]\n NULLIFY(&other,false); [line 26]\n " color=yellow style=filled] +87 [label="87: Start A_copy\nFormals: self:class A *\nLocals: other:class A * \n DECLARE_LOCALS(&return,&other); [line 26]\n NULLIFY(&other,false); [line 26]\n " color=yellow style=filled] - 3 -> 12 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 87 -> 96 ; +86 [label="86: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/property/PropertyCustomAccessor.dot b/infer/tests/codetoanalyze/objc/frontend/property/PropertyCustomAccessor.dot index f42f4e57a..d3597b66a 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/PropertyCustomAccessor.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/PropertyCustomAccessor.dot @@ -1,8 +1,50 @@ digraph iCFG { -2 [label="2: Exit ASDisplayNode_frontendChecks \n " color=yellow style=filled] +14 [label="14: Exit ASDisplayNode_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start ASDisplayNode_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start ASDisplayNode_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/property/PropertyImplSetter.dot b/infer/tests/codetoanalyze/objc/frontend/property/PropertyImplSetter.dot index 0762b6852..e80beb695 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/PropertyImplSetter.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/PropertyImplSetter.dot @@ -1,19 +1,61 @@ digraph iCFG { -5 [label="5: BinaryOperatorStmt: Assign \n n$0=*&self:class PropertyImplSetter * [line 15]\n *n$0._maximumFileSize:int =0 [line 15]\n REMOVE_TEMPS(n$0); [line 15]\n NULLIFY(&self,false); [line 15]\n APPLY_ABSTRACTION; [line 15]\n " shape="box"] +17 [label="17: BinaryOperatorStmt: Assign \n n$0=*&self:class PropertyImplSetter * [line 15]\n *n$0._maximumFileSize:int =0 [line 15]\n REMOVE_TEMPS(n$0); [line 15]\n NULLIFY(&self,false); [line 15]\n APPLY_ABSTRACTION; [line 15]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit PropertyImplSetter_setMaximumFileSize: \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit PropertyImplSetter_setMaximumFileSize: \n " color=yellow style=filled] -3 [label="3: Start PropertyImplSetter_setMaximumFileSize:\nFormals: self:class PropertyImplSetter * newMaximumFileSize:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n NULLIFY(&newMaximumFileSize,false); [line 14]\n " color=yellow style=filled] +15 [label="15: Start PropertyImplSetter_setMaximumFileSize:\nFormals: self:class PropertyImplSetter * newMaximumFileSize:int \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n NULLIFY(&newMaximumFileSize,false); [line 14]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit PropertyImplSetter_frontendChecks \n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit PropertyImplSetter_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start PropertyImplSetter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start PropertyImplSetter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/property/Property_getter.dot b/infer/tests/codetoanalyze/objc/frontend/property/Property_getter.dot index f3e24a536..31a2d0298 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/Property_getter.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/Property_getter.dot @@ -1,19 +1,61 @@ digraph iCFG { -5 [label="5: Return Stmt \n n$0=*&target:class A * [line 19]\n n$1=_fun_A_x(n$0:class A *) [line 19]\n *&return:int =n$1 [line 19]\n REMOVE_TEMPS(n$0,n$1); [line 19]\n NULLIFY(&target,false); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] +17 [label="17: Return Stmt \n n$0=*&target:class A * [line 19]\n n$1=_fun_A_x(n$0:class A *) [line 19]\n *&return:int =n$1 [line 19]\n REMOVE_TEMPS(n$0,n$1); [line 19]\n NULLIFY(&target,false); [line 19]\n APPLY_ABSTRACTION; [line 19]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit A_addTarget: \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit A_addTarget: \n " color=yellow style=filled] -3 [label="3: Start A_addTarget:\nFormals: self:class A * target:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] +15 [label="15: Start A_addTarget:\nFormals: self:class A * target:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/property/aclass.dot b/infer/tests/codetoanalyze/objc/frontend/property/aclass.dot index 06e044639..afabc69ac 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/aclass.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/aclass.dot @@ -1,8 +1,50 @@ digraph iCFG { -2 [label="2: Exit AClass_frontendChecks \n " color=yellow style=filled] +14 [label="14: Exit AClass_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start AClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start AClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/property/main_car.dot b/infer/tests/codetoanalyze/objc/frontend/property/main_car.dot index 05fadf2fb..9b166312e 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property/main_car.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property/main_car.dot @@ -1,25 +1,319 @@ digraph iCFG { -6 [label="6: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class Car ):unsigned long ) [line 13]\n n$5=_fun_NSObject_init(n$4:class Car *) virtual [line 13]\n *&honda:class Car *=n$5 [line 13]\n REMOVE_TEMPS(n$4,n$5); [line 13]\n " shape="box"] +90 [label="90: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class Car ):unsigned long ) [line 13]\n n$5=_fun_NSObject_init(n$4:class Car *) virtual [line 13]\n *&honda:class Car *=n$5 [line 13]\n REMOVE_TEMPS(n$4,n$5); [line 13]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Message Call: setRunning: \n n$3=*&honda:class Car * [line 14]\n _fun_Car_setRunning:(n$3:class Car *,1:_Bool ) [line 14]\n REMOVE_TEMPS(n$3); [line 14]\n " shape="box"] + 90 -> 89 ; +89 [label="89: Message Call: setRunning: \n n$3=*&honda:class Car * [line 14]\n _fun_Car_setRunning:(n$3:class Car *,1:_Bool ) [line 14]\n REMOVE_TEMPS(n$3); [line 14]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"%d\":char *) [line 15]\n n$1=*&honda:class Car * [line 15]\n n$2=_fun_Car_running(n$1:class Car *) [line 15]\n _fun_NSLog(n$0:struct objc_object *,n$2:int ) [line 15]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 15]\n NULLIFY(&honda,false); [line 15]\n " shape="box"] + 89 -> 88 ; +88 [label="88: Call _fun_NSLog \n n$0=_fun_NSString_stringWithUTF8String:(\"%d\":char *) [line 15]\n n$1=*&honda:class Car * [line 15]\n n$2=_fun_Car_running(n$1:class Car *) [line 15]\n _fun_NSLog(n$0:struct objc_object *,n$2:int ) [line 15]\n REMOVE_TEMPS(n$0,n$1,n$2); [line 15]\n NULLIFY(&honda,false); [line 15]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 16]\n APPLY_ABSTRACTION; [line 16]\n " shape="box"] + 88 -> 87 ; +87 [label="87: Return Stmt \n *&return:int =0 [line 16]\n APPLY_ABSTRACTION; [line 16]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + 87 -> 86 ; +86 [label="86: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: honda:class Car * \n DECLARE_LOCALS(&return,&honda); [line 12]\n NULLIFY(&honda,false); [line 12]\n " color=yellow style=filled] +85 [label="85: Start main\nFormals: \nLocals: honda:class Car * \n DECLARE_LOCALS(&return,&honda); [line 12]\n NULLIFY(&honda,false); [line 12]\n " color=yellow style=filled] - 1 -> 6 ; + 85 -> 90 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/property_in_protocol/Test.dot b/infer/tests/codetoanalyze/objc/frontend/property_in_protocol/Test.dot index ca8402289..2ea429227 100644 --- a/infer/tests/codetoanalyze/objc/frontend/property_in_protocol/Test.dot +++ b/infer/tests/codetoanalyze/objc/frontend/property_in_protocol/Test.dot @@ -1,8 +1,57 @@ digraph iCFG { -2 [label="2: Exit Test_frontendChecks \n " color=yellow style=filled] +16 [label="16: Exit Test_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start Test_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +15 [label="15: Start Test_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit MyProtocol_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start MyProtocol_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/protocol/protocol.dot b/infer/tests/codetoanalyze/objc/frontend/protocol/protocol.dot index b19a96b85..147c5f8dd 100644 --- a/infer/tests/codetoanalyze/objc/frontend/protocol/protocol.dot +++ b/infer/tests/codetoanalyze/objc/frontend/protocol/protocol.dot @@ -1,36 +1,85 @@ digraph iCFG { -9 [label="9: Return Stmt \n APPLY_ABSTRACTION; [line 26]\n " shape="box"] +23 [label="23: Return Stmt \n APPLY_ABSTRACTION; [line 26]\n " shape="box"] - 9 -> 4 ; -8 [label="8: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 25]\n REMOVE_TEMPS(n$0,n$1); [line 25]\n " shape="invhouse"] + 23 -> 18 ; +22 [label="22: Prune (false branch) \n PRUNE((n$1 == 0), false); [line 25]\n REMOVE_TEMPS(n$0,n$1); [line 25]\n " shape="invhouse"] - 8 -> 5 ; -7 [label="7: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 25]\n REMOVE_TEMPS(n$0,n$1); [line 25]\n " shape="invhouse"] + 22 -> 19 ; +21 [label="21: Prune (true branch) \n PRUNE((n$1 != 0), true); [line 25]\n REMOVE_TEMPS(n$0,n$1); [line 25]\n " shape="invhouse"] - 7 -> 9 ; -6 [label="6: Message Call: conformsToProtocol: \n n$0=*&self:class Bla * [line 25]\n n$1=_fun_Bla_conformsToProtocol:(n$0:class Bla *,\"Foo\":class Protocol *) virtual [line 25]\n NULLIFY(&self,false); [line 25]\n " shape="box"] + 21 -> 23 ; +20 [label="20: Message Call: conformsToProtocol: \n n$0=*&self:class Bla * [line 25]\n n$1=_fun_Bla_conformsToProtocol:(n$0:class Bla *,\"Foo\":class Protocol *) virtual [line 25]\n NULLIFY(&self,false); [line 25]\n " shape="box"] - 6 -> 7 ; - 6 -> 8 ; -5 [label="5: + \n " ] + 20 -> 21 ; + 20 -> 22 ; +19 [label="19: + \n " ] - 5 -> 4 ; -4 [label="4: Exit Bla_fooMethod \n " color=yellow style=filled] + 19 -> 18 ; +18 [label="18: Exit Bla_fooMethod \n " color=yellow style=filled] -3 [label="3: Start Bla_fooMethod\nFormals: self:class Bla *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] +17 [label="17: Start Bla_fooMethod\nFormals: self:class Bla *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit Bla_frontendChecks \n " color=yellow style=filled] + 17 -> 20 ; +16 [label="16: Exit Bla_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start Bla_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +15 [label="15: Start Bla_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit Foo_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start Foo_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/returnstmt/void_return.dot b/infer/tests/codetoanalyze/objc/frontend/returnstmt/void_return.dot index af985f682..e5cb79c7b 100644 --- a/infer/tests/codetoanalyze/objc/frontend/returnstmt/void_return.dot +++ b/infer/tests/codetoanalyze/objc/frontend/returnstmt/void_return.dot @@ -1,65 +1,107 @@ digraph iCFG { -16 [label="16: DeclStmt \n *&i:int =0 [line 19]\n " shape="box"] +28 [label="28: DeclStmt \n *&i:int =0 [line 19]\n " shape="box"] - 16 -> 15 ; -15 [label="15: DeclStmt \n *&j:int =0 [line 20]\n " shape="box"] + 28 -> 27 ; +27 [label="27: DeclStmt \n *&j:int =0 [line 20]\n " shape="box"] - 15 -> 11 ; -14 [label="14: Return Stmt \n NULLIFY(&i,false); [line 22]\n NULLIFY(&j,false); [line 22]\n APPLY_ABSTRACTION; [line 22]\n " shape="box"] + 27 -> 23 ; +26 [label="26: Return Stmt \n NULLIFY(&i,false); [line 22]\n NULLIFY(&j,false); [line 22]\n APPLY_ABSTRACTION; [line 22]\n " shape="box"] - 14 -> 4 ; -13 [label="13: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 21]\n REMOVE_TEMPS(n$2); [line 21]\n " shape="invhouse"] + 26 -> 16 ; +25 [label="25: Prune (false branch) \n PRUNE(((n$2 == 0) == 0), false); [line 21]\n REMOVE_TEMPS(n$2); [line 21]\n " shape="invhouse"] - 13 -> 10 ; -12 [label="12: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 21]\n REMOVE_TEMPS(n$2); [line 21]\n " shape="invhouse"] + 25 -> 22 ; +24 [label="24: Prune (true branch) \n PRUNE(((n$2 == 0) != 0), true); [line 21]\n REMOVE_TEMPS(n$2); [line 21]\n " shape="invhouse"] - 12 -> 14 ; -11 [label="11: BinaryOperatorStmt: EQ \n n$2=*&i:int [line 21]\n " shape="box"] + 24 -> 26 ; +23 [label="23: BinaryOperatorStmt: EQ \n n$2=*&i:int [line 21]\n " shape="box"] + + + 23 -> 24 ; + 23 -> 25 ; +22 [label="22: + \n " ] + + + 22 -> 18 ; +21 [label="21: UnaryOperator \n n$1=*&i:int [line 26]\n *&i:int =(n$1 + 1) [line 26]\n REMOVE_TEMPS(n$1); [line 26]\n NULLIFY(&i,false); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] + + + 21 -> 17 ; +20 [label="20: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="invhouse"] + + + 20 -> 17 ; +19 [label="19: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n " shape="invhouse"] + + + 19 -> 21 ; +18 [label="18: BinaryOperatorStmt: EQ \n n$0=*&j:int [line 25]\n NULLIFY(&j,false); [line 25]\n " shape="box"] + + + 18 -> 19 ; + 18 -> 20 ; +17 [label="17: + \n NULLIFY(&i,false); [line 25]\n " ] + + + 17 -> 16 ; +16 [label="16: Exit MyClass_aMethod \n " color=yellow style=filled] + + +15 [label="15: Start MyClass_aMethod\nFormals: self:class MyClass *\nLocals: j:int i:int \n DECLARE_LOCALS(&return,&j,&i); [line 18]\n NULLIFY(&i,false); [line 18]\n NULLIFY(&j,false); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] + + + 15 -> 28 ; +14 [label="14: Exit MyClass_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start MyClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 11 -> 12 ; - 11 -> 13 ; -10 [label="10: + \n " ] +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 10 -> 6 ; -9 [label="9: UnaryOperator \n n$1=*&i:int [line 26]\n *&i:int =(n$1 + 1) [line 26]\n REMOVE_TEMPS(n$1); [line 26]\n NULLIFY(&i,false); [line 26]\n APPLY_ABSTRACTION; [line 26]\n " shape="box"] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 9 -> 5 ; -8 [label="8: Prune (false branch) \n PRUNE(((n$0 == 0) == 0), false); [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="invhouse"] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 8 -> 5 ; -7 [label="7: Prune (true branch) \n PRUNE(((n$0 == 0) != 0), true); [line 25]\n REMOVE_TEMPS(n$0); [line 25]\n " shape="invhouse"] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 7 -> 9 ; -6 [label="6: BinaryOperatorStmt: EQ \n n$0=*&j:int [line 25]\n NULLIFY(&j,false); [line 25]\n " shape="box"] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 7 ; - 6 -> 8 ; -5 [label="5: + \n NULLIFY(&i,false); [line 25]\n " ] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit MyClass_aMethod \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start MyClass_aMethod\nFormals: self:class MyClass *\nLocals: j:int i:int \n DECLARE_LOCALS(&return,&j,&i); [line 18]\n NULLIFY(&i,false); [line 18]\n NULLIFY(&j,false); [line 18]\n NULLIFY(&self,false); [line 18]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 16 ; -2 [label="2: Exit MyClass_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start MyClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/self_static/Self.dot b/infer/tests/codetoanalyze/objc/frontend/self_static/Self.dot index 829ee478d..fd086e56e 100644 --- a/infer/tests/codetoanalyze/objc/frontend/self_static/Self.dot +++ b/infer/tests/codetoanalyze/objc/frontend/self_static/Self.dot @@ -1,204 +1,246 @@ digraph iCFG { -55 [label="55: Return Stmt \n *&return:int =0 [line 98]\n APPLY_ABSTRACTION; [line 98]\n " shape="box"] +67 [label="67: Return Stmt \n *&return:int =0 [line 98]\n APPLY_ABSTRACTION; [line 98]\n " shape="box"] - 55 -> 49 ; -54 [label="54: Return Stmt \n *&return:int =1 [line 96]\n APPLY_ABSTRACTION; [line 96]\n " shape="box"] + 67 -> 61 ; +66 [label="66: Return Stmt \n *&return:int =1 [line 96]\n APPLY_ABSTRACTION; [line 96]\n " shape="box"] - 54 -> 49 ; -53 [label="53: Prune (false branch) \n PRUNE(((sizeof(class A ) != n$15) == 0), false); [line 95]\n REMOVE_TEMPS(n$15); [line 95]\n " shape="invhouse"] + 66 -> 61 ; +65 [label="65: Prune (false branch) \n PRUNE(((sizeof(class A ) != n$15) == 0), false); [line 95]\n REMOVE_TEMPS(n$15); [line 95]\n " shape="invhouse"] - 53 -> 55 ; -52 [label="52: Prune (true branch) \n PRUNE(((sizeof(class A ) != n$15) != 0), true); [line 95]\n REMOVE_TEMPS(n$15); [line 95]\n " shape="invhouse"] + 65 -> 67 ; +64 [label="64: Prune (true branch) \n PRUNE(((sizeof(class A ) != n$15) != 0), true); [line 95]\n REMOVE_TEMPS(n$15); [line 95]\n " shape="invhouse"] - 52 -> 54 ; -51 [label="51: BinaryOperatorStmt: NE \n n$15=*&c:struct objc_class * [line 95]\n NULLIFY(&c,false); [line 95]\n " shape="box"] + 64 -> 66 ; +63 [label="63: BinaryOperatorStmt: NE \n n$15=*&c:struct objc_class * [line 95]\n NULLIFY(&c,false); [line 95]\n " shape="box"] + + + 63 -> 64 ; + 63 -> 65 ; +62 [label="62: + \n NULLIFY(&c,false); [line 95]\n " ] + + + 62 -> 61 ; +61 [label="61: Exit A_used_in_binary_op: \n " color=yellow style=filled] + + +60 [label="60: Start A_used_in_binary_op:\nFormals: c:struct objc_class *\nLocals: \n DECLARE_LOCALS(&return); [line 94]\n " color=yellow style=filled] + + + 60 -> 63 ; +59 [label="59: Return Stmt \n n$14=_fun_NSStringFromClass(sizeof(class A ):unsigned long ) [line 91]\n *&return:class NSString *=n$14 [line 91]\n REMOVE_TEMPS(n$14); [line 91]\n APPLY_ABSTRACTION; [line 91]\n " shape="box"] + + + 59 -> 58 ; +58 [label="58: Exit A_loggerName \n " color=yellow style=filled] + + +57 [label="57: Start A_loggerName\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 90]\n NULLIFY(&self,false); [line 90]\n " color=yellow style=filled] + + + 57 -> 59 ; +56 [label="56: Message Call: init \n n$11=*&self:class A * [line 87]\n n$12=_fun_NSObject_init(n$11:class A *) [line 87]\n REMOVE_TEMPS(n$11,n$12); [line 87]\n NULLIFY(&self,false); [line 87]\n APPLY_ABSTRACTION; [line 87]\n " shape="box"] + + + 56 -> 55 ; +55 [label="55: Exit A_init \n " color=yellow style=filled] + + +54 [label="54: Start A_init\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 86]\n " color=yellow style=filled] + + + 54 -> 56 ; +53 [label="53: Message Call: test_class \n _fun_C_test_class() [line 83]\n APPLY_ABSTRACTION; [line 83]\n " shape="box"] + + + 53 -> 52 ; +52 [label="52: Exit A_calling_super \n " color=yellow style=filled] + + +51 [label="51: Start A_calling_super\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 82]\n " color=yellow style=filled] - 51 -> 52 ; 51 -> 53 ; -50 [label="50: + \n NULLIFY(&c,false); [line 95]\n " ] +50 [label="50: Return Stmt \n n$8=*&object:class B * [line 79]\n n$10=_fun_B_isC:(n$8:class B *,sizeof(class A ):unsigned long ) virtual [line 79]\n *&return:_Bool =n$10 [line 79]\n REMOVE_TEMPS(n$8,n$10); [line 79]\n NULLIFY(&object,false); [line 79]\n APPLY_ABSTRACTION; [line 79]\n " shape="box"] 50 -> 49 ; -49 [label="49: Exit A_used_in_binary_op: \n " color=yellow style=filled] +49 [label="49: Exit A_use_class_in_other_ways: \n " color=yellow style=filled] -48 [label="48: Start A_used_in_binary_op:\nFormals: c:struct objc_class *\nLocals: \n DECLARE_LOCALS(&return); [line 94]\n " color=yellow style=filled] +48 [label="48: Start A_use_class_in_other_ways:\nFormals: self:class A * object:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 78]\n NULLIFY(&self,false); [line 78]\n " color=yellow style=filled] - 48 -> 51 ; -47 [label="47: Return Stmt \n n$14=_fun_NSStringFromClass(sizeof(class A ):unsigned long ) [line 91]\n *&return:class NSString *=n$14 [line 91]\n REMOVE_TEMPS(n$14); [line 91]\n APPLY_ABSTRACTION; [line 91]\n " shape="box"] + 48 -> 50 ; +47 [label="47: DeclStmt \n n$6=_fun___objc_alloc_no_fail(sizeof(class B ):unsigned long ) [line 74]\n n$7=_fun_NSObject_init(n$6:class B *) virtual [line 74]\n *&b:class B *=n$7 [line 74]\n REMOVE_TEMPS(n$6,n$7); [line 74]\n NULLIFY(&b,false); [line 74]\n " shape="box"] 47 -> 46 ; -46 [label="46: Exit A_loggerName \n " color=yellow style=filled] +46 [label="46: Message Call: b_m \n _fun_B_b_m() [line 75]\n APPLY_ABSTRACTION; [line 75]\n " shape="box"] -45 [label="45: Start A_loggerName\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 90]\n NULLIFY(&self,false); [line 90]\n " color=yellow style=filled] + 46 -> 45 ; +45 [label="45: Exit A_t \n " color=yellow style=filled] - 45 -> 47 ; -44 [label="44: Message Call: init \n n$11=*&self:class A * [line 87]\n n$12=_fun_NSObject_init(n$11:class A *) [line 87]\n REMOVE_TEMPS(n$11,n$12); [line 87]\n NULLIFY(&self,false); [line 87]\n APPLY_ABSTRACTION; [line 87]\n " shape="box"] +44 [label="44: Start A_t\nFormals: self:class A *\nLocals: b:class B * \n DECLARE_LOCALS(&return,&b); [line 73]\n NULLIFY(&b,false); [line 73]\n NULLIFY(&self,false); [line 73]\n " color=yellow style=filled] - 44 -> 43 ; -43 [label="43: Exit A_init \n " color=yellow style=filled] + 44 -> 47 ; +43 [label="43: Message Call: test_class \n _fun_A_test_class() [line 70]\n APPLY_ABSTRACTION; [line 70]\n " shape="box"] -42 [label="42: Start A_init\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 86]\n " color=yellow style=filled] + 43 -> 42 ; +42 [label="42: Exit A_call_class_instance_with_class_name \n " color=yellow style=filled] - 42 -> 44 ; -41 [label="41: Message Call: test_class \n _fun_C_test_class() [line 83]\n APPLY_ABSTRACTION; [line 83]\n " shape="box"] +41 [label="41: Start A_call_class_instance_with_class_name\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 69]\n NULLIFY(&self,false); [line 69]\n " color=yellow style=filled] - 41 -> 40 ; -40 [label="40: Exit A_calling_super \n " color=yellow style=filled] + 41 -> 43 ; +40 [label="40: Message Call: test_class \n _fun_A_test_class() [line 66]\n APPLY_ABSTRACTION; [line 66]\n " shape="box"] -39 [label="39: Start A_calling_super\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 82]\n " color=yellow style=filled] + 40 -> 39 ; +39 [label="39: Exit A_call_class_instance \n " color=yellow style=filled] - 39 -> 41 ; -38 [label="38: Return Stmt \n n$8=*&object:class B * [line 79]\n n$10=_fun_B_isC:(n$8:class B *,sizeof(class A ):unsigned long ) virtual [line 79]\n *&return:_Bool =n$10 [line 79]\n REMOVE_TEMPS(n$8,n$10); [line 79]\n NULLIFY(&object,false); [line 79]\n APPLY_ABSTRACTION; [line 79]\n " shape="box"] +38 [label="38: Start A_call_class_instance\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 65]\n NULLIFY(&self,false); [line 65]\n " color=yellow style=filled] - 38 -> 37 ; -37 [label="37: Exit A_use_class_in_other_ways: \n " color=yellow style=filled] + 38 -> 40 ; +37 [label="37: Call alloc \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 62]\n REMOVE_TEMPS(n$3); [line 62]\n APPLY_ABSTRACTION; [line 62]\n " shape="box"] -36 [label="36: Start A_use_class_in_other_ways:\nFormals: self:class A * object:class B *\nLocals: \n DECLARE_LOCALS(&return); [line 78]\n NULLIFY(&self,false); [line 78]\n " color=yellow style=filled] + 37 -> 36 ; +36 [label="36: Exit A_call_alloc_instance \n " color=yellow style=filled] - 36 -> 38 ; -35 [label="35: DeclStmt \n n$6=_fun___objc_alloc_no_fail(sizeof(class B ):unsigned long ) [line 74]\n n$7=_fun_NSObject_init(n$6:class B *) virtual [line 74]\n *&b:class B *=n$7 [line 74]\n REMOVE_TEMPS(n$6,n$7); [line 74]\n NULLIFY(&b,false); [line 74]\n " shape="box"] +35 [label="35: Start A_call_alloc_instance\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 61]\n NULLIFY(&self,false); [line 61]\n " color=yellow style=filled] - 35 -> 34 ; -34 [label="34: Message Call: b_m \n _fun_B_b_m() [line 75]\n APPLY_ABSTRACTION; [line 75]\n " shape="box"] + 35 -> 37 ; +34 [label="34: Call alloc \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 58]\n REMOVE_TEMPS(n$1); [line 58]\n APPLY_ABSTRACTION; [line 58]\n " shape="box"] 34 -> 33 ; -33 [label="33: Exit A_t \n " color=yellow style=filled] +33 [label="33: Exit A_call_alloc_class \n " color=yellow style=filled] -32 [label="32: Start A_t\nFormals: self:class A *\nLocals: b:class B * \n DECLARE_LOCALS(&return,&b); [line 73]\n NULLIFY(&b,false); [line 73]\n NULLIFY(&self,false); [line 73]\n " color=yellow style=filled] +32 [label="32: Start A_call_alloc_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 57]\n " color=yellow style=filled] - 32 -> 35 ; -31 [label="31: Message Call: test_class \n _fun_A_test_class() [line 70]\n APPLY_ABSTRACTION; [line 70]\n " shape="box"] + 32 -> 34 ; +31 [label="31: Message Call: test_class \n _fun_A_test_class() [line 54]\n APPLY_ABSTRACTION; [line 54]\n " shape="box"] 31 -> 30 ; -30 [label="30: Exit A_call_class_instance_with_class_name \n " color=yellow style=filled] +30 [label="30: Exit A_call_test_class \n " color=yellow style=filled] -29 [label="29: Start A_call_class_instance_with_class_name\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 69]\n NULLIFY(&self,false); [line 69]\n " color=yellow style=filled] +29 [label="29: Start A_call_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 53]\n " color=yellow style=filled] 29 -> 31 ; -28 [label="28: Message Call: test_class \n _fun_A_test_class() [line 66]\n APPLY_ABSTRACTION; [line 66]\n " shape="box"] +28 [label="28: Exit A_test_class \n " color=yellow style=filled] - 28 -> 27 ; -27 [label="27: Exit A_call_class_instance \n " color=yellow style=filled] +27 [label="27: Start A_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] -26 [label="26: Start A_call_class_instance\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 65]\n NULLIFY(&self,false); [line 65]\n " color=yellow style=filled] + 27 -> 28 ; +26 [label="26: Message Call: test \n n$0=*&self:class A * [line 47]\n _fun_A_test(n$0:class A *) virtual [line 47]\n REMOVE_TEMPS(n$0); [line 47]\n NULLIFY(&self,false); [line 47]\n APPLY_ABSTRACTION; [line 47]\n " shape="box"] - 26 -> 28 ; -25 [label="25: Call alloc \n n$3=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 62]\n REMOVE_TEMPS(n$3); [line 62]\n APPLY_ABSTRACTION; [line 62]\n " shape="box"] + 26 -> 25 ; +25 [label="25: Exit A_call_test \n " color=yellow style=filled] - 25 -> 24 ; -24 [label="24: Exit A_call_alloc_instance \n " color=yellow style=filled] +24 [label="24: Start A_call_test\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] -23 [label="23: Start A_call_alloc_instance\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 61]\n NULLIFY(&self,false); [line 61]\n " color=yellow style=filled] + 24 -> 26 ; +23 [label="23: Exit A_test \n " color=yellow style=filled] - 23 -> 25 ; -22 [label="22: Call alloc \n n$1=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 58]\n REMOVE_TEMPS(n$1); [line 58]\n APPLY_ABSTRACTION; [line 58]\n " shape="box"] +22 [label="22: Start A_test\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 43]\n NULLIFY(&self,false); [line 43]\n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: Exit A_call_alloc_class \n " color=yellow style=filled] + 22 -> 23 ; +21 [label="21: Exit A_frontendChecks \n " color=yellow style=filled] -20 [label="20: Start A_call_alloc_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 57]\n " color=yellow style=filled] +20 [label="20: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 20 -> 22 ; -19 [label="19: Message Call: test_class \n _fun_A_test_class() [line 54]\n APPLY_ABSTRACTION; [line 54]\n " shape="box"] + 20 -> 21 ; +19 [label="19: Return Stmt \n *&return:_Bool =1 [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] 19 -> 18 ; -18 [label="18: Exit A_call_test_class \n " color=yellow style=filled] +18 [label="18: Exit B_isC: \n " color=yellow style=filled] -17 [label="17: Start A_call_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 53]\n " color=yellow style=filled] +17 [label="17: Start B_isC:\nFormals: self:class B * aClass:struct objc_class *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n NULLIFY(&aClass,false); [line 23]\n NULLIFY(&self,false); [line 23]\n " color=yellow style=filled] 17 -> 19 ; -16 [label="16: Exit A_test_class \n " color=yellow style=filled] +16 [label="16: Exit B_b_m \n " color=yellow style=filled] -15 [label="15: Start A_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 50]\n " color=yellow style=filled] +15 [label="15: Start B_b_m\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] 15 -> 16 ; -14 [label="14: Message Call: test \n n$0=*&self:class A * [line 47]\n _fun_A_test(n$0:class A *) virtual [line 47]\n REMOVE_TEMPS(n$0); [line 47]\n NULLIFY(&self,false); [line 47]\n APPLY_ABSTRACTION; [line 47]\n " shape="box"] +14 [label="14: Exit B_frontendChecks \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Exit A_call_test \n " color=yellow style=filled] +13 [label="13: Start B_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -12 [label="12: Start A_call_test\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 46]\n " color=yellow style=filled] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: Exit A_test \n " color=yellow style=filled] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -10 [label="10: Start A_test\nFormals: self:class A *\nLocals: \n DECLARE_LOCALS(&return); [line 43]\n NULLIFY(&self,false); [line 43]\n " color=yellow style=filled] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] - 10 -> 11 ; -9 [label="9: Exit A_frontendChecks \n " color=yellow style=filled] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -8 [label="8: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 8 -> 9 ; -7 [label="7: Return Stmt \n *&return:_Bool =1 [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 7 -> 6 ; -6 [label="6: Exit B_isC: \n " color=yellow style=filled] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] -5 [label="5: Start B_isC:\nFormals: self:class B * aClass:struct objc_class *\nLocals: \n DECLARE_LOCALS(&return); [line 23]\n NULLIFY(&aClass,false); [line 23]\n NULLIFY(&self,false); [line 23]\n " color=yellow style=filled] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 7 ; -4 [label="4: Exit B_b_m \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start B_b_m\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 3 -> 4 ; -2 [label="2: Exit B_frontendChecks \n " color=yellow style=filled] +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start B_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/self_static/static.dot b/infer/tests/codetoanalyze/objc/frontend/self_static/static.dot index 7ab863029..01de3e388 100644 --- a/infer/tests/codetoanalyze/objc/frontend/self_static/static.dot +++ b/infer/tests/codetoanalyze/objc/frontend/self_static/static.dot @@ -1,63 +1,105 @@ digraph iCFG { -17 [label="17: Message Call: getX \n n$1=*&self:class MyClass * [line 37]\n n$2=_fun_MyClass_getX(n$1:class MyClass *) virtual [line 37]\n REMOVE_TEMPS(n$1,n$2); [line 37]\n NULLIFY(&self,false); [line 37]\n APPLY_ABSTRACTION; [line 37]\n " shape="box"] +29 [label="29: Message Call: getX \n n$1=*&self:class MyClass * [line 37]\n n$2=_fun_MyClass_getX(n$1:class MyClass *) virtual [line 37]\n REMOVE_TEMPS(n$1,n$2); [line 37]\n NULLIFY(&self,false); [line 37]\n APPLY_ABSTRACTION; [line 37]\n " shape="box"] + + + 29 -> 28 ; +28 [label="28: Exit MyClass_anInstanceMethod2 \n " color=yellow style=filled] + + +27 [label="27: Start MyClass_anInstanceMethod2\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] + + + 27 -> 29 ; +26 [label="26: Return Stmt \n *&return:int =0 [line 33]\n APPLY_ABSTRACTION; [line 33]\n " shape="box"] + + + 26 -> 25 ; +25 [label="25: Exit MyClass_getX \n " color=yellow style=filled] + + +24 [label="24: Start MyClass_getX\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n NULLIFY(&self,false); [line 32]\n " color=yellow style=filled] + + + 24 -> 26 ; +23 [label="23: Message Call: aClassMethod \n _fun_MyClass_aClassMethod() [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] + + + 23 -> 22 ; +22 [label="22: Exit MyClass_aClassMethod2 \n " color=yellow style=filled] + + +21 [label="21: Start MyClass_aClassMethod2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] + + + 21 -> 23 ; +20 [label="20: Message Call: aClassMethod \n _fun_MyClass_aClassMethod() [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] + + + 20 -> 19 ; +19 [label="19: Exit MyClass_anInstanceMethod \n " color=yellow style=filled] + + +18 [label="18: Start MyClass_anInstanceMethod\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n NULLIFY(&self,false); [line 24]\n " color=yellow style=filled] + + + 18 -> 20 ; +17 [label="17: DeclStmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class MyClass ):unsigned long ) [line 21]\n *&myClass:class MyClass *=n$0 [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n NULLIFY(&myClass,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] 17 -> 16 ; -16 [label="16: Exit MyClass_anInstanceMethod2 \n " color=yellow style=filled] +16 [label="16: Exit MyClass_aClassMethod \n " color=yellow style=filled] -15 [label="15: Start MyClass_anInstanceMethod2\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 36]\n " color=yellow style=filled] +15 [label="15: Start MyClass_aClassMethod\nFormals: \nLocals: myClass:class MyClass * \n DECLARE_LOCALS(&return,&myClass); [line 20]\n NULLIFY(&myClass,false); [line 20]\n " color=yellow style=filled] 15 -> 17 ; -14 [label="14: Return Stmt \n *&return:int =0 [line 33]\n APPLY_ABSTRACTION; [line 33]\n " shape="box"] +14 [label="14: Exit MyClass_frontendChecks \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Exit MyClass_getX \n " color=yellow style=filled] +13 [label="13: Start MyClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -12 [label="12: Start MyClass_getX\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 32]\n NULLIFY(&self,false); [line 32]\n " color=yellow style=filled] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: Message Call: aClassMethod \n _fun_MyClass_aClassMethod() [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Exit MyClass_aClassMethod2 \n " color=yellow style=filled] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] -9 [label="9: Start MyClass_aClassMethod2\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 28]\n " color=yellow style=filled] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 9 -> 11 ; -8 [label="8: Message Call: aClassMethod \n _fun_MyClass_aClassMethod() [line 25]\n APPLY_ABSTRACTION; [line 25]\n " shape="box"] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit MyClass_anInstanceMethod \n " color=yellow style=filled] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -6 [label="6: Start MyClass_anInstanceMethod\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 24]\n NULLIFY(&self,false); [line 24]\n " color=yellow style=filled] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: DeclStmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class MyClass ):unsigned long ) [line 21]\n *&myClass:class MyClass *=n$0 [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n NULLIFY(&myClass,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit MyClass_aClassMethod \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start MyClass_aClassMethod\nFormals: \nLocals: myClass:class MyClass * \n DECLARE_LOCALS(&return,&myClass); [line 20]\n NULLIFY(&myClass,false); [line 20]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit MyClass_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start MyClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/strings/global_string_literal.dot b/infer/tests/codetoanalyze/objc/frontend/strings/global_string_literal.dot index d51309e85..1fb887e52 100644 --- a/infer/tests/codetoanalyze/objc/frontend/strings/global_string_literal.dot +++ b/infer/tests/codetoanalyze/objc/frontend/strings/global_string_literal.dot @@ -1,13 +1,55 @@ digraph iCFG { -3 [label="3: Return Stmt \n *&return:int =0 [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] +15 [label="15: Return Stmt \n *&return:int =0 [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + 15 -> 14 ; +14 [label="14: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] +13 [label="13: Start main\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 14]\n " color=yellow style=filled] - 1 -> 3 ; + 13 -> 15 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/strings/string_literal.dot b/infer/tests/codetoanalyze/objc/frontend/strings/string_literal.dot index 2ec183565..a911accef 100644 --- a/infer/tests/codetoanalyze/objc/frontend/strings/string_literal.dot +++ b/infer/tests/codetoanalyze/objc/frontend/strings/string_literal.dot @@ -1,17 +1,59 @@ digraph iCFG { -4 [label="4: DeclStmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Rodriguez\":char *) [line 13]\n *&lastName:class NSString *=n$0 [line 13]\n REMOVE_TEMPS(n$0); [line 13]\n NULLIFY(&lastName,false); [line 13]\n " shape="box"] +16 [label="16: DeclStmt \n n$0=_fun_NSString_stringWithUTF8String:(\"Rodriguez\":char *) [line 13]\n *&lastName:class NSString *=n$0 [line 13]\n REMOVE_TEMPS(n$0); [line 13]\n NULLIFY(&lastName,false); [line 13]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] + 16 -> 15 ; +15 [label="15: Return Stmt \n *&return:int =0 [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + 15 -> 14 ; +14 [label="14: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: lastName:class NSString * \n DECLARE_LOCALS(&return,&lastName); [line 12]\n NULLIFY(&lastName,false); [line 12]\n " color=yellow style=filled] +13 [label="13: Start main\nFormals: \nLocals: lastName:class NSString * \n DECLARE_LOCALS(&return,&lastName); [line 12]\n NULLIFY(&lastName,false); [line 12]\n " color=yellow style=filled] - 1 -> 4 ; + 13 -> 16 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/subclass/MyClass.dot b/infer/tests/codetoanalyze/objc/frontend/subclass/MyClass.dot index 26a443022..b246d96b6 100644 --- a/infer/tests/codetoanalyze/objc/frontend/subclass/MyClass.dot +++ b/infer/tests/codetoanalyze/objc/frontend/subclass/MyClass.dot @@ -1,19 +1,61 @@ digraph iCFG { -5 [label="5: Return Stmt \n *&return:int =1 [line 15]\n APPLY_ABSTRACTION; [line 15]\n " shape="box"] +17 [label="17: Return Stmt \n *&return:int =1 [line 15]\n APPLY_ABSTRACTION; [line 15]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit MyClass_myNumber \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit MyClass_myNumber \n " color=yellow style=filled] -3 [label="3: Start MyClass_myNumber\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n NULLIFY(&self,false); [line 14]\n " color=yellow style=filled] +15 [label="15: Start MyClass_myNumber\nFormals: self:class MyClass *\nLocals: \n DECLARE_LOCALS(&return); [line 14]\n NULLIFY(&self,false); [line 14]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit MyClass_frontendChecks \n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit MyClass_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start MyClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start MyClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/subclass/MySubClass.dot b/infer/tests/codetoanalyze/objc/frontend/subclass/MySubClass.dot index 3297a1959..18d2720c4 100644 --- a/infer/tests/codetoanalyze/objc/frontend/subclass/MySubClass.dot +++ b/infer/tests/codetoanalyze/objc/frontend/subclass/MySubClass.dot @@ -1,23 +1,65 @@ digraph iCFG { -6 [label="6: DeclStmt \n n$1=*&self:class MySubclass * [line 17]\n n$2=_fun_MyClass_myNumber(n$1:class MySubclass *) [line 17]\n *&subclassNumber:int =(n$2 + 1) [line 17]\n REMOVE_TEMPS(n$1,n$2); [line 17]\n NULLIFY(&self,false); [line 17]\n " shape="box"] +18 [label="18: DeclStmt \n n$1=*&self:class MySubclass * [line 17]\n n$2=_fun_MyClass_myNumber(n$1:class MySubclass *) [line 17]\n *&subclassNumber:int =(n$2 + 1) [line 17]\n REMOVE_TEMPS(n$1,n$2); [line 17]\n NULLIFY(&self,false); [line 17]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Return Stmt \n n$0=*&subclassNumber:int [line 18]\n *&return:int =n$0 [line 18]\n REMOVE_TEMPS(n$0); [line 18]\n NULLIFY(&subclassNumber,false); [line 18]\n APPLY_ABSTRACTION; [line 18]\n " shape="box"] + 18 -> 17 ; +17 [label="17: Return Stmt \n n$0=*&subclassNumber:int [line 18]\n *&return:int =n$0 [line 18]\n REMOVE_TEMPS(n$0); [line 18]\n NULLIFY(&subclassNumber,false); [line 18]\n APPLY_ABSTRACTION; [line 18]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit MySubclass_myNumber \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit MySubclass_myNumber \n " color=yellow style=filled] -3 [label="3: Start MySubclass_myNumber\nFormals: self:class MySubclass *\nLocals: subclassNumber:int \n DECLARE_LOCALS(&return,&subclassNumber); [line 15]\n NULLIFY(&subclassNumber,false); [line 15]\n " color=yellow style=filled] +15 [label="15: Start MySubclass_myNumber\nFormals: self:class MySubclass *\nLocals: subclassNumber:int \n DECLARE_LOCALS(&return,&subclassNumber); [line 15]\n NULLIFY(&subclassNumber,false); [line 15]\n " color=yellow style=filled] - 3 -> 6 ; -2 [label="2: Exit MySubclass_frontendChecks \n " color=yellow style=filled] + 15 -> 18 ; +14 [label="14: Exit MySubclass_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start MySubclass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start MySubclass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/subclass/main.dot b/infer/tests/codetoanalyze/objc/frontend/subclass/main.dot index fa5e55385..49253bed0 100644 --- a/infer/tests/codetoanalyze/objc/frontend/subclass/main.dot +++ b/infer/tests/codetoanalyze/objc/frontend/subclass/main.dot @@ -1,17 +1,59 @@ digraph iCFG { -4 [label="4: DeclStmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 13]\n n$1=_fun_NSObject_init(n$0:class A *) virtual [line 13]\n *&a:class A *=n$1 [line 13]\n REMOVE_TEMPS(n$0,n$1); [line 13]\n NULLIFY(&a,false); [line 13]\n " shape="box"] +16 [label="16: DeclStmt \n n$0=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 13]\n n$1=_fun_NSObject_init(n$0:class A *) virtual [line 13]\n *&a:class A *=n$1 [line 13]\n REMOVE_TEMPS(n$0,n$1); [line 13]\n NULLIFY(&a,false); [line 13]\n " shape="box"] - 4 -> 3 ; -3 [label="3: Return Stmt \n *&return:int =0 [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] + 16 -> 15 ; +15 [label="15: Return Stmt \n *&return:int =0 [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + 15 -> 14 ; +14 [label="14: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 12]\n NULLIFY(&a,false); [line 12]\n " color=yellow style=filled] +13 [label="13: Start main\nFormals: \nLocals: a:class A * \n DECLARE_LOCALS(&return,&a); [line 12]\n NULLIFY(&a,false); [line 12]\n " color=yellow style=filled] - 1 -> 4 ; + 13 -> 16 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/frontend/types/attributes.dot b/infer/tests/codetoanalyze/objc/frontend/types/attributes.dot index 0ccf7f41f..6c810944e 100644 --- a/infer/tests/codetoanalyze/objc/frontend/types/attributes.dot +++ b/infer/tests/codetoanalyze/objc/frontend/types/attributes.dot @@ -1,63 +1,105 @@ digraph iCFG { -16 [label="16: DeclStmt \n *&aWeakRef:class A __weak *=0 [line 22]\n " shape="box"] +28 [label="28: DeclStmt \n *&aWeakRef:class A __weak *=0 [line 22]\n " shape="box"] - 16 -> 15 ; -15 [label="15: DeclStmt \n _fun___objc_retain(0:class A *) [line 23]\n *&aStrongRef:class A *=0 [line 23]\n NULLIFY(&aStrongRef,false); [line 23]\n " shape="box"] + 28 -> 27 ; +27 [label="27: DeclStmt \n _fun___objc_retain(0:class A *) [line 23]\n *&aStrongRef:class A *=0 [line 23]\n NULLIFY(&aStrongRef,false); [line 23]\n " shape="box"] - 15 -> 14 ; -14 [label="14: DeclStmt \n *&anUnsafeUnretRef:class A __unsafe_unretained *=0 [line 24]\n " shape="box"] + 27 -> 26 ; +26 [label="26: DeclStmt \n *&anUnsafeUnretRef:class A __unsafe_unretained *=0 [line 24]\n " shape="box"] - 14 -> 13 ; -13 [label="13: DeclStmt \n _fun___objc_retain(0:class A __autoreleasing *) [line 25]\n _fun___set_autorelease_attribute(0:class A __autoreleasing *) [line 25]\n *&anAutoRelRef:class A __autoreleasing *=0 [line 25]\n " shape="box"] + 26 -> 25 ; +25 [label="25: DeclStmt \n _fun___objc_retain(0:class A __autoreleasing *) [line 25]\n _fun___set_autorelease_attribute(0:class A __autoreleasing *) [line 25]\n *&anAutoRelRef:class A __autoreleasing *=0 [line 25]\n " shape="box"] - 13 -> 12 ; -12 [label="12: DeclStmt \n _fun___objc_retain(0:class A *) [line 26]\n *&aStdRef:class A *=0 [line 26]\n " shape="box"] + 25 -> 24 ; +24 [label="24: DeclStmt \n _fun___objc_retain(0:class A *) [line 26]\n *&aStdRef:class A *=0 [line 26]\n " shape="box"] - 12 -> 11 ; -11 [label="11: BinaryOperatorStmt: Assign \n n$9=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 29]\n *&aStrongRef:class A *=n$9 [line 29]\n REMOVE_TEMPS(n$9); [line 29]\n " shape="box"] + 24 -> 23 ; +23 [label="23: BinaryOperatorStmt: Assign \n n$9=_fun___objc_alloc_no_fail(sizeof(class A ):unsigned long ) [line 29]\n *&aStrongRef:class A *=n$9 [line 29]\n REMOVE_TEMPS(n$9); [line 29]\n " shape="box"] - 11 -> 10 ; -10 [label="10: BinaryOperatorStmt: Assign \n n$7=*&aStrongRef:class A * [line 31]\n _fun___objc_retain(n$7:class A *) [line 31]\n n$8=*&aStdRef:class A * [line 31]\n *&aStdRef:class A *=n$7 [line 31]\n _fun___objc_release(n$8:class A *) [line 31]\n REMOVE_TEMPS(n$7,n$8); [line 31]\n " shape="box"] + 23 -> 22 ; +22 [label="22: BinaryOperatorStmt: Assign \n n$7=*&aStrongRef:class A * [line 31]\n _fun___objc_retain(n$7:class A *) [line 31]\n n$8=*&aStdRef:class A * [line 31]\n *&aStdRef:class A *=n$7 [line 31]\n _fun___objc_release(n$8:class A *) [line 31]\n REMOVE_TEMPS(n$7,n$8); [line 31]\n " shape="box"] - 10 -> 9 ; -9 [label="9: BinaryOperatorStmt: Assign \n _fun___objc_retain(0:class A *) [line 33]\n n$6=*&aStrongRef:class A * [line 33]\n *&aStrongRef:class A *=0 [line 33]\n _fun___objc_release(n$6:class A *) [line 33]\n REMOVE_TEMPS(n$6); [line 33]\n NULLIFY(&aStrongRef,false); [line 33]\n " shape="box"] + 22 -> 21 ; +21 [label="21: BinaryOperatorStmt: Assign \n _fun___objc_retain(0:class A *) [line 33]\n n$6=*&aStrongRef:class A * [line 33]\n *&aStrongRef:class A *=0 [line 33]\n _fun___objc_release(n$6:class A *) [line 33]\n REMOVE_TEMPS(n$6); [line 33]\n NULLIFY(&aStrongRef,false); [line 33]\n " shape="box"] - 9 -> 8 ; -8 [label="8: BinaryOperatorStmt: Assign \n n$4=*&aStdRef:class A * [line 35]\n _fun___objc_retain(n$4:class A *) [line 35]\n n$5=*&aWeakRef:class A * [line 35]\n *&aWeakRef:class A *=n$4 [line 35]\n _fun___objc_release(n$5:class A *) [line 35]\n REMOVE_TEMPS(n$4,n$5); [line 35]\n NULLIFY(&aWeakRef,false); [line 35]\n " shape="box"] + 21 -> 20 ; +20 [label="20: BinaryOperatorStmt: Assign \n n$4=*&aStdRef:class A * [line 35]\n _fun___objc_retain(n$4:class A *) [line 35]\n n$5=*&aWeakRef:class A * [line 35]\n *&aWeakRef:class A *=n$4 [line 35]\n _fun___objc_release(n$5:class A *) [line 35]\n REMOVE_TEMPS(n$4,n$5); [line 35]\n NULLIFY(&aWeakRef,false); [line 35]\n " shape="box"] - 8 -> 7 ; -7 [label="7: BinaryOperatorStmt: Assign \n n$2=*&aStdRef:class A * [line 37]\n _fun___objc_retain(n$2:class A *) [line 37]\n n$3=*&anAutoRelRef:class A * [line 37]\n *&anAutoRelRef:class A *=n$2 [line 37]\n _fun___objc_release(n$3:class A *) [line 37]\n REMOVE_TEMPS(n$2,n$3); [line 37]\n NULLIFY(&anAutoRelRef,false); [line 37]\n " shape="box"] + 20 -> 19 ; +19 [label="19: BinaryOperatorStmt: Assign \n n$2=*&aStdRef:class A * [line 37]\n _fun___objc_retain(n$2:class A *) [line 37]\n n$3=*&anAutoRelRef:class A * [line 37]\n *&anAutoRelRef:class A *=n$2 [line 37]\n _fun___objc_release(n$3:class A *) [line 37]\n REMOVE_TEMPS(n$2,n$3); [line 37]\n NULLIFY(&anAutoRelRef,false); [line 37]\n " shape="box"] - 7 -> 6 ; -6 [label="6: BinaryOperatorStmt: Assign \n n$0=*&aStdRef:class A * [line 39]\n _fun___objc_retain(n$0:class A *) [line 39]\n n$1=*&anUnsafeUnretRef:class A * [line 39]\n *&anUnsafeUnretRef:class A *=n$0 [line 39]\n _fun___objc_release(n$1:class A *) [line 39]\n REMOVE_TEMPS(n$0,n$1); [line 39]\n NULLIFY(&aStdRef,false); [line 39]\n NULLIFY(&anUnsafeUnretRef,false); [line 39]\n " shape="box"] + 19 -> 18 ; +18 [label="18: BinaryOperatorStmt: Assign \n n$0=*&aStdRef:class A * [line 39]\n _fun___objc_retain(n$0:class A *) [line 39]\n n$1=*&anUnsafeUnretRef:class A * [line 39]\n *&anUnsafeUnretRef:class A *=n$0 [line 39]\n _fun___objc_release(n$1:class A *) [line 39]\n REMOVE_TEMPS(n$0,n$1); [line 39]\n NULLIFY(&aStdRef,false); [line 39]\n NULLIFY(&anUnsafeUnretRef,false); [line 39]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Return Stmt \n *&return:int =0 [line 42]\n APPLY_ABSTRACTION; [line 42]\n " shape="box"] + 18 -> 17 ; +17 [label="17: Return Stmt \n *&return:int =0 [line 42]\n APPLY_ABSTRACTION; [line 42]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit main \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit main \n " color=yellow style=filled] -3 [label="3: Start main\nFormals: \nLocals: aStdRef:class A * anAutoRelRef:class A __autoreleasing * anUnsafeUnretRef:class A __unsafe_unretained * aStrongRef:class A * aWeakRef:class A __weak * \n DECLARE_LOCALS(&return,&aStdRef,&anAutoRelRef,&anUnsafeUnretRef,&aStrongRef,&aWeakRef); [line 20]\n NULLIFY(&aStdRef,false); [line 20]\n NULLIFY(&aStrongRef,false); [line 20]\n NULLIFY(&aWeakRef,false); [line 20]\n NULLIFY(&anAutoRelRef,false); [line 20]\n NULLIFY(&anUnsafeUnretRef,false); [line 20]\n " color=yellow style=filled] +15 [label="15: Start main\nFormals: \nLocals: aStdRef:class A * anAutoRelRef:class A __autoreleasing * anUnsafeUnretRef:class A __unsafe_unretained * aStrongRef:class A * aWeakRef:class A __weak * \n DECLARE_LOCALS(&return,&aStdRef,&anAutoRelRef,&anUnsafeUnretRef,&aStrongRef,&aWeakRef); [line 20]\n NULLIFY(&aStdRef,false); [line 20]\n NULLIFY(&aStrongRef,false); [line 20]\n NULLIFY(&aWeakRef,false); [line 20]\n NULLIFY(&anAutoRelRef,false); [line 20]\n NULLIFY(&anUnsafeUnretRef,false); [line 20]\n " color=yellow style=filled] - 3 -> 16 ; -2 [label="2: Exit A_frontendChecks \n " color=yellow style=filled] + 15 -> 28 ; +14 [label="14: Exit A_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start A_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/types/testloop.dot b/infer/tests/codetoanalyze/objc/frontend/types/testloop.dot index e1eea4de2..b2718e262 100644 --- a/infer/tests/codetoanalyze/objc/frontend/types/testloop.dot +++ b/infer/tests/codetoanalyze/objc/frontend/types/testloop.dot @@ -1,19 +1,313 @@ digraph iCFG { -5 [label="5: Return Stmt \n n$0=*&#GB$__iPhoneVideoAdLayout:struct FBVideoAdLayout [line 45]\n *&return:struct FBVideoAdLayout =n$0 [line 45]\n REMOVE_TEMPS(n$0); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] +89 [label="89: Return Stmt \n n$0=*&#GB$__iPhoneVideoAdLayout:struct FBVideoAdLayout [line 45]\n *&return:struct FBVideoAdLayout =n$0 [line 45]\n REMOVE_TEMPS(n$0); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit FBScrollViewDelegateProxy_layoutToUse \n " color=yellow style=filled] + 89 -> 88 ; +88 [label="88: Exit FBScrollViewDelegateProxy_layoutToUse \n " color=yellow style=filled] -3 [label="3: Start FBScrollViewDelegateProxy_layoutToUse\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] +87 [label="87: Start FBScrollViewDelegateProxy_layoutToUse\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 44]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit FBScrollViewDelegateProxy_frontendChecks \n " color=yellow style=filled] + 87 -> 89 ; +86 [label="86: Exit FBScrollViewDelegateProxy_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start FBScrollViewDelegateProxy_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +85 [label="85: Start FBScrollViewDelegateProxy_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 85 -> 86 ; +84 [label="84: Exit NSUserActivityDelegate_frontendChecks \n " color=yellow style=filled] + + +83 [label="83: Start NSUserActivityDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 83 -> 84 ; +82 [label="82: Exit NSURLSessionStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +81 [label="81: Start NSURLSessionStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 81 -> 82 ; +80 [label="80: Exit NSURLSessionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +79 [label="79: Start NSURLSessionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 79 -> 80 ; +78 [label="78: Exit NSURLSessionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +77 [label="77: Start NSURLSessionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 77 -> 78 ; +76 [label="76: Exit NSURLSessionTaskDelegate_frontendChecks \n " color=yellow style=filled] + + +75 [label="75: Start NSURLSessionTaskDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 75 -> 76 ; +74 [label="74: Exit NSURLSessionDelegate_frontendChecks \n " color=yellow style=filled] + + +73 [label="73: Start NSURLSessionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 73 -> 74 ; +72 [label="72: Exit NSNetServiceBrowserDelegate_frontendChecks \n " color=yellow style=filled] + + +71 [label="71: Start NSNetServiceBrowserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 71 -> 72 ; +70 [label="70: Exit NSNetServiceDelegate_frontendChecks \n " color=yellow style=filled] + + +69 [label="69: Start NSNetServiceDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 69 -> 70 ; +68 [label="68: Exit NSMetadataQueryDelegate_frontendChecks \n " color=yellow style=filled] + + +67 [label="67: Start NSMetadataQueryDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 67 -> 68 ; +66 [label="66: Exit NSFilePresenter_frontendChecks \n " color=yellow style=filled] + + +65 [label="65: Start NSFilePresenter_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 65 -> 66 ; +64 [label="64: Exit NSExtensionRequestHandling_frontendChecks \n " color=yellow style=filled] + + +63 [label="63: Start NSExtensionRequestHandling_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 63 -> 64 ; +62 [label="62: Exit NSCacheDelegate_frontendChecks \n " color=yellow style=filled] + + +61 [label="61: Start NSCacheDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 61 -> 62 ; +60 [label="60: Exit NSXMLParserDelegate_frontendChecks \n " color=yellow style=filled] + + +59 [label="59: Start NSXMLParserDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 59 -> 60 ; +58 [label="58: Exit NSURLProtocolClient_frontendChecks \n " color=yellow style=filled] + + +57 [label="57: Start NSURLProtocolClient_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 57 -> 58 ; +56 [label="56: Exit NSURLConnectionDownloadDelegate_frontendChecks \n " color=yellow style=filled] + + +55 [label="55: Start NSURLConnectionDownloadDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 55 -> 56 ; +54 [label="54: Exit NSURLConnectionDataDelegate_frontendChecks \n " color=yellow style=filled] + + +53 [label="53: Start NSURLConnectionDataDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 53 -> 54 ; +52 [label="52: Exit NSURLConnectionDelegate_frontendChecks \n " color=yellow style=filled] + + +51 [label="51: Start NSURLConnectionDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 51 -> 52 ; +50 [label="50: Exit NSURLAuthenticationChallengeSender_frontendChecks \n " color=yellow style=filled] + + +49 [label="49: Start NSURLAuthenticationChallengeSender_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 49 -> 50 ; +48 [label="48: Exit NSStreamDelegate_frontendChecks \n " color=yellow style=filled] + + +47 [label="47: Start NSStreamDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 47 -> 48 ; +46 [label="46: Exit NSMachPortDelegate_frontendChecks \n " color=yellow style=filled] + + +45 [label="45: Start NSMachPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 45 -> 46 ; +44 [label="44: Exit NSPortDelegate_frontendChecks \n " color=yellow style=filled] + + +43 [label="43: Start NSPortDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 43 -> 44 ; +42 [label="42: Exit NSLocking_frontendChecks \n " color=yellow style=filled] + + +41 [label="41: Start NSLocking_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 41 -> 42 ; +40 [label="40: Exit NSKeyedUnarchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +39 [label="39: Start NSKeyedUnarchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 39 -> 40 ; +38 [label="38: Exit NSKeyedArchiverDelegate_frontendChecks \n " color=yellow style=filled] + + +37 [label="37: Start NSKeyedArchiverDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 37 -> 38 ; +36 [label="36: Exit NSFileManagerDelegate_frontendChecks \n " color=yellow style=filled] + + +35 [label="35: Start NSFileManagerDelegate_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 35 -> 36 ; +34 [label="34: Exit NSDecimalNumberBehaviors_frontendChecks \n " color=yellow style=filled] + + +33 [label="33: Start NSDecimalNumberBehaviors_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 33 -> 34 ; +32 [label="32: Exit NSProgressReporting_frontendChecks \n " color=yellow style=filled] + + +31 [label="31: Start NSProgressReporting_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 31 -> 32 ; +30 [label="30: Exit NSFastEnumeration_frontendChecks \n " color=yellow style=filled] + + +29 [label="29: Start NSFastEnumeration_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 29 -> 30 ; +28 [label="28: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +27 [label="27: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 27 -> 28 ; +26 [label="26: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +25 [label="25: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 25 -> 26 ; +24 [label="24: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +23 [label="23: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 23 -> 24 ; +22 [label="22: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +21 [label="21: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 21 -> 22 ; +20 [label="20: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +19 [label="19: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 19 -> 20 ; +18 [label="18: Exit OS_dispatch_io_frontendChecks \n " color=yellow style=filled] + + +17 [label="17: Start OS_dispatch_io_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 17 -> 18 ; +16 [label="16: Exit OS_dispatch_data_frontendChecks \n " color=yellow style=filled] + + +15 [label="15: Start OS_dispatch_data_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 15 -> 16 ; +14 [label="14: Exit OS_dispatch_semaphore_frontendChecks \n " color=yellow style=filled] + + +13 [label="13: Start OS_dispatch_semaphore_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit OS_dispatch_group_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start OS_dispatch_group_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit OS_dispatch_source_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start OS_dispatch_source_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit OS_dispatch_queue_attr_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start OS_dispatch_queue_attr_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit OS_dispatch_queue_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start OS_dispatch_queue_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit OS_dispatch_object_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start OS_dispatch_object_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/types/void_call.dot b/infer/tests/codetoanalyze/objc/frontend/types/void_call.dot index 3c5d168ba..116af69a0 100644 --- a/infer/tests/codetoanalyze/objc/frontend/types/void_call.dot +++ b/infer/tests/codetoanalyze/objc/frontend/types/void_call.dot @@ -1,100 +1,142 @@ digraph iCFG { -26 [label="26: DeclStmt \n *&x:int =1 [line 35]\n " shape="box"] +38 [label="38: DeclStmt \n *&x:int =1 [line 35]\n " shape="box"] + + + 38 -> 37 ; +37 [label="37: Call _fun_foo1 \n n$9=*&x:int [line 36]\n _fun_foo1(n$9:int ) [line 36]\n REMOVE_TEMPS(n$9); [line 36]\n " shape="box"] + + + 37 -> 36 ; +36 [label="36: BinaryOperatorStmt: Assign \n n$7=*&x:int [line 38]\n n$8=_fun_bar1(n$7:int ) [line 38]\n *&x:int =n$8 [line 38]\n REMOVE_TEMPS(n$7,n$8); [line 38]\n " shape="box"] + + + 36 -> 35 ; +35 [label="35: DeclStmt \n n$6=_fun___objc_alloc_no_fail(sizeof(class AClass ):unsigned long ) [line 40]\n *&o:class AClass *=n$6 [line 40]\n REMOVE_TEMPS(n$6); [line 40]\n " shape="box"] + + + 35 -> 31 ; + 35 -> 32 ; +34 [label="34: Message Call: foo: \n n$4=*&o:class AClass * [line 44]\n n$5=*&x:int [line 44]\n _fun_AClass_foo:(n$4:class AClass *,n$5:int ) virtual [line 44]\n REMOVE_TEMPS(n$4,n$5); [line 44]\n " shape="box"] + + + 34 -> 33 ; +33 [label="33: BinaryOperatorStmt: Assign \n n$1=*&o:class AClass * [line 45]\n n$2=*&x:int [line 45]\n n$3=_fun_AClass_bar:(n$1:class AClass *,n$2:int ) virtual [line 45]\n *&x:int =n$3 [line 45]\n REMOVE_TEMPS(n$1,n$2,n$3); [line 45]\n NULLIFY(&o,false); [line 45]\n NULLIFY(&x,false); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] + + + 33 -> 30 ; +32 [label="32: Prune (false branch) \n n$0=*&o:class AClass * [line 42]\n PRUNE((n$0 == 0), false); [line 42]\n REMOVE_TEMPS(n$0); [line 42]\n APPLY_ABSTRACTION; [line 42]\n " shape="invhouse"] + + + 32 -> 30 ; +31 [label="31: Prune (true branch) \n n$0=*&o:class AClass * [line 42]\n PRUNE((n$0 != 0), true); [line 42]\n REMOVE_TEMPS(n$0); [line 42]\n " shape="invhouse"] + + + 31 -> 34 ; +30 [label="30: + \n " ] + + + 30 -> 29 ; +29 [label="29: Return Stmt \n NULLIFY(&o,false); [line 48]\n NULLIFY(&x,false); [line 48]\n *&return:int =0 [line 48]\n APPLY_ABSTRACTION; [line 48]\n " shape="box"] + + + 29 -> 28 ; +28 [label="28: Exit main \n " color=yellow style=filled] + + +27 [label="27: Start main\nFormals: \nLocals: o:class AClass * x:int \n DECLARE_LOCALS(&return,&o,&x); [line 33]\n NULLIFY(&o,false); [line 33]\n NULLIFY(&x,false); [line 33]\n " color=yellow style=filled] + + + 27 -> 38 ; +26 [label="26: Return Stmt \n n$0=*&a:int [line 31]\n *&a:int =(n$0 + 1) [line 31]\n *&return:int =n$0 [line 31]\n REMOVE_TEMPS(n$0); [line 31]\n NULLIFY(&a,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] 26 -> 25 ; -25 [label="25: Call _fun_foo1 \n n$9=*&x:int [line 36]\n _fun_foo1(n$9:int ) [line 36]\n REMOVE_TEMPS(n$9); [line 36]\n " shape="box"] +25 [label="25: Exit bar1 \n " color=yellow style=filled] - 25 -> 24 ; -24 [label="24: BinaryOperatorStmt: Assign \n n$7=*&x:int [line 38]\n n$8=_fun_bar1(n$7:int ) [line 38]\n *&x:int =n$8 [line 38]\n REMOVE_TEMPS(n$7,n$8); [line 38]\n " shape="box"] +24 [label="24: Start bar1\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] - 24 -> 23 ; -23 [label="23: DeclStmt \n n$6=_fun___objc_alloc_no_fail(sizeof(class AClass ):unsigned long ) [line 40]\n *&o:class AClass *=n$6 [line 40]\n REMOVE_TEMPS(n$6); [line 40]\n " shape="box"] + 24 -> 26 ; +23 [label="23: UnaryOperator \n n$0=*&a:int [line 29]\n *&a:int =(n$0 + 1) [line 29]\n REMOVE_TEMPS(n$0); [line 29]\n NULLIFY(&a,false); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] - 23 -> 19 ; - 23 -> 20 ; -22 [label="22: Message Call: foo: \n n$4=*&o:class AClass * [line 44]\n n$5=*&x:int [line 44]\n _fun_AClass_foo:(n$4:class AClass *,n$5:int ) virtual [line 44]\n REMOVE_TEMPS(n$4,n$5); [line 44]\n " shape="box"] + 23 -> 22 ; +22 [label="22: Exit foo1 \n " color=yellow style=filled] - 22 -> 21 ; -21 [label="21: BinaryOperatorStmt: Assign \n n$1=*&o:class AClass * [line 45]\n n$2=*&x:int [line 45]\n n$3=_fun_AClass_bar:(n$1:class AClass *,n$2:int ) virtual [line 45]\n *&x:int =n$3 [line 45]\n REMOVE_TEMPS(n$1,n$2,n$3); [line 45]\n NULLIFY(&o,false); [line 45]\n NULLIFY(&x,false); [line 45]\n APPLY_ABSTRACTION; [line 45]\n " shape="box"] +21 [label="21: Start foo1\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] - 21 -> 18 ; -20 [label="20: Prune (false branch) \n n$0=*&o:class AClass * [line 42]\n PRUNE((n$0 == 0), false); [line 42]\n REMOVE_TEMPS(n$0); [line 42]\n APPLY_ABSTRACTION; [line 42]\n " shape="invhouse"] + 21 -> 23 ; +20 [label="20: Return Stmt \n n$1=*&a:int [line 24]\n *&a:int =(n$1 + 1) [line 24]\n *&return:int =n$1 [line 24]\n REMOVE_TEMPS(n$1); [line 24]\n NULLIFY(&a,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] - 20 -> 18 ; -19 [label="19: Prune (true branch) \n n$0=*&o:class AClass * [line 42]\n PRUNE((n$0 != 0), true); [line 42]\n REMOVE_TEMPS(n$0); [line 42]\n " shape="invhouse"] + 20 -> 19 ; +19 [label="19: Exit AClass_bar: \n " color=yellow style=filled] - 19 -> 22 ; -18 [label="18: + \n " ] +18 [label="18: Start AClass_bar:\nFormals: self:class AClass * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n NULLIFY(&self,false); [line 23]\n " color=yellow style=filled] - 18 -> 17 ; -17 [label="17: Return Stmt \n NULLIFY(&o,false); [line 48]\n NULLIFY(&x,false); [line 48]\n *&return:int =0 [line 48]\n APPLY_ABSTRACTION; [line 48]\n " shape="box"] + 18 -> 20 ; +17 [label="17: UnaryOperator \n n$0=*&a:int [line 21]\n *&a:int =(n$0 + 1) [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n NULLIFY(&a,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] 17 -> 16 ; -16 [label="16: Exit main \n " color=yellow style=filled] +16 [label="16: Exit AClass_foo: \n " color=yellow style=filled] -15 [label="15: Start main\nFormals: \nLocals: o:class AClass * x:int \n DECLARE_LOCALS(&return,&o,&x); [line 33]\n NULLIFY(&o,false); [line 33]\n NULLIFY(&x,false); [line 33]\n " color=yellow style=filled] +15 [label="15: Start AClass_foo:\nFormals: self:class AClass * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n NULLIFY(&self,false); [line 20]\n " color=yellow style=filled] - 15 -> 26 ; -14 [label="14: Return Stmt \n n$0=*&a:int [line 31]\n *&a:int =(n$0 + 1) [line 31]\n *&return:int =n$0 [line 31]\n REMOVE_TEMPS(n$0); [line 31]\n NULLIFY(&a,false); [line 31]\n APPLY_ABSTRACTION; [line 31]\n " shape="box"] + 15 -> 17 ; +14 [label="14: Exit AClass_frontendChecks \n " color=yellow style=filled] - 14 -> 13 ; -13 [label="13: Exit bar1 \n " color=yellow style=filled] +13 [label="13: Start AClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -12 [label="12: Start bar1\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 31]\n " color=yellow style=filled] + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] - 12 -> 14 ; -11 [label="11: UnaryOperator \n n$0=*&a:int [line 29]\n *&a:int =(n$0 + 1) [line 29]\n REMOVE_TEMPS(n$0); [line 29]\n NULLIFY(&a,false); [line 29]\n APPLY_ABSTRACTION; [line 29]\n " shape="box"] +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 11 -> 10 ; -10 [label="10: Exit foo1 \n " color=yellow style=filled] + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] -9 [label="9: Start foo1\nFormals: a:int \nLocals: \n DECLARE_LOCALS(&return); [line 29]\n " color=yellow style=filled] +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 9 -> 11 ; -8 [label="8: Return Stmt \n n$1=*&a:int [line 24]\n *&a:int =(n$1 + 1) [line 24]\n *&return:int =n$1 [line 24]\n REMOVE_TEMPS(n$1); [line 24]\n NULLIFY(&a,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] - 8 -> 7 ; -7 [label="7: Exit AClass_bar: \n " color=yellow style=filled] +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] -6 [label="6: Start AClass_bar:\nFormals: self:class AClass * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 23]\n NULLIFY(&self,false); [line 23]\n " color=yellow style=filled] + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] - 6 -> 8 ; -5 [label="5: UnaryOperator \n n$0=*&a:int [line 21]\n *&a:int =(n$0 + 1) [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n NULLIFY(&a,false); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 5 -> 4 ; -4 [label="4: Exit AClass_foo: \n " color=yellow style=filled] + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] -3 [label="3: Start AClass_foo:\nFormals: self:class AClass * a:int \nLocals: \n DECLARE_LOCALS(&return); [line 20]\n NULLIFY(&self,false); [line 20]\n " color=yellow style=filled] +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit AClass_frontendChecks \n " color=yellow style=filled] + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start AClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass.dot b/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass.dot index e688cc50d..5c4ffdd2d 100644 --- a/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass.dot +++ b/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass.dot @@ -1,19 +1,61 @@ digraph iCFG { -5 [label="5: Return Stmt \n n$0=*&#GB$aVariable:class NSObject * [line 21]\n *&return:class NSObject *=n$0 [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] +17 [label="17: Return Stmt \n n$0=*&#GB$aVariable:class NSObject * [line 21]\n *&return:class NSObject *=n$0 [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit AClass_sharedInstance \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit AClass_sharedInstance \n " color=yellow style=filled] -3 [label="3: Start AClass_sharedInstance\nFormals: self:class AClass *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n NULLIFY(&self,false); [line 20]\n " color=yellow style=filled] +15 [label="15: Start AClass_sharedInstance\nFormals: self:class AClass *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n NULLIFY(&self,false); [line 20]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit AClass_frontendChecks \n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit AClass_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start AClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start AClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass_2.dot b/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass_2.dot index e688cc50d..5c4ffdd2d 100644 --- a/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass_2.dot +++ b/infer/tests/codetoanalyze/objc/frontend/vardecl/aclass_2.dot @@ -1,19 +1,61 @@ digraph iCFG { -5 [label="5: Return Stmt \n n$0=*&#GB$aVariable:class NSObject * [line 21]\n *&return:class NSObject *=n$0 [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] +17 [label="17: Return Stmt \n n$0=*&#GB$aVariable:class NSObject * [line 21]\n *&return:class NSObject *=n$0 [line 21]\n REMOVE_TEMPS(n$0); [line 21]\n APPLY_ABSTRACTION; [line 21]\n " shape="box"] - 5 -> 4 ; -4 [label="4: Exit AClass_sharedInstance \n " color=yellow style=filled] + 17 -> 16 ; +16 [label="16: Exit AClass_sharedInstance \n " color=yellow style=filled] -3 [label="3: Start AClass_sharedInstance\nFormals: self:class AClass *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n NULLIFY(&self,false); [line 20]\n " color=yellow style=filled] +15 [label="15: Start AClass_sharedInstance\nFormals: self:class AClass *\nLocals: \n DECLARE_LOCALS(&return); [line 20]\n NULLIFY(&self,false); [line 20]\n " color=yellow style=filled] - 3 -> 5 ; -2 [label="2: Exit AClass_frontendChecks \n " color=yellow style=filled] + 15 -> 17 ; +14 [label="14: Exit AClass_frontendChecks \n " color=yellow style=filled] -1 [label="1: Start AClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] +13 [label="13: Start AClass_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 13 -> 14 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] 1 -> 2 ; diff --git a/infer/tests/codetoanalyze/objc/frontend/vardecl/initlist.dot b/infer/tests/codetoanalyze/objc/frontend/vardecl/initlist.dot index 389680b03..055e89379 100644 --- a/infer/tests/codetoanalyze/objc/frontend/vardecl/initlist.dot +++ b/infer/tests/codetoanalyze/objc/frontend/vardecl/initlist.dot @@ -1,32 +1,74 @@ digraph iCFG { -8 [label="8: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class C ):unsigned long ) [line 22]\n *&c1:class C *=n$5 [line 22]\n REMOVE_TEMPS(n$5); [line 22]\n " shape="box"] +20 [label="20: DeclStmt \n n$5=_fun___objc_alloc_no_fail(sizeof(class C ):unsigned long ) [line 22]\n *&c1:class C *=n$5 [line 22]\n REMOVE_TEMPS(n$5); [line 22]\n " shape="box"] - 8 -> 7 ; -7 [label="7: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class C ):unsigned long ) [line 23]\n *&c2:class C *=n$4 [line 23]\n REMOVE_TEMPS(n$4); [line 23]\n " shape="box"] + 20 -> 19 ; +19 [label="19: DeclStmt \n n$4=_fun___objc_alloc_no_fail(sizeof(class C ):unsigned long ) [line 23]\n *&c2:class C *=n$4 [line 23]\n REMOVE_TEMPS(n$4); [line 23]\n " shape="box"] - 7 -> 6 ; -6 [label="6: DeclStmt \n n$0=*&c1:class C * [line 24]\n n$1=_fun_NSObject_init(n$0:class C *) virtual [line 24]\n n$2=*&c1:class C * [line 24]\n n$3=*&c2:class C * [line 24]\n *&a[0]:class C *=n$1 [line 24]\n *&a[1]:class C *=n$2 [line 24]\n *&a[2]:class C *=n$3 [line 24]\n REMOVE_TEMPS(n$0,n$1,n$2,n$3); [line 24]\n NULLIFY(&c1,false); [line 24]\n NULLIFY(&c2,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] + 19 -> 18 ; +18 [label="18: DeclStmt \n n$0=*&c1:class C * [line 24]\n n$1=_fun_NSObject_init(n$0:class C *) virtual [line 24]\n n$2=*&c1:class C * [line 24]\n n$3=*&c2:class C * [line 24]\n *&a[0]:class C *=n$1 [line 24]\n *&a[1]:class C *=n$2 [line 24]\n *&a[2]:class C *=n$3 [line 24]\n REMOVE_TEMPS(n$0,n$1,n$2,n$3); [line 24]\n NULLIFY(&c1,false); [line 24]\n NULLIFY(&c2,false); [line 24]\n APPLY_ABSTRACTION; [line 24]\n " shape="box"] - 6 -> 5 ; -5 [label="5: Exit test \n " color=yellow style=filled] + 18 -> 17 ; +17 [label="17: Exit test \n " color=yellow style=filled] -4 [label="4: Start test\nFormals: \nLocals: a:class C *[3] c2:class C * c1:class C * \n DECLARE_LOCALS(&return,&a,&c2,&c1); [line 21]\n NULLIFY(&a,false); [line 21]\n NULLIFY(&c1,false); [line 21]\n NULLIFY(&c2,false); [line 21]\n " color=yellow style=filled] +16 [label="16: Start test\nFormals: \nLocals: a:class C *[3] c2:class C * c1:class C * \n DECLARE_LOCALS(&return,&a,&c2,&c1); [line 21]\n NULLIFY(&a,false); [line 21]\n NULLIFY(&c1,false); [line 21]\n NULLIFY(&c2,false); [line 21]\n " color=yellow style=filled] - 4 -> 8 ; -3 [label="3: DeclStmt \n n$0=*&z:int [line 14]\n *&a[0][0]:int =(n$0 + 1) [line 14]\n *&a[0][1]:int =2 [line 14]\n *&a[0][2]:int =3 [line 14]\n *&a[1][0]:int =5 [line 14]\n *&a[1][1]:int =6 [line 14]\n *&a[1][2]:int =7 [line 14]\n REMOVE_TEMPS(n$0); [line 14]\n NULLIFY(&z,false); [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] + 16 -> 20 ; +15 [label="15: DeclStmt \n n$0=*&z:int [line 14]\n *&a[0][0]:int =(n$0 + 1) [line 14]\n *&a[0][1]:int =2 [line 14]\n *&a[0][2]:int =3 [line 14]\n *&a[1][0]:int =5 [line 14]\n *&a[1][1]:int =6 [line 14]\n *&a[1][2]:int =7 [line 14]\n REMOVE_TEMPS(n$0); [line 14]\n NULLIFY(&z,false); [line 14]\n APPLY_ABSTRACTION; [line 14]\n " shape="box"] - 3 -> 2 ; -2 [label="2: Exit main \n " color=yellow style=filled] + 15 -> 14 ; +14 [label="14: Exit main \n " color=yellow style=filled] -1 [label="1: Start main\nFormals: \nLocals: a:int [2][3] z:int \n DECLARE_LOCALS(&return,&a,&z); [line 12]\n NULLIFY(&a,false); [line 12]\n " color=yellow style=filled] +13 [label="13: Start main\nFormals: \nLocals: a:int [2][3] z:int \n DECLARE_LOCALS(&return,&a,&z); [line 12]\n NULLIFY(&a,false); [line 12]\n " color=yellow style=filled] - 1 -> 3 ; + 13 -> 15 ; +12 [label="12: Exit NSDiscardableContent_frontendChecks \n " color=yellow style=filled] + + +11 [label="11: Start NSDiscardableContent_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 11 -> 12 ; +10 [label="10: Exit NSSecureCoding_frontendChecks \n " color=yellow style=filled] + + +9 [label="9: Start NSSecureCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 9 -> 10 ; +8 [label="8: Exit NSCoding_frontendChecks \n " color=yellow style=filled] + + +7 [label="7: Start NSCoding_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 7 -> 8 ; +6 [label="6: Exit NSMutableCopying_frontendChecks \n " color=yellow style=filled] + + +5 [label="5: Start NSMutableCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 5 -> 6 ; +4 [label="4: Exit NSCopying_frontendChecks \n " color=yellow style=filled] + + +3 [label="3: Start NSCopying_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 3 -> 4 ; +2 [label="2: Exit NSObject_frontendChecks \n " color=yellow style=filled] + + +1 [label="1: Start NSObject_frontendChecks\nFormals: \nLocals: \n " color=yellow style=filled] + + + 1 -> 2 ; } diff --git a/infer/tests/codetoanalyze/objc/warnings/assign_pointer.m b/infer/tests/codetoanalyze/objc/warnings/assign_pointer.m new file mode 100644 index 000000000..53f600fdb --- /dev/null +++ b/infer/tests/codetoanalyze/objc/warnings/assign_pointer.m @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2016 - 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. + */ + +#import + +struct MyStruct { + int* i; +}; + +@protocol P + +@property(assign) NSNumber* shouldReport1; + +@property(atomic, assign) NSObject* shouldReport2; + +@property(assign) id shouldReport3; // id's are pointers to Obj-C objects + +@property(assign) int shouldNotReport1; + +@property(atomic, assign) int shouldNotReport2; + +@property(atomic, strong) NSNumber* shouldNotReport3; + +@property(atomic) NSNumber* shouldNotReport4; // strong is the default attribute + +@property(assign) int* shouldNotReport5; // assign for not-Obj-C pointers is ok + +@property(assign) void* shouldNotReport6; + +@property(assign) struct MyStruct* shouldNotReport7; + +@end diff --git a/infer/tests/codetoanalyze/objc/warnings/atomic_prop.m b/infer/tests/codetoanalyze/objc/warnings/atomic_prop.m index 9b4929be2..c70380631 100644 --- a/infer/tests/codetoanalyze/objc/warnings/atomic_prop.m +++ b/infer/tests/codetoanalyze/objc/warnings/atomic_prop.m @@ -27,7 +27,7 @@ @property int* q; // atomic by default @property(atomic, assign) float f; -@property B* b; +@property(strong) B* b; - (void)write_p:(int)i; - (int)read_p; diff --git a/infer/tests/endtoend/objc/AssignPointerTest.java b/infer/tests/endtoend/objc/AssignPointerTest.java new file mode 100644 index 000000000..3ab97afd2 --- /dev/null +++ b/infer/tests/endtoend/objc/AssignPointerTest.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2016 - 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. + */ + +package endtoend.objc; + +import static org.hamcrest.MatcherAssert.assertThat; +import static utils.matchers.ResultContainsLineNumbers.containsLines; + +import com.google.common.collect.ImmutableList; + +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; + +import java.io.IOException; + +import utils.DebuggableTemporaryFolder; +import utils.InferException; +import utils.InferResults; +import utils.InferRunner; + +public class AssignPointerTest { + + public static final String FILE = + "infer/tests/codetoanalyze/objc/warnings/assign_pointer.m"; + + private static ImmutableList inferCmd; + + public static final String ASSIGN_POINTER_WARNING = "ASSIGN_POINTER_WARNING"; + + @ClassRule + public static DebuggableTemporaryFolder folder = + new DebuggableTemporaryFolder(); + + @BeforeClass + public static void runInfer() throws InterruptedException, IOException { + inferCmd = InferRunner.createiOSInferCommandWithMLBuckets( + folder, + FILE, + "cf", + true); + + } + + @Test + public void matchErrors() + throws InterruptedException, IOException, InferException { + InferResults inferResults = InferRunner.runInferObjC(inferCmd); + assertThat( + "Results should contain the correct assign pointer warnings", + inferResults, + containsLines(new int[]{ + 18, + 20, + 22 + })); + } + +} diff --git a/infer/tests/utils/InferResults.java b/infer/tests/utils/InferResults.java index b48e94df3..b48a58425 100644 --- a/infer/tests/utils/InferResults.java +++ b/infer/tests/utils/InferResults.java @@ -58,6 +58,7 @@ public class InferResults { String errorType = items[2].trim(); if (errorKind.equals("ERROR") || errorType.equals("RETURN_VALUE_IGNORED") || + errorType.equals("ASSIGN_POINTER_WARNING") || errorType.equals("STRONG_DELEGATE_WARNING") || errorType.equals("DIRECT_ATOMIC_PROPERTY_ACCESS") || errorType.equals("CXX_REFERENCE_CAPTURED_IN_OBJC_BLOCK") ||