brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · c0c37a7 Raw
77 lines · plain
1// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx -analyzer-output=text -verify %s2// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx -analyzer-output=plist-multi-file %s -o %t.plist3// RUN: %normalize_plist <%t.plist | diff -ub %S/Inputs/expected-plists/undef-value-param.m.plist -4 5typedef signed char BOOL;6@protocol NSObject  - (BOOL)isEqual:(id)object; @end7@interface NSObject <NSObject> {}8+(id)alloc;9+(id)new;10-(id)init;11-(id)autorelease;12-(id)copy;13- (Class)class;14-(id)retain;15@end16typedef const void * CFTypeRef;17extern void CFRelease(CFTypeRef cf);18 19@interface Cell : NSObject20- (void)test;21@end22 23@interface SpecialString24+ (id)alloc;25- (oneway void)release;26@end27 28typedef SpecialString* SCDynamicStoreRef;29static void CreateRef(SCDynamicStoreRef *storeRef, unsigned x);30static void CreateRefUndef(SCDynamicStoreRef *storeRef, unsigned x);31SCDynamicStoreRef anotherCreateRef(unsigned *err, unsigned x);32 33@implementation Cell34- (void) test {35    SCDynamicStoreRef storeRef = 0;36    CreateRef(&storeRef, 4); 37                             //expected-note@-1{{Calling 'CreateRef'}}38                             //expected-note@-2{{Returning from 'CreateRef'}}39    CFRelease(storeRef); //expected-warning {{Null pointer argument in call to CFRelease}}40                         //expected-note@-1{{Null pointer argument in call to CFRelease}}41}42 43- (void)test2 {44    SCDynamicStoreRef storeRef; // expected-note {{'storeRef' declared without an initial value}}45    CreateRefUndef(&storeRef, 4);46                             //expected-note@-1{{Calling 'CreateRefUndef'}}47                             //expected-note@-2{{Returning from 'CreateRefUndef'}}48    CFRelease(storeRef); //expected-warning {{1st function call argument is an uninitialized value}}49                         //expected-note@-1{{1st function call argument is an uninitialized value}}50}51@end52 53static void CreateRef(SCDynamicStoreRef *storeRef, unsigned x) {54    unsigned err = 0;55    SCDynamicStoreRef ref = anotherCreateRef(&err, x);56    if (err) { 57               //expected-note@-1{{Assuming 'err' is not equal to 0}}58               //expected-note@-2{{Taking true branch}}59        CFRelease(ref);60        ref = 0; // expected-note{{nil object reference stored to 'ref'}}61    }62    *storeRef = ref; // expected-note{{nil object reference stored to 'storeRef'}}63}64 65static void CreateRefUndef(SCDynamicStoreRef *storeRef, unsigned x) {66  unsigned err = 0;67  SCDynamicStoreRef ref = anotherCreateRef(&err, x);68  if (err) {69             //expected-note@-1{{Assuming 'err' is not equal to 0}}70             //expected-note@-2{{Taking true branch}}71    CFRelease(ref);72    return; // expected-note{{Returning without writing to '*storeRef'}}73  }74  *storeRef = ref;75}76 77