summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/CommentSema.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2013-06-18 22:40:39 +0000
committerFariborz Jahanian <fjahanian@apple.com>2013-06-18 22:40:39 +0000
commit5222608310cec6739aaf9f5a22c74618d3c3bd5d (patch)
tree374d0c4e67fb6bc150206ddc05cf6c62a369b8e0 /clang/lib/AST/CommentSema.cpp
parenta2e7f9ab2bc4a144f094b48850ce7431ebb69b93 (diff)
downloadbcm5719-llvm-5222608310cec6739aaf9f5a22c74618d3c3bd5d.tar.gz
bcm5719-llvm-5222608310cec6739aaf9f5a22c74618d3c3bd5d.zip
doc. parsing: Allow parameter name "..." for variadic functions/methods.
// rdar://14124644 llvm-svn: 184249
Diffstat (limited to 'clang/lib/AST/CommentSema.cpp')
-rw-r--r--clang/lib/AST/CommentSema.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/clang/lib/AST/CommentSema.cpp b/clang/lib/AST/CommentSema.cpp
index c242eb0f606..e6a5b85ed66 100644
--- a/clang/lib/AST/CommentSema.cpp
+++ b/clang/lib/AST/CommentSema.cpp
@@ -720,7 +720,7 @@ void Sema::resolveParamCommandIndexes(const FullComment *FC) {
SmallVector<ParamCommandComment *, 8> ParamVarDocs;
ArrayRef<const ParmVarDecl *> ParamVars = getParamVars();
- ParamVarDocs.resize(ParamVars.size(), NULL);
+ ParamVarDocs.resize(ParamVars.size() + isFunctionOrMethodVariadic(), NULL);
// First pass over all \\param commands: resolve all parameter names.
for (Comment::child_iterator I = FC->child_begin(), E = FC->child_end();
@@ -808,6 +808,18 @@ bool Sema::isObjCMethodDecl() {
return isFunctionDecl() && ThisDeclInfo->CurrentDecl &&
isa<ObjCMethodDecl>(ThisDeclInfo->CurrentDecl);
}
+
+bool Sema::isFunctionOrMethodVariadic() {
+ if (!isAnyFunctionDecl() && !isObjCMethodDecl())
+ return false;
+ if (const FunctionDecl *FD =
+ dyn_cast<FunctionDecl>(ThisDeclInfo->CurrentDecl))
+ return FD->isVariadic();
+ if (const ObjCMethodDecl *MD =
+ dyn_cast<ObjCMethodDecl>(ThisDeclInfo->CurrentDecl))
+ return MD->isVariadic();
+ return false;
+}
/// isFunctionPointerVarDecl - returns 'true' if declaration is a pointer to
/// function decl.
@@ -906,6 +918,8 @@ unsigned Sema::resolveParmVarReference(StringRef Name,
if (II && II->getName() == Name)
return i;
}
+ if (Name == "..." && isFunctionOrMethodVariadic())
+ return ParamVars.size();
return ParamCommandComment::InvalidParamIndex;
}
OpenPOWER on IntegriCloud