diff options
author | Alex Lorenz <arphaman@gmail.com> | 2017-03-23 10:46:05 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2017-03-23 10:46:05 +0000 |
commit | 942d4ddd5316a1bb4dcfba6e6710a7747cd62e46 (patch) | |
tree | 5c28b61e1d128ff6ae6b721a4aab7a031c018ee2 /test/SemaObjC/arc-peformselector.m | |
parent | 4b1bd05e6acd6bcb0a0a3e0d1bb1a0ecd2d79ce0 (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.m | 8 |
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 |