summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/CommentSema.cpp
diff options
context:
space:
mode:
authorDmitri Gribenko <gribozavr@gmail.com>2012-07-24 21:44:16 +0000
committerDmitri Gribenko <gribozavr@gmail.com>2012-07-24 21:44:16 +0000
commit8f0f1b0c41cd7667aa92a7f1307d9f00047394ba (patch)
tree11de1b8f5de6603cee8a70b44e41bb85efee881b /clang/lib/AST/CommentSema.cpp
parenta44e193a11a5e8aa6fcbe6b4b65638ff2d0b0e26 (diff)
downloadbcm5719-llvm-8f0f1b0c41cd7667aa92a7f1307d9f00047394ba.tar.gz
bcm5719-llvm-8f0f1b0c41cd7667aa92a7f1307d9f00047394ba.zip
Comment diagnostics: add warning for multiple \param commands with duplicate
parameter names. llvm-svn: 160696
Diffstat (limited to 'clang/lib/AST/CommentSema.cpp')
-rw-r--r--clang/lib/AST/CommentSema.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/AST/CommentSema.cpp b/clang/lib/AST/CommentSema.cpp
index 8fa8ab7d06f..5301bfebe96 100644
--- a/clang/lib/AST/CommentSema.cpp
+++ b/clang/lib/AST/CommentSema.cpp
@@ -153,6 +153,15 @@ ParamCommandComment *Sema::actOnParamCommandParamNameArg(
const unsigned ResolvedParamIndex = resolveParmVarReference(Arg, ParamVars);
if (ResolvedParamIndex != ParamCommandComment::InvalidParamIndex) {
Command->setParamIndex(ResolvedParamIndex);
+ if (ParamVarDocs[ResolvedParamIndex]) {
+ SourceRange ArgRange(ArgLocBegin, ArgLocEnd);
+ Diag(ArgLocBegin, diag::warn_doc_param_duplicate)
+ << Arg << ArgRange;
+ ParamCommandComment *PrevCommand = ParamVarDocs[ResolvedParamIndex];
+ Diag(PrevCommand->getLocation(), diag::note_doc_param_previous)
+ << PrevCommand->getParamNameRange();
+ }
+ ParamVarDocs[ResolvedParamIndex] = Command;
return Command;
}
@@ -351,7 +360,6 @@ HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin,
FullComment *Sema::actOnFullComment(
ArrayRef<BlockContentComment *> Blocks) {
- SmallVector<ParamCommandComment *, 8> Params;
return new (Allocator) FullComment(Blocks);
}
@@ -382,6 +390,7 @@ ArrayRef<const ParmVarDecl *> Sema::getParamVars() {
}
void Sema::inspectThisDecl() {
+ assert(!IsThisDeclInspected);
if (!ThisDecl) {
IsFunctionDecl = false;
ParamVars = ArrayRef<const ParmVarDecl *>();
@@ -397,6 +406,7 @@ void Sema::inspectThisDecl() {
IsFunctionDecl = false;
ParamVars = ArrayRef<const ParmVarDecl *>();
}
+ ParamVarDocs.resize(ParamVars.size(), NULL);
IsThisDeclInspected = true;
}
OpenPOWER on IntegriCloud