Author: zaks
Date: Mon Nov  4 13:13:08 2013
New Revision: 194005

URL: http://llvm.org/viewvc/llvm-project?rev=194005&view=rev
Log:
[analyzer] Track the count of NSOrderedSet similarly to other fast enumerations.

Modified:
    cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp
    cfe/trunk/test/Analysis/NSContainers.m

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp?rev=194005&r1=194004&r2=194005&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp 
(original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp Mon Nov 
 4 13:13:08 2013
@@ -1000,7 +1000,8 @@ void ObjCLoopChecker::checkPostObjCMessa
   FoundationClass Class = findKnownClass(ClassID);
   if (Class != FC_NSDictionary &&
       Class != FC_NSArray &&
-      Class != FC_NSSet)
+      Class != FC_NSSet &&
+      Class != FC_NSOrderedSet)
     return;
 
   SymbolRef ContainerS = M.getReceiverSVal().getAsSymbol();

Modified: cfe/trunk/test/Analysis/NSContainers.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/NSContainers.m?rev=194005&r1=194004&r2=194005&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/NSContainers.m (original)
+++ cfe/trunk/test/Analysis/NSContainers.m Mon Nov  4 13:13:08 2013
@@ -90,6 +90,12 @@ typedef struct {
 
 @end
 
+@interface NSOrderedSet : NSObject <NSFastEnumeration>
+@end
+@interface NSOrderedSet (NSOrderedSetCreation)
+- (NSUInteger)count;
+@end
+
 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>
 
 @end
@@ -260,4 +266,13 @@ void testCollectionIsNotEmptyWhenCountIs
   }
 }
 
+void testCountAwareNSOrderedSet(NSOrderedSet *containers, int *validptr) {
+       int *x = 0;
+  NSUInteger containerCount = [containers count];
+  if (containerCount > 0)    
+               x = validptr;
+       for (id c in containers) {
+               *x = 1; // no warning
+       }
+}
 


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to