]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Analysis/plist-output-alternate.m
Vendor import of clang trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / test / Analysis / plist-output-alternate.m
1 // RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core -fblocks -analyzer-output=plist -o %t %s
2 // RUN: cat %t | %diff_plist %S/Inputs/expected-plists/plist-output-alternate.m.plist -
3
4 void test_null_init(void) {
5   int *p = 0;
6   *p = 0xDEADBEEF;
7 }
8
9 void test_null_assign(void) {
10   int *p;
11   p = 0;
12   *p = 0xDEADBEEF;
13 }
14
15 void test_null_assign_transitive(void) {
16   int *p;
17   p = 0;
18   int *q = p;
19   *q = 0xDEADBEEF;
20 }
21
22 void test_null_cond(int *p) {
23   if (!p) {
24     *p = 0xDEADBEEF;
25   }
26 }
27
28 void test_null_cond_transitive(int *q) {
29   if (!q) {
30     int *p = q;
31     *p = 0xDEADBEEF;
32   }
33 }
34
35 void test_null_field(void) {
36   struct s { int *p; } x;
37   x.p = 0;
38   *(x.p) = 0xDEADBEEF;
39 }
40
41 // <rdar://problem/8331641> leak reports should not show paths that end with exit() (but ones that don't end with exit())
42 void panic() __attribute__((noreturn));
43 enum { kCFNumberSInt8Type = 1,     kCFNumberSInt16Type = 2,     kCFNumberSInt32Type = 3,     kCFNumberSInt64Type = 4,     kCFNumberFloat32Type = 5,     kCFNumberFloat64Type = 6,      kCFNumberCharType = 7,     kCFNumberShortType = 8,     kCFNumberIntType = 9,     kCFNumberLongType = 10,     kCFNumberLongLongType = 11,     kCFNumberFloatType = 12,     kCFNumberDoubleType = 13,      kCFNumberCFIndexType = 14,      kCFNumberNSIntegerType = 15,     kCFNumberCGFloatType = 16,     kCFNumberMaxType = 16    };
44 typedef const struct __CFAllocator * CFAllocatorRef;
45 extern const CFAllocatorRef kCFAllocatorDefault;
46 typedef signed long CFIndex;
47 typedef CFIndex CFNumberType;
48 typedef const struct __CFNumber * CFNumberRef;
49
50 extern CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr);
51
52 void rdar8331641(int x) {
53   signed z = 1;
54   CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}}
55   if (x)
56     panic();
57   (void) value;
58 }
59