mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-25 14:28:54 -04:00

Summary: Replace calls to %clang/%clang_cc1 with %clang_analyze_cc1 when invoking static analyzer, and perform runtime substitution to select the appropriate constraint manager, per D28952. Reviewers: xazax.hun, NoQ, zaks.anna, dcoughlin Subscribers: mgorny, rgov, mikhail.ramalho, a.sidorin, cfe-commits Differential Revision: https://reviews.llvm.org/D30373 llvm-svn: 296895
50 lines
1.3 KiB
Objective-C
50 lines
1.3 KiB
Objective-C
// RUN: %clang_analyze_cc1 -analyzer-checker=osx.cocoa.NonNilReturnValue,debug.ExprInspection -verify %s
|
|
|
|
typedef unsigned int NSUInteger;
|
|
typedef signed char BOOL;
|
|
|
|
@protocol NSObject - (BOOL)isEqual:(id)object; @end
|
|
|
|
@interface NSObject <NSObject> {}
|
|
+(id)alloc;
|
|
+(id)new;
|
|
-(id)init;
|
|
-(id)autorelease;
|
|
-(id)copy;
|
|
- (Class)class;
|
|
-(id)retain;
|
|
@end
|
|
|
|
@interface NSArray : NSObject
|
|
- (id)objectAtIndex:(unsigned long)index;
|
|
@end
|
|
|
|
@interface NSArray (NSExtendedArray)
|
|
- (id)objectAtIndexedSubscript:(NSUInteger)idx;
|
|
@end
|
|
|
|
@interface NSMutableArray : NSArray
|
|
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
|
|
@end
|
|
|
|
@interface NSOrderedSet : NSObject
|
|
@end
|
|
@interface NSOrderedSet (NSOrderedSetCreation)
|
|
- (id)objectAtIndexedSubscript:(NSUInteger)idx;
|
|
@end
|
|
|
|
void clang_analyzer_eval(id);
|
|
|
|
void assumeThatNSArrayObjectAtIndexIsNeverNull(NSArray *A, NSUInteger i) {
|
|
clang_analyzer_eval([A objectAtIndex: i]); // expected-warning {{TRUE}}
|
|
id subscriptObj = A[1];
|
|
clang_analyzer_eval(subscriptObj); // expected-warning {{TRUE}}
|
|
}
|
|
|
|
void assumeThatNSMutableArrayObjectAtIndexIsNeverNull(NSMutableArray *A, NSUInteger i) {
|
|
clang_analyzer_eval([A objectAtIndex: i]); // expected-warning {{TRUE}}
|
|
}
|
|
|
|
void assumeThatNSArrayObjectAtIndexedSubscriptIsNeverNull(NSOrderedSet *A, NSUInteger i) {
|
|
clang_analyzer_eval(A[i]); // expected-warning {{TRUE}}
|
|
} |