1*67e74705SXin Li// RUN: %clang_cc1 -Wno-objc-literal-conversion -analyze -analyzer-checker=core,unix.Malloc,osx.cocoa.NonNilReturnValue,debug.ExprInspection -analyzer-store=region -verify %s 2*67e74705SXin Li 3*67e74705SXin Livoid clang_analyzer_eval(int); 4*67e74705SXin Li 5*67e74705SXin Litypedef signed char BOOL; 6*67e74705SXin Litypedef long NSInteger; 7*67e74705SXin Litypedef unsigned long NSUInteger; 8*67e74705SXin Li@interface NSString @end 9*67e74705SXin Li@interface NSString (NSStringExtensionMethods) 10*67e74705SXin Li+ (id)stringWithUTF8String:(const char *)nullTerminatedCString; 11*67e74705SXin Li@end 12*67e74705SXin Li 13*67e74705SXin Li@interface NSNumber 14*67e74705SXin Li+ (NSNumber *)numberWithChar:(char)value; 15*67e74705SXin Li+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; 16*67e74705SXin Li+ (NSNumber *)numberWithShort:(short)value; 17*67e74705SXin Li+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; 18*67e74705SXin Li+ (NSNumber *)numberWithInt:(int)value; 19*67e74705SXin Li+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; 20*67e74705SXin Li+ (NSNumber *)numberWithLong:(long)value; 21*67e74705SXin Li+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; 22*67e74705SXin Li+ (NSNumber *)numberWithLongLong:(long long)value; 23*67e74705SXin Li+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; 24*67e74705SXin Li+ (NSNumber *)numberWithFloat:(float)value; 25*67e74705SXin Li+ (NSNumber *)numberWithDouble:(double)value; 26*67e74705SXin Li+ (NSNumber *)numberWithBool:(BOOL)value; 27*67e74705SXin Li+ (NSNumber *)numberWithInteger:(NSInteger)value ; 28*67e74705SXin Li+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value ; 29*67e74705SXin Li@end 30*67e74705SXin Li 31*67e74705SXin Li 32*67e74705SXin Liextern char *strdup(const char *str); 33*67e74705SXin Li 34*67e74705SXin Liid constant_string() { 35*67e74705SXin Li return @("boxed constant string."); 36*67e74705SXin Li} 37*67e74705SXin Li 38*67e74705SXin Liid dynamic_string() { 39*67e74705SXin Li return @(strdup("boxed dynamic string")); // expected-warning{{Potential memory leak}} 40*67e74705SXin Li} 41*67e74705SXin Li 42*67e74705SXin Liid const_char_pointer(int *x) { 43*67e74705SXin Li if (x) 44*67e74705SXin Li return @(3); 45*67e74705SXin Li return @(*x); // expected-warning {{Dereference of null pointer (loaded from variable 'x')}} 46*67e74705SXin Li} 47*67e74705SXin Li 48*67e74705SXin Livoid checkNonNil() { 49*67e74705SXin Li clang_analyzer_eval(!!@3); // expected-warning{{TRUE}} 50*67e74705SXin Li clang_analyzer_eval(!!@(3+4)); // expected-warning{{TRUE}} 51*67e74705SXin Li clang_analyzer_eval(!!@(57.0)); // expected-warning{{TRUE}} 52*67e74705SXin Li 53*67e74705SXin Li const char *str = "abc"; 54*67e74705SXin Li clang_analyzer_eval(!!@(str)); // expected-warning{{TRUE}} 55*67e74705SXin Li clang_analyzer_eval(!!@__objc_yes); // expected-warning{{TRUE}} 56*67e74705SXin Li} 57*67e74705SXin Li 58