[AMDGPU][AsmParser][NFC] Get rid of custom default operand handlers.
[llvm-project.git] / clang / test / Analysis / diagnostics / undef-value-param.m
blobc0c37a74bd046dc8cdf3b1815baf0da6779c187a
1 // RUN: %clang_analyze_cc1 -analyzer-checker=core,osx -analyzer-output=text -verify %s
2 // RUN: %clang_analyze_cc1 -analyzer-checker=core,osx -analyzer-output=plist-multi-file %s -o %t.plist
3 // RUN: %normalize_plist <%t.plist | diff -ub %S/Inputs/expected-plists/undef-value-param.m.plist -
5 typedef signed char BOOL;
6 @protocol NSObject  - (BOOL)isEqual:(id)object; @end
7 @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 @end
16 typedef const void * CFTypeRef;
17 extern void CFRelease(CFTypeRef cf);
19 @interface Cell : NSObject
20 - (void)test;
21 @end
23 @interface SpecialString
24 + (id)alloc;
25 - (oneway void)release;
26 @end
28 typedef SpecialString* SCDynamicStoreRef;
29 static void CreateRef(SCDynamicStoreRef *storeRef, unsigned x);
30 static void CreateRefUndef(SCDynamicStoreRef *storeRef, unsigned x);
31 SCDynamicStoreRef anotherCreateRef(unsigned *err, unsigned x);
33 @implementation Cell
34 - (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}}
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}}
51 @end
53 static 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'}}
65 static 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;