From 11c6e3e0ee3432b2871ac18ebbbd427844f67233 Mon Sep 17 00:00:00 2001 From: Dulma Churchill Date: Fri, 12 Jun 2020 05:51:58 -0700 Subject: [PATCH] [pulse] Enable pulse memory leaks and disable biabduction one Summary: The new memory leaks analysis is now ready to be enabled by default and turned on in production. This also replaces the biabduction one which is now disabled. Reviewed By: jvillard Differential Revision: D21998666 fbshipit-source-id: 9cd95e894 --- infer/man/man1/infer-full.txt | 2 +- infer/man/man1/infer-report.txt | 2 +- infer/man/man1/infer.txt | 2 +- infer/src/base/IssueType.ml | 9 +- .../build_systems/buck_flavors_diff/fixed.exp | 2 +- .../buck_flavors_diff/previous.exp | 2 +- .../codetoanalyze/c/biabduction/issues.exp | 20 ++-- infer/tests/codetoanalyze/c/pulse/issues.exp | 6 +- .../codetoanalyze/cpp/biabduction/issues.exp | 94 +++++++++---------- .../codetoanalyze/objc/biabduction/issues.exp | 34 +++---- .../tests/codetoanalyze/objc/pulse/issues.exp | 16 ++-- .../codetoanalyze/objcpp/pulse/issues.exp | 2 +- 12 files changed, 97 insertions(+), 94 deletions(-) diff --git a/infer/man/man1/infer-full.txt b/infer/man/man1/infer-full.txt index a7543c1f5..ad013f81b 100644 --- a/infer/man/man1/infer-full.txt +++ b/infer/man/man1/infer-full.txt @@ -368,6 +368,7 @@ OPTIONS Assert_failure (enabled by default), BAD_POINTER_COMPARISON (enabled by default), BIABDUCTION_ANALYSIS_STOPS (disabled by default), + BIABDUCTION_MEMORY_LEAK (disabled by default), BIABD_CONDITION_ALWAYS_FALSE (disabled by default), BIABD_CONDITION_ALWAYS_TRUE (disabled by default), BIABD_REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by @@ -494,7 +495,6 @@ OPTIONS PRECONDITION_NOT_FOUND (enabled by default), PRECONDITION_NOT_MET (enabled by default), PREMATURE_NIL_TERMINATION_ARGUMENT (enabled by default), - PULSE_MEMORY_LEAK (disabled by default), PURE_FUNCTION (enabled by default), QUANDARY_TAINT_ERROR (enabled by default), REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by default), diff --git a/infer/man/man1/infer-report.txt b/infer/man/man1/infer-report.txt index bb0dbed12..0aeeb0e54 100644 --- a/infer/man/man1/infer-report.txt +++ b/infer/man/man1/infer-report.txt @@ -90,6 +90,7 @@ OPTIONS Assert_failure (enabled by default), BAD_POINTER_COMPARISON (enabled by default), BIABDUCTION_ANALYSIS_STOPS (disabled by default), + BIABDUCTION_MEMORY_LEAK (disabled by default), BIABD_CONDITION_ALWAYS_FALSE (disabled by default), BIABD_CONDITION_ALWAYS_TRUE (disabled by default), BIABD_REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by @@ -216,7 +217,6 @@ OPTIONS PRECONDITION_NOT_FOUND (enabled by default), PRECONDITION_NOT_MET (enabled by default), PREMATURE_NIL_TERMINATION_ARGUMENT (enabled by default), - PULSE_MEMORY_LEAK (disabled by default), PURE_FUNCTION (enabled by default), QUANDARY_TAINT_ERROR (enabled by default), REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by default), diff --git a/infer/man/man1/infer.txt b/infer/man/man1/infer.txt index 8de1edfd1..8422f8799 100644 --- a/infer/man/man1/infer.txt +++ b/infer/man/man1/infer.txt @@ -368,6 +368,7 @@ OPTIONS Assert_failure (enabled by default), BAD_POINTER_COMPARISON (enabled by default), BIABDUCTION_ANALYSIS_STOPS (disabled by default), + BIABDUCTION_MEMORY_LEAK (disabled by default), BIABD_CONDITION_ALWAYS_FALSE (disabled by default), BIABD_CONDITION_ALWAYS_TRUE (disabled by default), BIABD_REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by @@ -494,7 +495,6 @@ OPTIONS PRECONDITION_NOT_FOUND (enabled by default), PRECONDITION_NOT_MET (enabled by default), PREMATURE_NIL_TERMINATION_ARGUMENT (enabled by default), - PULSE_MEMORY_LEAK (disabled by default), PURE_FUNCTION (enabled by default), QUANDARY_TAINT_ERROR (enabled by default), REGISTERED_OBSERVER_BEING_DEALLOCATED (enabled by default), diff --git a/infer/src/base/IssueType.ml b/infer/src/base/IssueType.ml index 05ab139bd..7ce20575d 100644 --- a/infer/src/base/IssueType.ml +++ b/infer/src/base/IssueType.ml @@ -671,8 +671,8 @@ let expensive_loop_invariant_call = let memory_leak = - register_from_string ~id:"MEMORY_LEAK" Error Biabduction - ~user_documentation:[%blob "../../documentation/issues/MEMORY_LEAK.md"] + register_from_string ~enabled:false ~id:"BIABDUCTION_MEMORY_LEAK" ~hum:"Memory Leak" Error + Biabduction let missing_fld = @@ -736,7 +736,10 @@ let premature_nil_termination = ~user_documentation:[%blob "../../documentation/issues/PREMATURE_NIL_TERMINATION_ARGUMENT.md"] -let pulse_memory_leak = register_from_string ~enabled:false ~id:"PULSE_MEMORY_LEAK" Error Pulse +let pulse_memory_leak = + register_from_string ~id:"MEMORY_LEAK" Error Pulse + ~user_documentation:[%blob "../../documentation/issues/MEMORY_LEAK.md"] + let pure_function = register_from_string ~id:"PURE_FUNCTION" Error Purity diff --git a/infer/tests/build_systems/buck_flavors_diff/fixed.exp b/infer/tests/build_systems/buck_flavors_diff/fixed.exp index 4e2151c5a..2ae11db06 100644 --- a/infer/tests/build_systems/buck_flavors_diff/fixed.exp +++ b/infer/tests/build_systems/buck_flavors_diff/fixed.exp @@ -1 +1 @@ -MEMORY_LEAK, no_bucket, src/hello.c, test3, 3 +BIABDUCTION_MEMORY_LEAK, no_bucket, src/hello.c, test3, 3 diff --git a/infer/tests/build_systems/buck_flavors_diff/previous.exp b/infer/tests/build_systems/buck_flavors_diff/previous.exp index 00c98513d..59f4bdc33 100644 --- a/infer/tests/build_systems/buck_flavors_diff/previous.exp +++ b/infer/tests/build_systems/buck_flavors_diff/previous.exp @@ -1,3 +1,3 @@ src/hello.c, test1, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure test1()] -src/hello.c, test3, 3, MEMORY_LEAK, no_bucket, ERROR, [start of procedure test3(),Taking true branch] +src/hello.c, test3, 3, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure test3(),Taking true branch] src/hello2.c, test_hello2, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure test_hello2()] diff --git a/infer/tests/codetoanalyze/c/biabduction/issues.exp b/infer/tests/codetoanalyze/c/biabduction/issues.exp index 54f6f37bd..a71ec33cb 100644 --- a/infer/tests/codetoanalyze/c/biabduction/issues.exp +++ b/infer/tests/codetoanalyze/c/biabduction/issues.exp @@ -20,23 +20,23 @@ codetoanalyze/c/biabduction/dangling_deref/dpd.c, nodpd1, 3, NULL_DEREFERENCE, B codetoanalyze/c/biabduction/initialization/compound_literal.c, divide_by_zero, 0, DIVIDE_BY_ZERO, no_bucket codetoanalyze/c/biabduction/initialization/initlistexpr.c, init_divide_by_zero, 2, Assert_failure, no_bucket codetoanalyze/c/biabduction/initialization/initlistexpr.c, init_divide_by_zero, 2, DIVIDE_BY_ZERO, no_bucket -codetoanalyze/c/biabduction/lists/list_api.c, FP_list_build_and_free_good, 11, MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/lists/list_api.c, FP_list_build_and_free_good, 11, BIABDUCTION_MEMORY_LEAK, no_bucket codetoanalyze/c/biabduction/lists/lists.c, call_delete_all2, 5, PRECONDITION_NOT_MET, no_bucket codetoanalyze/c/biabduction/lists/lists.c, lists_main, 2, DIVIDE_BY_ZERO, no_bucket codetoanalyze/c/biabduction/local_vars/local_vars.c, m1, 6, DIVIDE_BY_ZERO, no_bucket codetoanalyze/c/biabduction/local_vars/local_vars.c, m2, 9, DIVIDE_BY_ZERO, no_bucket codetoanalyze/c/biabduction/local_vars/local_vars.c, mm, 6, DIVIDE_BY_ZERO, no_bucket codetoanalyze/c/biabduction/local_vars/local_vars.c, t, 8, DIVIDE_BY_ZERO, no_bucket -codetoanalyze/c/biabduction/memory_leaks/cleanup_attribute.c, FP_cleanup_malloc_good, 4, MEMORY_LEAK, no_bucket -codetoanalyze/c/biabduction/memory_leaks/cleanup_attribute.c, FP_cleanup_string_good, 2, MEMORY_LEAK, no_bucket -codetoanalyze/c/biabduction/memory_leaks/test.c, common_realloc_leak, 3, MEMORY_LEAK, no_bucket -codetoanalyze/c/biabduction/memory_leaks/test.c, common_realloc_leak2, 3, MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/memory_leaks/cleanup_attribute.c, FP_cleanup_malloc_good, 4, BIABDUCTION_MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/memory_leaks/cleanup_attribute.c, FP_cleanup_string_good, 2, BIABDUCTION_MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/memory_leaks/test.c, common_realloc_leak, 3, BIABDUCTION_MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/memory_leaks/test.c, common_realloc_leak2, 3, BIABDUCTION_MEMORY_LEAK, no_bucket codetoanalyze/c/biabduction/memory_leaks/test.c, common_realloc_leak2, 5, NULL_TEST_AFTER_DEREFERENCE, no_bucket -codetoanalyze/c/biabduction/memory_leaks/test.c, conditional_last_instruction, 2, MEMORY_LEAK, no_bucket -codetoanalyze/c/biabduction/memory_leaks/test.c, malloc_sizeof_value_leak_bad, 7, MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/memory_leaks/test.c, conditional_last_instruction, 2, BIABDUCTION_MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/memory_leaks/test.c, malloc_sizeof_value_leak_bad, 7, BIABDUCTION_MEMORY_LEAK, no_bucket codetoanalyze/c/biabduction/memory_leaks/test.c, malloc_sizeof_value_leak_bad, 8, ARRAY_OUT_OF_BOUNDS_L3, no_bucket -codetoanalyze/c/biabduction/memory_leaks/test.c, simple_leak, 2, MEMORY_LEAK, no_bucket -codetoanalyze/c/biabduction/memory_leaks/test.c, uses_allocator, 3, MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/memory_leaks/test.c, simple_leak, 2, BIABDUCTION_MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/memory_leaks/test.c, uses_allocator, 3, BIABDUCTION_MEMORY_LEAK, no_bucket codetoanalyze/c/biabduction/misc/abduce.c, FN_set_ptr_param_array_get_null_bad, 3, PRECONDITION_NOT_MET, no_bucket codetoanalyze/c/biabduction/misc/arrays.c, DecodeCurrentValue, 5, Assert_failure, no_bucket codetoanalyze/c/biabduction/misc/example.c, bar, 2, DIVIDE_BY_ZERO, no_bucket @@ -84,7 +84,7 @@ codetoanalyze/c/biabduction/null_dereference/getc.c, crash_rewind, 4, NULL_DEREF codetoanalyze/c/biabduction/null_dereference/getc.c, crash_ungetc, 5, NULL_DEREFERENCE, B1 codetoanalyze/c/biabduction/null_dereference/getc.c, crash_vfprintf, 5, NULL_DEREFERENCE, B1 codetoanalyze/c/biabduction/null_dereference/getcwd.c, getcwd_no_buf_no_check_bad, 2, NULL_DEREFERENCE, B1 -codetoanalyze/c/biabduction/null_dereference/getcwd.c, getcwd_no_buf_no_free_bad, 3, MEMORY_LEAK, no_bucket +codetoanalyze/c/biabduction/null_dereference/getcwd.c, getcwd_no_buf_no_free_bad, 3, BIABDUCTION_MEMORY_LEAK, no_bucket codetoanalyze/c/biabduction/null_dereference/getcwd.c, getcwd_no_check_bad, 3, NULL_DEREFERENCE, B1 codetoanalyze/c/biabduction/null_dereference/issue_680.c, null_ptr_deref2_bad, 0, NULL_DEREFERENCE, B1 codetoanalyze/c/biabduction/null_dereference/issue_680.c, null_ptr_deref_bad, 0, NULL_DEREFERENCE, B1 diff --git a/infer/tests/codetoanalyze/c/pulse/issues.exp b/infer/tests/codetoanalyze/c/pulse/issues.exp index 50b6c54ac..02709e060 100644 --- a/infer/tests/codetoanalyze/c/pulse/issues.exp +++ b/infer/tests/codetoanalyze/c/pulse/issues.exp @@ -1,5 +1,5 @@ -codetoanalyze/c/pulse/memory_leak.c, malloc_interproc_no_free_bad, 0, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,when calling `create_p` here,allocated by call to `malloc` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/c/pulse/memory_leak.c, malloc_interproc_no_free_bad2, 4, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `malloc` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/c/pulse/memory_leak.c, malloc_no_free_bad, 0, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `malloc` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/c/pulse/memory_leak.c, malloc_interproc_no_free_bad, 0, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,when calling `create_p` here,allocated by call to `malloc` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/c/pulse/memory_leak.c, malloc_interproc_no_free_bad2, 4, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `malloc` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/c/pulse/memory_leak.c, malloc_no_free_bad, 0, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `malloc` (modelled),allocation part of the trace ends here,memory becomes unreachable here] codetoanalyze/c/pulse/nullptr.c, malloc_no_check_bad, 2, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,allocated by call to `malloc` (modelled),is the null pointer,use-after-lifetime part of the trace starts here,allocated by call to `malloc` (modelled),assigned,invalid access occurs here] codetoanalyze/c/pulse/nullptr.c, nullptr_deref_young_bad, 5, NULLPTR_DEREFERENCE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,is the null pointer,use-after-lifetime part of the trace starts here,assigned,invalid access occurs here] diff --git a/infer/tests/codetoanalyze/cpp/biabduction/issues.exp b/infer/tests/codetoanalyze/cpp/biabduction/issues.exp index 71fc1d3fb..512e906a4 100644 --- a/infer/tests/codetoanalyze/cpp/biabduction/issues.exp +++ b/infer/tests/codetoanalyze/cpp/biabduction/issues.exp @@ -2,7 +2,7 @@ codetoanalyze/cpp/biabduction/biabduction/process_splitting_assert.cpp, fail, 2, codetoanalyze/cpp/biabduction/c_tests/c_bugs.cpp, crash_fgetc, 4, NULL_DEREFERENCE, B1, ERROR, [start of procedure crash_fgetc()] codetoanalyze/cpp/biabduction/c_tests/c_bugs.cpp, crash_getc, 4, NULL_DEREFERENCE, B1, ERROR, [start of procedure crash_getc()] codetoanalyze/cpp/biabduction/c_tests/c_bugs.cpp, malloc_fail_gets_reported, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure malloc_fail_gets_reported()] -codetoanalyze/cpp/biabduction/c_tests/c_bugs.cpp, malloc_memory_leak_is_reported, 0, MEMORY_LEAK, no_bucket, ERROR, [start of procedure malloc_memory_leak_is_reported()] +codetoanalyze/cpp/biabduction/c_tests/c_bugs.cpp, malloc_memory_leak_is_reported, 0, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure malloc_memory_leak_is_reported()] codetoanalyze/cpp/biabduction/c_tests/c_bugs.cpp, memcpy_spec_is_found, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure memcpy_spec_is_found()] codetoanalyze/cpp/biabduction/c_tests/c_bugs.cpp, resource_leak_is_reported, 0, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure resource_leak_is_reported()] codetoanalyze/cpp/biabduction/include_header/header.h, header::A::div0, 0, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure div0] @@ -11,9 +11,9 @@ codetoanalyze/cpp/biabduction/include_header/header2.h, header2::B:: codetoanalyze/cpp/biabduction/include_header/header2.h, header2::B::div0, 0, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure div0] codetoanalyze/cpp/biabduction/include_header/header2.h, header2::div0_templ, 1, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure header2::div0_templ()] codetoanalyze/cpp/biabduction/include_header/header2.h, header2::div0_templ, 1, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure header2::div0_templ()] -codetoanalyze/cpp/biabduction/memory_leaks/array_leak.cpp, leak, 4, MEMORY_LEAK, CPP, ERROR, [start of procedure leak()] -codetoanalyze/cpp/biabduction/memory_leaks/object_leak.cpp, object_leak, 0, MEMORY_LEAK, CPP, ERROR, [start of procedure object_leak(),start of procedure Rectangle,return from a call to Rectangle::Rectangle] -codetoanalyze/cpp/biabduction/memory_leaks/raii_malloc.cpp, memory_leak, 0, MEMORY_LEAK, no_bucket, ERROR, [start of procedure memory_leak()] +codetoanalyze/cpp/biabduction/memory_leaks/array_leak.cpp, leak, 4, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure leak()] +codetoanalyze/cpp/biabduction/memory_leaks/object_leak.cpp, object_leak, 0, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure object_leak(),start of procedure Rectangle,return from a call to Rectangle::Rectangle] +codetoanalyze/cpp/biabduction/memory_leaks/raii_malloc.cpp, memory_leak, 0, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure memory_leak()] codetoanalyze/cpp/biabduction/models/atomic.cpp, atomic_test::FP_compare_exchange_strong_impossible_npe1_ok, 6, NULL_DEREFERENCE, B1, ERROR, [start of procedure atomic_test::FP_compare_exchange_strong_impossible_npe1_ok(),Skipping atomic: method has no implementation,Skipping compare_exchange_strong: method has no implementation,Taking false branch,Taking false branch,Taking true branch] codetoanalyze/cpp/biabduction/models/atomic.cpp, atomic_test::FP_compare_exchange_strong_impossible_npe2_ok, 6, NULL_DEREFERENCE, B1, ERROR, [start of procedure atomic_test::FP_compare_exchange_strong_impossible_npe2_ok(),Skipping atomic: method has no implementation,Skipping compare_exchange_strong: method has no implementation,Taking false branch,Taking false branch,Taking true branch] codetoanalyze/cpp/biabduction/models/atomic.cpp, atomic_test::FP_compare_exchange_weak_impossible_npe1_ok, 6, NULL_DEREFERENCE, B1, ERROR, [start of procedure atomic_test::FP_compare_exchange_weak_impossible_npe1_ok(),Skipping atomic: method has no implementation,Skipping compare_exchange_weak: method has no implementation,Taking false branch,Taking false branch,Taking true branch] @@ -79,39 +79,39 @@ codetoanalyze/cpp/biabduction/overwrite_attribute/main.cpp, testSetIntValue, 3, codetoanalyze/cpp/biabduction/pointers/unintialized.cpp, known_ctor_dangling_bad, 2, DANGLING_POINTER_DEREFERENCE, no_bucket, ERROR, [start of procedure known_ctor_dangling_bad(),start of procedure TestDangling,return from a call to TestDangling::TestDangling] codetoanalyze/cpp/biabduction/pointers/unintialized.cpp, uninitialized_dangling_bad, 2, DANGLING_POINTER_DEREFERENCE, no_bucket, ERROR, [start of procedure uninitialized_dangling_bad()] codetoanalyze/cpp/biabduction/resource_leaks/raii.cpp, resource_leak, 7, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure resource_leak(),Taking false branch] -codetoanalyze/cpp/biabduction/smart_ptr/deref_after_move_example.cpp, deref_after_mode_example::Person::Person, 3, MEMORY_LEAK, CPP, ERROR, [start of procedure Person,Skipping unique_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/deref_after_move_example.cpp, deref_after_mode_example::Person::Person, 3, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure Person,Skipping unique_ptr: method has no implementation] codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::ERROR_shared_ptr_check_notnull_ok, 2, Cannot_star, no_bucket, ERROR, [start of procedure shared_ptr::ERROR_shared_ptr_check_notnull_ok(),Skipping shared_ptr: method has no implementation] codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::ERROR_shared_ptr_check_null_ok, 2, Cannot_star, no_bucket, ERROR, [start of procedure shared_ptr::ERROR_shared_ptr_check_null_ok(),Skipping shared_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_reset_ptr_null_deref2_bad, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_reset_ptr_null_deref2_bad(),Skipping shared_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_reset_ptr_null_deref2_bad, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_reset_ptr_null_deref2_bad(),Skipping shared_ptr: method has no implementation,Skipping reset: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_reset_ptr_null_deref_bad, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_reset_ptr_null_deref_bad(),Skipping shared_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_shared_ptr_assign_null_deref_bad, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_shared_ptr_assign_null_deref_bad(),Skipping shared_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_shared_ptr_move_null_deref_bad, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_shared_ptr_move_null_deref_bad(),Skipping shared_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FP_reset_ptr_deref2_ok, 3, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FP_reset_ptr_deref2_ok(),Skipping shared_ptr: method has no implementation,Skipping reset: method has no implementation,Skipping reset: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FP_reset_ptr_deref_ok, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FP_reset_ptr_deref_ok(),Skipping shared_ptr: method has no implementation,Skipping reset: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FP_shared_ptr_assign_deref_ok, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FP_shared_ptr_assign_deref_ok(),Skipping shared_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FP_shared_ptr_copy_deref_ok, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FP_shared_ptr_copy_deref_ok(),Skipping shared_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_FP_reset_ptr_null_deref2_bad, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_FP_reset_ptr_null_deref2_bad(),Skipping unique_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_FP_reset_ptr_null_deref2_bad, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_FP_reset_ptr_null_deref2_bad(),Skipping unique_ptr: method has no implementation,Skipping reset: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_FP_reset_ptr_null_deref_bad, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_FP_reset_ptr_null_deref_bad(),Skipping unique_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_unique_ptr_assign_null_deref_bad, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_unique_ptr_assign_null_deref_bad(),Skipping unique_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_unique_ptr_move_null_deref_bad, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_unique_ptr_move_null_deref_bad(),Skipping unique_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FP_reset_ptr_deref2_ok, 3, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FP_reset_ptr_deref2_ok(),Skipping unique_ptr: method has no implementation,Skipping reset: method has no implementation,Skipping reset: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FP_reset_ptr_deref_ok, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FP_reset_ptr_deref_ok(),Skipping unique_ptr: method has no implementation,Skipping reset: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FP_unique_ptr_move_deref_ok, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FP_unique_ptr_move_deref_ok(),Skipping unique_ptr: method has no implementation] -codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_assign_deref_ok, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::unique_ptr_assign_deref_ok(),Skipping unique_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_reset_ptr_null_deref2_bad, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_reset_ptr_null_deref2_bad(),Skipping shared_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_reset_ptr_null_deref2_bad, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_reset_ptr_null_deref2_bad(),Skipping shared_ptr: method has no implementation,Skipping reset: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_reset_ptr_null_deref_bad, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_reset_ptr_null_deref_bad(),Skipping shared_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_shared_ptr_assign_null_deref_bad, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_shared_ptr_assign_null_deref_bad(),Skipping shared_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FN_shared_ptr_move_null_deref_bad, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FN_shared_ptr_move_null_deref_bad(),Skipping shared_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FP_reset_ptr_deref2_ok, 3, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FP_reset_ptr_deref2_ok(),Skipping shared_ptr: method has no implementation,Skipping reset: method has no implementation,Skipping reset: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FP_reset_ptr_deref_ok, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FP_reset_ptr_deref_ok(),Skipping shared_ptr: method has no implementation,Skipping reset: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FP_shared_ptr_assign_deref_ok, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FP_shared_ptr_assign_deref_ok(),Skipping shared_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/shared_ptr_deref.cpp, shared_ptr::FP_shared_ptr_copy_deref_ok, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure shared_ptr::FP_shared_ptr_copy_deref_ok(),Skipping shared_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_FP_reset_ptr_null_deref2_bad, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_FP_reset_ptr_null_deref2_bad(),Skipping unique_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_FP_reset_ptr_null_deref2_bad, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_FP_reset_ptr_null_deref2_bad(),Skipping unique_ptr: method has no implementation,Skipping reset: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_FP_reset_ptr_null_deref_bad, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_FP_reset_ptr_null_deref_bad(),Skipping unique_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_unique_ptr_assign_null_deref_bad, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_unique_ptr_assign_null_deref_bad(),Skipping unique_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FN_unique_ptr_move_null_deref_bad, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FN_unique_ptr_move_null_deref_bad(),Skipping unique_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FP_reset_ptr_deref2_ok, 3, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FP_reset_ptr_deref2_ok(),Skipping unique_ptr: method has no implementation,Skipping reset: method has no implementation,Skipping reset: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FP_reset_ptr_deref_ok, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FP_reset_ptr_deref_ok(),Skipping unique_ptr: method has no implementation,Skipping reset: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::FP_unique_ptr_move_deref_ok, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::FP_unique_ptr_move_deref_ok(),Skipping unique_ptr: method has no implementation] +codetoanalyze/cpp/biabduction/smart_ptr/unique_ptr_deref.cpp, unique_ptr::unique_ptr_assign_deref_ok, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure unique_ptr::unique_ptr_assign_deref_ok(),Skipping unique_ptr: method has no implementation] codetoanalyze/cpp/biabduction/stack_escape/basic.cpp, basic_escape_local_bad, 3, BIABD_STACK_VARIABLE_ADDRESS_ESCAPE, no_bucket, ERROR, [start of procedure basic_escape_local_bad(),return from a call to basic_escape_local_bad] codetoanalyze/cpp/biabduction/stack_escape/basic.cpp, basic_escape_param_bad, 0, BIABD_STACK_VARIABLE_ADDRESS_ESCAPE, no_bucket, ERROR, [start of procedure basic_escape_param_bad(),return from a call to basic_escape_param_bad] codetoanalyze/cpp/biabduction/stack_escape/basic.cpp, escape_local_struct_member_bad, 3, BIABD_STACK_VARIABLE_ADDRESS_ESCAPE, no_bucket, ERROR, [start of procedure escape_local_struct_member_bad(),start of procedure EscapeTest,return from a call to EscapeTest::EscapeTest,return from a call to escape_local_struct_member_bad] codetoanalyze/cpp/biabduction/static_local/nonstatic_local_bad.cpp, nonstatic_local_bad, 3, BIABD_STACK_VARIABLE_ADDRESS_ESCAPE, no_bucket, ERROR, [start of procedure nonstatic_local_bad(),return from a call to nonstatic_local_bad] codetoanalyze/cpp/biabduction/static_local/nonstatic_local_bad.cpp, nonstatic_local_caller, 2, DANGLING_POINTER_DEREFERENCE, no_bucket, ERROR, [start of procedure nonstatic_local_caller(),start of procedure nonstatic_local_bad(),return from a call to nonstatic_local_bad] codetoanalyze/cpp/biabduction/subtyping/cast_with_enforce.cpp, cast_with_enforce::cast_with_npe, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure cast_with_enforce::cast_with_npe(),start of procedure Base,return from a call to cast_with_enforce::Base::Base] +codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::rightPointerCast, 4, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure dynamic__cast::rightPointerCast(),start of procedure Derived,start of procedure Base,return from a call to dynamic__cast::Base::Base,return from a call to dynamic__cast::Derived::Derived,Taking true branch] codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::rightPointerCast, 4, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure dynamic__cast::rightPointerCast(),start of procedure Derived,start of procedure Base,return from a call to dynamic__cast::Base::Base,return from a call to dynamic__cast::Derived::Derived,Taking true branch] -codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::rightPointerCast, 4, MEMORY_LEAK, CPP, ERROR, [start of procedure dynamic__cast::rightPointerCast(),start of procedure Derived,start of procedure Base,return from a call to dynamic__cast::Base::Base,return from a call to dynamic__cast::Derived::Derived,Taking true branch] -codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::rightReferenceCast, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure dynamic__cast::rightReferenceCast(),start of procedure Derived,start of procedure Base,return from a call to dynamic__cast::Base::Base,return from a call to dynamic__cast::Derived::Derived] +codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::rightReferenceCast, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure dynamic__cast::rightReferenceCast(),start of procedure Derived,start of procedure Base,return from a call to dynamic__cast::Base::Base,return from a call to dynamic__cast::Derived::Derived] codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::wrongCastOfArgumentPointer, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure dynamic__cast::wrongCastOfArgumentPointer(),start of procedure Base,return from a call to dynamic__cast::Base::Base,start of procedure dynamic__cast::castOfArgumentPointer(),Taking false branch,return from a call to dynamic__cast::castOfArgumentPointer] codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::wrongCastOfArgumentReference, 2, CLASS_CAST_EXCEPTION, no_bucket, ERROR, [start of procedure dynamic__cast::wrongCastOfArgumentReference(),start of procedure Base,return from a call to dynamic__cast::Base::Base] -codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::wrongPointerCast, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure dynamic__cast::wrongPointerCast(),start of procedure Base,return from a call to dynamic__cast::Base::Base] +codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::wrongPointerCast, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure dynamic__cast::wrongPointerCast(),start of procedure Base,return from a call to dynamic__cast::Base::Base] codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::wrongPointerCast, 6, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure dynamic__cast::wrongPointerCast(),start of procedure Base,return from a call to dynamic__cast::Base::Base,Taking false branch] codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::wrongReferenceCast, 3, CLASS_CAST_EXCEPTION, no_bucket, ERROR, [start of procedure dynamic__cast::wrongReferenceCast(),start of procedure Base,return from a call to dynamic__cast::Base::Base] codetoanalyze/cpp/biabduction/subtyping/dynamic_cast.cpp, dynamic__cast::wrongReferenceCastNotAssigned, 3, CLASS_CAST_EXCEPTION, no_bucket, ERROR, [start of procedure dynamic__cast::wrongReferenceCastNotAssigned(),start of procedure Base,return from a call to dynamic__cast::Base::Base] @@ -123,18 +123,18 @@ codetoanalyze/cpp/biabduction/templates/mangling.cpp, bad_integral_types_templat codetoanalyze/cpp/biabduction/templates/mangling.cpp, bad_nullptr_templates, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure bad_nullptr_templates(),start of procedure NullPtrTemplate,return from a call to NullPtrTemplate::NullPtrTemplate] codetoanalyze/cpp/biabduction/templates/mangling.cpp, bad_packed_templates, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure bad_packed_templates(),start of procedure Tuple,return from a call to Tuple>::Tuple] codetoanalyze/cpp/biabduction/templates/mangling.cpp, bad_reference_and_pointer_templates, 5, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure bad_reference_and_pointer_templates(),start of procedure PointerTypeTemplate,return from a call to PointerTypeTemplate::PointerTypeTemplate,start of procedure PointerTypeTemplate2,return from a call to PointerTypeTemplate2::PointerTypeTemplate2,start of procedure FunctionPointerTemplate,return from a call to FunctionPointerTemplate::FunctionPointerTemplate,start of procedure ReferenceTypeTemplate,return from a call to ReferenceTypeTemplate::ReferenceTypeTemplate] -codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, employee_typeid, 3, MEMORY_LEAK, CPP, ERROR, [start of procedure employee_typeid(),start of procedure Employee,start of procedure Person,return from a call to Person::Person,return from a call to Employee::Employee] +codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, employee_typeid, 3, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure employee_typeid(),start of procedure Employee,start of procedure Person,return from a call to Person::Person,return from a call to Employee::Employee] codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, employee_typeid, 4, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure employee_typeid(),start of procedure Employee,start of procedure Person,return from a call to Person::Person,return from a call to Employee::Employee,Taking true branch] -codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_ptr_typeid, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure person_ptr_typeid(),start of procedure Person,return from a call to Person::Person] +codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_ptr_typeid, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure person_ptr_typeid(),start of procedure Person,return from a call to Person::Person] codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_ptr_typeid, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure person_ptr_typeid(),start of procedure Person,return from a call to Person::Person,Taking true branch] -codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_typeid, 3, MEMORY_LEAK, CPP, ERROR, [start of procedure person_typeid(),start of procedure Person,return from a call to Person::Person] +codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_typeid, 3, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure person_typeid(),start of procedure Person,return from a call to Person::Person] codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_typeid, 6, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure person_typeid(),start of procedure Person,return from a call to Person::Person,Taking false branch] -codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_typeid_name, 3, MEMORY_LEAK, CPP, ERROR, [start of procedure person_typeid_name(),start of procedure Person,return from a call to Person::Person] -codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_typeid_name, 4, MEMORY_LEAK, CPP, ERROR, [start of procedure person_typeid_name(),start of procedure Person,return from a call to Person::Person] +codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_typeid_name, 3, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure person_typeid_name(),start of procedure Person,return from a call to Person::Person] +codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_typeid_name, 4, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure person_typeid_name(),start of procedure Person,return from a call to Person::Person] codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, person_typeid_name, 8, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure person_typeid_name(),start of procedure Person,return from a call to Person::Person,Taking false branch] -codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, template_type_id_person, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure template_type_id_person(),start of procedure Person,return from a call to Person::Person,Skipping template_typeid(): empty list of specs] +codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, template_type_id_person, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure template_type_id_person(),start of procedure Person,return from a call to Person::Person,Skipping template_typeid(): empty list of specs] codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, template_type_id_person, 5, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure template_type_id_person(),start of procedure Person,return from a call to Person::Person,Taking false branch] -codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, template_typeid, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure template_typeid(),start of procedure Person,return from a call to Person::Person,start of procedure Person,return from a call to Person::Person,start of procedure ~Person,start of procedure __infer_inner_destructor_~Person,return from a call to Person::__infer_inner_destructor_~Person,return from a call to Person::~Person,start of procedure ~Person,start of procedure __infer_inner_destructor_~Person,return from a call to Person::__infer_inner_destructor_~Person,return from a call to Person::~Person] +codetoanalyze/cpp/biabduction/types/typeid_expr.cpp, template_typeid, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure template_typeid(),start of procedure Person,return from a call to Person::Person,start of procedure Person,return from a call to Person::Person,start of procedure ~Person,start of procedure __infer_inner_destructor_~Person,return from a call to Person::__infer_inner_destructor_~Person,return from a call to Person::~Person,start of procedure ~Person,start of procedure __infer_inner_destructor_~Person,return from a call to Person::__infer_inner_destructor_~Person,return from a call to Person::~Person] codetoanalyze/cpp/biabduction/use_after_free/foreach_map.cpp, use_after_free::Basic::test_double_delete_bad, 3, BIABD_USE_AFTER_FREE, B1, ERROR, [start of procedure test_double_delete_bad,Skipping Y: method has no implementation] codetoanalyze/cpp/biabduction/use_after_free/foreach_map.cpp, use_after_free::Basic::test_for_map_delete_ok_FP, 2, BIABD_USE_AFTER_FREE, B5, ERROR, [start of procedure test_for_map_delete_ok_FP,Loop condition is true. Entering loop body,Skipping operator*: method has no implementation,Loop condition is true. Entering loop body,Skipping operator*: method has no implementation] codetoanalyze/cpp/biabduction/use_after_free/foreach_map.cpp, use_after_free::Basic::test_for_umap_delete_ok_FP, 2, BIABD_USE_AFTER_FREE, B5, ERROR, [start of procedure test_for_umap_delete_ok_FP,Loop condition is true. Entering loop body,Skipping operator*: method has no implementation,Loop condition is true. Entering loop body,Skipping operator*: method has no implementation] @@ -172,31 +172,31 @@ codetoanalyze/cpp/shared/constructors/constructor_init.cpp, delegate_constr_f_di codetoanalyze/cpp/shared/constructors/constructor_init.cpp, f2_div0, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure f2_div0(),start of procedure B,start of procedure A,return from a call to A::A,start of procedure T,return from a call to B::T::T,return from a call to B::B] codetoanalyze/cpp/shared/constructors/constructor_init.cpp, f_div0, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure f_div0(),start of procedure B,start of procedure A,return from a call to A::A,start of procedure T,return from a call to B::T::T,return from a call to B::B] codetoanalyze/cpp/shared/constructors/constructor_init.cpp, t_div0, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure t_div0(),start of procedure B,start of procedure A,return from a call to A::A,start of procedure T,return from a call to B::T::T,return from a call to B::B] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::array_of_class_with_not_constant_size, 1, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::array_of_class_with_not_constant_size(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is true] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::array_of_person_with_constant_size, 0, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::array_of_person_with_constant_size()] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::array_of_class_with_not_constant_size, 1, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::array_of_class_with_not_constant_size(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is true] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::array_of_person_with_constant_size, 0, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::array_of_person_with_constant_size()] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_1_arg_new_div0, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::constructor_1_arg_new_div0(),start of procedure Person,return from a call to constructor_new::Person::Person] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_1_arg_new_div0, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::constructor_1_arg_new_div0(),start of procedure Person,return from a call to constructor_new::Person::Person] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_1_arg_new_div0, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::constructor_1_arg_new_div0(),start of procedure Person,return from a call to constructor_new::Person::Person] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_3_args_new_div0, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::constructor_3_args_new_div0(),start of procedure Person,return from a call to constructor_new::Person::Person] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_3_args_new_div0, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::constructor_3_args_new_div0(),start of procedure Person,return from a call to constructor_new::Person::Person] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_3_args_new_div0, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::constructor_3_args_new_div0(),start of procedure Person,return from a call to constructor_new::Person::Person] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_nodes, 3, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::constructor_nodes(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is false,start of procedure Person,return from a call to constructor_new::Person::Person] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_nodes, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::constructor_nodes(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is false,start of procedure Person,return from a call to constructor_new::Person::Person] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::constructor_nodes, 3, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::constructor_nodes(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is false,start of procedure Person,return from a call to constructor_new::Person::Person] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::float_init_number, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::float_init_number()] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::float_init_number, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::float_init_number()] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::float_init_number, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::float_init_number()] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_array, 4, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_array(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is true,start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_array, 4, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::int_array(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is true,start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_array, 4, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_array(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is true,start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_array_init, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_array_init()] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_array_init, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::int_array_init()] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_array_init, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_array_init()] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_empty, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_empty()] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_empty, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::int_init_empty()] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_empty, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_empty()] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_empty_list, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::int_init_empty_list()] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_empty_list_new, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_empty_list_new()] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_empty_list_new, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::int_init_empty_list_new()] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_empty_list_new, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_empty_list_new()] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_nodes, 3, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_nodes(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is false] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_nodes, 3, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_nodes(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is false] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_nodes, 4, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_nodes(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is false] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_nodes, 4, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::int_init_nodes(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is false] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_nodes, 4, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_nodes(),start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,start of procedure constructor_new::getValue(),return from a call to constructor_new::getValue,Condition is false] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_number, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_number()] codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_number, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_new::int_init_number()] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::int_init_number, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::int_init_number()] -codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::matrix_of_person, 2, MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::matrix_of_person()] +codetoanalyze/cpp/shared/constructors/constructor_new.cpp, constructor_new::matrix_of_person, 2, BIABDUCTION_MEMORY_LEAK, CPP, ERROR, [start of procedure constructor_new::matrix_of_person()] codetoanalyze/cpp/shared/constructors/constructor_with_body.cpp, constructor_with_body::test_div0, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_with_body::test_div0(),start of procedure X,start of procedure init,return from a call to constructor_with_body::X::init,return from a call to constructor_with_body::X::X,start of procedure div] codetoanalyze/cpp/shared/constructors/constructor_with_body.cpp, constructor_with_body::test_div0_default_constructor, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure constructor_with_body::test_div0_default_constructor(),start of procedure X,start of procedure init,return from a call to constructor_with_body::X::init,return from a call to constructor_with_body::X::X,start of procedure div] codetoanalyze/cpp/shared/constructors/copy_array_field.cpp, copy_array_field::npe, 4, NULL_DEREFERENCE, B1, ERROR, [start of procedure copy_array_field::npe(),start of procedure X,return from a call to copy_array_field::X::X,start of procedure X,return from a call to copy_array_field::X::X] diff --git a/infer/tests/codetoanalyze/objc/biabduction/issues.exp b/infer/tests/codetoanalyze/objc/biabduction/issues.exp index b93e5b1e9..649d52f6b 100644 --- a/infer/tests/codetoanalyze/objc/biabduction/issues.exp +++ b/infer/tests/codetoanalyze/objc/biabduction/issues.exp @@ -6,9 +6,9 @@ codetoanalyze/objc/biabduction/initialization/compound_literal.c, init_with_comp codetoanalyze/objc/biabduction/memory_leaks_benchmark/RetainCycleStaticVar.m, RetainCSV.foo, 13, BIABDUCTION_ANALYSIS_STOPS, no_bucket, WARNING, [start of procedure foo,Executing synthesized setter setHandler:] codetoanalyze/objc/biabduction/memory_leaks_benchmark/RetainCycleStaticVar.m, RetainCSV.foo, 13, RETAIN_CYCLE, no_bucket, ERROR, [start of procedure foo,Executing synthesized setter setHandler:] codetoanalyze/objc/biabduction/npe/null_returned_by_method.m, NullReturnedByMethodA.test1, 1, NULL_DEREFERENCE, B5, ERROR, [start of procedure test1,start of procedure test,return from a call to NullReturnedByMethodA.test] -codetoanalyze/objc/biabduction/procdescs/main.c, ProcdescMain, 3, MEMORY_LEAK, no_bucket, ERROR, [start of procedure ProcdescMain(),Skipping plusX:andY:: method has no implementation] -codetoanalyze/objc/biabduction/procdescs/main.c, call_nslog, 3, MEMORY_LEAK, no_bucket, ERROR, [start of procedure call_nslog(),Skipping NSLog(): method has no implementation] -codetoanalyze/objc/biabduction/property/main.c, property_main, 3, MEMORY_LEAK, no_bucket, ERROR, [start of procedure property_main(),Skipping aProperty: method has no implementation] +codetoanalyze/objc/biabduction/procdescs/main.c, ProcdescMain, 3, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure ProcdescMain(),Skipping plusX:andY:: method has no implementation] +codetoanalyze/objc/biabduction/procdescs/main.c, call_nslog, 3, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure call_nslog(),Skipping NSLog(): method has no implementation] +codetoanalyze/objc/biabduction/property/main.c, property_main, 3, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure property_main(),Skipping aProperty: method has no implementation] codetoanalyze/objc/biabduction/warnings/ParameterNotNullableExample.m, FBAudioRecorder.FBAudioInputCallbackChain:, 2, NULL_DEREFERENCE, B2, ERROR, [start of procedure FBAudioInputCallbackChain:,Executing synthesized getter recorder Message recordState with receiver nil returns nil.] codetoanalyze/objc/biabduction/warnings/ParameterNotNullableExample.m, FBAudioRecorder.FBAudioInputCallbackChain:, 2, PARAMETER_NOT_NULL_CHECKED, B2, WARNING, [start of procedure FBAudioInputCallbackChain:,Message recorder with receiver nil returns nil. Message recordState with receiver nil returns nil.] codetoanalyze/objc/biabduction/warnings/ParameterNotNullableExample.m, FBAudioRecorder.FBAudioInputCallbackField, 2, NULL_DEREFERENCE, B1, ERROR, [start of procedure FBAudioInputCallbackField,Message recordState with receiver nil returns nil.] @@ -21,7 +21,7 @@ codetoanalyze/objc/shared/block/BlockVar.m, BlockVar.capturedNullDeref, 5, NULL_ codetoanalyze/objc/shared/block/BlockVar.m, BlockVar.navigateToURLInBackground, 8, NULL_DEREFERENCE, B1, ERROR, [start of procedure navigateToURLInBackground,start of procedure block,start of procedure test,return from a call to BlockVar.test,return from a call to objc_blockBlockVar.navigateToURLInBackground_1,Taking true branch] codetoanalyze/objc/shared/block/block.m, main1, 30, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure main1(),start of procedure block,start of procedure block,return from a call to objc_blockobjc_blockmain1_2_3,return from a call to objc_blockmain1_2,start of procedure block,return from a call to objc_blockmain1_1] codetoanalyze/objc/shared/block/block_no_args.m, Block_no_args.m, 10, NULL_DEREFERENCE, B1, ERROR, [start of procedure m,start of procedure block,return from a call to objc_blockBlock_no_args.m_1,Taking true branch] -codetoanalyze/objc/shared/category_procdesc/main.c, CategoryProcdescMain, 3, MEMORY_LEAK, no_bucket, ERROR, [start of procedure CategoryProcdescMain(),Skipping performDaysWork: method has no implementation] +codetoanalyze/objc/shared/category_procdesc/main.c, CategoryProcdescMain, 3, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure CategoryProcdescMain(),Skipping performDaysWork: method has no implementation] codetoanalyze/objc/shared/field_superclass/SuperExample.m, ASuper.init, 2, NULL_DEREFERENCE, B2, ERROR, [start of procedure init] codetoanalyze/objc/biabduction/blocks_in_heap/BlockInHeap.m, block_in_heap_executed_after_bi_abduction_ok_test, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure block_in_heap_executed_after_bi_abduction_ok_test(),start of procedure block_in_heap_executed_after_bi_abduction_ok_no_retain_cycle(),start of procedure assign_block_to_ivar,Executing synthesized setter setHandler:,return from a call to BlockInHeap.assign_block_to_ivar,Executing synthesized getter handler,start of procedure block,return from a call to objc_blockBlockInHeap.assign_block_to_ivar_1,return from a call to block_in_heap_executed_after_bi_abduction_ok_no_retain_cycle,Taking true branch] codetoanalyze/objc/biabduction/field_superclass/SubtypingExample.m, Employee.initWithName:andAge:andEducation:, 3, NULL_TEST_AFTER_DEREFERENCE, no_bucket, WARNING, [start of procedure initWithName:andAge:andEducation:,start of procedure initWithName:andAge:,return from a call to Person.initWithName:andAge:,Taking false branch] @@ -82,10 +82,10 @@ codetoanalyze/objc/biabduction/subtyping/KindOfClassExample.m, shouldThrowDivide codetoanalyze/objc/biabduction/subtyping/KindOfClassExample.m, shouldThrowDivideByZero2, 2, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure shouldThrowDivideByZero2(),start of procedure init,return from a call to Base.init,start of procedure returnsZero2(),Taking false branch,return from a call to returnsZero2] codetoanalyze/objc/biabduction/subtyping/KindOfClassExample.m, shouldThrowDivideByZero3, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure shouldThrowDivideByZero3(),start of procedure init,return from a call to Derived.init,Taking true branch] codetoanalyze/objc/biabduction/variadic_methods/premature_nil_termination.m, PrematureNilTermA.nilInArrayWithObjects, 5, PREMATURE_NIL_TERMINATION_ARGUMENT, B1, WARNING, [start of procedure nilInArrayWithObjects] -codetoanalyze/objc/shared/memory_leaks_benchmark/TollBridgeExample.m, TollBridgeExample.bridge, 2, MEMORY_LEAK, no_bucket, ERROR, [start of procedure bridge] -codetoanalyze/objc/biabduction/memory_leaks_benchmark/CoreVideoExample.m, CoreVideoExample.cvpixelbuffer_not_released_leak, 1, MEMORY_LEAK, no_bucket, ERROR, [start of procedure cvpixelbuffer_not_released_leak] -codetoanalyze/objc/biabduction/memory_leaks_benchmark/NSData_models_tests.m, NSData_models_tests.macForIV:, 2, MEMORY_LEAK, no_bucket, ERROR, [start of procedure macForIV:] -codetoanalyze/objc/biabduction/memory_leaks_benchmark/NSString_models_tests.m, StringInitA.hexStringValue, 11, MEMORY_LEAK, no_bucket, ERROR, [start of procedure hexStringValue,Skipping CFStringCreateWithBytesNoCopy(): method has no implementation,Taking false branch] +codetoanalyze/objc/shared/memory_leaks_benchmark/TollBridgeExample.m, TollBridgeExample.bridge, 2, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure bridge] +codetoanalyze/objc/biabduction/memory_leaks_benchmark/CoreVideoExample.m, CoreVideoExample.cvpixelbuffer_not_released_leak, 1, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure cvpixelbuffer_not_released_leak] +codetoanalyze/objc/biabduction/memory_leaks_benchmark/NSData_models_tests.m, NSData_models_tests.macForIV:, 2, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure macForIV:] +codetoanalyze/objc/biabduction/memory_leaks_benchmark/NSString_models_tests.m, StringInitA.hexStringValue, 11, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure hexStringValue,Skipping CFStringCreateWithBytesNoCopy(): method has no implementation,Taking false branch] codetoanalyze/objc/biabduction/memory_leaks_benchmark/RetainCycleLength3.m, strongcycle, 6, BIABDUCTION_ANALYSIS_STOPS, no_bucket, WARNING, [start of procedure strongcycle(),Executing synthesized setter setB:,Executing synthesized setter setC:,Executing synthesized setter setA:] codetoanalyze/objc/biabduction/memory_leaks_benchmark/RetainCycleLength3.m, strongcycle, 6, RETAIN_CYCLE, no_bucket, ERROR, [start of procedure strongcycle(),Executing synthesized setter setB:,Executing synthesized setter setC:,Executing synthesized setter setA:] codetoanalyze/objc/biabduction/npe/Fraction.m, test_virtual_call, 7, NULL_DEREFERENCE, B1, ERROR, [start of procedure test_virtual_call(),start of procedure setNumerator:,return from a call to Fraction.setNumerator:,start of procedure getNumerator,return from a call to Fraction.getNumerator,Taking true branch] @@ -103,9 +103,9 @@ codetoanalyze/objc/biabduction/npe/dynamic_dispatch.m, DynamicDispatchMain.npe_b codetoanalyze/objc/biabduction/npe/dynamic_dispatch.m, objc_blockDynamicDispatchMain.dispatch_async_block_npe_bad_1, 3, NULL_DEREFERENCE, B5, ERROR, [start of procedure block,start of procedure get_ddclass_from:,start of procedure get_ddclass,return from a call to PInstance.get_ddclass,return from a call to DynamicDispatchMain.get_ddclass_from:] codetoanalyze/objc/biabduction/npe/ivar_blocks.m, MyClass.ivar_npe, 1, IVAR_NOT_NULL_CHECKED, B1, WARNING, [start of procedure ivar_npe] codetoanalyze/objc/biabduction/npe/skip_method_with_nil_object.m, SkipMethodNilA.testBug:, 6, PARAMETER_NOT_NULL_CHECKED, B2, WARNING, [start of procedure testBug:,Message get_a with receiver nil returns nil.,Message skip_method with receiver nil returns nil.,Taking false branch] -codetoanalyze/objc/biabduction/property/main.c, property_main, 3, MEMORY_LEAK, no_bucket, ERROR, [start of procedure property_main(),Skipping aProperty: method has no implementation] +codetoanalyze/objc/biabduction/property/main.c, property_main, 3, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure property_main(),Skipping aProperty: method has no implementation] codetoanalyze/objc/biabduction/resource_leaks/Dispatch_sources.m, ProcessContentsOfFile, 35, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure ProcessContentsOfFile(),Taking false branch,Skipping dispatch_get_global_queue(): method has no implementation,Skipping dispatch_source_create(): method has no implementation,Taking false branch,Skipping dispatch_source_set_event_handler(): method has no implementation,Skipping dispatch_source_set_cancel_handler(): method has no implementation] -codetoanalyze/objc/biabduction/resource_leaks/Dispatch_sources.m, objc_blockProcessContentsOfFile_2, 6, MEMORY_LEAK, no_bucket, ERROR, [start of procedure block,Skipping dispatch_source_get_data(): method has no implementation,Taking true branch,Skipping MyProcessFileData(): method has no implementation] +codetoanalyze/objc/biabduction/resource_leaks/Dispatch_sources.m, objc_blockProcessContentsOfFile_2, 6, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure block,Skipping dispatch_source_get_data(): method has no implementation,Taking true branch,Skipping MyProcessFileData(): method has no implementation] codetoanalyze/objc/biabduction/resource_leaks/ResourceLeakExample.m, NSFileHandle.fileHandleForLoggingAtPath:mode:, 9, RESOURCE_LEAK, no_bucket, ERROR, [start of procedure fileHandleForLoggingAtPath:mode:,Taking true branch,Skipping fileSystemRepresentation: method has no implementation,Taking false branch,Taking true branch,Skipping autorelease: no implementation found for method declared in Objective-C protocol] codetoanalyze/objc/shared/annotations/nonnull_annotations.m, NonnullAnnot.test1:, 2, PARAMETER_NOT_NULL_CHECKED, B2, WARNING, [start of procedure test1:,Message child with receiver nil returns nil.] codetoanalyze/objc/shared/annotations/nonnull_annotations.m, NonnullAnnot.test3:, 1, PARAMETER_NOT_NULL_CHECKED, B1, WARNING, [start of procedure test3:] @@ -113,11 +113,11 @@ codetoanalyze/objc/shared/annotations/nullable_annotations.m, User.otherUserName codetoanalyze/objc/shared/annotations/nullable_annotations.m, npe_property_nullable, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure npe_property_nullable(),Skipping child: method has no implementation] codetoanalyze/objc/shared/annotations/nullable_annotations_fields.m, A.nullable_field, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure nullable_field,Skipping getA(): method has no implementation] codetoanalyze/objc/shared/block/dispatch.m, DispatchA.dispatch_a_block_variable_from_macro_delivers_initialised_object, 3, DIVIDE_BY_ZERO, no_bucket, ERROR, [start of procedure dispatch_a_block_variable_from_macro_delivers_initialised_object,start of procedure dispatch_a_block_variable_from_macro,return from a call to DispatchA.dispatch_a_block_variable_from_macro] -codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.blockCapturedVarLeak, 6, MEMORY_LEAK, no_bucket, ERROR, [start of procedure blockCapturedVarLeak,start of procedure block,return from a call to objc_blockMemoryLeakExample.blockCapturedVarLeak_1] -codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.createCloseCrossGlyph:, 2, MEMORY_LEAK, no_bucket, ERROR, [start of procedure createCloseCrossGlyph:,Skipping CGRectGetHeight(): method has no implementation] -codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.measureFrameSizeForText, 1, MEMORY_LEAK, no_bucket, ERROR, [start of procedure measureFrameSizeForText] -codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.regularLeak, 3, MEMORY_LEAK, no_bucket, ERROR, [start of procedure regularLeak] -codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.test, 3, MEMORY_LEAK, no_bucket, ERROR, [start of procedure test,Skipping bounds: method has no implementation,Skipping setShadowPath:: method has no implementation] -codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.test1:, 1, MEMORY_LEAK, no_bucket, ERROR, [start of procedure test1:] -codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.test2:, 1, MEMORY_LEAK, no_bucket, ERROR, [start of procedure test2:] +codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.blockCapturedVarLeak, 6, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure blockCapturedVarLeak,start of procedure block,return from a call to objc_blockMemoryLeakExample.blockCapturedVarLeak_1] +codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.createCloseCrossGlyph:, 2, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure createCloseCrossGlyph:,Skipping CGRectGetHeight(): method has no implementation] +codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.measureFrameSizeForText, 1, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure measureFrameSizeForText] +codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.regularLeak, 3, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure regularLeak] +codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.test, 3, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure test,Skipping bounds: method has no implementation,Skipping setShadowPath:: method has no implementation] +codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.test1:, 1, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure test1:] +codetoanalyze/objc/shared/memory_leaks_benchmark/MemoryLeakExample.m, MemoryLeakExample.test2:, 1, BIABDUCTION_MEMORY_LEAK, no_bucket, ERROR, [start of procedure test2:] codetoanalyze/objc/shared/npe/Available_expr.m, Available_expr.test_no_bug, 3, NULL_DEREFERENCE, B1, ERROR, [start of procedure test_no_bug,Taking true branch] diff --git a/infer/tests/codetoanalyze/objc/pulse/issues.exp b/infer/tests/codetoanalyze/objc/pulse/issues.exp index 01576e794..df4cfe665 100644 --- a/infer/tests/codetoanalyze/objc/pulse/issues.exp +++ b/infer/tests/codetoanalyze/objc/pulse/issues.exp @@ -1,10 +1,10 @@ -codetoanalyze/objc/pulse/DeallocCalls.m, memory_leak_raii_leak_bad, 1, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,when calling `BufferContainer2.init` here,allocated by call to `malloc_no_fail` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/objc/pulse/MallocInObjC.m, leak_bad, 0, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `malloc_no_fail` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/objc/pulse/MemoryLeaks.m, MemoryLeaks.call_no_bridge_leak_bad, 1, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,when calling `MemoryLeaks.ret_no_bridge` here,allocated by call to `CFLocaleCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/objc/pulse/MemoryLeaks.m, MemoryLeaks.cg_path_create_mutable_leak_bad:, 2, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CGPathCreateMutable` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/objc/pulse/MemoryLeaks.m, MemoryLeaks.cg_path_create_with_rect_leak_bad, 3, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CGPathCreateWithRect` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/objc/pulse/MemoryLeaks.m, MemoryLeaks.no_bridge_leak_bad, 1, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CFLocaleCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/objc/pulse/MemoryLeaks.m, call_bridge_interproc_leak_ok_FP, 2, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CFLocaleCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] -codetoanalyze/objc/pulse/MemoryLeaks.m, call_cfrelease_interproc_leak_ok_FP, 2, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CFLocaleCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objc/pulse/DeallocCalls.m, memory_leak_raii_leak_bad, 1, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,when calling `BufferContainer2.init` here,allocated by call to `malloc_no_fail` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objc/pulse/MallocInObjC.m, leak_bad, 0, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `malloc_no_fail` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objc/pulse/MemoryLeaks.m, MemoryLeaks.call_no_bridge_leak_bad, 1, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,when calling `MemoryLeaks.ret_no_bridge` here,allocated by call to `CFLocaleCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objc/pulse/MemoryLeaks.m, MemoryLeaks.cg_path_create_mutable_leak_bad:, 2, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CGPathCreateMutable` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objc/pulse/MemoryLeaks.m, MemoryLeaks.cg_path_create_with_rect_leak_bad, 3, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CGPathCreateWithRect` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objc/pulse/MemoryLeaks.m, MemoryLeaks.no_bridge_leak_bad, 1, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CFLocaleCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objc/pulse/MemoryLeaks.m, call_bridge_interproc_leak_ok_FP, 2, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CFLocaleCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objc/pulse/MemoryLeaks.m, call_cfrelease_interproc_leak_ok_FP, 2, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `CFLocaleCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] codetoanalyze/objc/pulse/use_after_free.m, PulseTest.use_after_free_simple_in_objc_method_bad:, 2, USE_AFTER_FREE, no_bucket, ERROR, [invalidation part of the trace starts here,parameter `x` of PulseTest.use_after_free_simple_in_objc_method_bad:,was invalidated by call to `free()`,use-after-lifetime part of the trace starts here,parameter `x` of PulseTest.use_after_free_simple_in_objc_method_bad:,invalid access occurs here] codetoanalyze/objc/pulse/use_after_free.m, use_after_free_simple_bad, 2, USE_AFTER_FREE, no_bucket, ERROR, [invalidation part of the trace starts here,parameter `x` of use_after_free_simple_bad,was invalidated by call to `free()`,use-after-lifetime part of the trace starts here,parameter `x` of use_after_free_simple_bad,invalid access occurs here] diff --git a/infer/tests/codetoanalyze/objcpp/pulse/issues.exp b/infer/tests/codetoanalyze/objcpp/pulse/issues.exp index f88e9244e..954f63cf5 100644 --- a/infer/tests/codetoanalyze/objcpp/pulse/issues.exp +++ b/infer/tests/codetoanalyze/objcpp/pulse/issues.exp @@ -1,3 +1,3 @@ -codetoanalyze/objcpp/pulse/AllocPatternMemLeak.mm, A.create_no_release_leak_bad, 1, PULSE_MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `ABFDataCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] +codetoanalyze/objcpp/pulse/AllocPatternMemLeak.mm, A.create_no_release_leak_bad, 1, MEMORY_LEAK, no_bucket, ERROR, [allocation part of the trace starts here,allocated by call to `ABFDataCreate` (modelled),allocation part of the trace ends here,memory becomes unreachable here] codetoanalyze/objcpp/pulse/use_after_delete.mm, PulseTest.deref_deleted_in_objc_method_bad, 3, USE_AFTER_DELETE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,was invalidated by `delete`,use-after-lifetime part of the trace starts here,assigned,when calling `Simple::Simple` here,parameter `__param_0` of Simple::Simple,invalid access occurs here] codetoanalyze/objcpp/pulse/use_after_delete.mm, deref_deleted_bad, 3, USE_AFTER_DELETE, no_bucket, ERROR, [invalidation part of the trace starts here,assigned,was invalidated by `delete`,use-after-lifetime part of the trace starts here,assigned,when calling `Simple::Simple` here,parameter `__param_0` of Simple::Simple,invalid access occurs here]