1*67e74705SXin Li// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core -analyzer-checker=deadcode.DeadStores -verify %s 2*67e74705SXin Li// 3*67e74705SXin Li// This test exercises the live variables analysis (LiveVariables.cpp). 4*67e74705SXin Li// The case originally identified a non-termination bug. 5*67e74705SXin Li// 6*67e74705SXin Litypedef signed char BOOL; 7*67e74705SXin Litypedef unsigned int NSUInteger; 8*67e74705SXin Litypedef struct _NSZone NSZone; 9*67e74705SXin Li@protocol NSObject - (BOOL)isEqual:(id)object; @end 10*67e74705SXin Li@interface NSObject <NSObject> {} @end 11*67e74705SXin Liextern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); 12*67e74705SXin Li@class NSArray; // expected-note {{receiver is instance of class declared here}} 13*67e74705SXin Li@class NSMutableArray, NSIndexSet, NSView, NSPredicate, NSString, NSViewAnimation, NSTimer; // expected-note{{forward declaration of class here}} 14*67e74705SXin Li@interface FooBazController : NSObject {} 15*67e74705SXin Li@end 16*67e74705SXin Litypedef struct {} TazVersion; 17*67e74705SXin Li@class TazNode; 18*67e74705SXin Li@interface TazGuttenberg : NSObject {} typedef NSUInteger BugsBunnyType; @end // expected-note {{receiver is instance of class declared here}} 19*67e74705SXin Li@interface FooBaz : NSObject {} 20*67e74705SXin Li@property (nonatomic) BugsBunnyType matchType; 21*67e74705SXin Li@property (nonatomic, retain) NSArray *papyrus; @end 22*67e74705SXin Li@implementation FooBazController 23*67e74705SXin Li- (NSArray *)excitingStuff:(FooBaz *)options { 24*67e74705SXin Li BugsBunnyType matchType = options.matchType; 25*67e74705SXin Li NSPredicate *isSearchablePredicate = [NSPredicate predicateWithFormat:@"isSearchable == YES"]; // expected-warning{{receiver 'NSPredicate' is a forward class and corresponding}} // expected-warning{{return type defaults to 'id'}} 26*67e74705SXin Li for (TazGuttenberg *Guttenberg in options.papyrus) { 27*67e74705SXin Li NSArray *GuttenbergNodes = [Guttenberg nodes]; // expected-warning{{return type defaults to 'id'}} 28*67e74705SXin Li NSArray *searchableNodes = [GuttenbergNodes filteredArrayUsingPredicate:isSearchablePredicate]; // expected-warning{{return type defaults to 'id'}} 29*67e74705SXin Li for (TazNode *node in searchableNodes) { 30*67e74705SXin Li switch (matchType) { 31*67e74705SXin Li default: break; 32*67e74705SXin Li } 33*67e74705SXin Li } 34*67e74705SXin Li } 35*67e74705SXin Li while (1) {} 36*67e74705SXin Li} 37*67e74705SXin Li@end 38