summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-09-11 21:27:45 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-09-11 21:27:45 +0000
commit822ab6b2e4a76bbd9abb790d67b0ec030beb79ed (patch)
tree5bc5ed144163cafcea15d24e9071f2ade37048db
parentb6b8e966d65d857a5e7f38ee6188ccd623bd9564 (diff)
downloadbcm5719-llvm-822ab6b2e4a76bbd9abb790d67b0ec030beb79ed.tar.gz
bcm5719-llvm-822ab6b2e4a76bbd9abb790d67b0ec030beb79ed.zip
objective-C: warn if selector has nothing but bare
':' in its name. // rdar://8366823 llvm-svn: 163650
-rw-r--r--clang/include/clang/Basic/DiagnosticParseKinds.td3
-rw-r--r--clang/lib/Parse/ParseObjc.cpp9
-rw-r--r--clang/test/SemaObjC/warn-missing-selector-arg-name.m11
3 files changed, 19 insertions, 4 deletions
diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td
index 5f8e8aa3ac8..ccdea4aabbb 100644
--- a/clang/include/clang/Basic/DiagnosticParseKinds.td
+++ b/clang/include/clang/Basic/DiagnosticParseKinds.td
@@ -361,6 +361,9 @@ def warn_missing_argument_name : Warning<
"no parameter name in the middle of a selector"
" may result in incomplete selector name">,
InGroup<DiagGroup<"missing-argument-name-in-selector">>, DefaultIgnore;
+def warn_selector_with_bare_colon : Warning<
+ "selector has only bare colons in its name">,
+ InGroup<DiagGroup<"selector-with-bare-colons">>, DefaultIgnore;
def note_missing_argument_name : Note<
"did you mean %0 as the selector name">;
diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp
index 6d5f35a7993..2bcb7a786ab 100644
--- a/clang/lib/Parse/ParseObjc.cpp
+++ b/clang/lib/Parse/ParseObjc.cpp
@@ -1032,6 +1032,7 @@ Decl *Parser::ParseObjCMethodDecl(SourceLocation mLoc,
AttributePool allParamAttrs(AttrFactory);
bool warnSelectorName = false;
+ bool warnHasNoName = true;
while (1) {
ParsedAttributes paramAttrs(AttrFactory);
Sema::ObjCArgInfo ArgInfo;
@@ -1109,7 +1110,8 @@ Decl *Parser::ParseObjCMethodDecl(SourceLocation mLoc,
Diag(Tok, diag::warn_missing_argument_name); // missing argument name.
warnSelectorName = true;
}
-
+ else
+ warnHasNoName = false;
// We have a selector or a colon, continue parsing.
}
@@ -1150,8 +1152,11 @@ Decl *Parser::ParseObjCMethodDecl(SourceLocation mLoc,
Selector Sel = PP.getSelectorTable().getSelector(KeyIdents.size(),
&KeyIdents[0]);
- if (warnSelectorName)
+ if (warnSelectorName) {
+ if (warnHasNoName)
+ Diag(mLoc, diag::warn_selector_with_bare_colon);
Diag(mLoc, diag::note_missing_argument_name) << Sel.getAsString();
+ }
Decl *Result
= Actions.ActOnMethodDeclaration(getCurScope(), mLoc, Tok.getLocation(),
diff --git a/clang/test/SemaObjC/warn-missing-selector-arg-name.m b/clang/test/SemaObjC/warn-missing-selector-arg-name.m
index 97bcd0db91d..3d2a75a1eb5 100644
--- a/clang/test/SemaObjC/warn-missing-selector-arg-name.m
+++ b/clang/test/SemaObjC/warn-missing-selector-arg-name.m
@@ -1,11 +1,15 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class -Wmissing-argument-name-in-selector %s
-// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify -Wno-objc-root-class -Wmissing-argument-name-in-selector %s
+// RUN: %clang_cc1 -fsyntax-only -verify -Wselector-with-bare-colons -Wmissing-argument-name-in-selector %s
+// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify -Wselector-with-bare-colons -Wmissing-argument-name-in-selector %s
+// rdar://8366823
// rdar://12263549
@interface Super @end
@interface INTF : Super
+- (void) MMM;
+- (void)bar:(id)b;
-(void) Name1:(id)Arg1 Name2:(id)Arg2; // Name1:Name2:
-(void) Name1:(id) Name2:(id)Arg2; // expected-warning {{no parameter name in the middle of a selector may result in incomplete selector name}} \
+ // expected-warning {{selector has only bare colons in its name}} \
// expected-note {{did you mean Name1:: as the selector name}}
-(void) Name1:(id)Arg1 Name2:(id)Arg2 Name3:(id)Arg3; // Name1:Name2:Name3:
-(void) Name1:(id)Arg1 Name2:(id) Name3:(id)Arg3; // expected-warning {{no parameter name in the middle of a selector may result in incomplete selector name}} \
@@ -13,8 +17,11 @@
@end
@implementation INTF
+- (void) MMM{}
+- (void)bar:(id)b{}
-(void) Name1:(id)Arg1 Name2:(id)Arg2{}
-(void) Name1:(id) Name2:(id)Arg2 {} // expected-warning {{no parameter name in the middle of a selector may result in incomplete selector name}} \
+ // expected-warning {{selector has only bare colons in its name}} \
// expected-note {{did you mean Name1:: as the selector name}}
-(void) Name1:(id)Arg1 Name2:(id)Arg2 Name3:(id)Arg3 {}
-(void) Name1:(id)Arg1 Name2:(id) Name3:(id)Arg3 {} // expected-warning {{no parameter name in the middle of a selector may result in incomplete selector name}} \
OpenPOWER on IntegriCloud