say objective-C in the warning and streamline
several diagnostics into one. // rdar://13094352
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176560 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang/Basic/DiagnosticCommentKinds.td b/include/clang/Basic/DiagnosticCommentKinds.td
index b0aece5..1bf290e 100644
--- a/include/clang/Basic/DiagnosticCommentKinds.td
+++ b/include/clang/Basic/DiagnosticCommentKinds.td
@@ -73,19 +73,10 @@
"a function declaration">,
InGroup<Documentation>, DefaultIgnore;
-def warn_doc_function_not_attached_to_a_function_decl : Warning<
- "'%select{\\|@}0function' command should be used in a comment attached to a "
- "function declaration">,
- InGroup<Documentation>, DefaultIgnore;
-
-def warn_doc_callback_not_attached_to_a_function_ptr_decl : Warning<
- "'%select{\\|@}0callback' command should be used in a comment attached to a "
- "pointer to function declaration">,
- InGroup<Documentation>, DefaultIgnore;
-
-def warn_doc_method_not_attached_to_a_objc_method_decl : Warning<
- "'%select{\\|@}0method' command should be used in a comment attached to an "
- "objective-c method declaration">,
+def warn_doc_function_method_decl_mismatch : Warning<
+ "'%select{\\|@}0%select{function|method|callback}1' command should be "
+ "used in a comment attached to "
+ "%select{a function|an objective-C method|a pointer to function}2 declaration">,
InGroup<Documentation>, DefaultIgnore;
def warn_doc_param_duplicate : Warning<
diff --git a/lib/AST/CommentSema.cpp b/lib/AST/CommentSema.cpp
index a834bb4..68a9ebb 100644
--- a/lib/AST/CommentSema.cpp
+++ b/lib/AST/CommentSema.cpp
@@ -93,17 +93,16 @@
if (!Info->IsFunctionDeclarationCommand)
return;
StringRef Name = Info->Name;
- unsigned DiagKind = llvm::StringSwitch<unsigned>(Name)
- .Case("function", !isAnyFunctionDecl() ?
- diag::warn_doc_function_not_attached_to_a_function_decl : 0)
- .Case("method", !isObjCMethodDecl() ?
- diag::warn_doc_method_not_attached_to_a_objc_method_decl : 0)
- .Case("callback", !isFunctionPointerVarDecl() ?
- diag::warn_doc_callback_not_attached_to_a_function_ptr_decl : 0)
+ unsigned DiagSelect = llvm::StringSwitch<unsigned>(Name)
+ .Case("function", !isAnyFunctionDecl() ? 1 : 0)
+ .Case("method", !isObjCMethodDecl() ? 2 : 0)
+ .Case("callback", !isFunctionPointerVarDecl() ? 3 : 0)
.Default(0);
- if (DiagKind)
- Diag(Comment->getLocation(), DiagKind) << Comment->getCommandMarker()
+ if (DiagSelect)
+ Diag(Comment->getLocation(), diag::warn_doc_function_method_decl_mismatch)
+ << Comment->getCommandMarker()
+ << (DiagSelect-1) << (DiagSelect-1)
<< Comment->getSourceRange();
}
diff --git a/test/Sema/warn-documentation.m b/test/Sema/warn-documentation.m
index a0ea47e..81919cf 100644
--- a/test/Sema/warn-documentation.m
+++ b/test/Sema/warn-documentation.m
@@ -98,7 +98,7 @@
typedef int (^test_param1)(int aaa, int ccc);
// rdar://13094352
-// expected-warning@+2 {{'@method' command should be used in a comment attached to an objective-c method declaration}}
+// expected-warning@+2 {{'@method' command should be used in a comment attached to an objective-C method declaration}}
@interface I
/*! @method Base64EncodeEx
*/