r194005 - [analyzer] Track the count of NSOrderedSet similarly to other fast enumerations.

Anna Zaks ganna at apple.com
Mon Nov 4 11:13:08 PST 2013


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
 
+ at interface NSOrderedSet : NSObject <NSFastEnumeration>
+ at end
+ at interface NSOrderedSet (NSOrderedSetCreation)
+- (NSUInteger)count;
+ at 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
+	}
+}
 





More information about the cfe-commits mailing list