diff options
Diffstat (limited to 'clang/test/Analysis/gcdasyncsemaphorechecker_test.m')
-rw-r--r-- | clang/test/Analysis/gcdasyncsemaphorechecker_test.m | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/clang/test/Analysis/gcdasyncsemaphorechecker_test.m b/clang/test/Analysis/gcdasyncsemaphorechecker_test.m index a82545a3b6a..ff434d3652d 100644 --- a/clang/test/Analysis/gcdasyncsemaphorechecker_test.m +++ b/clang/test/Analysis/gcdasyncsemaphorechecker_test.m @@ -177,7 +177,9 @@ void warn_with_cast() { @interface Test1 : NSObject -(void)use_method_warn; +-(void)use_objc_callback_warn; -(void)testNoWarn; +-(void)acceptBlock:(block_t)callback; @end @implementation Test1 @@ -200,4 +202,33 @@ void warn_with_cast() { dispatch_semaphore_wait(sema, 100); } +-(void)acceptBlock:(block_t) callback { + callback(); +} + +-(void)use_objc_callback_warn { + dispatch_semaphore_t sema = dispatch_semaphore_create(0); + + [self acceptBlock:^{ + dispatch_semaphore_signal(sema); + }]; + dispatch_semaphore_wait(sema, 100); // expected-warning{{Possible semaphore performance anti-pattern}} +} + +void use_objc_and_c_callback(Test1 *t) { + dispatch_semaphore_t sema = dispatch_semaphore_create(0); + + func(^{ + dispatch_semaphore_signal(sema); + }); + dispatch_semaphore_wait(sema, 100); // expected-warning{{Possible semaphore performance anti-pattern}} + + dispatch_semaphore_t sema1 = dispatch_semaphore_create(0); + + [t acceptBlock:^{ + dispatch_semaphore_signal(sema1); + }]; + dispatch_semaphore_wait(sema1, 100); // expected-warning{{Possible semaphore performance anti-pattern}} +} + @end |