From 6ebc5033a838d24abc0ad276ee7a65002d667fd3 Mon Sep 17 00:00:00 2001 From: Sungkeun Cho Date: Fri, 18 Sep 2020 08:54:32 -0700 Subject: [PATCH] [cost] Add model of CFAutorelease Summary: ObjC objects can be added to autorelease pool by `CFAutorelease`. Reviewed By: ezgicicek Differential Revision: D23625632 fbshipit-source-id: 694e5bffb --- infer/src/cost/costAutoreleaseModels.ml | 1 + infer/tests/codetoanalyze/objc/autoreleasepool/basic.m | 4 ++++ .../tests/codetoanalyze/objc/autoreleasepool/cost-issues.exp | 1 + 3 files changed, 6 insertions(+) diff --git a/infer/src/cost/costAutoreleaseModels.ml b/infer/src/cost/costAutoreleaseModels.ml index 5fb6b4d21..b92ba3bb1 100644 --- a/infer/src/cost/costAutoreleaseModels.ml +++ b/infer/src/cost/costAutoreleaseModels.ml @@ -12,6 +12,7 @@ module Call = struct let open ProcnameDispatcher.Call in make_dispatcher [ +PatternMatch.ObjectiveC.implements "NSObject" &:: "autorelease" &--> () + ; -"CFAutorelease" &--> () ; +PatternMatch.ObjectiveC.implements "NSKeyedUnarchiver" &:: "initForReadingFromData:error:" &--> () ; +PatternMatch.ObjectiveC.implements "NSKeyedUnarchiver" diff --git a/infer/tests/codetoanalyze/objc/autoreleasepool/basic.m b/infer/tests/codetoanalyze/objc/autoreleasepool/basic.m index f869e568d..b5faba1e2 100644 --- a/infer/tests/codetoanalyze/objc/autoreleasepool/basic.m +++ b/infer/tests/codetoanalyze/objc/autoreleasepool/basic.m @@ -110,4 +110,8 @@ [self call_autorelease_constant]; } +- (void)call_cf_autorelease_constant:(NSObject*)x { + CFAutorelease((__bridge CFTypeRef)x); +} + @end diff --git a/infer/tests/codetoanalyze/objc/autoreleasepool/cost-issues.exp b/infer/tests/codetoanalyze/objc/autoreleasepool/cost-issues.exp index 323ee226f..fe8001a62 100644 --- a/infer/tests/codetoanalyze/objc/autoreleasepool/cost-issues.exp +++ b/infer/tests/codetoanalyze/objc/autoreleasepool/cost-issues.exp @@ -28,6 +28,7 @@ codetoanalyze/objc/autoreleasepool/basic.m, Basic.autoreleased_in_loop_nested_ze codetoanalyze/objc/autoreleasepool/basic.m, Basic.autoreleased_in_loop_sequential_constant:, 1, OnUIThread:false, [autorelease,Call to Basic.call_autorelease_constant,Modeled call to NSObject.autorelease] codetoanalyze/objc/autoreleasepool/basic.m, Basic.autoreleased_in_loop_sequential_linear:, n, OnUIThread:false, [{n},Loop,autorelease,Call to Basic.call_autorelease_constant,Modeled call to NSObject.autorelease] codetoanalyze/objc/autoreleasepool/basic.m, Basic.call_autorelease_constant, 1, OnUIThread:false, [autorelease,Modeled call to NSObject.autorelease] +codetoanalyze/objc/autoreleasepool/basic.m, Basic.call_cf_autorelease_constant:, 1, OnUIThread:false, [autorelease,Modeled call to CFAutorelease] codetoanalyze/objc/autoreleasepool/basic.m, Basic.call_no_autorelease_zero, 0, OnUIThread:false, [] codetoanalyze/objc/autoreleasepool/basic.m, Basic.dealloc, 0, OnUIThread:false, [] codetoanalyze/objc/autoreleasepool/basic.m, Basic.loop_in_autoreleasepool_zero:, 0, OnUIThread:false, []