1*67e74705SXin Li// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-store=region -verify %s 2*67e74705SXin Li 3*67e74705SXin Li//===----------------------------------------------------------------------===// 4*67e74705SXin Li// The following code is reduced using delta-debugging from 5*67e74705SXin Li// Foundation.h (Mac OS X). 6*67e74705SXin Li// 7*67e74705SXin Li// It includes the basic definitions for the test cases below. 8*67e74705SXin Li// Not directly including Foundation.h directly makes this test case 9*67e74705SXin Li// both svelte and portable to non-Mac platforms. 10*67e74705SXin Li//===----------------------------------------------------------------------===// 11*67e74705SXin Li 12*67e74705SXin Litypedef signed char BOOL; 13*67e74705SXin Litypedef unsigned int NSUInteger; 14*67e74705SXin Litypedef struct _NSZone NSZone; 15*67e74705SXin Li@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; 16*67e74705SXin Li@protocol NSObject - (BOOL)isEqual:(id)object; @end 17*67e74705SXin Li@protocol NSCopying - (id)copyWithZone:(NSZone *)zone; @end 18*67e74705SXin Li@protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; @end 19*67e74705SXin Li@protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; @end 20*67e74705SXin Li@interface NSObject <NSObject> {} @end 21*67e74705SXin Li@class NSString, NSData; 22*67e74705SXin Li@class NSString, NSData, NSMutableData, NSMutableDictionary, NSMutableArray; 23*67e74705SXin Litypedef struct {} NSFastEnumerationState; 24*67e74705SXin Li@protocol NSFastEnumeration 25*67e74705SXin Li- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len; 26*67e74705SXin Li@end 27*67e74705SXin Li@class NSData, NSIndexSet, NSString, NSURL; 28*67e74705SXin Li@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration> 29*67e74705SXin Li- (NSUInteger)count; 30*67e74705SXin Li@end 31*67e74705SXin Li@interface NSArray (NSArrayCreation) 32*67e74705SXin Li+ (id)array; 33*67e74705SXin Li- (NSUInteger)length; 34*67e74705SXin Li- (void)addObject:(id)object; 35*67e74705SXin Li@end 36*67e74705SXin Liextern NSString * const NSUndoManagerCheckpointNotification; 37*67e74705SXin Li 38*67e74705SXin Li//===----------------------------------------------------------------------===// 39*67e74705SXin Li// Test cases. 40*67e74705SXin Li//===----------------------------------------------------------------------===// 41*67e74705SXin Li 42*67e74705SXin Liunsigned f1() { 43*67e74705SXin Li NSString *aString; 44*67e74705SXin Li return [aString length]; // expected-warning {{Receiver in message expression is an uninitialized value}} 45*67e74705SXin Li} 46*67e74705SXin Li 47*67e74705SXin Liunsigned f2() { 48*67e74705SXin Li NSString *aString = 0; 49*67e74705SXin Li return [aString length]; // no-warning 50*67e74705SXin Li} 51*67e74705SXin Li 52*67e74705SXin Livoid f3() { 53*67e74705SXin Li NSMutableArray *aArray = [NSArray array]; 54*67e74705SXin Li NSString *aString; 55*67e74705SXin Li [aArray addObject:aString]; // expected-warning {{Argument in message expression is an uninitialized value}} 56*67e74705SXin Li} 57