1// RUN: %clang_cc1 -analyze -analyzer-checker=osx.cocoa.NonNilReturnValue,debug.ExprInspection -verify %s
2
3typedef unsigned int NSUInteger;
4typedef signed char BOOL;
5
6@protocol NSObject  - (BOOL)isEqual:(id)object; @end
7
8@interface NSObject <NSObject> {}
9+(id)alloc;
10+(id)new;
11-(id)init;
12-(id)autorelease;
13-(id)copy;
14- (Class)class;
15-(id)retain;
16@end
17
18@interface NSArray : NSObject
19- (id)objectAtIndex:(unsigned long)index;
20@end
21
22@interface NSArray (NSExtendedArray)
23- (id)objectAtIndexedSubscript:(NSUInteger)idx;
24@end
25
26@interface NSMutableArray : NSArray
27- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
28@end
29
30@interface NSOrderedSet : NSObject
31@end
32@interface NSOrderedSet (NSOrderedSetCreation)
33- (id)objectAtIndexedSubscript:(NSUInteger)idx;
34@end
35
36void clang_analyzer_eval(id);
37
38void assumeThatNSArrayObjectAtIndexIsNeverNull(NSArray *A, NSUInteger i) {
39  clang_analyzer_eval([A objectAtIndex: i]); // expected-warning {{TRUE}} 
40  id subscriptObj = A[1];
41  clang_analyzer_eval(subscriptObj); // expected-warning {{TRUE}} 
42}
43
44void assumeThatNSMutableArrayObjectAtIndexIsNeverNull(NSMutableArray *A, NSUInteger i) {
45  clang_analyzer_eval([A objectAtIndex: i]); // expected-warning {{TRUE}} 
46}
47
48void assumeThatNSArrayObjectAtIndexedSubscriptIsNeverNull(NSOrderedSet *A, NSUInteger i) {
49  clang_analyzer_eval(A[i]); // expected-warning {{TRUE}}
50}