]> granicus.if.org Git - clang/commitdiff
[analyzer] Another false positive in Class method inlining.
authorAnna Zaks <ganna@apple.com>
Fri, 27 Jul 2012 19:07:34 +0000 (19:07 +0000)
committerAnna Zaks <ganna@apple.com>
Fri, 27 Jul 2012 19:07:34 +0000 (19:07 +0000)
We are currently not setting the self object to the calling class object
during inlining nor do we reason about [AAA class].

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160884 91177308-0d34-0410-b5e6-96231b3b80d8

test/Analysis/inlining/InlineObjCClassMethod.m

index 8c0e733fc5720ff2fb8797fec28ecf20527d9204..3bd06ebaab3f0f41108af43f71c1d47be2b8184f 100644 (file)
@@ -132,3 +132,30 @@ int foo() {
   return 5/y; // Would be great to get a warning here.
 }
 @end
+
+// Another false negative due to us not reasoning about self, which in this 
+// case points to the object of the class in the call site and should be equal 
+// to [MyParent class].
+@interface MyParentSelf : NSObject
++ (int)testSelf;
+@end
+@implementation MyParentSelf
++ (int)testSelf {
+  if (self == [MyParentSelf class])
+      return 0;
+    else
+      return 1;
+}
+@end
+@interface MyClassSelf : MyParentSelf
+@end
+@implementation MyClassSelf
++ (int)testClassMethodByKnownVarDecl {
+  int y = [MyParentSelf testSelf];
+  return 5/y; // Should warn here.
+}
+@end
+int foo2() {
+  int y = [MyParentSelf testSelf];
+  return 5/y; // Should warn here.
+}