Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 53331ec

Browse files
author
Fariborz Jahanian
committed
Objective-C. Reduce false positive warnings with -Wselector by issuing warning
only when named selector is declared in TU and it is not declared in a system header. rdar://16600230 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208443 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 43f465f commit 53331ec

File tree

4 files changed

+35
-4
lines changed

4 files changed

+35
-4
lines changed

lib/Sema/SemaExprObjC.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,8 +1049,9 @@ ExprResult Sema::ParseObjCSelectorExpression(Selector Sel,
10491049
} else
10501050
DiagnoseMismatchedSelectors(*this, AtLoc, Method);
10511051

1052-
if (!Method ||
1053-
Method->getImplementationControl() != ObjCMethodDecl::Optional) {
1052+
if (Method &&
1053+
Method->getImplementationControl() != ObjCMethodDecl::Optional &&
1054+
!getSourceManager().isInSystemHeader(Method->getLocation())) {
10541055
llvm::DenseMap<Selector, SourceLocation>::iterator Pos
10551056
= ReferencedSelectors.find(Sel);
10561057
if (Pos == ReferencedSelectors.end())

test/PCH/Inputs/chain-selectors2.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
@interface Y
22
-(void)f;
33
-(void)f2;
4+
-(void)x;
5+
-(void)y;
46
-(void)e;
57
@end
68

test/SemaObjC/selector-3.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ - (void) bar
1414
- (void) foo
1515
{
1616
SEL a,b,c;
17-
a = @selector(b1ar); // expected-warning {{no method with selector 'b1ar' is implemented in this translation unit}}
17+
a = @selector(b1ar);
1818
b = @selector(bar);
1919
}
2020
@end
@@ -69,7 +69,7 @@ - (void) Meth;
6969

7070
@implementation INTF
7171
- (void) Meth {
72-
if( [cnx respondsToSelector:MySelector(@selector( _setQueue: ))] ) // expected-warning {{no method with selector '_setQueue:' is implemented in this translation unit}}
72+
if( [cnx respondsToSelector:MySelector(@selector( _setQueue: ))] )
7373
{
7474
}
7575

test/SemaObjC/selector-4.m

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// RUN: %clang_cc1 -Wselector -x objective-c %s -include %s -verify
2+
// expected-no-diagnostics
3+
// rdar://16600230
4+
5+
#ifndef INCLUDED
6+
#define INCLUDED
7+
8+
#pragma clang system_header
9+
10+
@interface NSObject @end
11+
@interface NSString @end
12+
13+
@interface NSString (NSStringExtensionMethods)
14+
- (void)compare:(NSString *)string;
15+
@end
16+
17+
@interface MyObject : NSObject
18+
@end
19+
20+
#else
21+
int main() {
22+
(void)@selector(compare:);
23+
}
24+
25+
@implementation MyObject
26+
27+
@end
28+
#endif

0 commit comments

Comments
 (0)