brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 3d256f1 Raw
80 lines · plain
1// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.UnretainedLocalVarsChecker -fobjc-arc -verify %s2 3#import "objc-mock-types.h"4 5SomeObj *provide();6void someFunction();7 8namespace raw_ptr {9 10void foo() {11  SomeObj *bar = [[SomeObj alloc] init];12  [bar doWork];13}14 15void foo2() {16  SomeObj *bar = provide();17  [bar doWork];18}19 20void bar() {21  CFMutableArrayRef array = CFArrayCreateMutable(kCFAllocatorDefault, 10);22  // expected-warning@-1{{Local variable 'array' is unretained and unsafe [alpha.webkit.UnretainedLocalVarsChecker]}}23  CFArrayAppendValue(array, nullptr);24}25 26void baz() {27  auto queue = dispatch_queue_create("some queue", nullptr);28  dispatch_queue_get_label(queue);29}30 31} // namespace raw_ptr32 33namespace const_global {34 35extern NSString * const SomeConstant;36extern CFDictionaryRef const SomeDictionary;37extern dispatch_queue_t const SomeDispatch;38void doWork(NSString *, CFDictionaryRef, dispatch_queue_t);39void use_const_global() {40  doWork(SomeConstant, SomeDictionary, SomeDispatch);41}42 43NSString *provide_str();44CFDictionaryRef provide_dict();45dispatch_queue_t provide_dispatch();46void use_const_local() {47  NSString * const str = provide_str();48  CFDictionaryRef dict = provide_dict();49  // expected-warning@-1{{Local variable 'dict' is unretained and unsafe [alpha.webkit.UnretainedLocalVarsChecker]}}50  auto dispatch = provide_dispatch();51  doWork(str, dict, dispatch);52}53 54} // namespace const_global55 56@interface AnotherObj : NSObject57- (void)foo:(SomeObj *)obj;58@end59 60@implementation AnotherObj61- (void)foo:(SomeObj*)obj {62  SomeObj* obj2 = obj;63  SomeObj* obj3 = provide();64  obj = nullptr;65  [obj2 doWork];66  [obj3 doWork];67}68 69- (void)bar {70  CFMutableArrayRef array = CFArrayCreateMutable(kCFAllocatorDefault, 10);71  // expected-warning@-1{{Local variable 'array' is unretained and unsafe [alpha.webkit.UnretainedLocalVarsChecker]}}72  CFArrayAppendValue(array, nullptr);73}74 75- (void)baz {76  auto queue = dispatch_queue_create("some queue", nullptr);77  dispatch_queue_get_label(queue);78}79@end80