2018-06-13 03:07:41 +08:00
|
|
|
// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core -fblocks -analyzer-output=plist -o %t %s
|
2019-06-11 22:21:32 +08:00
|
|
|
// RUN: %normalize_plist <%t | diff -ub %S/Inputs/expected-plists/plist-output-alternate.m.plist -
|
2010-09-09 15:13:00 +08:00
|
|
|
|
|
|
|
void test_null_init(void) {
|
|
|
|
int *p = 0;
|
|
|
|
*p = 0xDEADBEEF;
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_null_assign(void) {
|
|
|
|
int *p;
|
|
|
|
p = 0;
|
|
|
|
*p = 0xDEADBEEF;
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_null_assign_transitive(void) {
|
|
|
|
int *p;
|
|
|
|
p = 0;
|
|
|
|
int *q = p;
|
|
|
|
*q = 0xDEADBEEF;
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_null_cond(int *p) {
|
|
|
|
if (!p) {
|
|
|
|
*p = 0xDEADBEEF;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_null_cond_transitive(int *q) {
|
|
|
|
if (!q) {
|
|
|
|
int *p = q;
|
|
|
|
*p = 0xDEADBEEF;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_null_field(void) {
|
|
|
|
struct s { int *p; } x;
|
|
|
|
x.p = 0;
|
|
|
|
*(x.p) = 0xDEADBEEF;
|
|
|
|
}
|
|
|
|
|
2010-09-10 03:05:34 +08:00
|
|
|
// <rdar://problem/8331641> leak reports should not show paths that end with exit() (but ones that don't end with exit())
|
|
|
|
void panic() __attribute__((noreturn));
|
|
|
|
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 };
|
|
|
|
typedef const struct __CFAllocator * CFAllocatorRef;
|
|
|
|
extern const CFAllocatorRef kCFAllocatorDefault;
|
|
|
|
typedef signed long CFIndex;
|
|
|
|
typedef CFIndex CFNumberType;
|
|
|
|
typedef const struct __CFNumber * CFNumberRef;
|
|
|
|
|
|
|
|
extern CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr);
|
|
|
|
|
|
|
|
void rdar8331641(int x) {
|
|
|
|
signed z = 1;
|
|
|
|
CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}}
|
|
|
|
if (x)
|
|
|
|
panic();
|
|
|
|
(void) value;
|
|
|
|
}
|
|
|
|
|