forked from OSchip/llvm-project
59 lines
1.5 KiB
Objective-C
59 lines
1.5 KiB
Objective-C
// RUN: %clang_cc1 -analyze -analyzer-checker=osx.cocoa.Loops,debug.ExprInspection -verify
|
|
|
|
void clang_analyzer_eval(int);
|
|
|
|
#define nil ((id)0)
|
|
|
|
@protocol NSFastEnumeration
|
|
- (int)countByEnumeratingWithState:(void *)state objects:(id *)objects count:(unsigned)count;
|
|
@end
|
|
|
|
@interface NSObject
|
|
+ (instancetype)testObject;
|
|
@end
|
|
|
|
@interface NSEnumerator <NSFastEnumeration>
|
|
@end
|
|
|
|
@interface NSArray : NSObject <NSFastEnumeration>
|
|
- (NSEnumerator *)objectEnumerator;
|
|
@end
|
|
|
|
@interface NSDictionary : NSObject <NSFastEnumeration>
|
|
@end
|
|
|
|
@interface NSMutableDictionary : NSDictionary
|
|
@end
|
|
|
|
@interface NSSet : NSObject <NSFastEnumeration>
|
|
@end
|
|
|
|
@interface NSPointerArray : NSObject <NSFastEnumeration>
|
|
@end
|
|
|
|
void test() {
|
|
id x;
|
|
for (x in [NSArray testObject])
|
|
clang_analyzer_eval(x != nil); // expected-warning{{TRUE}}
|
|
|
|
for (x in [NSMutableDictionary testObject])
|
|
clang_analyzer_eval(x != nil); // expected-warning{{TRUE}}
|
|
|
|
for (x in [NSSet testObject])
|
|
clang_analyzer_eval(x != nil); // expected-warning{{TRUE}}
|
|
|
|
for (x in [[NSArray testObject] objectEnumerator])
|
|
clang_analyzer_eval(x != nil); // expected-warning{{TRUE}}
|
|
|
|
for (x in [NSPointerArray testObject])
|
|
clang_analyzer_eval(x != nil); // expected-warning{{UNKNOWN}}
|
|
}
|
|
|
|
void testWithVarInFor() {
|
|
for (id x in [NSArray testObject])
|
|
clang_analyzer_eval(x != nil); // expected-warning{{TRUE}}
|
|
for (id x in [NSPointerArray testObject])
|
|
clang_analyzer_eval(x != nil); // expected-warning{{UNKNOWN}}
|
|
}
|
|
|