blob: efab640475f9d373d77b8f209d513c87a044a4e0 [file] [log] [blame]
Anna Zaksbb2a6862012-02-20 21:10:37 +00001// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc -analyzer-store=region -verify %s
Anna Zaks3cd89ad2012-02-24 23:56:53 +00002#include "system-header-simulator-objc.h"
Anna Zaksad901a62012-02-16 22:26:15 +00003
4typedef __typeof(sizeof(int)) size_t;
5void *malloc(size_t);
6void free(void *);
7
8// Done with headers. Start testing.
9void testNSDatafFreeWhenDoneNoError(NSUInteger dataLength) {
10 unsigned char *data = (unsigned char *)malloc(42);
11 NSData *nsdata = [NSData dataWithBytesNoCopy:data length:dataLength];
12 free(data); // no warning
13}
14
Anna Zaks3cd89ad2012-02-24 23:56:53 +000015void testNSDataFreeWhenDoneYES(NSUInteger dataLength) {
16 unsigned char *data = (unsigned char *)malloc(42);
17 NSData *nsdata = [NSData dataWithBytesNoCopy:data length:dataLength freeWhenDone:1]; // no-warning
18}
19
20void testNSDataFreeWhenDoneYES2(NSUInteger dataLength) {
21 unsigned char *data = (unsigned char *)malloc(42);
22 NSData *nsdata = [[NSData alloc] initWithBytesNoCopy:data length:dataLength freeWhenDone:1]; // no-warning
23}
24
25
26void testNSStringFreeWhenDoneYES(NSUInteger dataLength) {
27 unsigned char *data = (unsigned char *)malloc(42);
28 NSString *nsstr = [[NSString alloc] initWithBytesNoCopy:data length:dataLength encoding:NSUTF8StringEncoding freeWhenDone:1]; // no-warning
29}
30
31void testNSStringFreeWhenDoneYES2(NSUInteger dataLength) {
32 unichar *data = (unichar*)malloc(42);
33 NSString *nsstr = [[NSString alloc] initWithCharactersNoCopy:data length:dataLength freeWhenDone:1]; // no-warning
34}
35
36
37void testNSDataFreeWhenDoneNO(NSUInteger dataLength) {
38 unsigned char *data = (unsigned char *)malloc(42);
39 NSData *nsdata = [NSData dataWithBytesNoCopy:data length:dataLength freeWhenDone:0]; // expected-warning{{leak}}
40}
41
42void testNSDataFreeWhenDoneNO2(NSUInteger dataLength) {
43 unsigned char *data = (unsigned char *)malloc(42);
44 NSData *nsdata = [[NSData alloc] initWithBytesNoCopy:data length:dataLength freeWhenDone:0]; // expected-warning{{leak}}
45}
46
47
48void testNSStringFreeWhenDoneNO(NSUInteger dataLength) {
49 unsigned char *data = (unsigned char *)malloc(42);
50 NSString *nsstr = [[NSString alloc] initWithBytesNoCopy:data length:dataLength encoding:NSUTF8StringEncoding freeWhenDone:0]; // expected-warning{{leak}}
51}
52
53void testNSStringFreeWhenDoneNO2(NSUInteger dataLength) {
54 unichar *data = (unichar*)malloc(42);
55 NSString *nsstr = [[NSString alloc] initWithCharactersNoCopy:data length:dataLength freeWhenDone:0]; // expected-warning{{leak}}
56}
57
58// TODO: False Negative.
59void testNSDatafFreeWhenDoneFN(NSUInteger dataLength) {
Anna Zaksad901a62012-02-16 22:26:15 +000060 unsigned char *data = (unsigned char *)malloc(42);
61 NSData *nsdata = [NSData dataWithBytesNoCopy:data length:dataLength freeWhenDone:1];
62 free(data); // false negative
63}