diff options
Diffstat (limited to 'clang/test/Analysis/objc-for.m')
-rw-r--r-- | clang/test/Analysis/objc-for.m | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/test/Analysis/objc-for.m b/clang/test/Analysis/objc-for.m index 41709bee359..f1d0cf18d6c 100644 --- a/clang/test/Analysis/objc-for.m +++ b/clang/test/Analysis/objc-for.m @@ -1,6 +1,7 @@ // RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.Loops,debug.ExprInspection -verify %s void clang_analyzer_eval(int); +void clang_analyzer_warnIfReached(); #define nil ((id)0) @@ -20,11 +21,13 @@ typedef unsigned long NSUInteger; @interface NSArray : NSObject <NSFastEnumeration> - (NSUInteger)count; - (NSEnumerator *)objectEnumerator; ++ (NSArray *)arrayWithObjects:(const id [])objects count:(NSUInteger)count; @end @interface NSDictionary : NSObject <NSFastEnumeration> - (NSUInteger)count; - (id)objectForKey:(id)key; ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id /* <NSCopying> */ [])keys count:(NSUInteger)count; @end @interface NSDictionary (SomeCategory) @@ -324,3 +327,19 @@ void protocolMethods(NSMutableArray *array) { for (id key in array) clang_analyzer_eval(0); // expected-warning{{FALSE}} } + +NSArray *globalArray; +NSDictionary *globalDictionary; +void boxedArrayEscape(NSMutableArray *array) { + if ([array count]) + return; + globalArray = @[array]; + for (id key in array) + clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} + + if ([array count]) + return; + globalDictionary = @{ @"array" : array }; + for (id key in array) + clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} +} |