summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDmitri Gribenko <gribozavr@gmail.com>2014-03-19 13:59:36 +0000
committerDmitri Gribenko <gribozavr@gmail.com>2014-03-19 13:59:36 +0000
commitd9eb05aca3996b2e93b36c3f0bf84a6852c302b9 (patch)
tree80307fb0cca5b532e49142c868770fd8497f9de3 /clang
parent17703c1092421dfec763658c153b10c23b454425 (diff)
downloadbcm5719-llvm-d9eb05aca3996b2e93b36c3f0bf84a6852c302b9.tar.gz
bcm5719-llvm-d9eb05aca3996b2e93b36c3f0bf84a6852c302b9.zip
Comment parsing: recognize \param ... on function templates with variadic
parameters Patch by Joe Ranieri. llvm-svn: 204235
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/AST/CommentSema.cpp5
-rw-r--r--clang/test/Sema/warn-documentation.cpp20
2 files changed, 24 insertions, 1 deletions
diff --git a/clang/lib/AST/CommentSema.cpp b/clang/lib/AST/CommentSema.cpp
index 0ae00820fde..e51f8781c1b 100644
--- a/clang/lib/AST/CommentSema.cpp
+++ b/clang/lib/AST/CommentSema.cpp
@@ -792,11 +792,14 @@ bool Sema::isAnyFunctionDecl() {
}
bool Sema::isFunctionOrMethodVariadic() {
- if (!isAnyFunctionDecl() && !isObjCMethodDecl())
+ if (!isAnyFunctionDecl() && !isObjCMethodDecl() && !isFunctionTemplateDecl())
return false;
if (const FunctionDecl *FD =
dyn_cast<FunctionDecl>(ThisDeclInfo->CurrentDecl))
return FD->isVariadic();
+ if (const FunctionTemplateDecl *FTD =
+ dyn_cast<FunctionTemplateDecl>(ThisDeclInfo->CurrentDecl))
+ return FTD->getTemplatedDecl()->isVariadic();
if (const ObjCMethodDecl *MD =
dyn_cast<ObjCMethodDecl>(ThisDeclInfo->CurrentDecl))
return MD->isVariadic();
diff --git a/clang/test/Sema/warn-documentation.cpp b/clang/test/Sema/warn-documentation.cpp
index ad7ab181a78..ed25d949f55 100644
--- a/clang/test/Sema/warn-documentation.cpp
+++ b/clang/test/Sema/warn-documentation.cpp
@@ -371,6 +371,26 @@ int test_vararg_param3(int aaa);
int test_vararg_param4();
+/// \param aaa Aaa
+/// \param ... Vararg
+template<typename T>
+int test_template_vararg_param1(int aaa, ...);
+
+/// \param ... Vararg
+template<typename T>
+int test_template_vararg_param2(...);
+
+// expected-warning@+1 {{parameter '...' not found in the function declaration}} expected-note@+1 {{did you mean 'aaa'?}}
+/// \param ... Vararg
+template<typename T>
+int test_template_vararg_param3(int aaa);
+
+// expected-warning@+1 {{parameter '...' not found in the function declaration}}
+/// \param ... Vararg
+template<typename T>
+int test_template_vararg_param4();
+
+
// expected-warning@+1 {{'\tparam' command used in a comment that is not attached to a template declaration}}
/// \tparam T Aaa
int test_tparam1;
OpenPOWER on IntegriCloud