summaryrefslogtreecommitdiffstats
path: root/test/SemaObjC/arc-peformselector.m
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2017-03-23 10:46:05 +0000
committerAlex Lorenz <arphaman@gmail.com>2017-03-23 10:46:05 +0000
commit942d4ddd5316a1bb4dcfba6e6710a7747cd62e46 (patch)
tree5c28b61e1d128ff6ae6b721a4aab7a031c018ee2 /test/SemaObjC/arc-peformselector.m
parent4b1bd05e6acd6bcb0a0a3e0d1bb1a0ecd2d79ce0 (diff)
[ObjC][ARC] Avoid -Warc-performSelector-leaks for performSelector variations
that became supported after r297019 The commit r297019 expanded the performSelector ObjC method family heuristic to ensure that -Wobjc-unsafe-perform-selector covers all performSelector variations. However, this made the -Warc-performSelector-leaks too noisy, as that warning produces mostly false positives since the selector is unknown. This commit reverts the ObjC method family heuristics introduced in r297019. This ensures that -Warc-performSelector-leaks isn't too noisy. The commit still preserves the coverage of -Wobjc-unsafe-perform-selector. rdar://31124629 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@298587 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaObjC/arc-peformselector.m')
-rw-r--r--test/SemaObjC/arc-peformselector.m8
1 files changed, 8 insertions, 0 deletions
diff --git a/test/SemaObjC/arc-peformselector.m b/test/SemaObjC/arc-peformselector.m
index e90ac6b1c8..a7e5d3e823 100644
--- a/test/SemaObjC/arc-peformselector.m
+++ b/test/SemaObjC/arc-peformselector.m
@@ -18,6 +18,9 @@
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
+
+- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(double)delay inModes:(I *)modes;
+
@end
@implementation I
@@ -33,10 +36,15 @@
return [self performSelector : @selector(PlusZero)];
return [self performSelector : @selector(PlusOne)]; // expected-error {{performSelector names a selector which retains the object}}
+ // Avoid the unkown selector warning for more complicated performSelector
+ // variations because it produces too many false positives.
+ [self performSelector: sel1 withObject:0 afterDelay:0 inModes:0];
+
return [self performSelector: @selector(self)]; // No error, -self is not +1!
}
- (id)performSelector:(SEL)aSelector { return 0; }
- (id)performSelector:(SEL)aSelector withObject:(id)object { return 0; }
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2 { return 0; }
+- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(double)delay inModes:(I *)modes { }
@end